Andrés Tarasco – Ataques dirigidos con APTs Wi-Fi [Rooted CON 2014]

Post on 12-Jan-2015

432 views 0 download

description

 

Transcript of Andrés Tarasco – Ataques dirigidos con APTs Wi-Fi [Rooted CON 2014]

1Rooted CON 2014 6-7-8 Marzo // 6-7-8 March

W{ireless|onderful}

eXfiltration Protocol

Andrés Tarascó - @atarasco

2Rooted CON 2014 6-7-8 Marzo // 6-7-8 March

¿Qué es un APT?

Es un malware, algo especial:– Dirigido a personas, grupos u organismos.– Puede hacer uso de 0days.– Indetectable por AV.– Intenta pasar desapercibido mucho tiempo

¿Porqué un APT?– Infiltración, acceso remoto, canales

encubiertos, silenciosos, ¿Indetectables?

3Rooted CON 2014 6-7-8 Marzo // 6-7-8 March

¿Quién usa APTs?

Mafias / Criminales.– Infiltración y robo de información confidencial.

Gobiernos– Ejercito y agencias de 3 siglas.

Empresas– Espionaje industrial.

Stuxnet, duku, flame, red october, careto, Icefog, Gauss,…

4Rooted CON 2014 6-7-8 Marzo // 6-7-8 March

Uso de APTs en pentest

Selección de objetivos.

Análisis de canales de infección

Evaluación de medias preventivas.

Evaluación de mecanismos de filtrado.

Descubrimiento de puntos de entrada

Descubrimiento de puntos de salida.

5Rooted CON 2014 6-7-8 Marzo // 6-7-8 March

Canales de propagación

Pasivo– Memorias USB , Infección de ficheros

Activo– Exploiting

• Java/adobe/browser/0days

– Email y documentos adjuntos• PDF/ Macros / ..

– Descubrimiento de red y dispositivos.

6Rooted CON 2014 6-7-8 Marzo // 6-7-8 March

Capacidades de un APT básico

Comunicación.– Directa (conexión TCP / UDP)– HTTP (con auto descubrimiento de gateway)

• Exfiltración en cabeceras HTTP o en el cuerpo• Adquisición de credenciales de acceso

– DNS• Transferencia de zona o registros CNAME,TXT,…

Cifrado– SSL / TLS / CBC / propietario

7Rooted CON 2014 6-7-8 Marzo // 6-7-8 March

Limitaciones en toma de control

El equipo infectado no puede ser accedido.– Entorno securizado– Filtrado por listas blancas de navegación.– Resolución DNS restringida.– No dispone de una conexión de red activa.

Necesidad de buscar canales alternativos

8Rooted CON 2014 6-7-8 Marzo // 6-7-8 March

¿Alternativas? ;-)

Cámara: ¿Código morse?

Sonido: Badbios? ;)

Bluetooth: Distancia reducida.

¿Qué tal WiFi?– Disponible en la mayoría de los dispositivos– 10 Km en condiciones ideales.

9Rooted CON 2014 6-7-8 Marzo // 6-7-8 March

Fundamentos de un APT WiFi

Cómo funciona un APT WiFi por Hardware– Keelog, teclado modificado,…

Exfiltración por software:– Agente APT:

• Probe request: Pregunta la disponibilidad de redes• Disponibilidad de la API (ejemplo WLANAPI) – Asincrona • Viable tanto sin conexión como conectados a una red

segura.

– Servidor C&C del APT:• Probe response: Publica un SSID• Software en modo monitor con capacidad de inyección.

10Rooted CON 2014 6-7-8 Marzo // 6-7-8 March

Fundamentos de un APT WiFi

Probe Request -------- ¿Estas ahí?

Si ----------------- Probe Response

Probe Request -------- ¿ Qué hago?

Dame una shell----------------- Probe Response

Probe Request -------- Enviando stdout/stderr

Enviando stdin----------------- Probe Response

La información se envía en IE (Information Elements)

11Rooted CON 2014 6-7-8 Marzo // 6-7-8 March

WXP: Resumen

Protocolo de transporte orientado a conexión

API: conectar-escuchar, leer-escribir y cerrar

Proceso de comunicación

Three-way-handshake

Gestión de conexiones asíncronas.

Seis tipos de PDU (packet data unit)

12Rooted CON 2014 6-7-8 Marzo // 6-7-8 March

WXP: Resumen (II)

13Rooted CON 2014 6-7-8 Marzo // 6-7-8 March

WXP: API

int wxp_init (wxp_addr_t, const p_wxp_backend_t, void *);

p_wxp_state_t wxp_connect (wxp_addr_t);

p_wxp_state_t wxp_listen (wxp_addr_t);

