martes, 27 de octubre de 2015

Sincronización de tiempos en Mac OS X

Pega un vistazo a los otros posts de esta serie:

[4] Sincronización de tiempos en Microsoft
[6] Atacando la Infraestructura de Clave Pública (PKI)
[7] Otros ataques
[8] Herramientas de ayuda

La semana pasada mostrabamos como funcionaba Delorean y como podría ser usado para manipular respuestas NTP. Sin embargo, los diferentes sistemas operativos sincronizan su reloj de forma ligeramente diferente.

Descargo de responsabilidad: Toda la información se ha obtenido de una forma empirica, realizando pruebas, y en un periodo de tiempo concreto, con lo que puede haber cambiado en el momento de leer este artículo.

Los Mac OS X anteriores a Mavericks usaban una sincronización de reloj muy sencilla. Un servicio NTPd se ejecuta y sincroniza el tiempo cada 9 minutos. Ninguna restricción de seguridad se aplica en este servicio, con lo que sería posible atacarlo usando Delorean.

$ tcpdump -i eth0 -nn src port 123
09:02:18.166708 IP 192.168.1.100.123 > 17.72.148.53.123: NTPv4, Client, length 48
09:11:20.059792 IP 192.168.1.100.123 > 17.72.148.53.123: NTPv4, Client, length 48
09:20:17.951361 IP 192.168.1.100.123 > 17.72.148.53.123: NTPv4, Client, length 48


Sin embargo, Apple cambio la manera de funcionar de este servicio. En la actualidad, NTPd aún es utilizado en las versiones modernas de Mac OS X, pero ya no cambia la hora por si mismo. En su lugar, la diferencia de tiempo se guarda en /var/db/ntp.drift , y hay otro servicio llamado "pacemaker" que debería comprobar su valor y cambiar el reloj si es necesario.
Este servicio tiene algunas ventajas. Por ejemplo, adapta la cantidad de peticiones NTP en función de si el equipo está conectado a corriente o funciona con baterías. Otra diferencia importante es que los cambios de reloj no se aplican en un solo paso. El reloj se acelera o se ralentiza para corregir la fecha, pero sin grandes saltos. No implementa tampoco ningún otra función de seguridad, con lo que también podría ser atacado utilizando Delorean.

Aunque no debería ser un problema, nos dimos cuenta que NTPd no estaba funcionando correctamente en éstas últimas versiones de Mac OS X, con lo que la sincronización de tiempos nos estaba funcionando. Podemos encontrar gente comentando este tema en Internet ¿Quiere esto decir que los Mac OS X modernos no son vulnerables al ataque con Delorean? La respuesta es NO. Peguemos un vistazo al script /usr/libexec/ntpd-wrapper :


Como podéis ver, Mac OS X ejecuta el comando sntp (simple NTP) en el arranque, antes de ejecutar el servicio NTPd. Este comando no está afectado por el mismo fallo, con lo que podríamos interceptar la sincronización y realizar un ataque con Delorean cuando Mac OS X arranca,

Existe otra manera de explitar este mecanismo de sincronización que implementa Mac OS X. Cuando un usuario abre el menú "Date & Time Preferences", el sistema operativo sincroniza automáticamente la hora sin el conocimiento del usuario, con lo que también podríamos usar Delorean en este escenario.


En los proximos artículos mostraremos como podemos utilizar esta vulnerabilidad para interceptar comunicaciones SSL, tal y como presentamos en DEF CON recientemente.

miércoles, 21 de octubre de 2015

NTP MitM con Delorean

Hace alrededor de un año y medio empecé una investigación sobre como los ordenadores sincronizaban sus relojes internos, y como esto podría usarse para atacar protocols o servicios conocidos que se ejecutan en los sistemas operativos. Como resultado, presente mis hallazgos en varias conferencias de seguridad como BlackHat Europe 2014, RootedCON 2015, DEF CON 23 y Navaja Negra / ConectaCON 2015.


Hoy, 21 de Octubre de 2015, es la fecha en la que Marty McFly fue al futuro en la segunda parte de la alucinante saga "Regreso al Futuro", así que no creo que haya una fecha mejor para empezar a publicar todos los detalles de la investigación.

[6] Atacando la Infraestructura de Clave Pública (PKI)
[7] Otros ataques
[8] Herramientas de ayuda

Como veremos en los sucesivos artículos, todos los fabricantes de sistemas operativos que he probado utilizan el protocol NTP (Network Time Protocol) para mantener su reloj interno actualizado a una hora correcta, lo cual es muy importante para algunos protocolos de autenticación entre otros. La mayoría de ellos no despliegan el servicio de forma segura, haciendo vulnerable a ataques de Man-in-the-Middle.

Para explotar esta vulnerabilidad, desarrollé una herramienta a la que llamé DELOREAN. Delorean es un servidor NTP escrito en python, de código abierto y  disponible en GitHub (toda contribución es bienvenida). Tomé prestadas algunas lineas de código de la herramienta ntpserver de kimifly y, por supuesto, ha sido incluido en los créditos como correspondía.

Lo que hace a Delorean diferente y útil es que podemos configurar sus flags para hacer que funcione de una manera diferente a como lo haría un servidor NTP tradicional. Básicamente, podemos configurarlo para que mande respuestas manipuladas, de forma similar a como hace el módulo de Metasploit fakedns.

$ ./delorean.py -h
Usage: delorean.py [options]

Options:
-h, --help show this help message and exit
-i INTERFACE, --interface=INTERFACE Listening interface
-p PORT, --port=PORT Listening port
-n, --nobanner Not show Delorean banner
-s STEP, --force-step=STEP Force the time step: 3m (minutes), 4d (days), 1M (month)
-d DATE, --force-date=DATE Force the date: YYYY-MM-DD hh:mm[:ss]
-x, --random-date Use random date each time


