doc

Wild Wireless

abbr

sta: client

ap: access point

akm : Authentication and Key Management

bss: Basic service set

ess : Extended service set

wifi Direct

Wi-Fi Direct - Overview and Features

Device to device communications with WiFiDirect: overview and experimentation

WiFi Direct Configuration Scripts

Wi-Fi Direct to Hell

Wi-Fi Direct

abstract

wifi p2p 其实是一个节点成为group owner(GO),角色类似AP。

所以首个参与协商的节点,是支持wifi p2p的client;确定了GO之后,也可以是传统wifi的legacy client加入。

Group Formation

P2P Standard Group Formation: 互相发现对方,Go Negotiation(决定谁当GO),WPS Provisioning,DHCP

P2P Autonomous Group Formation:互相发现对方,事先预定了谁当GO,,WPS Provisioning,DHCP

P2P Persistent Group Formation:互相发现对方,双方事先拥有了该Group的信息,client向GO发invitation请求,WPS Provisioning只需Phase 2无需Phase1,DHCP

WPS (Wi-Fi Protected Setup) Provisioning -> WSC (Wi-Fi Simple Configuration)

wifi simple Configuration technical specification

第六章 深入理解wi-Fi Simple Configuration

Wi-Fi Protected Setup - WPS

Brute forcingWi-FiProtected Setup

WPS为client & GO建立安全连接。支持PIN码模式、Push Button模式。

7 digit PIN码不带checksum,8 digit PIN码的最后一位是checksum。

wps.c, Push Button是一种特殊的模式,主要方便用户直接按设备小按钮配对,PIN码取值为00000000。

wps_common.c,Registration Protocol Messages,基于DH key与双方nonce派生KDK;再使用KDK派生出authkey, kwk, emsk;基于authkey,结合DevicePassword(即PIN码),派生psk1, psk2。psk1/psk2协助生成e-hash1/e-hash2,用于双方校验。

DH modulus 见 RFC3526。

emsk结合双方nonce,再派生出MgmtAuthKey,MgmtEncKey,用于AP消息的认证和加密。

rekeying: emsk结合双方nonce,还可以派生出新的psk(即DevicePassword)。

wps_enrollee.c,random generate per-device psk

wps_registrar.c,处理pin/pbc等。

分成两个Phase。

Phase 1主要是基于WPA2协商,AES-CCMP cipher,随机生成 Pre-Shared Key (PSK) 用于双向认证。

Phase 2主要是client断开原有连接,以Phase1协商好的auth credential重连。

rfc5247: Extensible Authentication Protocol (EAP) Key Management Framework

analysis

显然,pbc无法防mitm。

pin码仅用于认证,不参与密钥派生。

802.11u

Understanding Hotspot Profiles

gas: Generic Advertisement Service

anqp: Access Network Query Protocol

gas & anqp 用于network discovery and selection

wpa2

wpa2-psk

Parallel active dictionary attack on WPA2-PSK Wi-Fi networks

wpa2

4次握手:

  • psk + ssid 派生 pmk,pmk + anouce/snonce + amacaddr/smacaddr 派生PTK
  • PTK拆分3部分:KCK,KEK,TK(CCMP)
  • 如果需要GTK,使用KEK wrap处理

显然,握手负责认证兼密钥派生。核心问题在于pmk的生成是固定的,导致dictionary attack

wpa3

wpa3-spec

Understanding Server Authentication in WPA3 Enterprise

wifi security

wpa3-personal

wpa3-sae

核心是引入dragonfly认证,基于psk派生一次一密的pmk。pmk派生ptk的过程与wpa2的4次握手相同。

wpa3-enterprise

与wpa2-enterprise基本相同,本质是eap认证。

套件可以支持CNSA 192bit。

wpa3 fast bss tranition (FT)

Fast BSS Transition (802.11r)

两个(或多个)AP有相同的ESSID,同一个sta,从current AP切到target AP,避免重认证,快速连接。

一种方案是sta直接连target AP快速认证,另一种方案是sta通过current AP找target AP快速认证。

server certificate validation

选用EAP-TTLS, EAP-TLS, EAP-PEAPv0 or EAP-PEAPv1 等模式时,sta必须检查server证书的合法性(以下任选一种):

  • EAP credential里的server cert = sta 接收到的server cert。
  • EAP credential里指定root cert,是sta 接收到的server cert的root;如果EAP credential里指定了域名(或者zone),则必须与sta 接收到的server cert的san/cn域匹配。
  • sta 接收到的server cert的root 在sta的可信根列表中,并且,EAP credential里指定的域名(或者zone)与sta 接收到的server cert的san/cn域匹配。

