09.05.2013 Views

Bajo el Radar: [PDF, 2167 kB] - Linux Magazine

Bajo el Radar: [PDF, 2167 kB] - Linux Magazine

Bajo el Radar: [PDF, 2167 kB] - Linux Magazine

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

PORTADA Evitando Detección<br />

Técnicas para sortear los sistemas IDS e IPS<br />

Las herramientas de detección de intrusos tipo Snort sirven de ayuda a la hora de seguir <strong>el</strong> rastro a los intru-<br />

sos, pero no debemos sentirnos demasiado cómodos. Mostraremos algunas de las técnicas y herramientas<br />

usadas por los atacantes para evitar que sus intrusiones sean detectadas.<br />

POR KURT SEIFRIED<br />

Acabamos de instalar y configurar<br />

nuestro sistema de detección de<br />

intrusos con la intención de proteger<br />

nuestra red frente a ataques, y ya<br />

estamos listos para empezar a recibir<br />

alertas que nos informen sobre cualquier<br />

actividad que parezca mínimamente sospechosa<br />

¿Estamos ya seguros? ¿De verdad<br />

lo creemos? Los expertos en seguridad<br />

invierten mucho tiempo y dinero<br />

estudiando técnicas que les permitan<br />

evadir los sistemas de detección de intrusiones<br />

(Intrusion Detection System o<br />

ISD) porque saben que los atacantes<br />

están ahí afuera haciendo exactamente<br />

lo mismo.<br />

Las herramientas IDS e IPS (sistemas<br />

de prevención de intrusiones, o Intrusion<br />

Prevention Systems en inglés) no carecen<br />

de problemas. Los sistemas de detección<br />

de intrusiones basados en host<br />

(HIDS) deben ser instalados y ejecutados,<br />

como su nombre indica, en <strong>el</strong> host<br />

que deseamos controlar. Esto estaría<br />

muy bien si tuviéramos <strong>el</strong> control total<br />

d<strong>el</strong> equipo y pudiéramos instalar nuestro<br />

sistema HIDS en él. (Buena suerte al<br />

intentarlo con todas las impresoras<br />

conectadas a la red, los escáneres, las<br />

fotocopiadoras, los sistemas punto de<br />

venta, los escáneres inalámbricos para<br />

inventariado, etc.)<br />

Cuando se trabaja en redes con<br />

muchos equipos, los administradores<br />

su<strong>el</strong>en desplegar herramientas IDS basadas<br />

en red. Estos sistemas incorporan<br />

sofisticados mecanismos de prevención<br />

de intrusiones (IPS) capaces de abortar<br />

ataques, por ejemplo, enviando paquetes<br />

TCP de reinicio para cerrar las conexiones<br />

problemáticas.<br />

Por desgracia, incluso estas herramientas<br />

de detección de ataques de niv<strong>el</strong><br />

empresarial pueden plantear alguna que<br />

otra complicación. Por ejemplo, <strong>el</strong> bloqueo<br />

d<strong>el</strong> ataque puede llegar demasiado<br />

tarde para que sea realmente efectivo;<br />

los sistemas IPS tienen que estar normal-<br />

22 Número 69 WWW.LINUX- MAGAZINE.ES<br />

mente en línea para que puedan bloquear<br />

los ataques antes de que consigan<br />

pasar, o bien tienen que ser algo más<br />

agresivos en <strong>el</strong> bloqueo de tráfico<br />

“malo”.<br />

Ambas soluciones llevan asociadas<br />

nuevos problemas – la primera alternativa<br />

introduce una latencia y un punto de<br />

fallo adicional en nuestra red, mientras<br />

que la segunda produce falsos positivos<br />

que pueden bloquear <strong>el</strong> tráfico web legítimo.<br />

Los atacantes con experiencia pueden<br />

aprovechar estos problemas para colarse<br />

dentro de la red de seguridad. En este<br />

artículo repasaremos algunas de las<br />

herramientas y técnicas que su<strong>el</strong>en usar<br />

para seguir ocultos incluso de los IDS<br />

mejor configurados.<br />

Evasión vs. Ataque<br />

Los intrusos disponen básicamente de<br />

dos opciones cuando quieren permanecer<br />

ocultos. Pueden esconderse usando<br />