Tenemos los típicos flags para el interface (-i) y puerto (-p), que nos ayudarán a poner a la escucha el servicio exactamente donde queramos. El flag -n simplemente esconde el Delorean ASCII del banner :)
                                    _._                                          
                               _.-="_-         _                                 
                          _.-="   _-          | ||"""""""---._______     __..    
              ___.===""""-.______-,,,,,,,,,,,,`-''----" """""       """""  __'   
       __.--""     __        ,'                   o \           __        [__|   
  __-""=======.--""  ""--.=================================.--""  ""--.=======:  
 ]       [w] : /        \ : |========================|    : /        \ :  [w] :  
 V___________:|          |: |========================|    :|          |:   _-"   
  V__________: \        / :_|=======================/_____: \        / :__-"     
  -----------'  ""____""  `-------------------------------'  ""____""  

Podemos user Delorean de varias formas, pero vamos a centrarnos en las más útiles. Hay algunas ataques que han resultado no ser muy interesantes después de desarrollarlos, pero todavía están implementados. Quizá los acabe quitando en el futuro, ya que requieren algunas dependencias como scapy que de otro modo podríamos ahorrarnos.

Todavía es pronto para hablar de como sincronizan los sistemas operativos, así que de momento probaremos Delorean utilizando la herramienta "ntpdate":

$ ntpdate -q 192.168.1.2
server 192.168.1.2, stratum 2, offset 97372804.086845, delay 0.02699
20 Oct 06:05:45 ntpdate[881]: step time server 192.168.1.2 offset 97372804.086845 sec


Por defecto (sin flags), Delorean responde con una fecha en la que coincida el mismo día del mes y de la semana que hoy, pero al menos 1000 días en el futuro. Esto es debido a que era útil para los ataques contra HSTS, tal y como veremos en próximos artículos.

# ./delorean.py -n
[19:44:42] Sent to 192.168.10.113:123 - Going to the future! 2018-08-31 19:44
[19:45:18] Sent to 192.168.10.113:123 - Going to the future! 2018-08-31 19:45


Podemos configurar un salto relativo desde la fecha actual usando el flag "step" (-s). Los saltos relativos pueden ser definidos como 10d (diez días en el futuro), -2y (dos años en el pasado), etc:

# ./delorean.py -s 10d -n
[19:46:09] Sent to 192.168.10.113:123 - Going to the future! 2015-08-10 19:46
[19:47:19] Sent to 192.168.10.113:123 - Going to the future! 2015-08-10 19:47


También podemos configurar una fecha específica, y Delorean responderá siempre con la misma fecha:

# ./delorean.py -d ‘2020-08-01 21:15’ -n
[19:49:50] Sent to 127.0.0.1:48473 - Going to the future! 2020-08-01 21:15
[19:50:10] Sent to 127.0.0.1:52406 - Going to the future! 2020-08-01 21:15


Hay otro ataque llamado "Skimming Attack" que puede ser utilized en ciertas configuraciones, pero lo veremos en profundidad cuando hablamos sobre como los sistemas operativos de Microsoft sincronizan, aunque también podrían resultar útiles en ciertas configuraciones de otras plataformas.

martes, 8 de septiembre de 2015

SANS SEC-660: "Advanced Penetration Testing, Exploit Writing and Ethical Hacking" en Madrid

Como probablemente sepáis, he estado bastante involucrado con el SANS Institute desde 2010, cuando fui por primera vez Mentor Actualmente soy Community Instructor del SANS y he estado impartiendo el curso SEC-560 "Network Penetration Testing, Exploits and Ethical Hacking" varias veces en España.


El próximo Noviembre, en Madrid (España), tendrás la oportunidad de dar un paso adelante en tus habilidades como Penetration Tester con campos y técnicas no cubiertas en el SEC-560. Tal y como se puede leer en la web del SANS: SEC-660 "Advanced Penetration Testing, Exploit Writing and Ethical Hacking" es un curso diseñado como progresión lógica para aquellos alumnos que cursaron el SEC-560, o para aquellas personas que ya cuentan con experiencia realizando Penetration Testing. Los temas que se cubren incluyen ataques contra control de acceso a la red (NAC), manipulación de VLANs, escape de entornos restringidos en Windows y Linux (estilo kiosco), ataques criptográficos, fuzzing, escritura de exploits y evasión de las protecciones más comunes de los sistemas operativos como ASLR, DEP, Canaries, etc, y mucho más.


A pesar de no ser un curso enfocado exclusivamente al desarrollo de exploits como lo es el SEC-760, la parte de exploiting del SEC-660 (dos días completos) is una aproximación perfecta para aquellos Pentesters que quieran una visión en profundidad de como los procesos y la memoria son manejadas en Windows y Linux, y como explotar algunos fallos habituales, lo cual puede resultar muy útil cuando no hay un exploit público disponible o cuando éste no funciona en tu entorno específico.

Además, incluso estando acostumbrado al "estilo SANS", el SEC-660 es uno de los cursos con más prácticas y ejercicios que he visto. Hay docenas de ejercicios basados en situaciones de la vida real que podríamos encontrarnos en cualquiera de los próximos pentests que hagamos.

¿Interesado? Reservate las siguientes fechas: 2-7 de Noviembre en Madrid. Solo necesitas ponerme un correo a jselvi{-at-}pentester.es y poner en copia a sans{-at-}one-esecurity.com , y nosotros te explicaremos como se tiene que proceder. Recuerda que todo el material del curso se encuentra en Inglés, pero las clases serán impartidas en Español.

¿Bailamos "Pentesteamos"?

Más información sobre el SEC-660 AQUÍ.
Más información sobre otros cursos y precios AQUÍ.