lunes, 22 de diciembre de 2014

¡Qué no te pongan un keylogger! Controlar qué dispositivos USB conectan a tu Windows.


Ayer desde el laboratorio de Eleven Paths se puso en circulación una nueva herramienta de seguridad que permite monitorizar con Latch qué dispositivos USB se conectan a tu sistema, a la que se ha llamado Latch USB Monitor. Esto permite, mediante el uso de un servicio, que una persona pueda controlar en todo momento cuándo cualquier teclado, dispositivo de almacenamiento o webcam es conectada a Windows para, un punto de ataque cada vez más habitual en los APT (Advanced Persistent Threats), o espionaje en círculos sociales cercanos - familiares, amigos, trabajo -.




Figura 1: Controlar dispositivos USB que se conectan con Latch USB Monitor


La herramienta, al igual que Latch Event Monitor, deja que el usuario aplique políticas de respuesta ante la conexión de nuevos dispositivos USB para fortificar la seguridad de tu Windows, permitiendo crear una regla por defecto para expulsar - o solo avisar - cuando una nueva conexión se produce en el equipo.




Figura 2: Configuración de dispositivos USB en Latch USB Monitor

También se pueden crear Operaciones en Latch para identificar uno o varios dispositivos y crear excepciones especiales para ellos, como por ejemplo expulsar cualquier dispositivo USB que se conecte para recibir una alerta de seguridad vía la aplicación de Latch y luego dejar que se realicen las conexiones habituales.




Figura 3: Asociación de una conexión USB a una Operación Latch para tener granularidad



Esto podría servir a un padre para monitorizar cuándo se usa una Webcam USB - en un entorno de control parental para menores - , o para saber si alguien ha conectado un USB Rubber Ducky, ha desconectado y vuelto a conectar el teclado - para poner un"keylogger in the middle" como utiliza el protagonista de Hacker Épico para resolver el misterio - o simplemente se ha intentado cualquier ataque.



Figura 4: Keylogger USB por hardware.

Si se te ocurre alguna forma en la que utilizar Latch de forma curiosa, ya sabes que hay un concurso de plugins llamado Latch Plugin Contest en marcha con el que puedes ganar hasta 10.000 USD.


Saludos!

lunes, 15 de diciembre de 2014

¿Cómo se puede romper el anonimato en TOR?

Dentro del concepto de Deep Web, que representa todas esas partes de Internet alejadas del mainstream, existe muchas redes. Algunas de ellas como CJDNS y su Hypberboria que necesitan contar con la confianza de sus miembros para dejarte entrar, otras directamente la propia web pero usando accesos escondidos en conexiones que se abren con port knocking, por puertos privados o que necesitan de credenciales especiales y otras tan populares hoy en día como la red TOR.



Figura 1: ¿Cómo se puede romper el anonimato en la red TOR?

Esta última, la red que utiliza The Onion Routing, se construye bajo las premisas de dar anonimato y privacidad tanto a clientes como servidores, y por ello ha sido lugar habitual de activistas políticos, hackers en busca de intimidad en sus acciones y, también cibercriminales con el más variopinto conjunto de negocios, que pueden ir desde la venta de identidad, drogas, asesinos a sueldos o cosas aún peores.

Por supuesto, los cuerpos de seguridad, las agencias de inteligencia y muchos gobiernos, han querido romper en la red TOR ese anonimato y privacidad, por lo que se han visto muchísimos ataques distintos. Desde el uso de exploits en el software cliente de conexión, al conocimiento de los usuarios de la red mucho antes de que lo fueran, pasando por la colocación de nodos falsos de salida, como el que vimos hace poco que infectaba los ficheros binarios que se descargaban.



Figura 2: Esquema de funcionamiento de The Onion Routing

El propio proyecto TOR reconoció que todo el tráfico que había circulado por la red durante los seis primeros meses del año había estado en riesgo, y por tanto, el anonimato estuvo comprometido en la red TOR tanto para clientes como para servidores. Las técnicas que se usaron para romper el anonimato fueron las de la correlación pasiva de tráfico de red, técnicas que habían sido explicadas tiempo atrás en un trabajo en inglés.