© piai - Fotolia.com


técnicas de ocultación, o bien pueden<br />

intentar enmascarar sus actividades creando<br />

algún tipo de encubrimiento (como<br />

<strong>el</strong> caso d<strong>el</strong> hombre que contrató un montón<br />

de señu<strong>el</strong>os usando Craigslist [2] con<br />

<strong>el</strong> objetivo de robar un furgón blindado).<br />

En general, esconderse su<strong>el</strong>e funcionar<br />

mejor que enmascarar, especialmente<br />

frente a los sistemas IPS que bloquean<br />

ataques – claro está, a menos que deseemos<br />

atacar al sistema IDS de forma<br />

(in)directa inundando al administrador<br />

con mucha información (no hay nada<br />

como pasar de 100 alertas diarias a 100<br />

alertas por minuto).<br />

Básicamente, estas estrategias pueden<br />

reducirse a dos alternativas: o bien nos<br />

ocultamos entre las sombras para poder<br />

fisgonear, o bien creamos algo parecido a<br />

una estampida de ganado y vamos tras<br />

<strong>el</strong>los aprovechando <strong>el</strong> ruido y <strong>el</strong> descontrol<br />

generado.<br />

Alteración de Paquetes<br />

La modificación o alteración de paquetes<br />

constituye una técnica clásica para la<br />

evasión de sistemas IDS e IPS, y por clásico<br />

nos referimos a 1998. Primero se<br />

publicó Fragrouter [3], al que luego le<br />

siguió Fragroute [4] (observe la “r” que<br />

falta). El Fragrouter original disponía de<br />

un número reducido de opciones – principalmente<br />

r<strong>el</strong>acionadas con <strong>el</strong> particionamiento<br />

de datos en fragmentos de 8,<br />

16 y 24 bytes, con opciones para duplicar<br />

paquetes y enviarlos de forma desordenada<br />

(lo que en 1999 era más que suficiente<br />

para sortear muchos sistemas<br />

IDS). Naturalmente, la mayoría de los<br />

desarrolladores de IDS corrigieron sus<br />

productos, por lo que los autores de Fragrouter<br />

se vieron obligados a mejorarlo,<br />

hasta transformarlo en Fragroute. Fragroute<br />

funciona como un proxy a niv<strong>el</strong><br />

de red; toma un flujo de paquetes TCP<br />

correctamente formados y los altera de<br />

tal forma que hace tambalear algunos<br />

equipos y sistemas IDS.<br />

Fragroute puede retener, <strong>el</strong>iminar y<br />

duplicar paquetes (tanto <strong>el</strong> primero, <strong>el</strong><br />

último, como cualquiera escogido al<br />

azar), creando “basurilla” con niv<strong>el</strong>es<br />

diferentes de carga, opciones IP no válidas<br />

y valores TTL modificados. De<br />

manera alternativa, puede fragmentar<br />

paquetes en tamaños arbitrarios, añadir<br />

opciones IP y modificar los valores ToS<br />

(tipo de servicio o Type of Service en<br />

inglés). Si de verdad queremos hacer la<br />

vida miserable a<br />

los sistemas IDS<br />

más frágiles,<br />

podremos reordenar<br />

los paquetes<br />

de forma aleatoria<br />

o en orden inverso<br />

(lo que podría<br />

saturar los buffers disponibles en <strong>el</strong> IDS<br />

para <strong>el</strong> almacenamiento y reensamblado<br />

de datos). Básicamente, con Fragroute es<br />

posible generar cualquier cosa defectuosa<br />

que aún puede ser considerada<br />

como dato y que un equipo puede reestructurar<br />

y procesar.<br />

Los intrusos también pueden usar <strong>el</strong><br />

escáner de seguridad Nmap (Figura 1)<br />

para fragmentar paquetes. Nmap nos<br />

permite establecer un MTU pequeño<br />

(unidad máxima de transmisión, o Maximum<br />

Transmit Unit en ingles). Para<br />

divertirnos podemos probar un MTU de<br />

“1” (un byte de datos para cada paquete<br />

TCP); aunque esto produce una transmisión<br />

muy lenta y conlleva un enorme<br />

consumo de ancho de banda, resulta sorprendente<br />

