WPA3全名为Wi-Fi Protected Access 3,是Wi-Fi联盟组织于2018年1月8日在美国拉斯维加斯的国际消费电子展(CES)上发布的Wi-Fi新加密协议,是Wi-Fi身份验证标准WPA2技术的的后续版本。
2018年6月26日,WiFi联盟宣布WPA3协议已最终完成。
WPA3
安全协议,采用了SAE
握手协议,会限制错误密码次数,从而击败基于字典爆破的尝试。WPA3
采用了非认证加密的方式,支持OWE(Opportunistic Wireless Encryption)
,修复了KRACK
(重装密钥攻击,攻击者可以获取STA和AP之间传输的数据)的问题WPA3
采用了DPP:Wi-Fi Device Provisioning Protocol
替代WPS
,即便是没有屏幕,没有交互的设备(如智能灯泡),也可以轻松安全的加入WPA 3
网络。WPA3
增加的session key大小,加密位数升到了192位(CNSA标准),并且,即便你没有设置Wifi密码,数据也是受192位加密保护的。
要想使我们的WIFI
模块连接上网络,除了WIFI芯片厂商提供的驱动外,我们还需要借助在Linux
下常用的WIFI
管理工具wpa_supplicant
,hostapd
。
wpa_supplicant
:主要管理WIFI
的STA
模式,也就是我们用于连接网络的方式。hostapd
:主要管理WIFI
的AP
模式,也就是我们开启热点的方式。
通过ifconfig
命令,查看我们的网卡驱动是否加载成功。
wlan0 Link encap:Ethernet HWaddr 30:8E:7A:2C:EE:F4
inet addr:240.168.100.1 Bcast:0.0.0.0 Mask:255.255.255.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
wpa_supplicant
,hostapd
工具我们打开menuconfig
,
打开Target packages
->Networking applications
->hostapd
、wpa_supplicant
选项,并且 选中Enable WPS
、 Enable WPA3 support
相关选项
我的hostapd
选项配置如下:
wpa_supplicant
配置选项如下:
当然,编译方式有很多种,也可以下载源码包,直接编译出来相关工具,方式大同小异,我们编译出来就行。
在这里强调一下,WPA3
部分WIFI驱动
可能需要在编译的时候打开相关CONFIG配置
才能使用,这点一定要排查一下哦!
STA
模式下,连接WPA3加密的WIFI我们编译完成后,会生成wpa_supplicant
和wpa_cli
的可执行文件。那么wpa_supplicant
和wpa_cli
的区别是什么呢?
wpa_supplicant
:控制的核心程序,其作为一个独立的守护进程,主要在消息循环中处理WPA状态机、控制命令、驱动事件、配置信息等,通常称为服务端。wpa_cli
:其主要用于和用户的交互,用来搜索、设置、和连接网络等,通常称为客户端。对应上述结构, WiFi控制可以分为三大组件:
wpa_cli
命令行,与用户进行交互,获取用户的操作指令wpa_supplicant
运行于后台,对应上述中间部分,功能是“上传下达”。接收wpa_cli
传递的用户命令,控制硬件。
wpa_supplicant
的使用上面已经介绍了,wpa_supplicant
是一个服务端的程序,所以我们==第一步就是运行这个服务端程序==。
wpa_supplicant --help
,查看一下命令介绍
wpa_supplicant v2.9
Copyright (c) 2003-2019, Jouni Malinen <[email protected]> and contributors
This software may be distributed under the terms of the BSD license.
See README for more details.
This product includes software developed by the OpenSSL Project
for use in the OpenSSL Toolkit (http://www.openssl.org/)
usage:
wpa_supplicant [-BddhKLqqstvW] [-P<pid file>] [-g<global ctrl>] \
[-G<group>] \
-i<ifname> -c<config file> [-C<ctrl>] [-D<driver>] [-p<driver_param>] \
[-b<br_ifname>] [-e<entropy file>] [-f<debug file>] \
[-o<override driver>] [-O<override ctrl>] \
[-N -i<ifname> -c<conf> [-C<ctrl>] [-D<driver>] \
[-m<P2P Device config file>] \
[-p<driver_param>] [-b<br_ifname>] [-I<config file>] ...]
drivers:
nl80211 = Linux nl80211/cfg80211
wext = Linux wireless extensions (generic)
wired = Wired Ethernet driver
options:
-b = optional bridge interface name
-B = run daemon in the background
-c = Configuration file
-C = ctrl_interface parameter (only used if -c is not)
-d = increase debugging verbosity (-dd even more)
-D = driver name (can be multiple drivers: nl80211,wext)
-e = entropy file
-f = log output to debug file instead of stdout
......
example:
wpa_supplicant -Dnl80211 -iwlan0 -c/etc/wpa_supplicant.conf
我们注意一下这个example
示例:
wpa_supplicant -Dnl80211 -iwlan0 -c/etc/wpa_supplicant.conf -B
大概了解一下常用的设置选项:
-D
:WIFI的驱动名称
-i
:网卡名称
-c
:配置文件路径
-B
:后台运行
选项后面,加不加空格都可以。
wpa_passphrase
的使用正如上面键入的命令,你会发现,配置文件我们是缺失的!那这个配置文件从哪里来呢?
从整体来说,配置文件来源可以有三个渠道:
wpa_passphrase
工具生成初版,结合wpa_cli
设置完整的conf:该方法适合第一次配置wpa_supplicant源码目录/example/xxx.conf
通常来说,后两种一般是基于你对相关配置熟悉之后,快速完成目标的选择,对于不太熟悉wpa_supplicant
、wpa_passphrase
、wpa_cli
相关工具使用的人来说,建议一步一步来。
wpa_passphrase ssid psd > /etc/wpa_supplicant.conf #输入WIFI账号,密码到配置文件
此时,wpa_passphrase
会自动生成一个特殊格式的conf
文件。
为了我们后续能够使用wpa_cli
更新配置,我们还需要添加一些配置,下面代码放在第1,2行!
ctrl_interface=/var/run/wpa_supplicant
update_config=1
ctrl_interface指向的是一个目录,在这个目录中默认会生成一个文件/var/run/wpa_supplicant/wlan0,这是local socket address,相当于UNIX Domain Socket,程序和后台程序wpa_supplicant进行通信(其实是wpa_supplicant作为后台服务程序是通过本地socket和客户端进行通信的)
update_config = 1时会在(客户端发送SAVE_CONFIG命令)更新这个配置文件。
此时,我们就可以开启wpa_supplicant
服务啦!开启成功后,会打印log
信息
# wpa_supplicant -Dnl80211 -iwlan0 -c/etc/wpa_supplicant.conf -B
Successfully initialized wpa_supplicant
Tip:当然,此时我们想要知道这些属性信息都表示哪些意思,都有哪些属性可以设置?
我们可以通过我们的编译目录wpa_supplicant
下的README
文件可以查看完整的详细信息。
wpa_cli
上面已经开启了
wpa_supplicant
服务,接下来我们就可以使用wpa_cli
客户端进行控制
我们可以通过wpa_cli -i wlan0
进入命令行接口
输入命令help
可以查看各种信息,此时会有密密麻麻的指令,让你头疼…
下面列举一些常用指令:
scan
:扫描附近热点scan_result
:显示附近热点status
:网卡状态add_network
:添加一个网络list_network
:查看添加的网络set_network ssid "xxx"
:给刚添加网络的序号设置网络连接账号,加上引号set_network pwd "xxx"
:给刚添加网络的序号设置网络连接密码,加上引号remove_network
:删除一个网络wpa_cli set_network priority 1
:设置优先级等save_config
:保存配置文件到默认路径/etc/wpa_supplicant.conf
wpa_supplicant.conf
用于连接WPA3
的配置文件如下:
ctrl_interface=/var/run/wpa_supplicant //用于与后台程序通信
update_config=1 //文件可覆盖
ap_scan=1 //AP扫描
network={
ssid="TEST" //WIFI账号
proto=RSN //通信协议,RSN为WPA3,WPA为WPA2 ,WPA
key_mgmt=SAE WPA-PSK WPA-PSK-SHA256 //认证方式,WPA3为SAE认证
pairwise=CCMP TKIP //密码解析
scan_ssid=1 //扫描ssid
psk="12345678" //WIFI密码
sae_password="12345678" //WPA3的密码
ieee80211w=1 //启用/禁用PMF
}
ifconfig wlan0 up
wpa_supplicant -D nl80211 -i wlan0 -c /etc/wpa_supplicant.conf
ifconfig wlan0 192.168.1.119 netmask 255.255.255.0
route add default gw 192.168.1.1
WPA3
使用SAE(Simultaneous Authentication of Equals)
的握手协议,所以在
AP
模式下,创建WPA3加密的热点对于AP
模式,就不得不说两个工具了:hostapd
和hostapd_cli
。
hostapd_cli 是一款用作无线 AP 功能的客户端程序。它需要与 hostapd 主程序配置使用。
hostapd
使用hostapd
同wpa_supplicant
相同,作为后台服务程序,其成功运行都需要一个配置文件,并且指定好一个控制接口。即需要在配置文件中,对 ctrl_interface
进行设置。
WPA3
的配置文件/etc/hostapd.conf
如下:
ctrl_interface=/var/run/hostapd
interface=wlan0
driver=nl80211
hw_mode=g
macaddr_acl=0
ignore_broadcast_ssid=0
auth_algs=1
ssid=A-WPA3
channel=1
wpa=2
wpa_key_mgmt=SAE
wpa_pairwise=CCMP TKIP
rsn_pairwise=CCMP
wpa_passphrase=12345678
wps_cred_add_sae=1
打开hostapd
服务:
hostapd -B /etc/hostapd.conf
hostapd_cli
使用hostapd_cli
作为 hostapd
的客户端,使用时,首先需要先启动 hostapd
主程序。
hostapd
启动后,运行 cli 客户端时,会自动去连接当前正在工作的 hostapd
进程,连接成功后,cli 客户端就可以对 hostapd
应用程序进行参数的获取和控制。
hostapd_cli
同wpa_cli
相同,运行模式有两种:一种是shell交互方式
,另一种是带参数运行
,两种方式都大同小异,主要介绍一些命令。
hostapd 可以使用
set
命令,在hostapd
启动后,对hostapd
配置文件,即hostapd.conf
内所有的配置项进行配置,从而实现动态修改配置的目的。
set ssid xxxx #修改ssid名字
set wpa_ppassphrase xxx #修改密码
set channel xx #修改通道
reload #保存到配置中
wps_config
用来修改无线热点名称,密码,加密方式。
wps_config <new SSID> <auth> <encr> <new key>
examples:
hostapd_cli wps_config testing WPA2PSK CCMP 12345678
hostapd_cli wps_config "no security" OPEN NONE ""
<auth> must be one of the following: OPEN WPAPSK WPA2PSK WPAPSKALL
<encr> must be one of the following: NONE WEP TKIP CCMP
status
获取无线热点信息
> status
state=ENABLED
phy=phy0
freq=2462
num_sta_non_erp=0
num_sta_no_short_slot_time=0
num_sta_no_short_preamble=0
olbc=0
num_sta_ht_no_gf=0
num_sta_no_ht=0
num_sta_ht_20_mhz=0
num_sta_ht40_intolerant=0
olbc_ht=0
ht_op_mode=0x0
cac_time_seconds=0
cac_time_left_seconds=N/A
channel=11
secondary_channel=0
ieee80211n=1
ieee80211ac=0
beacon_int=100
dtim_period=2
ht_caps_info=000e
ht_mcs_bitmask=ffff0000000000000000
supported_rates=02 04 0b 16 0c 12 18 24 30 48 60 6c
max_txpower=20
bss[0]=wl3
bssid[0]=20:32:33:59:28:04
ssid[0]=EdgerOS
num_sta[0]=1
get_config
获取无线热点信息:
> get_config
bssid=20:32:33:59:28:04
ssid=EdgerOS
wps_state=configured
passphrase=987654321
psk=d1b952932f9c3c4db8fe39930c2b88d6849a01a66a7e58a2c41f82c3724549c8
wpa=2
key_mgmt=WPA-PSK
group_cipher=CCMP
rsn_pairwise_cipher=CCMP
获取信息的另一种方式:访问进程
cat /proc/net/rtl8192eu/wl3/rf_info
cat /proc/net/rtl8192eu/wl3/ap_info
cat /proc/net/rtl8192eu/wl3/tx_info_msg
cat /proc/net/rtl8192eu/wl3/all_sta_info
[1] http://w1.fi/releases/
[2] https://www.cnblogs.com/jackyangrui/p/9929532.html
[3] https://blog.csdn.net/weixin_34226182/article/details/89802794
[4] https://blog.csdn.net/weixin_33691700/article/details/94156801
[5] wpa_supplicant/hostapd 官网介绍
[6] https://www.cnblogs.com/hokori/p/14168584.html