int wxp_read (p_wxp_state_t, void *, size_t);

int wxp_write (p_wxp_state_t, const void *, size_t);

int wxp_close (p_wxp_state_t);

14Rooted CON 2014 6-7-8 Marzo // 6-7-8 March

WXP: PDU

Todos los campos están en el orden de la red (big-endian)

15Rooted CON 2014 6-7-8 Marzo // 6-7-8 March

WXP: PDU (II)

Session ID: número aleatorio negociado entre cliente y servidor.

PDU-TYPE: tipo de paquete de exfiltración.– WXP_TYPE_SYN, WXP_TYPE_SYNACK, WXP_TYPE_ACK,

WXP_TYPE_DATA, WXP_TYPE_REPEAT, WXP_TYPE_RST

Scramble: Diferencia paquetes duplicados

Seq: Número de secuencia

Count: Número de ACKs y REPEATs enviados.

New sessid: ID de sesión ofrecido por el servidor.

Checksum: suma de comprobación

16Rooted CON 2014 6-7-8 Marzo // 6-7-8 March

WXP: Establecimiento de la conexión

17Rooted CON 2014 6-7-8 Marzo // 6-7-8 March

WXP: Transmisión

INPUT: Paquetes listos para ser leídos por wxp_read.

OUTPUT: Paquetes listos para ser enviados al covert channel.

INCOMING: Paquetes recibidos por el covert channel que han llegado fuera de orden.

OUTCOMING: Paquetes que se han enviado al covert channel pero no han sido confirmados todavía.

ACK: Números de secuencia de paquetes recibidos.

18Rooted CON 2014 6-7-8 Marzo // 6-7-8 March

WXP: Transmisión (II)

Temporizador de notificaciones de recepción.– WXP_TYPE_ACK – Notificación por rangos descartada.

Temporizador de paquetes perdidos– WXP_TYPE_LOST

Gestión de colas de recepción.– INCOMING <-> INPUT

19Rooted CON 2014 6-7-8 Marzo // 6-7-8 March

WXP: Transmisión (III)

20Rooted CON 2014 6-7-8 Marzo // 6-7-8 March

WXP: control de flujo con histéresis

Para no saturar el canal, se debe ajustar la velocidad de envío con la velocidad de confirmación.

Control de flujo con histéresis: si hay más de Nlock paquetes pendientes de confirmar por el extremo remoto, wxp_write se bloquea hasta que se confirmen al menos Nunlock, con Nlock > Nunlock

21Rooted CON 2014 6-7-8 Marzo // 6-7-8 March

WXP: control de flujo con histéresis (II)

22Rooted CON 2014 6-7-8 Marzo // 6-7-8 March

WXP: cierre de conexión.

El cierre de sesión se inicia enviando un paquete de tipo WXP_TYPE_RST.

Dicho paquete puede llegar fuera de orden, por lo que el receptor lo ignora hasta que llegan todos los paquetes intermedios. Cuando llega, lo confirma (ACK) y le responde con otro RST.

El proceso que inicia el cierre espera a la confirmación del RST remoto antes de cerrar, con cierto timeout (así se asegura que se envían todos los paquetes pendientes).

Si se supera dicho timeout, se cierra igualmente.

23Rooted CON 2014 6-7-8 Marzo // 6-7-8 March

WXP: complejidad del código.Las primeras pruebas se hicieron sobre UDP, pero…– Ponerlo encima de exfiltración wifi mediante probe requests,

un método extraordinariamente lento para comunicarse.

Código aún experimental.– Pero es completamente funcional

Gran número de controles para situaciones anómalas.– Paquetes perdidos– Paquetes desordenados– Paquetes persistentes– Cache de redes WLAN API

Depuración tediosa– Errores del driver de Airpcap.– Conexión de debugger a cliente/servidor

24Rooted CON 2014 6-7-8 Marzo // 6-7-8 March

Detalles de WXP

Velocidad relativamente baja– 1k/s

Detección de WXP: Anomalías– Tasa elevada de Probe Requests / Probe

Responses– Sólo lo vamos a ver si monitorizamos la red– Interferencias– Saturación del canal de comunicaciones.

25Rooted CON 2014 6-7-8 Marzo // 6-7-8 March

Mejoras

Agente WXP– Monitor mode driver ( Acrylic WiFi NDIS )– Raw packets injection (Acrylic NDIS v2.0)

Atacante C&C :– Agregación de canales WiFi– Portar a linux / ddwrt/..

General:– Qos– Agrupación de PDUs

26Rooted CON 2014 6-7-8 Marzo // 6-7-8 March

THE END

WXP @github

Agradecimientos:– @Tarlogic, especialmente a @BatchDrake– @RootedCon