ver con qué frecuencia tumbamos<br />

(o como poco tambaleamos) a los<br />

servidores remotos y los sistemas IDS/<br />

IPS escaneados.<br />

Disponemos además de otras técnicas<br />

también clásicas de alteración de paquetes,<br />

como enviarlos con sumas de comprobación<br />

incorrectas, o modificar aleatoriamente<br />

algunos de los bits de la<br />

cabecera (activando, por ejemplo, los<br />

campos para paquetes urgentes entre<br />

otras opciones TCP). Podemos usar<br />

herramientas como hping [5] para generar<br />

paquetes completamente personalizados<br />

y, si queremos integrar <strong>el</strong> trabajo<br />

con un lenguaje de programación como<br />

Python, la herramienta Scpay [6] puede<br />

resultar interesante.<br />

La forma más simple y efectiva de tratar<br />

los ataques basados en <strong>el</strong> envío de<br />

paquetes modificados es poner un cortafuegos<br />

que sea capaz de reensamblarlos.<br />

El iptables de <strong>Linux</strong> puede hacer esto si<br />

activamos los módulos de seguimiento<br />

de conexiones, ya que éstos reensamblan<br />

paquetes de forma automática. Usando<br />

<strong>el</strong> parámetro fragment reassemble de la<br />

opción scrub d<strong>el</strong> PF de OpenBSD, haremos<br />

que se reserve memoria para un<br />

buffer donde se almacenarán los paquetes<br />

entrantes y se reensamblarán en<br />

paquetes completos y bien formados<br />

antes de su reenvío al interior de la red.<br />

WWW.LINUX- MAGAZINE.ES<br />

Evitando Detección PORTADA<br />

Figura 1: Opciones de evasión de nmap.<br />

Ambas herramientas introducen algo<br />

de latencia adicional, pero evitan que los<br />

paquetes fragmentados con secciones<br />

solapadas atraviesen la red. La idea<br />

general es poner un sistema operativo<br />

con una pila TCP robusta d<strong>el</strong>ante d<strong>el</strong><br />

resto de los sistemas que tengan pilas<br />

TCP más débiles.<br />

De la misma forma que las herramientas<br />

de modificación de paquetes han<br />

mejorado con los años, la mayoría de los<br />

sistemas IDS e IPS también han evolucionado.<br />

El mejor ejemplo de esto es <strong>el</strong> proyecto<br />

de código libre Snort, que tiene un<br />

preprocesador llamado Stream5 (sucesor<br />

d<strong>el</strong> preprocesador Stream4). Stream5<br />

dispone de un reensamblador y detector<br />

de anomalías de paquetes TCP bastante<br />

avanzado capaz de localizar muchos<br />

tipos de alteraciones en las conexiones y<br />

en los paquetes. Los desarrolladores de<br />

soluciones propietarias también han<br />

sabido actualizarse. Deberemos mirar la<br />

documentación de nuestra solución y<br />

asegurarnos de tener instaladas las últimas<br />

actualizaciones.<br />

Alteración d<strong>el</strong> Protocolo<br />

Dado un protocolo de red ¿qué constituye<br />

tráfico “correcto” y “válido”? Una<br />

respuesta puede ser: todo lo que <strong>el</strong><br />

cliente o <strong>el</strong> servidor al que estemos<br />

conectado acepte. Muchas veces lo que<br />

dice <strong>el</strong> estándar no es tan importante<br />

cuando se trata de realizar una implementación<br />

concreta de ese protocolo.<br />

Esto dificulta mucho la creación de software<br />

de calidad para <strong>el</strong> análisis de protocolos.<br />

Si seguimos las especificaciones,<br />

pronto veremos que los desarrolladores<br />

de software (incluidas las empresas más<br />

grandes) aceptan muchas veces datos<br />

mal formados como si fueran válidos (es<br />

una forma educada de decir que nunca<br />

siguen las especificaciones).<br />

El mejor ejemplo es <strong>el</strong> capturador y<br />

analizador de paquetes Wireshark (antes<br />

conocido como Ethereal), que contiene<br />

cientos de analizadores de protocolos y<br />

203 entradas en la base de datos de vulnerabilidades<br />

de seguridad CVE – la<br />

Número 69<br />

