59

Virus, el arte de algunos - Alberto García de Dios (/Rooted CON 2011)

Embed Size (px)

Citation preview

Virus arte de algunos. - Alberto García de Dios

INDICE1. Métodos de control2. SEO es tu amigo3. Encriptación y mutaciones4. Bypassing the world5. Infección y entrada6. Código inteligente y auto actualizable7. Rootkit escóndete en el sistema8. Enlaza tu virus 9. Expande tu virus10.El virii debería ser arte

Métodos de control¿Cómo podemos controlar un bot si se lo hemos añadido a nuestro virus?.

Métodos de control• Control mediante aplicación propia

• Aplicaciones web para la programación de botnet

• Programación de aplicaciones web para control de botnet

• Control mediante IRCd

1. Control mediante aplicación En contra:• Es necesario mas recursos para no ser detectado el autor • Es necesario acceso total a un servidor• Es mas estable y rápido• Es menos complejo o “enrevesado”• Es mas probable que por defecto el firewall no lo permita

A favor:• Tiene posibilidades de hacer funciones que con otros métodos es imposible• Puedes crear túneles y/o abusar de su conexión

1. ¿cuándo se utiliza conexión a un master?Usos:• Estas en la misma red que la victima• La finalidad es control remoto troyano• Transferir gran cantidad de datos• Control de tipo webcam, pantalla remota• Infección especifica por recursos

SEO es tu amigoUso malintencionado de SEO.

SEO es tu amigo

• Aparecer en los primeros puestos en palabras clave es un forma de atraer masas hacia tu/tus código/s mal intencionado/s.

• La pornografía es un método muy utilizado ya que tiene una gran cantidad de visitas. Los usuarios cuando ven pornografía son mas incautos. Algunos la visitan desde maquinas virtuales

• Los “boom” del momento también atraen gran cantidad de usuarios.

SEO es tu amigo

• Funcionamiento de la pornografía orientada al malware.

Páginade temática “Amateur”

Páginade temática “Amateur”, en el jardín

Páginade temática “Amateur”, en la ducha

Páginade temática “Amateur” mas fuerte

Páginas de promoción

con muestra de imágenes o

videos

Página mal intencionad

a

Llamadas entre si aleatoriamente

Llamada tras unas vueltasa la página mal intencionada.

SEO es tu amigo

• Aprovechando el “boom” del momento.

• Hacer una encuesta sobre “crepúsculo” y estar en las primeras páginas encontradas por google llama en su gran mayoría a un público mas incauto.

• Puedes crear el “boom”… Típico 0day remoto para OpenSSH.

SEO es tu amigo

• Puedes encontrar información sobre técnicas de SEO

• Hay técnicas de “moral relajada” que entre otros lugares puedes encontrar en “el lado del mal”.

• Google hacking o sitios poco seguros con una cantidad de visitas significantes pueden ser utilizados para hacer promoción de tu sitio malintencionado.

Encriptación y mutacionesMétodos criptográficos en virus, mutaciones etc…

Encriptación y mutaciones

1.Shellcode crypt/decrypt2.Como funciona un

packer3. Soy mutante

Como funciona un crypter

• Parte de la shellcode contiene datos que van a ser modificados en tiempo de ejecución.

• Tiene uno o mas bucles de descifrado para modificar los bytes codes.

• Escribiendo el código, crearíamos una cadena de bytes con los opcode de la shellcode en un “segundo” código que seria el decrypter.

• Cifrar también los “nop” ayuda en la evasión ids.

Como funciona un crypter

Shellcode Crypt

crypt_loop:                 mov al, byte ptr [esi+edi]                 add al, bl                 mov dl, byte ptr [esi+ecx]                 add dl, bl                 mov byte ptr [esi+edi], al                 mov byte ptr [esi+ecx], dl                 cmp ecx, 0                 je crypt_end_loop                 add ecx, 2                 inc edi                 jmp crypt_loop

Como funciona un packer

• Inserción de un archivo dentro de un método de extracción automática (Unión de dos archivos).