User Override of Server Certificate (UOSC)

User Override of Server Certificate (UOSC): 当server cert校验失败,弹窗问用户是否忽略失败,继续连接。

server cert里可能有特殊的oid,指定Trust Override Disable (TOD)策略:

  • TOD-STRICT: UOSC不给用
  • TOD-TOFU: UOSC仅能在首次连接时生效

sae-pk

sae-pk解决的问题场景是:如果黑客已知password,应如何抵御evil twin AP attack。避免STA连接到伪造的AP。

开启了sae-pk的场景下,password相当于ap的公钥指纹。

SAE Confirm message里包含的SAE-PK内容:

  • AP的公钥K_AP, p-256
  • 以KEK加密的Modifier(缩写为M)值, 128 bits
  • signature,以AP的私钥签名, ecdsa: KeyAuth = Sig_AP(eleAP || eleSTA || scaAP || scaSTA || M || K_AP || AP-BSSID || STA-MAC)

signture校验通过,则表示上述PMKSA内容未经篡改。

Modifier是随机生成,递增求解fingerprint,如果fingerprint的前 8*Sec bits 为0,则该Moidifer值即为目标值。

8*Sec bits 为0,主要用于压缩表达:

  • 8Sec + 19λ/4 - 5 的fingerprint 可以用 5λ 压缩表达
  • 19*λ/4 - 5 为 fingerprint 的一部分
  • λ/4 bits 用于编码Sec的值(3或5)
  • 5 bits 用于checksum

sae-pk credential

sae-pk credential: { ap key pair, Modifier (缩写为M), sae-pk password, sae-pk password identifier (optional) }

注意,相同ssid的AP配置的sae-pk credential相同。

相同的ap public key,可以结合不同的Modifier,派生不同的password。

Fingerprint = L(Hash(SSID || M || K_AP), 0, 8*Sec + 19*λ/4 - 5) 

L(S, F, N): 取S的最左边 [ F, F+N-1 ] bits
Sec:取3或5
λ = 4*n, n>=3
8*Sec + 19*λ/4 - 5 <= HashLen

Fingerprint结合Sec值,分段拼接,再转换为Base32的PasswordBase

PasswordBase = Base32(P(0) || P(1) || ... || P(λ/4-1))

When i< (λ/4-1), P(i) = Sec_1b || L(Fingerprint, 8*Sec+(19*i), 19)
When i=(λ/4-1), P(i) = Sec_1b || L(Fingerprint, 8*Sec+(19*i), 14)
Sec_1b is a 1-bit integer equal to 1 when Sec=3, and equal to 0 when Sec=5

基于PasswordBase计算Verhoeff algorithm的checksum(5 bits),再按4 character 添加 - 分隔,获得password

Password = AddSeparators(PasswordBase || ChkSum)

Authentication using sae-pk

注意这里的kck, kek 与 4次握手的 eapol-key kck, kek 不同。

kck_pmk_kek = KDF-Hash-Length(keyseed, “SAE-PK keys”, context)

STA校验过程:

  • 使用kek解密modifier
  • 如果sta本地之前已存储了该ap的公钥K_AP,则进行公钥值比对。
  • 如果sta本地没有该ap的公钥记录,则从password反向恢复fingerprint,与Modifier正向计算的fingerprint比对。
  • 使用K_AP校验sig_ap签名

注意sta本地存储的ap公钥,是与password关联的。

attack

second preimage attack, 黑客如何找到伪造的(K_AP, Modifier),派生出相同的password。

降级攻击,sta如何被骗ap不支持sae-pk。

wifi uri

就是把wifi的参数拼了一下,可以转二维码

Transition Disable

一刀切

Privacy

随机mac地址

随机mac地址。

sta连不同ess,用不同mac地址。

sta使用随机mac地址扫瞄。

切换mac地址时,seq number要重置。

scrambler seed : 生成随机mac地址序列的随机数生成器seed要。。。

GAS:STA进行GAS查询的token记得换

ANQP: sta向ap发anqp查询时,应使用随机地址

pmf

PMF: Protected Management Frame

MFPC: Management frame protection capable

MFPR: Management frame protection required

attack

EvilDirect: A New Wi-Fi Direct Hijacking Attackand Countermeasures



Published

01 July 2020

Categories

Tags


Share On