23


PORTADA Evitando Detección<br />

mayoría de las cuales son debidas a estos<br />

mismos analizadores de protocolos.<br />

Existen herramientas que nos permiten<br />

capitalizar estas características que<br />

no cumplen con <strong>el</strong> estándar d<strong>el</strong> protocolo<br />

para sortear los sistemas IDS e IPS.<br />

Ya en <strong>el</strong> número 53 [7] de <strong>Linux</strong> <strong>Magazine</strong><br />

vimos 10 tipos diferentes de fuzzers,<br />

de los que cinco eran para redes. De <strong>el</strong>los<br />

<strong>el</strong> mejor es Peach Fuzzing Platform [8],<br />

que actualmente se encuentra en<br />

desarrollo (con una última actualización<br />

a finales de diciembre de 2010). Algunas<br />

de las otras herramientas de alteración<br />

de protocolos no han tenido continuidad.<br />

Por ejemplo, de SPIKE no ha salido<br />

ninguna versión nueva desde hace años.<br />

Apuntando a la Web<br />

No es sorprendente saber que <strong>el</strong> vector<br />

de entrada de muchas de las intrusiones<br />

es la web. Muchos servicios y dispositivos<br />

ofrecen ahora capacidades web<br />

(impresoras, escáneres, servidores y dispositivos<br />

empotrados). De hecho, casi<br />

todo lo que no está basado en web se<br />

encuentra tras un cortafuegos, con lo<br />

que los servidores web se sitúan en los<br />

primeros puestos de las listas de objetivos<br />

de los atacantes.<br />

La web presenta algunas oportunidades<br />

interesantes para <strong>el</strong> atacante: casi<br />

todos los servidores web soportan uno o<br />

varios lenguajes de programación<br />

(scripts CGI, PHP, SQL, etc.). Esto da al<br />

atacante muchas más oportunidades de<br />

interactuar con <strong>el</strong> sistema de formas no<br />

previstas, y que pueden ocasionar más<br />

de un desbordamiento de buffer – inyección<br />

de SQL, vulnerabilidades XSS<br />

(Cross-Site Scripting), etc..<br />

La parte cliente proporciona además<br />

un conjunto de tecnologías software<br />

increíblemente complejas y potencialmente<br />

problemáticas. Los principales<br />

navegadores web (Internet Explorer,<br />

Firefox, Opera, Safari y Chrome) tienen<br />

todos una larga historia de fallos de<br />

seguridad. Además, hay que considerar<br />

al omnipresente Flash, que se encuentra<br />

instalado en virtualmente toda máquina<br />

Windows y en muchas de las máquinas<br />

<strong>Linux</strong>. (Si queremos ver vídeos, hay<br />

muchas probabilidades de que necesitemos<br />

Flash – al menos hasta que HTML5<br />

sea más popular). Flash tiene un triste<br />

registro de vulnerabilidades. No hace<br />

mucho, por ejemplo, apareció un nuevo<br />

ataque y se publicó <strong>el</strong> código que explo-<br />

taba la vulnerabilidad. Adobe tardó<br />

entre 2 y 3 semanas en corregir <strong>el</strong><br />

problema.<br />

Aunque todavía no es muy conocido,<br />

los atacantes disponen de una<br />

forma muy simple de sortear completamente<br />

los sistemas IDS e IPS.<br />

Se trata de usar sesiones web<br />

HTTPS cifradas para lanzar ataques<br />

contra servidores y clientes. A<br />

menos que dispongamos de un<br />

balanceador de carga HTTP y nuestro<br />

sistema IDS/ IPS esté situado entre <strong>el</strong><br />

balanceador y <strong>el</strong> servidor, no habrá una<br />

manera fácil de analizar <strong>el</strong> contenido<br />

enviado al servidor web.<br />

En <strong>el</strong> lado d<strong>el</strong> cliente, si somos suficientemente<br />

paranoicos, podemos comprar<br />

algún producto tipo Packet Forensics<br />

[9], que nos permite descifrar sesiones<br />

HTTPS al vu<strong>el</strong>o instalando un certificado<br />

personalizado en <strong>el</strong> cliente que<br />

deseamos proteger. Hay que tener en<br />

cuenta, sin embargo, que este producto<br />