• Copia a una carpeta temporal o con privilegios y posterior desempaquetado y descifrado en caso de estarlo. • Copia en extractos de memoria y posterior ejecución. Habitualmente en la memoria “Heap” (dada su situación estática).

Como funciona un packer

• Bucle incompleto relleno con una cadena recogida de internet. Dificulta el reversing antes de la ejecución del malware.

• Sección o “Stub” con opción “read/write” siendo descifradas en tiempo de ejecución

• Fragmentación en varias secciones de memoria diferentes con saltos de una a otra para dificultar su análisis.

Soy Mutante

• Cambiamos fracciones de código servible o no servible.

Malware.exe

\x90\x90\x…

Malware.exeTras la primera ejecución

\x40\x48\x….

Parte del código no utilizable ejemplo “\x90\x90\x90\x90…”

Parte del código no utilizable

“\x40\x48\x40\x48…”

Soy Mutante

• El código cambia su cambia su clave criptográfica

Malware.exeClave cripto

0x5e

Malware.exeTras la primera ejecución

Parte del código no utilizable ejemplo “\

x11\x62\x23…”

Parte del código no utilizable

“\x94\x75\x56…”

Bucle descifrado

Código cifrado

Clave cripto 0x9aBucle

descifrado

Código cifrado

Bucle de cifrado

Bucle de cifrado

Soy Mutante

• El código cambia también el cifrado entre 3 o mas opciones, lo cual complica la firma.

Malware.exeClave cripto

0x5e

Malware.exeTras la primera ejecución

Parte del código no utilizable ejemplo “\

x11\x62\x23…”

Parte del código no utilizable

“\x94\x75\x56…”

Clave cripto 0x9eBucle

descifrado 1

Código cifrado

Bucle descifrado 2

Bucle descifrado 3

Bucle descifrado 1

Código cifrado

Bucle descifrado 2

Bucle descifrado 3

Bucle de cifrado 1Bucle de cifrado 2Bucle de cifrado 3

Bucle de cifrado 1Bucle de cifrado 2Bucle de cifrado 3

Soy Mutante

• Apertura del archivo : “OpenFileA/NtOpenFile”

• Podemos utilizar la propia firma o una cadena especifica para la búsqueda “ db ‘JennyLab’, 0 ”

• Si escribimos al final de un archivo PE, no ocurre nada lo cual nos permite incluso meter datos para la mutación.

• Podemos inyectar un hilo para mover archivos o hacer algún cambio, tras el cierre del proceso malware “CreateRemoteThread”

Bypassing the world¿Cómo salimos de la red?

DNS Bypassing all firewalls

Envío de 29 bytes comprimidos de forma totalmente indetectable y pasando por cualquier firewall que no tenga el servidor DNS aislado.

DNS Bypassing all firewalls

• Compresión de un número de 16 dígitos ( como una tarjeta de crédito por ejemplo).

5 8 7 9 9 9 8 9 3 3 1 5 8 9 0 2

16 bytes/ 4098 / 4098/ 4098=5 bytes + 1 byte

8 5 4 4 0 A

Si es un numero impar tenemos un “flag” para restar ‘1’ al resultado

finalsumado al número

anteriormente

Filtrado incorrectos

• Muchos sitios ( ya cada vez menos ) permiten la resolución DNS publica lo cual nos permite la creación de un túnel “tcp to dns”.

• Si tu dominio no esta en una blacklist no es muy habitual encontrar filtrados por whitelist.

• Los túneles http no suelen ser filtrados.

Túneles

De una manera bastante habitual se suele encontrar servidores que por actualizaciones o razones varias salen por el puerto 80 tcp. Esto puede ser útil para sacar datos de la red sin necesidad de utilizar proxy, lo cual puede ser útil en virus a medida.

Túneles

• Con raw socket podemos hacer en el servidor de sniffer de la capa IP, utilizando la capa ICMP para recibir datos del infectado.

• Haciendo hooking de la capa NDIS podemos hacer el sniffer de protocolos de capas inferiores como STP.

• Librerías como libpcap nos permitirían hacer el sniffer pero dependerías de librerías.

Túnel HTTP• Una conexión como la de reDuh através del servidor proxy de lugares “seguros” es posible.

