Evil Twin EAP-TLS

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ

EAP-TLS๋Š” WPA2/3-Enterprise์—์„œ ์ผ๋ฐ˜์ ์œผ๋กœ ์„ ํƒ๋˜๋Š” โ€œsecureโ€ ์˜ต์…˜์ด์ง€๋งŒ, ํ‰๊ฐ€ ์ค‘์— ๋‘ ๊ฐ€์ง€ ์‹ค์šฉ์ ์ธ ์•ฝ์ ์ด ์ž์ฃผ ๋ฐœ๊ฒฌ๋ฉ๋‹ˆ๋‹ค:

  • Unauthenticated identity leakage: outer EAP-Response/Identity๋Š” TLS ํ„ฐ๋„์ด ๊ตฌ์ถ•๋˜๊ธฐ ์ „์— ํ‰๋ฌธ์œผ๋กœ ์ „์†ก๋˜๋ฏ€๋กœ, ์‹ค์ œ ๋„๋ฉ”์ธ ์‚ฌ์šฉ์ž ์ด๋ฆ„์ด ๋ฌด์„ ์ƒ์—์„œ ์ข…์ข… leak๋ฉ๋‹ˆ๋‹ค.
  • Broken client server-validation: supplicant๊ฐ€ RADIUS ์„œ๋ฒ„ ์ธ์ฆ์„œ๋ฅผ ์—„๊ฒฉํ•˜๊ฒŒ ๊ฒ€์ฆํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒฝ๊ณ ๋ฅผ ํด๋ฆญํ•ด์„œ ๋„˜์–ด๊ฐ€๋„๋ก ํ—ˆ์šฉํ•˜๋ฉด, self-signed cert๋ฅผ ์‚ฌ์šฉํ•˜๋Š” rogue AP๊ฐ€ ์—ฌ์ „ํžˆ ํ”ผํ•ด์ž๋ฅผ ์˜จ๋ณด๋”ฉํ•  ์ˆ˜ ์žˆ์–ด mutual TLS๊ฐ€ ์ผ๋ฐฉํ–ฅ TLS๋กœ ๋ฐ”๋€” ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Unauthenticated EAP identity leakage / username enumeration

EAP๋Š” TLS๊ฐ€ ์‹œ์ž‘๋˜๊ธฐ ์ „์— ์•„์ด๋ดํ‹ฐํ‹ฐ ๊ตํ™˜์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์™ธ๋ถ€ ์•„์ด๋ดํ‹ฐํ‹ฐ๋กœ ์‹ค์ œ ๋„๋ฉ”์ธ ์‚ฌ์šฉ์ž ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋ฉด, RF ๋ฒ”์œ„ ๋‚ด์˜ ๋ˆ„๊ตฌ๋‚˜ ์ธ์ฆ ์—†์ด ๊ทธ๊ฒƒ์„ harvestํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Passive harvest workflow

# 1) Park on the right channel/BSSID
airodump-ng -i $IFACE -c $CHAN --bssid $BSSID

# 2) Decode EAP frames and extract identities
# Trigger a client connection (e.g., your phone) to see the leak
tshark -i "$IFACE" -Y eap -V | grep "Identity: *[a-z]\|*[A-Z]\|*[0-9]"

Impact: ๋น ๋ฅด๊ณ  ์ธ์ฆ ๋ถˆํ•„์š”ํ•œ username ์ˆ˜์ง‘ โ†’ password spraying, phishing, account correlation์— ์—ฐ๋ฃŒ๋ฅผ ๊ณต๊ธ‰ํ•จ. Worse when usernames match email addresses.

TLS 1.3 ๊ฐœ์ธ ์ •๋ณด ๋ณดํ˜ธ vs ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ ๊ฒŒ์ž„

TLS 1.3์€ client certs์™€ ๋Œ€๋ถ€๋ถ„์˜ handshake metadata๋ฅผ ์•”ํ˜ธํ™”ํ•˜๋ฏ€๋กœ, supplicant๊ฐ€ ์‹ค์ œ๋กœ TLS 1.3์„ ํ˜‘์ƒํ•  ๋•Œ Evil Twin์€ ์ˆ˜๋™์ ์œผ๋กœ client certificate/identity๋ฅผ ์•Œ์•„๋‚ผ ์ˆ˜ ์—†๋‹ค. ๋งŽ์€ enterprise stacks๊ฐ€ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ์—ฌ์ „ํžˆ TLS 1.2๋ฅผ ํ—ˆ์šฉํ•œ๋‹ค; RFC 9190์€ rogue AP๊ฐ€ TLS 1.2 static-RSA suites๋งŒ ์ œ๊ณตํ•ด fallback์„ ๊ฐ•์ œํ•˜๊ณ  outer identity(์‹ฌ์ง€์–ด client cert)๋ฅผ cleartext EAP-TLS๋กœ ๋‹ค์‹œ ๋“œ๋Ÿฌ๋‚ผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ฒฝ๊ณ ํ•œ๋‹ค.