está orientado principalmente para ser<br />

usado por las fuerzas de seguridad que<br />

quieren explotar un solo servidor web, y<br />

no está realmente diseñado para proteger<br />

sistemas clientes (al menos hasta<br />

donde yo se, y es que esta empresa es<br />

algo reservada). Lo peor de que un atacante<br />

use HTTPS es que <strong>el</strong> protocolo<br />

HTTPS es legítimamente necesario en<br />

muchos sitios, por lo que es complicado<br />

bloquearlo, ya que podría cabrear a<br />

muchos usuarios.<br />

Otra alternativa que tienen los intrusos<br />

para sortear nuestro sistema de detección<br />

es usar algún tipo de ataque que<br />

codifique la información. Hay varias técnicas<br />

que permiten codificar peticiones y<br />

respuestas HTTP. Normalmente enviamos<br />

al servidor texto plano, pero podemos<br />

indicar un Content-Type diferente,<br />

que puede tener varios valores, como<br />

UTF-8 o UTF-7. Lo que es más, podemos<br />

codificar <strong>el</strong> texto usando notación porcentual<br />

(por ejemplo, un espacio es<br />

“%20”), hexadecimal, decimal y por<br />

nombres. Podemos<br />

además usar dobles<br />

comillas y una variedad<br />

de código de páginas<br />

para otros idiomas<br />

(ver la tabla “Nombres<br />

de Dominio Internacionales”).<br />

También es<br />

posible mezclar un<br />

poco las cosas (mien-<br />

24 Número 69 WWW.LINUX- MAGAZINE.ES<br />

Figura 2: Algunos ejemplos con porcentajes, dobles<br />

porcentajes, Unicode, UTF-8 y varias codifica-<br />

ciones.<br />

tras <strong>el</strong> servidor o <strong>el</strong> cliente lo acepte y<br />

decodifique, es, en todo caso “legítimo”).<br />

Ya que no hay forma de diseñar expresiones<br />

regulares o patrones que nos permitan<br />

filtrar toda posible codificación<br />

que <strong>el</strong> atacante puede usar, necesitaremos<br />

normalizar <strong>el</strong> tráfico antes de escanearlo<br />

en búsqueda de potenciales problemas.<br />

Esto significa que, para toda<br />

cabecera HTTP que examina nuestro<br />

IDS/ IPS, primero debemos detectar si los<br />

datos están codificados y luego ver <strong>el</strong><br />

tipo de codificación, normalizarlos y<br />

finalmente escanearlos. Debemos hacer<br />

esto para cualquier dato susceptible de<br />

ser codificado en más de un niv<strong>el</strong>, o que<br />

permite usar simultáneamente varios sistemas<br />

de codificación en una misma<br />

cadena.<br />

El escáner de seguridad Nikto2 [10]<br />

hace uso de la librería libwhisker [11] e<br />

incorpora una serie de trucos de cifrado<br />

anti-IDS, como por ejemplo la inserción<br />

de directorios autoreferenciados (“/ ./ ”)<br />

o la inserción de parámetros falsos en la<br />

URL, como tabuladores, retornos de<br />

carro o valores binarios en vez de espacios.<br />

Si <strong>el</strong> intruso se enfrenta a un servidor<br />

Windows, puede probar cambiando<br />

de forma aleatoria las mayúsculas y<br />

minúsculas (ya que la mayoría de los<br />

servidores web de Windows no diferencian<br />

entre mayúsculas y minúsculas<br />

cuando procesan las peticiones) y cambiar<br />

las “/ ” por “\”. O, simplemente,<br />

puede insertar caracteres UTF-8 aleatorios;<br />

por desgracia con esto solo ya es<br />

Nombres de Dominios Internacionales<br />

Quizás pensemos que simplemente podemos hacer filtros<br />

basados en los nombres de dominios, poniendo a los chicos<br />

malos en una lista negra. Desafortunadamente, con los<br />

IDN (nombres de dominios internacionales, o International<br />

Domain Names [12] en inglés) podremos tener múltiples<br />

representaciones para un mismo dominio usando IDN,<br />

UTF-7 y Punycode. Deberíamos comprobar si nuestro software<br />

gestiona correctamente nombres IDN y representaciones<br />