Túnel HTTP• Podemos conseguir el proxy utilizado actualmente por el sistema en la clave de registro “HKEY_CURRENT_USER\

Software\Microsoft\Windows\CurrentVersion\InternetSetting\ProxyServer”.

• Podemos utilizar “ReDuh” en el servidor web con que haga el túnel de http a tcp

• ReDuh usa un archivo javascript con unas funciones básicas. “startReDuh”, “getData”, “killReDuh”, “createSocket”, “newData”, “debug”

• ReDuh también recoge los parámetros “targetHost”, “targetPort”, “servicePort”, “data”, etc..

Aplicaciones HTTP• También podemos programar aplicaciones simples en “php”, que permitan el control del virus, haciendo que conecte a cualquier servidor gratuito con “php”.

• Alguno virus han utilizado cosas como redes sociales, grupos etc...

• Hay aplicaciones web opensource para el control de botnet.

Infección y entradaInfección básica de un PE.

Estoy infectado

• Añadido de sección o al final del archivo añadimos el código, ya que si escribimos al final de un archivo PE no ocurrirá nada. • Las llamadas a las API’s la haremos utilizando la “IAT” o sacaremos las API’s usando PEB aunque no es lo mas correcto dado que ya tenemos recuperadas las API’s en la “Import Table”.

Estoy infectado

• Cambio del “Entry Point” consiguiendo que se ejecute nuestro código.

• Nuestro código malicioso salta al antiguo “Entry Point” asegurándose la correcta ejecución del binario ya que no ha sufrido ninguna modificación.

Estoy infectado• La infección básica mas conocida consiste en el añadido de una sección de código y un cambio en el “Entry Point”, y un salto hacia el punto de entrada anterior, ejecutándose primero el virus.

Code

Entry PointPE HEADER

Code

PE HEADER

Entry PointEvil code

Antiguo Entry Point

Jump to original entry point

Ejecutable normal

Ejecutable infectado

Estoy infectado• Entry Point obscuring (EPO). No se modifica la dirección de entrada ya que es sospechoso, si no que se cambian los primeros bytes con un jmp hacia el código o durante la ejecución

Code

Entry PointPE HEADER

Code

PE HEADEREntry Point

Evil code

ret_malwareJump toevil code

Ejecutable normal

Ejecutable infectado

Jmp ret_malware

¿Cómo entro en el sistema? •El método mas habitual de entrada es exploit en el explorador web, plugin del mismo o archivos mal intencionados.

• El exploit ejecuta código binario o interpretado por el explotador.

¿Cómo entro en el sistema? •Descarga un archivo mínimo que hace posteriores descargas previamente deshabilitando el sistema de seguridad instalado en el PC cliente. En su defecto desempaqueta un archivo binario que es el virus.

• Empieza la infección y el intento de trasmisión a otros equipos.

Código inteligente y actualizableTu virus puede ser inteligente y actualizable.

Auto actualización

• Podemos descargar el nuevo archivo por http ya sea usando las API’s o alguna inyección al explorador o exploradores utilizados. Se debe tener en cuenta que la mayoría de los usuarios no domésticos necesitan conectar mediante proxy.

• Funcionar mediante módulos (dll’s), es una buena opción para “instalar” remotamente partes del virus, puede perder infectados que no le permitan salir por http.

Código inteligente y actualizable• Tu virus puede descargar una nueva versión y ser remplazado o borrado previamente a la copia.

• Tu virus puede ser inteligente si esta dotado de matriz

Auto actualización• Si esta dividido en módulos, actualizar cualquier módulo es tan fácil como no cargarlo o inyectarlo en otro proceso hasta el remplazo.

• En caso de ser el ejecutable o no estar dividido en módulos, podemos inyectar código y cerrar el proceso padre antes de que sea sobrescrito o borrado.

• Si esta divido en módulos, se puede hacer un módulo de actualización.

Soy inteligente• Creando “arrays” con antivirus, antispyware, firewall de host, nids y otros sistemas de seguridad host, podemos detectarlos he intentar matarlos o interrumpir su detección.

