协议架构
根据802.11各个讨论组制定的安全相关协议,WiFi联盟扩充完善并制定了WiFi安全相关的WPA/WPA2/WPA3系列认证标准。下图展示了WiFi主要的协议组织,红色线条框起来的是安全服务相关的部分,用于802.11认证、关联等处理的组件没有画出,在后边的描述里会提及。
上图中最上层部分IEEE802.1 X和IEEE 802.1 Authenticator or Supplicant,同样也是MAC层的应用,它们的内部以及和802.1X的交互如下图所示。
IEEE 802.1X Authenticatir or Supplicant
由以上结构图可以知道,802.11安全相关的主要组件如下所列。
- MLME(对外部提供802.11认证、关联等的接口,即MLME-SAP)
- SME
- AP/STA管理(802.11认证、关联等的处理)(上边的图中没有画出)
- RSNA Key Management(即802.11i,包括4路握手等内容)
- IEEE 802.1X Authenticatir or Supplicant
- EAP(可扩展的认证协议)
- 802.1X (基于端口的网络访问控制)
同时802.11定义了这些组件所需要提供的各种服务,以此来描述协议,其中安全相关的服务有:
- 访问控制服务
- 认证服务(基于WEP、EAP、预共享密钥)
- 去认证服务
- 数据机密性服务
- 密钥管理服务
- 数据来源认证服务
- 数据完整性服务
- 重放攻击服务
- 管理帧保护服务
软件架构
OpenWrt mt76平台是对协议的一个实现,MT76平台的软件组件如下。
- hostapd/wpa_supplicant
- cfg80211
- mac80211
- mt76(指Mediatek WiFi芯片在linux mac80211架构上的开源驱动)
- FW
AP模式
下图标示了AP模式下相关的软件和协议的对应关系。
从图中可以看出,MLME、SME、802.1X都在hostapd这个user daemon里实现,kernel stack里,仅仅只有软加解密的部分,下图再更加详细地描述了软件的实现。
上图只是列出了各个模块的关键内容,hostapd中的实现和规范对应的比较好,软件中的符号定义基本是和协议里的描述对应,所以只要再软件里找到对应的模块,就可以结合协议去理解实现。
有个比较关键的问题需要说明一下,处于user space的daemon hostapd是怎么收发管理帧和eapol帧的?这个问题关系到安全管理的上下串通。
- 对于管理帧,通过NL80211_CMD_FRAME这个nl80211 cmd来收发
- 对于eapol帧,可以通过NL80211_CMD_CONTROL_PORT_FRAME或者PF_PACKET(l2_packet_recive)来收发
STA模式
STA模式和AP模式软件结构上的主要区别是MLME放到了mac80211里,其他结构不变,不过各个模块对Authenticator和supplicant的处理有不同,如下图所示。
SetKey
上边描述了软件的结构,以及一些认证管理相关的东西,下边对SetKey的流程做一个简单的描述。
AP模式下SetKey的流程如下图所示。
相关Package
下面的表里列出了OpenWrt上和securyt相关的package,以及它们的feature和可获得的版本。
Package | AP support | Client support | WPA Enterprise | OpenWrt Version |
---|---|---|---|---|
wpad | yes | yes | yes | 10.03+ |
wpad-mini | yes | yes | no | 10.03+ |
hostapd | yes | no | yes | 7.06+ |
hostapd-mini | yes | no | no | 8.09+ |
wpa-supplicant | no | yes | yes | 7.06+ |
wpa-supplicant-mini | no | yes | no | 8.09+ |
OpenWrt packages
Debug
- hostapd_cli
- wpa_cli
- iw
- sysfs
- ftrace/tracepoint