Ahora, el trabajo que analizaba dichos ataques ha sido traducido al español por Juan Eljach y Gustavo Rendón, para que sea más fácil de leer por los menos duchos en la lengua inglesa. He subido una copia en formato PDF a mi cuenta de SlideShare, y la tenéis disponible aquí para su lectura.
Figura 3: Analizando la efectividad de ataques de correlación pasivos en la red de anonimato TOR


La red TOR no para de crecer. Los bancos no están cortando las conexiones a sus sistemas de e-banking, y la propia Facebook - antítesis del anonimato en favor de la socialización de la red - ha abierto ya un nodo directamente en la red TOR. Dentro de poco ya TOR va a ser mainstream, así que más te vale conocer todo lo que puedas de ella, así que después de este documento, debes leer: "Users Get Routed:Traffic Correlation on Tor by Realistic Adversaries".

Saludos Malignos!

Autor: Chema Alonso

lunes, 8 de diciembre de 2014

Como acabar con la civilización moderna en menos de un segundo

Ya que este blog va sobre tecnología voy a poner una situación de como si esta no existiera.


Quiero que os imaginéis esta situación:

Imaginaros un domingo cualquiera, una mañana. Estáis en la casa y de pronto veis que la luz se ha ido. Vuestra sorpresa aumentaría al ver que vuestro reloj de pulsera (digital) ha dejado de funcionar. Echáis mano al móvil y tampoco funciona, como si no tuviera batería de repente.

El portátil tampoco funciona ni aun con la batería. Algo extraño, ¿verdad?
Salís a la calle y veis que todo el mundo está igual. Es extraño ver que hay algunos coches en la carretera sin funcionar formando atascos, como si se hubieran parado de repente.
Es muy extraño, pero no pasa nada. Se arreglará pensáis.
Habláis un poco con los vecinos (esos que apenas conocéis pero que os cruzáis casi a diario) sobre este insólito hecho.
Dedicáis el día jugando con vuestros hijos a la luz de las velas por la noche. O si estáis con pareja será una anécdota romántica, incluso.

Al día siguiente lunes os despertáis y veis que todo sigue igual. La cosa empieza a mosquearte.

Vais al trabajo, el que viva cerca (andando porque los transportes están todos parados) y no podéis hacer nada, puesto que las máquinas no funcionan. La mayoría de supermercados no ha abierto hoy puesto que ellos funcionan con maquinas registradoras y demás. Sólo aquellos pequeños comercios y algunos chinos donde venden el fondo de almacén haciendo las cuentas con papel y lápiz.
Empieza a correr el rumor de un posible ataque o una guerra, pero vosotros no veis nada.
En las grandes ciudades es un poco peor, porque al no funcionar las bombas del suministro de agua en muchos sitios deja de suministrarse mientras en otro se dispara el caudal de agua.

Pasa un arcaido Land Rover de la Guardia Civil gritando que permanezcan en sus casas a la espera de instrucciones de la Delegación de Gobierno.

Pasa el martes y el miércoles llega y sigue igual.

Prácticamente has agotado las existencias del frigorífico que como has podido te la has apañado para comer y otras cosas que no has podido, las has tenido que tirar, puesto que tu cocina es vitrocerámica y no funciona. Empiezas a ver como la gente usa sus barbacoas para cocinar y eso que no es domingo.
Ha pasado ya una semana y la cosa empieza a ser peligrosa. Empresas como Mercadona empiezan a suministrar cosas de una manera que parece el antiguo economato. Pero ya apenas hay comida y menos aun agua potable. Los suministros no se reponen, recordad: no hay transporte.
La gente que mejor lo lleva (por decirlo de alguna forma) es la gente del campo y sobre todo los hermitaños.
A los 10 días ya sin agua ni comida... te planteas seguir esperando en la ciudad o mudarte a otro sitio pero todo el mundo está igual que tú.

¿Como ha podido ocurrir algo así?



Os lo voy a explicar, es muy fácil. Esto se remonta los años 60 cuando el ejércitos de los Estados Unidos se se preguntó que pasaría si se detona una bomba termonuclear en el espacio. Así que el 9 de julio de 1962 con el nombre clave Starfish Prime hicieron estallar una bomba de 1,44 megatones propulsada en un cohete Thor sobre el Oceano Pacífico a 400 kmts. de altura. De todo esto el público en su momento no sabia absolutamente nada, todo se hizo en secreto. A partir de esa prueba sacaron sus conclusiones.