• Podemos detectar programas que pongan en peligro el virus por que sean de análisis, ingeniería inversa etc… Debería tener un sistema de auto borrado y desinfección para intentar evadir esto.

Rootkit escóndete en el sistemaCosas interesantes para esconderse.

Escondiéndose en el sistema• La intercepción de API’s de conexión a internet, como (connect, WSAConnect), (URLDownloadToFile*, URLDownloadToCacheFile* ) etc… es útil para filtrar

• La API “WSAIoctl” y el argumento “SIO_RCVALL”, pueden ser utilizadas para hacer un “sniffer” del tráfico lo que pone en peligro la detección del tráfico del virus.

Escondiéndose en el sistema • Las API’s “GetTcpStatsFromStackEx”, “GetUdpStatsFromStackEx”, “GetIpStatsFromStackEx”, y varias API’s mas, de (iphlpapi) pueden ser interceptadas con la finalidad de esconderse de aplicaciones como “netstat” y otras aplicaciones básicas para la estadística o monitorización del estado de la pila IP, TCP y otros protocolos utilizados en el sistema.

Escondiéndose en el sistema

• La API “WSAIoctl” y el argumento “SIO_RCVALL”, pueden ser utilizadas para hacer un “sniffer” del tráfico lo que pone en peligro la detección del tráfico del virus.

• Las API’s (gethostbyname, GetAddressByName), hacen resoluciones dns, podemos filtrar IP’s de lugares de actualización, antivirus online y otros contenidos peligrosos para el virus.

Enlaza tu virusJs, sys

¿Cómo entro en el sistema? • Descarga un archivo pequeño que hace posteriores descargas previamente deshabilitando el sistema de seguridad instalado en el PC cliente. En su defecto desempaqueta un archivo binario que es el virus.

• Empieza la infección y el intento de trasmisión a otros equipos.

Enlaza tu virus• Puede utilizar exploit para exploradores web que permitan la ejecución de javascript, haciendo descarga y ejecución de nuestro virus.

• La explotación de un overflow también puede ser utilizada para la descarga y ejecución de nuestro virus.

• Otra opción es utilizar archivos mal intencionados como puede ser pdf y su oleada de exploits o otros formatos vulnerables.

Tu archivo .sys • La carga de un driver mal intencionado se puede utilizar para hacer hook a la SSTD, permitiéndole interceptar llamadas del modo kernel.

• Haciendo hook a API’s, Zw*, Nt*, Rtl* etc…, podemos interceptar llamadas de otras aplicaciones aunque la aplicación corra en “ring3” modo user

Tu archivo .sys • Haciendo hook a la capa NDIS podemos evadir los sniffers.

• Haciendo hook a API’s de procesos cómo (ZwOpenProcess, NtOpenProcess). Podrá esconder su presencia como proceso.

• Conexión TCP o UDP en modo kernel utilizando la capa TDI.

Tu archivo .js• Javascript nos permite modificar cadenas, lo cual nos permite decodificar en tiempo de ejecución.

• La función “unescape()” de javascript nos permite decodificar cadenas esto dificulta levemente el análisis.

• La función “Chr()” de javascript nos permite meter bytes en lugar de la cadena dificulta levemente el análisis.

Expande tu virusMétodos de expansión

Expande tu virus• Infección de archivos en discos montados con recursos compartidos, para ejecución desde otros equipos que accedan a el y ejecuten los archivos.

• Búsqueda de recursos compartidos tipo “IPC$”.

• Mensajería instantánea

• Exploits

Mensagería instantánea

• Hook al teclado

• Envío de las pulsaciones a la ventana

• Robo de contactos

Recursos compartidos

• Infección de archivos PE

• Remplazo de archivo PDF malintencionados

• Exploit de archivos .lnk

El virii debería ser un arte

El virii debería ser un arte• Donut by Benny: Infección de archivo MSIL.

• GriYo: Entry Point obscuring

• Z0MBIE: Infección de imágenes ISO.

• La mayoría del malware “comercial” no aporta mucho y en casó de hacerlo quien lo saca a la luz son las personas que lo analizan.

• No publicar virus para que no lo usen comercialmente