Punycode.


posible causar problemas (y es que parece que hay programadores<br />

que no son muy buenos tratando cadenas Unicode)<br />

(Figura 2).<br />

JavaScript y Flash<br />

Si lo que queremos es sortear sistemas IDS e IPS, JavaScript<br />

y Flash son un auténtico sueño hecho realidad. Los dos son<br />

lenguajes Turing-completos, por lo que en principio no hay<br />

forma de saber si <strong>el</strong> código que vamos a ejecutar es malicioso<br />

o no. La única forma posible de identificar este código<br />

es ejecutarlo y tratar de pillarlo en <strong>el</strong> momento que haga<br />

algo sospechoso.<br />

JavaScript (al igual que la mayoría de los lenguajes interpretados)<br />

es bastante prolijo o verboso y su<strong>el</strong>e incluir<br />

muchos espacios en blanco. Los diseñadores de páginas web<br />

y los usuarios desean que las páginas carguen rápidamente,<br />

y los scripts llenos de largas palabras y muchos espaciados<br />

ocupan más espacio, ralentizando la carga de las páginas<br />

web. Para resolver esto, muchos sitios se han visto obligados<br />

a comprimir sus JavaScripts para reducir <strong>el</strong> tamaño de los<br />

ficheros a descargar. La forma más simple de compresión<br />

consiste en <strong>el</strong>iminar todos los espacios en blanco sobrantes,<br />

aunque, claro está, esto por sí solo no va a reducir de<br />

manera significativa <strong>el</strong> tamaño total d<strong>el</strong> fichero.<br />

Por suerte hay alternativas más avanzadas; una muy<br />

conocida es la herramienta “Packer” [13] de Dean Edwards<br />

(ver Figura 3). Lo que hace Packer es crear una función<br />

envoltorio que descomprime datos, luego comprime <strong>el</strong> contenido<br />

de nuestro JavaScript y lo convierte a una cadena de<br />

texto que se incluye, junto con la función descompresora, en<br />

un nuevo fichero. Packer puede reducir los nombres de las<br />

variables (al ordenador no le importa si la variable se llama<br />

“nombre_de_usuario” o sólo “a”) y codificar los datos en<br />

Base62 (con lo que se usarán sólo los caracteres a-z, A-Z y 0-<br />

9). Otra alternativa es <strong>el</strong> compresor YUI [14] – <strong>el</strong> compresor<br />

JavaScript y CSS de Yahoo!. Al igual que Packer, esta herramienta<br />

puede acortar <strong>el</strong> tamaño de las variables, <strong>el</strong>iminar los<br />

espacios en blanco e incluir ciertas macros de optimización.<br />

Ambas herramientas son compresores JavaScript bien documentados<br />

y “políticamente correctos”.<br />

Hay formas menos educadas (léase: maliciosas) de realizar<br />

esta compresión. Una de <strong>el</strong>las requiere usar ciertos trucos<br />

basados en unescape(), <strong>el</strong> cual permite al intruso mezclar<br />

varias codificaciones usando, por ejemplo, caracteres<br />

codificados con <strong>el</strong> código porcentual dentro d<strong>el</strong> flujo de<br />

datos. El problema es que muchos sitios (incluido Google)<br />

usan unscape() para empaquetar datos, de tal forma que<br />

caracteres como < y > puedan ser filtrados en los formularios<br />

de entrada, haciendo por tanto mucho más difícil distinguir<br />

los usos lícitos de los maliciosos.<br />

Las aplicaciones Flash una vez escritas son compiladas en<br />

ficheros .SWF y alojadas en los servidores web. Sin<br />

embargo, al igual que otros ficheros binarios con estructuras<br />

conocidas, son fáciles de descompilar y volver a su versión<br />

en código fuente. Por eso, al igual que se comprimen los<br />

JavaScript (por rendimiento), muchos sitios ofuscan los<br />

ficheros Flash para evitar su desensamblado.<br />

Los programas de ofuscación normalmente renombran<br />

todas las variables usando nombres aleatorios, cifrando cier-


PORTADA Evitando Detección<br />

tos datos d<strong>el</strong>icados como contraseñas y<br />

cadenas de texto, aleatorizando ciertas<br />