No se lo dijeron a nadie pero Starfish Prime modificó el campo magnetico de la tierra, en concreto el cinturón de interior de Van Allen y dañó tres satélites.

De hecho por culpa de esto, ahora los satélites se tienen que construir con mucho mayor blindaje.

Mas notorio fué unos hechos extraños que ocurrieron en las islas de Hawaii, situadas casi a 1500 kmts. de distancia: se fundieron 300 farolas del alumbrado urbano, se dispararon cientos de alarmas sin la más mínima vibración.

Y esto es información desclasificada. No quiero ni pensar que habrá en la que aun es secreta.

Han tenido que pasar 331 pruebas norteamericanas mas, 200 sovieticas y unas decenas de Francia para firmar un tratado de paz "Tratado de Limitación Parcial de las Pruebas Nucleares" de 123 paises. Fundamentalmente para reducir la lluvia radictiva y mantener esta fuerza secreta en la oscuridad.




Resulta que una bomba nuclear lanzada a cierta altura produce dos hechos sumamente curiosos: el primero de ellos es una aurora boreal multicolor. De hecho este tipo de bombas se les denomina "bomba del arco iris" o HAARP" y el segundo es que frie todos los circuitos eléctricos a una zona indeterminada con 3000-5000 amperios. Prácticamente ningún aparato eléctrico sobrevive a este hecho.

Es un arma muy poderosa. Antes de entrar en guerra lanzas esto y luego entras a matar. Lo curioso del asunto es que este arma es mas efectiva para las sociedades más industrializadas. Pensadlo: así se equipararían las fuerzas sin tantos misiles guiados por gps, lasers y demás. Una escopeta y cuerpo a cuerpo.


Y si eres un moro de esos que tiene un camello para transportarse y un pequeño campo para sobrevivir no le afectaría en lo más mínimo.

¿Os imagináis la disponibilidad de un arma así en manos de un pirado religioso?


Acojona, ¿verdad?

Pues resulta que aun hay un pequeño problema. Y es que aún no saben calcular bien las zonas que puede afectar, pero lo que sí se sabe es con una bomba con suficiente fuerza puede cargarse todos los aparatitos eléctricos del planeta entero.

Ya sabéis: hay que darle las gracias a los Estados Unidos por hacer tantas pruebas y tan necesarias que nos han enseñado tanto. Tiene cojones.
No se les ocurre nada bueno a esta gente.

Aún con todo esto los EEUU y otras potencias siguen investigando y haciendo pruebas con los impulsos electromagnéticos, principalmente con fines bélicos.

Atentos a este fragmento:

Uso militar del HEMP: destruyendo la civilización a continentes.

“Los soviéticos planificaron un ataque EMP muy extenso contra los Estados Unidos y otros objetivos [...] Un ataque así causaría billones [europeos] de dólares en daños infraestructurales [...] A finales de la Guerra Fría [...] sólo la Unión Soviética tenía la capacidad de montar ataques EMP contra los Estados Unidos, y muy probablemente lo haría como el primer golpe de una lucha a muerte realizada con medios técnicos protegidos contra EMP. Las respuestas indicadas a cualquier ataque EMP eran bien claras. La capacidad soviética máxima para imponer esos ataques existe todavía en las fuerzas estratégicas de la Federación Rusa, y predigo sin duda ninguna que seguirá existiendo durante muchas décadas [...] Cualquier país que disponga de un arma nuclear del tipo de las utilizadas en la II Guerra Mundial [y un cohete capaz de transportarla al espacio] puede realizar un ataque EMP.”

–Dr. Lowell Wood, op.cit. (1999)




lunes, 1 de diciembre de 2014

Crear tu módulo de Metasploit para ShellShoc

La vulnerabilidad ShellShock ha traído un nuevo caos a Internet, miles de servidores se ven comprometidos por esta vulnerabilidad, la cual dispone de diversos CVE. Si echamos un ojo por Internet podemos observar como la vulnerabilidad ha sido explotada en diversos entornos, para explotar servidores web y meter shels, a travésde VMWare Fusion en los OS X de Apple, o para distribuir malware como Kaiten.


Figura 1: Crea tu módulo de Metasploit para Shellshock

En el congreso de seguridad informática Navaja Negra, celebrado en Albacete, yo quería que la gente que asistía al workshop de Metasploit pudiera entender y ver como se corresponden los módulos que ellos pueden configurar con el código que podemos desarrollar. Para esto quise tomar como base la vulnerabilidad, con el primer CVE, de ShellShock.

Mi idea fue desarrollar un módulo en vivo para explotar dicha vulnerabilidad, ya que era realmente sencillo realizarlo, y los asistentes podrían fácilmente guiarse, tal y como se pudo ver en el artículo de RetroMalware para controlar NetBus desde Metasploit. Es cierto que la gente de Rapid7 ya tiene sus módulos sobre esta vulnerabilidad realizada, pero mi idea era hacerlo un poco más sencillo para que cualquiera de los asistentes con nociones cero de Ruby pudieran seguirlo.


Figura 2: Cosas básicas para hacer un módulo de tipo exploit remoto



¿Qué necesitamos para llevar a cabo el módulo? En la imagen se puede ver que al menos la función de inicialización y la función exploit son necesarias. El objetivo de estos módulos son las de conseguir una sesión para controlar el equipo o realizar alguna acción sobre él, tras aprovechar una vulnerabilidad. Opcionalmente, podemos definir la función check, con la que podemos chequear que una vulnerabilidad existe en la máquina remota, siempre y cuando el módulo no sea client-side, ya que en este escenario no tiene sentido realizar un chequeo.

La función: initialize(info={})

Esta función permite inicializar valores al módulo y actualizar información que es heredada por el propio framework. Podemos entender que la información de ayuda e informativa que debemos proporcionar en los módulos de Metasploit debemos configurarla en esta función. Por ejemplo, cuando nosotros ejecutamos el comando info la información proporcionada por la consola se corresponde con el atributo description que previamente hemos definido, o la información sobre el autor, las referencias a los CVE, etcétera.

A continuación se presenta el código, cuya descripción corresponde con la del módulo de Rapid7. Simplemente es importante ver que en esta parte del código son datos a rellenar, y que estos datos son informativos. Hay que recordar que la función de inicialización puede tener más instrucciones relevantes, como veremos después.







Figura 3: Función de inicialización



Hasta aquí, no hemos tocado nada. Existe un método denominado register_options con el que podemos modificar los atributos configurables que tendrá mi módulo. Recordemos que por ser un módulo de tipo exploit remoto se heredan atributos propios del módulo, como por ejemplo RHOST, pero en muchas ocasiones nosotros querremos añadir atributos configurables para que un usuario pueda realizar otro tipo de acciones con esos parámetros.

Nosotros queremos varias cosas en nuestro módulo:


- El usuario pueda indicar cuál es la URI. Al atributo lo llamaremos TARGETURI.
- Que el usuario pueda seleccionar el método HTTP a utilizar (GET | POST). El atributo se llama METHOD.
- Que el usuario pueda indicar al exploit el path remoto que debe utilizar mediante el atributo RPATH.
- El usuario puede indicar el comando que quiere lanzar mediante el atributo COMMAND.
- Mediante la configuración del atributo TIMEOUT se indica el número de segundos para obtener respuesta de una petición HTTP.
- El atributo FULL es algo especial. Lo que queremos hacer es que si el parámetro FULL vale false, el módulo se comporte como una consola remota en la cual sólo se ejecutará la orden que se introduzca en COMMAND. Pero si el atributo FULL vale true, el módulo estará programado para lanzar una secuencia de acciones sobre el servidor remoto con el que se conseguirá subir una shellcode y obtendremos el control remoto de la máquina.
- El atributo NAMESHELLBIN será utilizado en caso de que FULL sea true, y proporciona el nombre que utilizaremos para crear el binario en la máquina remota.




Figura 4: Opciones nuevas en el módulo



En la imagen podemos ver que cada atributo aparte del nombre tiene una serie de información extra introducida en un listado. El primer campo true o false indica si el atributo será requerido para ejecutar el módulo o no. Cuando se ejecuta un show options vemos una columna denominada required, dónde los atributos tienen valor yes o no. El segundo campo del listado es la descripción del atributo, mientras que el tercero es el valor por defecto que tiene ese parámetro.



Figura 5: Atributos del módulo visto con show options



La función: request(command)

