Segmentation fault en una evasion ASLR/Linux con ret2reg

Este es tu lugar para hablar de programación, compartir, crear y desarrollar nuevos proyectos

Moderador: Moderadores

Re: Segmentation fault en una evasion ASLR/Linux con ret2reg

Notapor TuXeD » Mié Mar 30, 2011 8:27 pm

Hola de nuevo :)

A ver, si no hay ASLR o es el ASLR de Linux (tal y como has explicado que es) las librerías del sistema operativo se cargan siempre en la misma dirección de memoria (a menos que hayan conflictos). Pero esto sólo es así con las librerías que forman parte del kernel, no? Quiero decir que, por ejemplo, el código de un ejecutable independiente o de una librería que haya programado el usuario se ubicará en una dirección de memoria 'aleatoria' dependiente de los programas que se esten ejecutando en esa sesión, no?


Mas alla de que el kernel este aplicando ASLR o no, esto "no tiene nada que ver" con el. Las librerias no son del kernel, sino parte del sistema (en userspace). Retornar al kernel es imposible desde userland, puesto que hay protecciones de memoria que no te permiten acceder a esa parte de la memoria ya que si tuvieras acceso a ella podrias leer/ejecutar cosas que no debes ;) Ejemplos serian claves, caches, contenidos de archivos a los que realmente no tienes acceso, etc.

A grandes rasgos, la cosa funciona asi: Tu le dices al kernel que cargue una nueva imagen (un ejecutable) en memoria, asi que este (el loader) parsea el ejecutable y busca las secciones que hay. Estas secciones tienen una direccion base marcada en el ejecutable (y que generalmente el compilador siempre pone al mismo valor) y el kernel intenta hacerle caso (salvo las restricciones impuestas por ASLR). Esto implica que el .text de tu ejecutable y demas cosillas van a un sitio predecible en todos los sistemas puesto que su ejecutable indica dicha direccion. Por ejemplo, tus ELF en x86 estaran seguramente mapeados en 08048000.

Ahora, cuando el sistema trata de cargar una libreria, esta dira "hey, quiero estar en XXX" y el kernel vera si hay algo ya mapeado ahi. Si no lo hay, le asignara esa direccion. Si lo hay, le asignara otra que este libre. Puesto que el orden en que se realiza el mapeo y las librerias que hay mapeadas para este proceso son los mismos, las direcciones seran predecibles (again, salvo ASLR).

Por tanto, se puede aprovechar cualquier libreria en un sistema sin ASLR asumiendo misma version del programa vulnerable y tal :)

Para mas info del proceso de loading... el propio kernel: http://lxr.linux.no/#linux+v2.6.33/fs/binfmt_elf.c (hay otros arch-specific por ahi tb, busca por elf o binfmt_elf y apareceran).

Saludetes
TuXeD
Wadalbertita
Wadalbertita
 
Mensajes: 1053
Registrado: Sab Ene 29, 2005 12:46 pm

Re: Segmentation fault en una evasion ASLR/Linux con ret2reg

Notapor vlan7 » Lun Abr 04, 2011 1:52 am

Código: Seleccionar todo
./msfelfscan -j esp vuln
0x080483fd jmp esp


Interesante el msfelfscan, a pesar de no ser una herramienta estandar, no tienes que andar contando bytes.

NewLog escribió:quiero llegar a que si un ejecutable cualquiera tiene una instrucción 'jmp esp' en una dirección en un sistema, ese mismo ejecutable no tiene porqué tener la misma instrucción en la misma dirección de memoria, cierto?


En una consola:
Código: Seleccionar todo
gdb programa
(gdb) b main
(gdb) r


Y en otra consola con pgrep programa vemos el PID de programa.

Con esta información, haciendo un cat /proc/PID/maps veremos el mapeo de las distintas secciones de memoria (stack, librerias que se han llamado, el .text del programa -flag x- y otros segmentos).

Repite este procedimiento en otras 2 consolas y basta con que veas lo que cambia y lo que no, y verás como (en linux con kernels recientes) el .text se mapea siempre entre 0x08048000 y 0x08049000 (sin ASLR o con ASLR, da igual).

Dicho de otro modo, el main en cada proceso puede tener la misma dirección virtual o lógica como vimos antes con gdb y un breakpoint en main (entiendo que para jmp esp lo mismo que para main), aunque evidentemente (hey no hay memoria compartida ni semáforos aquí) estén en direcciones físicas diferentes.

Suerte,
There is a crack, a crack in everything That's how the light gets in. -subculture

zen7.vlan7.org
Avatar de Usuario
vlan7
<|:-D
<|:-D
 
Mensajes: 1176
Registrado: Dom Mar 05, 2006 11:16 pm
Ubicación: Mas alla del EIP

Anterior

Volver a Programación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron