#CyberCamp18
Wi-Fi Shell> indetectableDe cómo programar una shell oculta en un canal secundario Wi-Fi
mediante Python y Scapy Dot11…
by Yago Hansen @yadox
#CyberCamp18
1.Python como lenguaje de programación
2.Scapy como librería de parseo y manipulación de paquetes de red
3.Hardware para pentesting 802.11
4.El estándar 802.11. Tramas y paquetes
5.Scapy Dot11. Primeros pasos. Mi primer script
6.Monitor.sh script para iniciar modo monitor
7.Análisis y estructura de la shell Wi-Fi.
8.PoC time!
9.Conclusiones. Preguntas. Bye!
Índice
#CyberCamp18Yago Hansen @yadox
Hacker ético, experto en ingeniería de sistemas y redes, con amplia experiencia en
infraestructuras de red de todos los tamaños. Durante su trayectoria profesional ha realizado
proyectos de ámbito internacional para grandes corporaciones en los sectores banca,
aseguradoras, operadoras de telecomunicaciones, departamentos de seguridad del Estado,
etc. En las últimas décadas se ha especializado ampliamente en tecnologías inalámbricas,
dirigiendo con éxito numerosos proyectos para la planificación, implementación y auditoría de
seguridad.
Con su compañía WiFense ha creado un sistema de interceptación para una de las mayores
corporaciones multinacionales de Inteligencia en con sede en Israel. Desde hace algunos
años, es formador habitual en materia de seguridad para servicios de inteligencia, Defensa y
Seguridad Nacional para muchos gobiernos internacionales.
En el campo de la seguridad realiza intervenciones habituales en medios de prensa, así como
ponencias, conferencias y ciclos formativos en varias universidades y congresos. Co-fundador
de Mundo Hacker, grupo con el que ha organizado programas en radio, streaming, podcast,
conferencias, así como programas en la TV pública (Telecinco, DiscoveryMax, TVE La Dos y
Trece en Colombia). Cuenta con numerosas publicaciones y artículos en revistas
especializadas, además de colaborar con la editorial Ra-Ma, a través de la cual ha escrito y
publicado varios libros sobre seguridad informática.
#CyberCamp18Python
VENTAJAS:Lenguaje de programación por excelencia para hacking
Ideal para PoC
Capacidad y funcionalidad ilimitada gracias a librerías
Se adapta a los tiempos con aportaciones de la comunidad
Mucha documentación
DESVENTAJAS:Falta de eficiencia
Multi-threading fallido
Multiplataforma fallida
#CyberCamp18Scapy
Qué es Scapy?Librería de manipulación y parseo de paquetes de red
Qué ofrece Scapy?Gran cantidad de disectores y protocolos. Dot11.
Gran cantidad de funciones propias
Disponible para Python 2-3
Qué no ofrece Scapy?Poca documentación
Nula documentación en el protocolo Dot11
#CyberCamp18Scapy. Requisitos
Hardware:Adaptador Wi-Fi modo monitor con inyección
Recomendada: TP-LINK TL-WN722N versión 1
OS:Linux OS, Kali Linux (recommended)
Python (2.5 - 3)
Scapy library
Dot11 class
Packet manipulation library
#CyberCamp18El standard 802.11
Qué es 802.11?Grupo de estándares de comunicaciones inalámbricas desarrollados por IEEE
Basado en el estándar Ethernet 802.3
Gran cantidad de modificaciones y nuevos estándares para corregir problemas, mejorar
la seguridad o ampliar las capacidades.
Creadores de los protocolos que regulan Wi-Fi
Qué es Wi-Fi?La marca comercial gestionada por Wi-Fi Alliance
El certificador de la tecnología relacionada con Wi-Fi
#CyberCamp18802.11 – Tramas
OTHER HEADERSRADIOTAP
#CyberCamp18802.11 – Usa Wireshark
#CyberCamp18Disección de un paquete
#CyberCamp18Disección de un paquete (I)
###[ 802.11 RadioTap ]###
version = 0
pad = 0
RadioTap_len= 36
present = TSFT+Flags+Rate+Channel+dBm_AntSignal+b14+b29+Ext
TSFT = 2080
Flags = 25
Rate = 126
Channel = 14
Channel_flags= 2
dBm_AntSignal= 0
RX_Flags = 4096
Radiotap
HEADER
OTHER HEADERSRADIOTAP
#CyberCamp18Disección de un paquete (II)
BEACON###[ 802.11 ]###
subtype = 8L
type = Management
proto = 0L
FCfield =
ID = 0
addr1 = ff:ff:ff:ff:ff:ff
addr2 = 00:1a:2b:dd:dd:f6
addr3 = 00:1a:2b:dd:dd:f6
SC = 46256
addr4 = None
###[ 802.11 Beacon ]###
timestamp = 3700879053682
beacon_interval= 100
cap = short-slot+ESS+privacy
#CyberCamp18Disección de una trama (III)
###[ 802.11 Information Element ]###
ID = SSID
len = 9
info = ‘WLAN_3BF2’
###[ 802.11 Information Element ]###
ID = Rates
len = 8
info = ‘\x82\x84\x8b\x96$0Hl’
###[ 802.11 Information Element ]###
ID = DSset
len = 1
info = ‘\x01’
BEACON
#CyberCamp18Primeros pasos con Scapy
#!/bin/bash
# by @yadox (2018)
channel=11
i=0
echo "Stopping conflicting services..."
airmon-ng check kill >/dev/null 2>&1
sleep 2
echo "Changing regdomain to BO..."
iw reg set BP
for phy in $(ls -v /sys/class/ieee80211/ | grep phy) ; do
order="$(echo $phy | tr -dc '0-9')"
if [ ! -d "/sys/class/net/mon$order" ] ; then
iw phy $phy interface add "mon$order" type monitor >/dev/null 2>&1
sleep 1
ifconfig "mon$order" down 2>/dev/null
macchanger -A "mon$order" >/dev/null 2>&1
sleep 1
ifconfig "mon$order" up >/dev/null 2>&1
sleep 1
…
monitor.sh
#CyberCamp18Primeros pasos con Scapy
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from scapy.all import *
ap_list = [ ]
def PacketHandler(pkt) :
if pkt.haslayer(Dot11) :
if pkt.type == 0 and pkt.subtype == 8 :
if pkt.addr2 not in ap_list :
ap_list.append(pkt.addr2)
print "AP MAC: %s with SSID: %s " %(pkt.addr2, pkt.info)
sniff(iface="mon0", prn = PacketHandler)
scapytest.py
#CyberCamp18Manos a la obra
server.py
Escucha permanentemente en busca de órdenes.
Busca tramas de tipo Beacon dirigidas a una MAC especificada.
Cuando recibe este beacon, extrae el comando a ejecutar del IE
SSID y lo ejecuta.
Manda la salida del comando de vuelta en formato de trama Probe
request dirigida a la MAC especificada.
La salida se parte en campos de 252 bytes, se codifica en base64
y se encapsula en 5 elementos IE para no sobrepasar el MTU.
#CyberCamp18Manos a la obra
client.py
Lee la entrada del usuario, que introduce un comando a
ejecutar en el servidor.
Envía el comando a ejecutar en forma de trama Beacon
dirigida a la MAC especificada. Utiliza codificación base64.
Tras enviar la trama, se queda a la escucha en busca de una
trama Probe Request dirigida a la MAC utilizada para el grupo.
Cuando recibe la trama con la salida del comando, se extrae
de los 5 IE, se une y se decodifica en base64 y se muestra y
vuelve al prompt del sistema.
Se emula una shell.
#CyberCamp18Manos a la obra
server.py
Escucha permanentemente en busca de
órdenes.
Busca tramas de tipo Beacon dirigidas a una
MAC especificada.
Cuando recibe este beacon, extrae el
comando a ejecutar del IE SSID y lo ejecuta.
Manda la salida del comando de vuelta en
formato de trama Probe request dirigida a
la MAC especificada.
La salida se parte en campos de 252 bytes,
se codifica en base64 y se encapsula en 5
elementos IE para no sobrepasar el MTU.
#CyberCamp18Manos a la obra
client.py
Lee la entrada del usuario, que
introduce un comando a ejecutar
en el servidor.
Envía el comando a ejecutar
en forma de trama Beacon
dirigida a la MAC especificada.
Utiliza codificación base64.
Tras enviar la trama, se queda a
la escucha en busca de una
trama Probe Request dirigida a
la MAC utilizada para el grupo.
Cuando recibe la trama con la
salida del comando, se extrae de
los 5 IE, se une y se decodifica
en base64 y se muestra y vuelve
#CyberCamp18https://github.com/yadox666
#CyberCamp18Conclusiones
Si quieres comenzar como newbie
–usa herramientas de terceros
Si quieres ser un hacker de verdad
–estudia Python
Si quieres ser una estrella del Rock
–estudia ANSI C
Si te gustan las redes de datos
–estudia protocolos de red
–estudia Scapy
Si la vida te da limones
–Hazte una limonada…
Si quieres ser el mejor
–compra mi libro ;-)
–Sígueme en Twitter: @yadox
SOLO HOY OFERTA
20 €