instrucciones y modificando <strong>el</strong> flujo de<br />

control d<strong>el</strong> programa para dificultar su<br />

análisis mediante <strong>el</strong> decompilador. Estas<br />

herramientas proporcionan a los intrusos<br />

una forma de ocultar las intenciones de<br />

una aplicación Flash aparentemente inocente.<br />

De forma realista, lo mejor que se<br />

puede hacer para detectar ficheros Flash<br />

dañinos es buscar una copia d<strong>el</strong> fichero<br />

malicioso y enviarlo a una empresa antivirus<br />

para que añadan su firma a la base<br />

de datos.<br />

<strong>PDF</strong> y Adobe Reader<br />

<strong>PDF</strong> es una tecnología aún menos segura<br />

que JavaScript y Flash. No es sólo que <strong>el</strong><br />

formato <strong>PDF</strong> tiene una larga lista de problemas,<br />

es que podemos incrustar casi<br />

cualquier contenido que queramos en un<br />

fichero <strong>PDF</strong> (incluido JavaScript y<br />

Flash). También podemos ofuscar los<br />

ficheros <strong>PDF</strong> de modos que nos hacen<br />

dudar d<strong>el</strong> equipo de desarrollo de Adobe<br />

Reader. Algunas de las técnicas de ofuscación<br />

de <strong>PDF</strong> [15] incluyen:<br />

Llamar a OpenAction sobre objetos<br />

creados.<br />

Usar codificaciones especiales para<br />

sustituir ciertos caracteres (representaciones<br />

nombradas).<br />

Partir una cadena usando la barra<br />

invertida, creando un carácter por<br />

línea.<br />

Convertir cadenas a hexadecimal y<br />

añadir caracteres de espacio dentro de<br />

la cadena.<br />

Cifrar (otra vez para proteger <strong>el</strong> contenido).<br />

Podemos además comprimir <strong>el</strong> <strong>PDF</strong><br />

usando /FlateDecode, crear un montón<br />

¿Legítimo?<br />

Hay que tener en cuenta que un atacante no necesita seguir<br />

técnicas de intrusión convencionales para atacar nuestra<br />

red. Incluso si logramos bloquear todo dato codificado,<br />

cifrado, comprimido y cualquier otro oculto, los atacantes<br />

más int<strong>el</strong>igentes pueden en ocasiones atacar la red<br />

enviando peticiones completamente legítimas.<br />

Por ejemplo, consideremos <strong>el</strong> caso de una web de reservas<br />

aéreas que permite al visitante buscar un vu<strong>el</strong>o y reservar<br />

un asiento determinado. El sistema mantiene la reserva d<strong>el</strong><br />

asiento por un periodo determinado mientras <strong>el</strong> usuario<br />

introduce su número de tarjeta de crédito entre otros datos.<br />

Un atacante puede, simplemente, establecer varios cientos<br />

de conexiones y apartar todos los asientos libres, y volver a<br />

s<strong>el</strong>eccionarlos en otra sesión cuando <strong>el</strong> sistema los libere<br />

transcurrido un tiempo. Identificar este tipo de ataque en<br />

un sistema IDS o IPS es prácticamente imposible.<br />

de anotaciones de documento<br />

aleatorias y,<br />

luego, usar getAnnots()<br />

[16] para obtener un<br />

array de anotaciones y<br />

crear un conjunto mayor<br />

de documentos. Otra<br />

cosa que podemos hacer<br />

es crear una lista de<br />

cadenas debidamente<br />

modificadas, para luego<br />

usar la función replace() JSMin y Packer.<br />

y transformarlas en algo<br />

malicioso que pueda ser ejecutado a través<br />

de la función eval().<br />

¡Ah! También podemos codificar<br />

JavaScript dentro d<strong>el</strong> <strong>PDF</strong> usando notación<br />

octal (por ejemplo, “\72” para <strong>el</strong><br />

carácter “:”); podemos codificar uno o<br />

varios caracteres y <strong>PDF</strong> los gestionará sin<br />

problemas.<br />

En resumen: un intruso puede usar la<br />

notación octal sobre varios caracteres d<strong>el</strong><br />

código JavaScript, romper la bomba<br />

lógica en pedacitos aparentemente inocuos,<br />

