Como prometimos en una de nuestras anteriores entradas del blog sobre kits de exploits (Nuclear EK), vamos a profundizar en Angler Exploit Kit. Angler EK es posiblemente el kit de explotación más sofisticado utilizado actualmente por los ciberdelincuentes. Ha sido pionero en soluciones que otros kits de explotación empezaron a utilizar más tarde, como la detección de antivirus y los archivos dropper cifrados. Además, Angler suele ser el más rápido en integrar los últimos días cero, como el día cero de Adobe Flash (CVE-2015-0311) de hace unas semanas, y emplea una ofuscación notablemente única. Por último, Angler ejecuta el malware caído desde la memoria, sin tener que escribir nunca en el disco duro; esta técnica única entre los kits de explotación hace que sea extremadamente difícil de detectar para las tecnologías antivirus tradicionales, ya que se basan en el análisis del sistema de archivos.
Aunque Angler es el kit de exploits más avanzado en el panorama actual de amenazas, los clientes de Websense están protegidos de esta amenaza con ACE, nuestro motor de clasificación avanzada, en las siguientes etapas:
- Etapa 2 (Lure) – ACE tiene detección para los sitios web comprometidos.
- Etapa 3 (Redirección) – ACE tiene detección para el código inyectado que redirige al usuario a la página del exploit.
- Etapa 4 (Kit de Explotación) – ACE tiene detección para el código malicioso que intenta ejecutar este ciberataque.
- Etapa 5 (Dropper Files) – ACE tiene detección para los archivos binarios asociados a este ataque
Obstáculos
La página de aterrizaje de Angler consta de cuatro partes básicas. En primer lugar, hay un texto visible en inglés, que se utiliza para hacer creer a la víctima del exploit kit que ha navegado a una página legítima. En segundo lugar, tiene varias rutinas de desobstrucción para desobstruir los scripts maliciosos reales. Estos scripts se encuentran dentro de etiquetas de clase p y están codificados como base64. La decodificación de las cadenas base64 revela el código real del kit de explotación ofuscado. Y, por último, la página de destino contiene varias cadenas codificadas, que contienen varias URL que conducen a los distintos exploits (Flash, Silverlight, Internet Explorer) incluidos en el kit.
Muestras de la página de aterrizaje de Angler
Código del exploit desofuscado
Una vez desofuscada la página de aterrizaje, se revela la verdadera naturaleza del código. Angler, al igual que Nuclear y varios otros kits de exploits, utiliza una segunda capa de ofuscación muy básica para dificultar aún más la detección por parte de los productos de seguridad.
También utiliza la detección de antivirus, además de detectar varias soluciones de virtualización (VMWare, VirtualBox, Parallels), así como un proxy de depuración web llamado Fiddler, muy utilizado por los investigadores de seguridad. La implementación de estas medidas hace que sea muy difícil observar e investigar este kit de explotación en la naturaleza, ya que la mayoría de los investigadores de seguridad suelen depender en gran medida de estas herramientas.
Detección de varios archivos .sys y .dll que pertenecen a software AV y de virtualización
Detección de VMWare, VirtualBox, Parallels, así como del proxy de depuración web Fiddler
La característica más singular de Angler es el uso de estas rutas URL cifradas. Utiliza un simple cifrado basado en la transposición (en términos sencillos: codificar las letras) para cifrar y descifrar estos datos.
La rutina de descifrado está incrustada dentro de la parte ofuscada del kit de explotación.
Rutina de descifrado tal y como se encuentra en el kit
Rutina de descifrado formateada y comentada
Utilizaremos un ejemplo muy sencillo para demostrar cómo funciona el descifrado. Supongamos que nuestro texto cifrado (datos encriptados) es «TEER CSURH TO PLTAOEL IX TP» y nuestra clave de desencriptación es «OBFUSCATE». Lo que hace Angler es que toma el orden alfabético de las letras de la clave y reordena el texto cifrado basándose en él. Por ejemplo:
OBFUSCATE → 6,2,5,9,7,3,1,8,4
Esto nos da el orden de las letras en el texto cifrado. Usando esto podemos descifrarlo fácilmente reordenando las letras.
Ejemplo de descifrado
Y finalmente se eliminan los espacios en blanco de la cadena descifrada . Obviamente, esta es una forma extremadamente rudimentaria de cifrado y sería muy fácil de descifrar incluso sin la clave si (como en el ejemplo anterior) el texto plano consistiera en palabras reales. Sin embargo, Angler utiliza URLs altamente aleatorias, por lo que este tipo de cifrado es más que suficiente para ocultar la verdadera naturaleza de estas cadenas y las rutas de URL reales de varios productos de seguridad.
El resto del código desofuscado sigue los patrones habituales de los kits de explotación: hay varias rutinas de detección de plugins y comprobación de versiones para que el kit de explotación «sepa» qué exploit(s) disparar en el objetivo. También hay bastantes rutinas de construcción de shellcode, ya que Angler utiliza un shellcode de varias etapas, en el que varias etapas se codifican y son decodificadas por las etapas anteriores. También incluye una clave de cifrado/descifrado codificada para el archivo dropper.
Clave de cifrado para la carga útil
Multi stage Shellcode
Dropper
Si el exploit tiene éxito, la carga útil de Angler se deja caer en el sistema de la víctima. Mientras la carga útil viaja a través de la red, sigue encriptada y es descifrada posteriormente por el shellcode de la etapa final. Esta técnica se utiliza para dificultar la detección del dropper malicioso por parte de los sistemas tradicionales de detección de intrusos (IDS). Como ya hemos mencionado, Angler utiliza droppers «sin archivos», lo que significa que se ejecutan directamente desde la memoria. El dropper utilizado por Angler se llama Bedep, que en realidad es sólo un descargador, es decir, no es malicioso en sí mismo, pero se utiliza para descargar y ejecutar varios programas maliciosos diferentes.
La carga útil consiste en una combinación de shellcode y la DLL Bedep. Si los primeros bytes del payload son «909090» (NOPs o No Operations en ensamblador x86) la DLL se cargará desde la memoria, de lo contrario se escribirá en el disco como un archivo dropper normal. El shellcode se encarga de ejecutar la DLL desde la memoria.
El shellcode resuelve APIs como kernel32.dll y wininet.dll
Summary
Angler Exploit Kit es sin duda uno de los kits de exploits más peligrosos que existen en la actualidad. Tiene varias técnicas en su arsenal para derrotar a los métodos de detección tradicionales como:
- Ofuscación única
- Detecta el software antivirus/de virtualización
- Carga útil encriptada
- Infecciones sin archivos
Además, Angler suele ser el primero en adoptar los últimos exploits, que incluyen los de día cero de vez en cuando. La naturaleza en constante evolución de Angler también pone de manifiesto la necesidad de contar con soluciones de seguridad que proporcionen protección en toda la cadena de ataque en lugar de centrarse únicamente en una etapa de la misma.