Offensive playbook (downgrade to leak ID):

  • hostapd-wpe๋ฅผ TLS 1.2 static RSA ciphers๋งŒ ํ™œ์„ฑํ™”ํ•˜๊ณ  TLS 1.3์„ openssl_ciphersuite / ssl_ctx_flags์—์„œ ๋น„ํ™œ์„ฑํ™”ํ•œ ์ƒํƒœ๋กœ ์ปดํŒŒ์ผํ•œ๋‹ค.
  • corporate SSID๋ฅผ ๊ด‘๊ณ ํ•œ๋‹ค; victim์ด TLS 1.3์„ ์‹œ์ž‘ํ•˜๋ฉด TLS alert๋กœ ์‘๋‹ตํ•˜๊ณ  handshake๋ฅผ ์žฌ์‹œ์ž‘ํ•˜์—ฌ ํ”ผ์–ด๊ฐ€ TLS 1.2๋กœ ์žฌ์‹œ๋„ํ•˜๊ฒŒ ํ•จ์œผ๋กœ์จ cert validation์ด ์„ฑ๊ณตํ•˜๊ธฐ ์ „์— ์‹ค์ œ identity๋ฅผ ๋“œ๋Ÿฌ๋‚ด๊ฒŒ ํ•œ๋‹ค.
  • hostapd-wpe์—์„œ force_authorized=1์„ ํ•จ๊ป˜ ์„ค์ •ํ•˜๋ฉด client-auth๊ฐ€ ์‹คํŒจํ•˜๋”๋ผ๋„ 4-way handshake๊ฐ€ ์™„๋ฃŒ๋˜์–ด DHCP/DNS-level ํŠธ๋ž˜ํ”ฝ์„ ์ด์šฉํ•œ phish๋‚˜ portal ๊ณต๊ฒฉ์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

Defensive toggle (what to look for during an assessment):

  • hostapd/wpa_supplicant 2.10์€ EAP-TLS server and peer ์ˆ˜์ค€์—์„œ TLS 1.3์„ ์ถ”๊ฐ€ํ–ˆ์ง€๋งŒ ๊ธฐ๋ณธ์ ์œผ๋กœ disabled by default๋กœ ์ œ๊ณต๋œ๋‹ค; ํด๋ผ์ด์–ธํŠธ์—์„œ phase1="tls_disable_tlsv1_3=0"์œผ๋กœ ํ™œ์„ฑํ™”ํ•˜๋ฉด ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ ์ฐฝ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค.

TLS 1.3 realities in 2024โ€“2025

  • FreeRADIUS 3.0.23+๋Š” EAP-TLS 1.3์„ ์ˆ˜์šฉํ•˜์ง€๋งŒ, ํด๋ผ์ด์–ธํŠธ๋Š” ์—ฌ์ „ํžˆ ๊นจ์ง€๊ธฐ ๋•Œ๋ฌธ์—(Windows 11์€ EAP-TLS 1.3 ์„ธ์…˜ ์žฌ๊ฐœ ์—†์Œ, Android ์ง€์›์€ ๋‹ค์–‘ํ•จ) ๋งŽ์€ ๋ฐฐํฌ์—์„œ ์•ˆ์ •์„ฑ์„ ์œ„ํ•ด tls_max_version = "1.2"๋กœ ๊ณ ์ •ํ•œ๋‹ค.
  • Windows 11์€ EAP-TLS 1.3์„ ๊ธฐ๋ณธ์œผ๋กœ ํ™œ์„ฑํ™”(22H2+)ํ•˜์ง€๋งŒ ์‹คํŒจํ•œ resumptions๊ณผ ๋ถˆ์•ˆ์ •ํ•œ RADIUS ์Šคํƒ ๋•Œ๋ฌธ์— ์ข…์ข… TLS 1.2๋กœ์˜ fallback์„ ๊ฐ•์š”๋‹นํ•œ๋‹ค.
  • TLS 1.2์šฉ RSA key exchange๋Š” ํ๊ธฐ๋˜๊ณ  ์žˆ์œผ๋ฉฐ; OpenSSL 3.x๋Š” security level โ‰ฅ2์—์„œ static-RSA suites๋ฅผ ์ œ๊ฑฐํ•˜๋ฏ€๋กœ TLS 1.2 static-RSA rogue๋Š” OpenSSL 1.1.1๊ณผ @SECLEVEL=0 ๋˜๋Š” ๊ทธ ์ด์ „ ๋ฒ„์ „์ด ํ•„์š”ํ•˜๋‹ค.

Practical version steering during an engagement

  • Force TLS 1.2 on the rogue (to leak identities):