reemplazar algunas subcadenas<br />

por otras de apariencia más segura (que<br />

luego serán reemplazaras usando expresiones<br />

regulares), y ocultar las cadenas<br />

codificadas dentro de las anotaciones d<strong>el</strong><br />

documento (que curiosamente algunos<br />

sistemas no van a escanear, ya que se<br />

consideran “seguras”).<br />

Esto significa que si queremos escanear<br />

adecuadamente un documento <strong>PDF</strong>,<br />

necesitaremos extraer toda la cadena,<br />

ejecutar sobre <strong>el</strong>la las expresiones regulares<br />

contenidas en <strong>el</strong> documento, concatenarlas,<br />

y luego escanear <strong>el</strong> resultado<br />

final buscando algo sospechoso.<br />

Conclusiones<br />

Los atacantes con determinación (también<br />

conocidos como<br />

APT en sus siglas en<br />

inglés – “Advanced<br />

Persistent Threat” o<br />

“Amenaza Persistente<br />

Avanzada”) tienen<br />

acceso al mismo hardware<br />

y herramientas<br />

software que usamos<br />

para defender nuestras<br />

redes. No es que los<br />

vendedores de soluciones<br />

IDS e IPS hagan<br />

algún tipo de estudio<br />

en profundidad de sus<br />

clientes antes de ven-<br />

26 Número 69 WWW.LINUX- MAGAZINE.ES<br />

Figura 3: Un sencillo programa JavaScript comprimido usando<br />

der sus productos. Los chicos malos terminarán<br />

encontrando algún fallo en las<br />

herramientas que usamos.<br />

Mi consejo es que se bloquee todo dato<br />

mal formado que sea posible (por ejemplo,<br />

fragmentos TCP con solapamiento,<br />

algunos tipos de codificación, etc.) y<br />

registremos <strong>el</strong> resto. Si un atacante aún<br />

así consigue penetrar en la red, al menos<br />

<strong>el</strong> fichero de registro nos puede ayudar a<br />

averiguar cómo lo hizo. ■<br />

RECURSOS<br />

[1] OSSEC: http:// www. ossec. net/<br />

[2] Enmascarando ataques usando<br />

Craigslist: http:// arstechnica. com/ old/<br />

content/ 2008/ 10/<br />

bank-robber-crowdsources-disguise-t<br />

o-craigslist-floats-away. ars<br />

[3] Fragrouter: http:// archive. ubuntu.<br />

com/ ubuntu/ pool/ universe/ f/<br />

fragrouter/<br />

[4] Fragroute: http:// monkey. org/<br />

~dugsong/ fragroute/<br />

[5] hping: http:// www. hping. org/<br />

[6] Scapy: http:// www. secdev. org/<br />

projects/ scapy/<br />

[7] Fuzzing; <strong>Linux</strong> <strong>Magazine</strong> Nº53 Edición<br />

en Cast<strong>el</strong>lano, pags. 8-9: http://<br />

www. linux-magazine. es/ issue/ 53/<br />

008-009_Inseguridades53. pdf<br />

[8] Plataforma Peach Fuzzing: http://<br />

peachfuzzer. com/<br />

[9] Análisis Forense de Pacquetes: http://<br />

www. wired. com/ threatlev<strong>el</strong>/ 2010/ 03/<br />

packet-forensics/<br />

[10]Nikto2: http:// cirt. net/ nikto2<br />

[11]libwhisker: http:// www. wiretrip. net/<br />

rfp/ lw. asp<br />

[12]Nombres de dominios internacionalizados:<br />

http:// en. wikipedia. org/ wiki/<br />

Internationalized_domain_name<br />

[13]Packer: http:// dean. edwards. name/<br />

packer/<br />

[14]Compresor YUI: http:// dev<strong>el</strong>oper.<br />

yahoo. com/ yui/ compressor/<br />

[15]Ofuscador <strong>PDF</strong>: http:// blog.<br />

didierstevens. com/ 2008/ 04/ 29/<br />

pdf-let-me-count-the-ways/<br />

[16]Ofuscación de <strong>PDF</strong> usando getAnnots():<br />

http:// blog. fireeye. com/<br />

research/ 2010/ 01/ pdf-obfuscation.<br />

html

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!