Antes de empezar a destripar las funciones check y exploit vamos a necesitar una función request para agilizar y no repetir código en el envío de peticiones. Esta función será utilizada para explotar la vulnerabilidad de ShellShock en su versión para Apache mod_cgi.

La función tiene una implementación básica, utiliza el método send_request_cgipara enviar la petición HTTP. Se le pasa un parámetro a la función que es el comando que se quiere ejecutar en remoto, si la vulnerabilidad está presente en el servidor remoto. A continuación se muestra el código sencillo de la función.





Figura 6: Código de request



El atributo TARGETURI, METHOD y TIMEOUT, explicados anteriormente, son utilizados para la generación del paquete.

La función: check()

La función check permitirá comprobar si el servidor remoto es vulnerable sin necesidad de dañar o aprovecharse del sistema remoto. Es cierto que check lo que está realizando es una ejecución de comandos remota, pero lo que ejecutaremos será un simple echo hola, que intentaremos ver reflejado en el body de la respuesta.


Figura 7: Código de check



Como puede verse en la función se llama a request con el comando echo hola. Si la respuesta incluye hola en el cuerpo es vulnerable. Tenemos que tener cuidado, porque si, lógicamente, la respuesta incluyera el texto “hola” porque la web tuviera dicha palabra nos aparecería como vulnerable. Lo ideal sería generar un hash o un texto que fuera “imposible” encontrar en la respuesta.

La función: exploit()

Esta función la tenemos pensada para dos cosas en esta prueba de concepto. La primera es que nos permita ejecutar comandos, por así decirlo línea a línea o petición a petición con el servidor. El segundo modo de funcionamiento se tiene pensado para que automáticamente genere las peticiones necesarias realizando lo siguiente:


1. Generar una shellcode, que definirá el usuario en el atributo PAYLOAD antes de lanzar el módulo, es decir, antes de lanzar el método exploit.


2. Esta shellcode se transforma a base64 con la intención de poder “pegarla” con un echo en un archivo del servidor remoto. La instrucción a ejecutar en remoto sería algo tal que así echo shellcode_en_base_64 > /var/tmp/fichero_almacena_shellcode_base64.


3. Una vez se dispone de la shellcode en un fichero en base64 se realiza su transformación a binario y se le cambia los permisos para que el nuevo binario pueda ejecutar.


4. Por último, se realiza una petición para ejecutar ese binario, el cual lanzará la shellcode. En función del tipo de shellcode se realizará unas acciones u otras. Automáticamente el módulo de Metasploit nos lanzará por debajo el handler con el que podremos gestionar de forma trasparente las conexiones con las shellcode.






Figura 8: Generación, subida y ejecución de Shellcode, Toma de control



En el código se puede ver como se genera el payload mediante la instrucciónpayload.encoded_exe. Este payload se codifica en base64 almacenándolo en la variable enc. Es importante realizar el cambio de los “\n” en el base64 para que lashellcode no se rompa.

Después podemos observar las 4 peticiones que se realizan con lo comentado anteriormente. Una vez se termina la cuarta petición la shellcode se genera y se obtiene el control remoto de la máquina, si el payload seleccionado es para tomar el control, por ejemplo un meterpreter.

Configuración y ejecución

Ahora vamos a probar el módulo programado, cuyo código se puede encontrar en mi github. La configuración para probar el código en modo FULL a true, será el siguiente:


- FULL = true.
- NAMESHELLBIN = poc.
- RHOST = dirección IP servidor remoto, en este caso 192.168.56.102.
- TARGETURI = URI remota, en este caso /cgi-bin/vuln.cgi.
- PAYLOAD = linux/x86/meterpreter/reverse_tcp.
- LHOST = dirección IP máquina del atacante.

Tras lanzar el módulo con la configuración podemos obtener el control remoto de la máquina, tal y como se puede ver en la imagen.





Figura 9: Configuración y obtención del control remoto a través de ShellShock

Si elegimos la opción FULL = false, realmente podemos seleccionar en COMMANDque binario lanzar, y con RPATH cuál es la ruta remota dónde se encuentra. En el taller de Navaja Negra lo estuvimos viendo, y con las prisas las cosas no quedaron del todo claras, por eso decidí hacer este post.

Autor: Pablo González Pérez (@pablogonzalezpe)
Escritor del libro "Metasploit para Pentesters" 3ª Ed.