# hostapd-wpe.conf
ssl_ctx_flags=0
openssl_ciphers=RSA+AES:@SECLEVEL=0   # requires OpenSSL 1.1.1
disable_tlsv1_3=1
  • Probe client TLS intolerance: ๋‘ ๊ฐœ์˜ rogue๋ฅผ ์šด์˜ํ•˜๋ผ โ€“ ํ•˜๋‚˜๋Š” TLS 1.3-only๋ฅผ ๊ด‘๊ณ (disable_tlsv1=1, disable_tlsv1_1=1, disable_tlsv1_2=1)ํ•˜๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” TLS 1.2-only๋กœ ๊ด‘๊ณ ํ•œ๋‹ค. ์˜ค์ง 1.2 BSS์—๋งŒ ์ ‘์†ํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ๋Š” ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ ๋Œ€์ƒ์ด๋‹ค.
  • Watch for fallback in captures: ์ดˆ๊ธฐ ClientHello์˜ supported_versions์— 0x0304๊ฐ€ ํฌํ•จ๋œ ํ›„ tls.handshake.version==0x0303๋ฅผ Wireshark์—์„œ ํ•„ํ„ฐ๋งํ•˜๋ผ; 0x0303๋กœ ์žฌ์‹œ๋„ํ•˜๋Š” victims๋Š” ๋‹ค์‹œ outer ID๋ฅผ leaking ํ•˜๊ณ  ์žˆ๋‹ค.

Evil Twin via broken server validation (โ€œmTLS?โ€)

Rogue APs๊ฐ€ corporate SSID๋ฅผ ๋ฐฉ์†กํ•˜๋ฉด ์–ด๋–ค certificate๋“  ์ œ์‹œํ•  ์ˆ˜ ์žˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€:

  • doesnโ€™t validate the server cert, ๋˜๋Š”
  • prompts the user ํ•˜๊ณ  untrusted CAs/self-signed certs๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œํ•˜๋„๋ก ํ—ˆ์šฉํ•˜๋ฉด, EAP-TLS๋Š” ๋” ์ด์ƒ mutualํ•˜์ง€ ์•Š๋‹ค. client-cert validation์„ ๊ฑด๋„ˆ๋›ฐ๋Š”(์˜ˆ: SSL_set_verify(..., 0)) ์ˆ˜์ •๋œ hostapd/hostapd-wpe๋งŒ ์žˆ์œผ๋ฉด Evil Twin์„ ์„ธ์šธ ์ˆ˜ ์žˆ๋‹ค.

Rogue infra quick note

On recent Kali, compile hostapd-wpe using hostapd-2.6 (from https://w1.fi/releases/) and install the legacy OpenSSL headers first:

apt-get install libssl1.0-dev
# patch hostapd-wpe to set verify_peer=0 in SSL_set_verify to accept any client cert

Windows supplicant ์„ค์ • ์‹ค์ˆ˜ (GUI/GPO)

Windows EAP-TLS ํ”„๋กœํŒŒ์ผ์˜ ์ฃผ์š” ์„ค์ •:

  • Verify the serverโ€™s identity by validating the certificate
  • ์ฒดํฌ๋จ โ†’ ์ฒด์ธ(chain)์ด ์‹ ๋ขฐ๋˜์–ด์•ผ ํ•จ; ์ฒดํฌ ํ•ด์ œ โ†’ ๋ชจ๋“  self-signed cert ํ—ˆ์šฉ.
  • Connect to these servers
  • ๋น„์–ด ์žˆ์Œ โ†’ ์‹ ๋ขฐ๋œ CA์˜ ๋ชจ๋“  ์ธ์ฆ์„œ ํ—ˆ์šฉ; CN/SAN ๋ชฉ๋ก์„ ์„ค์ •ํ•˜์—ฌ ์˜ˆ์ƒ๋˜๋Š” RADIUS ์ด๋ฆ„์„ ๊ณ ์ •(pin).
  • Donโ€™t prompt user to authorise new servers or trusted certification authorities
  • ์ฒดํฌ๋จ โ†’ ์‚ฌ์šฉ์ž๊ฐ€ ์šฐํšŒํ•  ์ˆ˜ ์—†์Œ; ์ฒดํฌ ํ•ด์ œ โ†’ ์‚ฌ์šฉ์ž๊ฐ€ ์‹ ๋ขฐ๋˜์ง€ ์•Š๋Š” CA/์ธ์ฆ์„œ๋ฅผ ์‹ ๋ขฐํ•˜๊ณ  rogue AP์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Œ.

๊ด€์ฐฐ๋œ ๊ฒฐ๊ณผ:

  • Strict validation + no prompts โ†’ rogue cert ๊ฑฐ๋ถ€๋จ; Windows๊ฐ€ ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ๋กํ•˜๊ณ  TLS ์‹คํŒจ(์ข‹์€ ํƒ์ง€ ์‹ ํ˜ธ).
  • Validation + user prompt โ†’ ์‚ฌ์šฉ์ž๊ฐ€ ์ˆ˜๋ฝํ•˜๋ฉด ์„ฑ๊ณต์ ์ธ Evil Twin ์—ฐ๊ฒฐ.
  • No validation โ†’ ๋ชจ๋“  ์ธ์ฆ์„œ๋กœ ์กฐ์šฉํžˆ Evil Twin ์—ฐ๊ฒฐ.

References

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