Professional Documents
Culture Documents
Igual que existe una lista o bases de datos de vulnerabilidades, que permite
a todos los profesionales y herramientas trabajar con los mismos códigos
y nomenclatura (por ejemplo, el CVE que estudiasteis con Isaac la semana
pasada), existe una lista o base de datos de patrones de ataque (también
de MITRE), el CAPEC (Common Attack Pattern Enumeration and
Classification). Debido a que muchas de las vulnerabilidades conocidas
comparten los mismos patrones de ataque, es una base de datos de menor
tamaño (en su última versión contiene cerca de 500 registros, es decir, 500
patrones de ataque diferentes) y que no añade nuevos registros con tanta
frecuencia.
En este caso, con un robo de puerto en el router (un ARP poisoning pero
en la CAM o Content Adressable Memory del router), se pueden interceptar
las comunicaciones que vienen de Internet (o de otra red) hacia la víctima.
Lo que no se puede hacer es envenenar la caché ARP de la víctima, por lo
que no se puede suplantar al router desde su punto de vista. Esto implica
que no se pueden hacer re-envíos y por lo tanto, este ataque sólo afecta a
la confidencialidad, en algunos casos al control de acceso y en ningún
caso a la integridad. También se pueden considerar que afecta a la
disponibilidad, ya que la víctima pierde la conectividad con su puerta de
enlace momentáneamente.
Paso 1:
Paso 2:
Paso 3:
Paso 4:
Secuestros de sesión
Por último, hay que tener en cuenta que estos ataques suelen prolongarse
durante unas horas, por lo que la fase de automatización mediante
scripting o cualquier otro tipo de herramienta hace que el atacante lo lleve
a cabo de manera más cómoda. Algunas herramientas conocidas son
LOIC, XOIC, HULK o RUDY.
Amplificación por tamaño de paquete y por distribución en un ataque de
denegación de servicio.
Este tipo de vulnerabilidades se conocen desde finales de los años 80, pero
multitud de sistemas operativos, aplicaciones y navegadores la siguen
teniendo. En general, para construir un ataque de este tipo, lo primero que
tiene que hacer el atacante es localizar un buffer que desbordar, y este
buffer puede ubicarse en la pila (stack) o en el montón (heap), que no son
más que zonas de la memoria del proceso en las que se almacenan
punteros, valores de variables, etc. A continuación, el atacante tiene que
localizar la manera de aprovechar el exceso de datos que se van a
almacenar en este buffer.
Pila y montón en la memoria de ejecución de un proceso.
Para tener un poco de margen, los atacantes suelen utilizar la técnica del
NOP-sled. Todos los repertorios de instrucciones contienen alguna
instrucción de tipo NOP (No operación), que no hace ningún trabajo útil.
Los atacantes pasan en el parámetro que se utiliza para provocar el
desbordamiento el shell-code que se desea ejecutar, una secuencia de
instrucciones NOP y de vez en cuando, una instrucción de salto
incondicional (para saltar ciertas zonas de la pila y para llegar hasta el
shell-code especificando la dirección destino de salto con un offset
relativo) que salta al inicio de la pila. Siempre y cuando el tamaño del
código no sobrepase el tamaño del buffer, esta técnica garantiza muchas
más probabilidades de éxito.
Descripción de los ataques por inyección según OWASP (en el año 2013)
en el caso de aplicaciones web.
Veamos el ejemplo clásico de inyección de comandos. En la siguiente
figura se muestra un código que permite a los administradores de un
sistema Unix/Linux ver el contenido de un fichero pero no modificarlo.
Inyecciones SQL
SQL (Structured Query Language) es un lenguaje declarativo de acceso a
bases de datos relacionales, que permite efectuar consultas, y en general,
interactuar con esta bases de datos de manera sencilla. Probablemente la
inyección SQL sea el tipo de ataque de inyección más conocido (aunque
también se pueden realizar ataques por inyección con LDAP o con XPath,
por mencionar algún ejemplo más), y aún así, todavía muchas aplicaciones
en la actualidad presentan vulnerabilidades que permiten que se explote.
Estas vulnerabilidades permiten que un atacante añada a una consulta SQL
legítima, sentencias SQL que le permitan conseguir sus objetivos. Como
dice el chiste...
Los ejemplos que se han mostrado en el vídeo son los clásicos con
formularios en aplicaciones web, pero recuerda que este no es el único
punto de entrada para una consulta SQL construida con valores
proporcionados por el usuario. Las inyecciones de código pueden
aprovechar cualquier punto de entrada de parámetros, como los
parámetros en la URL o los valores almacenados en cookies.
Vamos a intentar comprender con dos ejemplos sencillos los dos patrones
de ataque típicos con XSS, el no persistente y el persistente, en ambos
casos con el objetivo que mencionábamos de robar las cookies de sesión
de sus víctimas.
Más XSS
En este tipo de patrón de ataque el flujo del ataque no sale del cliente. Hay
que tener en cuenta que las aplicaciones web son cada vez más complejas,
esto hace que cada vez más a menudo parte de los contenidos se generen
directamente a través de JavaScript en el propio navegador del cliente, y
no hace falta que estos contenidos sean enviados desde el servidor. Cada
vez que los contenidos se modifican sin refrescar la página entera, la
actualización se realiza ejecutando este JavaScript local. Esto se puede
observar cuando se utiliza AJAX, por ejemplo.
Por último, hay un patrón de ataque que merece la pena mencionar: el que
se sirve de los logs del sistema. Supongamos que un atacante encuentra
la manera de insertar un JavaScript malicioso entre los logs del sistema
(por ejemplo, creando una cuenta de usuario nueva e introduciendo como
nombre del nuevo usuario ese script). Si a continuación el administrador
utilizar un navegador web para acceder a estos logs y visualizarlos
cómodamente (este tipo de interfaz se utiliza cada vez más en este tipo de
tareas), el atacante habrá conseguido su objetivo y habrá realizado un XSS
a través de una inyección en los logs del sistema.
Aquí tienes un ejemplo de patrón XSS de tipo 0 o DOM en el que el flujo del
ataque no sale del equipo de la víctima. Como puedes observar, el objetivo
del atacante en este ejemplo es robar la cookie de sesión de esta víctima.
Como iremos analizando a lo largo del MOOC, los ataques son cada vez
más persistentes y dirigidos. Por lo tanto, aunque en los ejemplos de esta
unidad hemos hablado casi siempre de campañas de phishing (en
principio, aleatorias, juegan con la probabilidad, si se envían miles de
emails y un 1% de los usuarios pinchan en el enlace malicioso, ya se tiene
un número significativo de víctimas), imagina lo fácil que puede llegar a
ser para un atacante construir un ataque de XSS o en concreto, de XSRF
si, mediante ingeniería social por ejemplo, consigue saber que sitios y
aplicaciones visitan o usan con frecuencia sus potenciales víctimas (los
empleados de una empresa, un grupo de amigos, los habitantes de una
ciudad en cierto rango de edad, etc.).
XSS por webmail (con extensiones MIME). Este tipo de extensión permite
el intercambio a través de Internet de todo tipo de archivos (texto, audio,
vídeo, etc.) de forma transparente para el usuario. Prácticamente todos los
mensajes de correo electrónico escritos por personas y muchos de los que
son generados automáticamente son transmitidos en formato MIME a
través del protocolo SMTP. El atacante incluye el script malicioso dentro
del archivo etiquetado con extensión MIME. Si el navegador interpreta que
el archivo es MIME (es decir, confía en la extensión si realizar más
comprobaciones) y, que por lo tanto, no necesita pasar por filtros de
scripts y otro tipo de validaciones, es posible que lo pase directamente al
intérprete y se termine ejecutando el script como en cualquier otro ataque
XSS de los ya estudiados.