Alberto García de Dios - Virus, el arte no debería ser negocio [Rooted CON 2011]

5,485 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,485
On SlideShare
0
From Embeds
0
Number of Embeds
1,537
Actions
Shares
0
Downloads
171
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Alberto García de Dios - Virus, el arte no debería ser negocio [Rooted CON 2011]

  1. 1.
  2. 2. Virus arte de algunos.<br /> - Alberto García de Dios<br />
  3. 3. INDICE<br />Métodos de control<br />SEO es tu amigo<br />Encriptación y mutaciones<br />Bypassingtheworld<br />Infección y entrada<br />Código inteligente y auto actualizable<br />Rootkit escóndete en el sistema<br />Enlaza tu virus <br />Expande tu virus<br />El virii debería ser arte<br />
  4. 4. Métodos de control<br />¿Cómo podemos controlar un bot si se lo hemos añadido a nuestro virus?.<br />
  5. 5. Métodos de control<br /><ul><li>Control mediante aplicación propia
  6. 6. Aplicaciones web para la programación de botnet
  7. 7. Programación de aplicaciones web para control de botnet
  8. 8. Control mediante IRCd</li></li></ul><li>1. Control mediante aplicación <br />En contra:<br /><ul><li> Es necesario mas recursos para no ser detectado el autor
  9. 9. Es necesario acceso total a un servidor
  10. 10. Es mas estable y rápido
  11. 11. Es menos complejo o “enrevesado”
  12. 12. Es mas probable que por defecto el firewall no lo permita</li></ul>A favor:<br /><ul><li> Tiene posibilidades de hacer funciones que con otros métodos es imposible
  13. 13. Puedes crear túneles y/o abusar de su conexión </li></li></ul><li>1. ¿cuándo se utiliza conexión a un master?<br />Usos:<br /><ul><li> Estas en la misma red que la victima
  14. 14. La finalidad es control remoto troyano
  15. 15. Transferir gran cantidad de datos
  16. 16. Control de tipo webcam, pantalla remota
  17. 17. Infección especifica por recursos </li></li></ul><li>SEO es tu amigo<br />Uso malintencionado de SEO.<br />
  18. 18. SEO es tu amigo<br /><ul><li> Aparecer en los primeros puestos en palabras clave es un forma de atraer masas hacia tu/tus código/s mal intencionado/s.
  19. 19. 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
  20. 20. Los “boom” del momento también atraen gran cantidad de usuarios.</li></li></ul><li>SEO es tu amigo<br /><ul><li> Funcionamiento de la pornografía orientada al malware.</li></ul>Página<br />de temática “Amateur”, en el jardín<br />Página<br />de temática “Amateur”<br />Página<br />de temática “Amateur” mas fuerte<br />Página mal intencionada<br />Página<br />de temática “Amateur”, en la ducha<br />Páginas de promoción con muestra de imágenes o videos<br />Llamadas entre si aleatoriamente<br />Llamada tras unas vueltas<br />a la página mal intencionada.<br />
  21. 21. SEO es tu amigo<br /><ul><li> Aprovechando el “boom” del momento.
  22. 22. 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.
  23. 23. Puedes crear el “boom”… Típico 0day remoto para OpenSSH.</li></li></ul><li>SEO es tu amigo<br /><ul><li> Puedes encontrar información sobre técnicas de SEO
  24. 24. Hay técnicas de “moral relajada” que entre otros lugares puedes encontrar en “el lado del mal”.
  25. 25. Google hacking o sitios poco seguros con una cantidad de visitas significantes pueden ser utilizados para hacer promoción de tu sitio malintencionado.</li></li></ul><li>Encriptación y mutaciones<br />Métodos criptográficos en virus, mutaciones etc…<br />
  26. 26. Encriptación y mutaciones<br />Shellcodecrypt/decrypt<br />Como funciona un packer<br /> Soy mutante<br />
  27. 27. Como funciona un crypter<br /><ul><li> Parte de la shellcode contiene datos que van a ser modificados en tiempo de ejecución.
  28. 28. Tiene uno o mas bucles de descifrado para modificar los bytes codes.
  29. 29. 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.
  30. 30. Cifrar también los “nop” ayuda en la evasión ids.</li></li></ul><li>Como funciona un crypter<br />
  31. 31. Como funciona un packer<br /><ul><li> Inserción de un archivo dentro de un método de extracción automática (Unión de dos archivos).
  32. 32. Copia a una carpeta temporal o con privilegios y posterior desempaquetado y descifrado en caso de estarlo.
  33. 33. Copia en extractos de memoria y posterior ejecución. Habitualmente en la memoria “Heap” (dada su situación estática).</li></li></ul><li>Como funciona un packer<br /><ul><li> Bucle incompleto relleno con una cadena recogida de internet. Dificulta el reversing antes de la ejecución del malware.
  34. 34. Sección o “Stub” con opción “read/write” siendo descifradas en tiempo de ejecución
  35. 35. Fragmentación en varias secciones de memoria diferentes con saltos de una a otra para dificultar su análisis. </li></li></ul><li>Soy Mutante<br /><ul><li> Cambiamos fracciones de código servible o no servible.</li></ul>Malware.exe<br />Tras la primera ejecución<br />Malware.exe<br />Parte del código no utilizable ejemplo “x90x90x90x90…”<br />x40x48x….<br />x90x90x…<br />Parte del código no utilizable<br />“x40x48x40x48…”<br />
  36. 36. Soy Mutante<br /><ul><li> El código cambia su cambia su clave criptográfica</li></ul>Malware.exe<br />Tras la primera ejecución<br />Malware.exe<br />Parte del código no utilizable ejemplo “x11x62x23…”<br />Clave cripto 0x5e<br />Clave cripto 0x9a<br />Bucle descifrado<br />Bucle descifrado<br />Código cifrado<br />Código cifrado<br />Parte del código no utilizable<br />“x94x75x56…”<br />Bucle de cifrado<br />Bucle de cifrado<br />
  37. 37. Soy Mutante<br /><ul><li> El código cambia también el cifrado entre 3 o mas opciones, lo cual complica la firma.</li></ul>Malware.exe<br />Tras la primera ejecución<br />Malware.exe<br />Parte del código no utilizable ejemplo “x11x62x23…”<br />Clave cripto 0x5e<br />Clave cripto 0x9e<br />Bucle descifrado 1<br />Bucle descifrado 1<br />Bucle descifrado 2<br />Bucle descifrado 2<br />Bucle descifrado 3<br />Bucle descifrado 3<br />Parte del código no utilizable<br />“x94x75x56…”<br />Código cifrado<br />Código cifrado<br />Bucle de cifrado 1<br />Bucle de cifrado 1<br />Bucle de cifrado 2<br />Bucle de cifrado 2<br />Bucle de cifrado 3<br />Bucle de cifrado 3<br />
  38. 38. Soy Mutante<br /><ul><li> Apertura del archivo : “OpenFileA/NtOpenFile”
  39. 39. Podemos utilizar la propia firma o una cadena especifica para la búsqueda “ db ‘JennyLab’, 0 ”
  40. 40. Si escribimos al final de un archivo PE, no ocurre nada lo cual nos permite incluso meter datos para la mutación.
  41. 41. Podemos inyectar un hilo para mover archivos o hacer algún cambio, tras el cierre del proceso malware “CreateRemoteThread” </li></li></ul><li>Bypassingtheworld<br />¿Cómo salimos de la red?<br />
  42. 42. DNS Bypassingallfirewalls<br />Envío de 29 bytes comprimidos de forma totalmente indetectable y pasando por cualquier firewall que no tenga el servidor DNS aislado.<br />
  43. 43. DNS Bypassingallfirewalls<br /><ul><li> Compresión de un número de 16 dígitos ( como una tarjeta de crédito por ejemplo). </li></ul>16 bytes<br />/ 4098 <br />/ 4098<br />/ 4098<br />=<br />5 bytes + 1 byte<br />Si es un numero impar tenemos un “flag” para restar ‘1’ al resultado final<br />sumado al número anteriormente <br />
  44. 44. Filtrado incorrectos<br /><ul><li> Muchos sitios ( ya cada vez menos ) permiten la resolución DNS publica lo cual nos permite la creación de un túnel “tcptodns”.
  45. 45. Si tu dominio no esta en una blacklist no es muy habitual encontrar filtrados por whitelist.
  46. 46. Los túneles http no suelen ser filtrados. </li></li></ul><li>Túneles<br />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.<br />
  47. 47. Túneles<br /><ul><li> Con rawsocket podemos hacer en el servidor de sniffer de la capa IP, utilizando la capa ICMP para recibir datos del infectado.
  48. 48. Haciendo hooking de la capa NDIS podemos hacer el sniffer de protocolos de capas inferiores como STP.
  49. 49. Librerías como libpcap nos permitirían hacer el sniffer pero dependerías de librerías.</li></li></ul><li>Túnel HTTP<br /><ul><li> Una conexión como la de reDuh através del servidor proxy de lugares “seguros” es posible. </li></li></ul><li>Túnel HTTP<br /><ul><li>Podemos conseguir el proxy utilizado actualmente por el sistema en la clave de registro “HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionInternetSettingProxyServer”.
  50. 50. Podemos utilizar “ReDuh” en el servidor web con que haga el túnel de http a tcp
  51. 51. ReDuh usa un archivo javascript con unas funciones básicas. “startReDuh”, “getData”, “killReDuh”, “createSocket”, “newData”, “debug”
  52. 52. ReDuh también recoge los parámetros “targetHost”, “targetPort”, “servicePort”, “data”, etc.. </li></li></ul><li>Aplicaciones HTTP<br /><ul><li>También podemos programar aplicaciones simples en “php”, que permitan el control del virus, haciendo que conecte a cualquier servidor gratuito con “php”.
  53. 53. Alguno virus han utilizado cosas como redes sociales, grupos etc...
  54. 54. Hay aplicaciones webopensource para el control de botnet.</li></li></ul><li>Infección y entrada<br />Infección básica de un PE.<br />
  55. 55. Estoy infectado<br /><ul><li> 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.
  56. 56. 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 “ImportTable”.</li></li></ul><li>Estoy infectado<br /><ul><li> Cambio del “EntryPoint” consiguiendo que se ejecute nuestro código.
  57. 57. Nuestro código malicioso salta al antiguo “EntryPoint” asegurándose la correcta ejecución del binario ya que no ha sufrido ninguna modificación.</li></li></ul><li>Estoy infectado<br /><ul><li> La infección básica mas conocida consiste en el añadido de una sección de código y un cambio en el “EntryPoint”, y un salto hacia el punto de entrada anterior, ejecutándose primero el virus.</li></ul>Ejecutable normal<br />Ejecutable infectado<br />Code<br />PE HEADER<br />Code<br />PE HEADER<br />EntryPoint<br />Antiguo EntryPoint<br />Jumpto original entrypoint<br />EntryPoint<br />Evil code<br />
  58. 58. Estoy infectado<br /><ul><li>EntryPointobscuring (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</li></ul>Ejecutable normal<br />Ejecutable infectado<br />Code<br />PE HEADER<br />Code<br />PE HEADER<br />EntryPoint<br />EntryPoint<br />ret_malware<br />Jumpto<br />evilcode<br />Evil code<br />Jmpret_malware<br />
  59. 59. ¿Cómo entro en el sistema?<br /><ul><li>El método mas habitual de entrada es exploit en el explorador web, plugin del mismo o archivos mal intencionados.
  60. 60. El exploit ejecuta código binario o interpretado por el explotador.</li></li></ul><li>¿Cómo entro en el sistema?<br /><ul><li>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.
  61. 61. Empieza la infección y el intento de trasmisión a otros equipos.</li></li></ul><li>Código inteligente y actualizable<br />Tu virus puede ser inteligente y actualizable.<br />
  62. 62. Auto actualización<br /><ul><li> 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.
  63. 63. 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. </li></li></ul><li>Código inteligente y actualizable<br /><ul><li> Tu virus puede descargar una nueva versión y ser remplazado o borrado previamente a la copia.
  64. 64. Tu virus puede ser inteligente si esta dotado de matriz</li></li></ul><li>Auto actualización<br /><ul><li> 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.
  65. 65. 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.
  66. 66. Si esta divido en módulos, se puede hacer un módulo de actualización. </li></li></ul><li>Soy inteligente<br /><ul><li> 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.
  67. 67. 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. </li></li></ul><li>Rootkit escóndete en el sistema<br />Cosas interesantes para esconderse.<br />
  68. 68. Escondiéndose en el sistema<br /><ul><li> La intercepción de API’s de conexión a internet, como (connect, WSAConnect), (URLDownloadToFile*, URLDownloadToCacheFile* )etc… es útil para filtrar
  69. 69. 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. </li></li></ul><li>Escondiéndose en el sistema<br /><ul><li> 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.</li></li></ul><li>Escondiéndose en el sistema<br /><ul><li> 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.
  70. 70. 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. </li></li></ul><li>Enlaza tu virus<br />Js, sys<br />
  71. 71. ¿Cómo entro en el sistema?<br /><ul><li> 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.
  72. 72. Empieza la infección y el intento de trasmisión a otros equipos.</li></li></ul><li>Enlaza tu virus<br /><ul><li> Puede utilizar exploit para exploradores web que permitan la ejecución de javascript, haciendo descarga y ejecución de nuestro virus.
  73. 73. La explotación de un overflow también puede ser utilizada para la descarga y ejecución de nuestro virus.
  74. 74. Otra opción es utilizar archivos mal intencionados como puede ser pdf y su oleada de exploits o otros formatos vulnerables. </li></li></ul><li>Tu archivo .sys<br /><ul><li> La carga de un driver mal intencionado se puede utilizar para hacer hook a la SSTD, permitiéndole interceptar llamadas del modo kernel.
  75. 75. Haciendo hook a API’s, Zw*, Nt*, Rtl* etc…, podemos interceptar llamadas de otras aplicaciones aunque la aplicación corra en “ring3” modo user</li></li></ul><li>Tu archivo .sys<br /><ul><li> Haciendo hook a la capa NDIS podemos evadir los sniffers.
  76. 76. Haciendo hook a API’s de procesos cómo (ZwOpenProcess, NtOpenProcess). Podrá esconder su presencia como proceso.
  77. 77. Conexión TCP o UDP en modo kernel utilizando la capa TDI. </li></li></ul><li>Tu archivo .js<br /><ul><li>Javascript nos permite modificar cadenas, lo cual nos permite decodificar en tiempo de ejecución.
  78. 78. La función “unescape()” de javascript nos permite decodificar cadenas esto dificulta levemente el análisis.
  79. 79. La función “Chr()” de javascript nos permite meter bytes en lugar de la cadena dificulta levemente el análisis. </li></li></ul><li>Expande tu virus<br />Métodos de expansión<br />
  80. 80. Expande tu virus<br /><ul><li> Infección de archivos en discos montados con recursos compartidos, para ejecución desde otros equipos que accedan a el y ejecuten los archivos.
  81. 81. Búsqueda de recursos compartidos tipo “IPC$”.
  82. 82. Mensajería instantánea
  83. 83. Exploits</li></li></ul><li>Mensagería instantánea<br /><ul><li>Hook al teclado
  84. 84. Envío de las pulsaciones a la ventana
  85. 85. Robo de contactos</li></li></ul><li>Recursos compartidos<br /><ul><li> Infección de archivos PE
  86. 86. Remplazo de archivo PDF malintencionados
  87. 87. Exploit de archivos .lnk</li></li></ul><li>El virii debería ser un arte<br />
  88. 88. El virii debería ser un arte<br /><ul><li>Donut by Benny: Infección de archivo MSIL.
  89. 89. GriYo: EntryPointobscuring
  90. 90. Z0MBIE: Infección de imágenes ISO.
  91. 91. 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.
  92. 92. No publicar virus para que no lo usen comercialmente </li>

×