无线安全入门

WiFi网络结构

AP(Access Point)基站

Wi-Fi热点/无线路由器,将互联网上其他服务器上的数据转发到客户端

STA(Station)站点

就是指客户端这样具有Wi-Fi通信功能并且连接到无线网络中的终端设备

WiFi工作原理

AP广播

无线路由器开启SSID广播功能后,AP将自动广播自己的SSID名称

其中SSID是Service Set Identifer的缩写,意思是服务集标识,就是用户在无线客户端搜索到的无线信号

SSID经由beacons封包广播

AP探测

客户端选择加入哪个无线网络的时候,会发送AP探测请求,,以请求特定无线网络的响应包

根据AP给予的响应包,确定AP工作的频段,之后客户端切换到与AP相同的频段

身份认证

客户端提供密码来身份认证

数据传输

客户端成功加入AP所在的网络,和AP进行数据传输

2.4G/5G标准

2.4G频段共划分为14个信道(能用的仅13个),5G频段共划分为5个信道

无线网络监听模式

将无线网卡设置为监听状态,以捕获附近其他主机的数据包

无线网卡的工作模式

  • Manage模式:用于无线客户端直接与无线接入点(AP)链接
  • Master模式:允许无线网卡使用特制的驱动程序和软件工作,作为其他设备的无线AP
  • Ad-Hoc模式:各设备之间采用对等网络的方式连接
  • Monitor模式:监控无线网络内部的流量

启用2.4GHz无线网卡监听

启用监听:airmon-ng start <interface>

查看无线网卡工作模式:iwconfig <interface>

停止监听:airmon-ng stop <interface>

扫描无线网络

也就是侦听周围的无线信号,获取信息(AP名称,工作的信道,MAC地址……)

  • 主动扫描:客户端主动发送探测请求帧(使用NULL或设置的SSID名称),周围的AP收到该请求后,将会响应该探索信号帧,即使不发送信号的AP也会响应该请求
  • 被动扫描:AP每隔一段时间自动发送信号帧

实时扫描

airodump-ng <interface> -w <file>

第一行显示的是当前扫描的信道和扫描的时间

第二部分显示的是AP的信息

第三部分显示的是客户端的信息

BSSID: AP的Mac地址
PWR:信号强度,数字越小,信号越强
Beacons:无线发出的通告编号
#Data:对应路由器的在线数据吞吐量
#/s:过去10秒钟内每秒捕获数据分组的数量
CH:路由器的所在频道
MB:无线所支持的最大速率
ENC:使用的加密算法体系
CIPHER:检测到的加密算法
AUTH:使用的认证协议
ESSID:路由器的名称
------------------------
STATION:客户端的MAC地址
Rate:传输率
Lost: 在过去10秒钟内丢失的数据分组,基于序列号检测
Frames:客户端发送的数据分组数量
Probe:被客户端探查的ESSID。如果客户端正试图连接一个无线网络,但是没有连接上,那么就显示在这里

离线扫描

从捕获文件中读取数据包:airodump-ng -r <pcap>

获取AP的生产厂商

加上--manufacturer

扫描打开WPS功能的AP

WPS功能指用户按下无线路由器上的WPS键,或者输入一个PIN码,就能快速地完成无线网络连接,并获得WPA2级加密的无线网络,由于PIN码验证机制的弱点,导致网络不安全,所以渗透者可以利用PIN码的弱点对其无线网络实施渗透

可以使用wash工具来扫描无线网络

Lck如果是Yes,表示该AP锁定了WPS;如果为NO,表示没有锁定,即开启了WPS功能

获取隐藏的ESSID

隐藏的ESSID就是指AP不自动广播SSID名称,如果用户不指定该AP的SSID名称则无法接入该无线网络

可以使用mdk3工具来获取隐藏的ESSID名称

这里的-b表示使用全暴力破解模式,-t设定目标AP的MAC地址,-s设置发包速率

获取AP漏洞信息

Routerpwn.com

扫描未关联的客户端

关联主要指客户端发送关联请求包给目标AP,以获取AP的关联响应包。

其中,关联请求包中携带了一些协商信息,包括加密方式、支持的速率、支持的功率及其他的一些特性。AP如果都支持这些协商的话,则回应携带OK信息的关联响应包给客户端,并同意其接入。如果AP对客户端的协商信息有异议,则会发送携带错误码的关联响应包给客户端。

可以使用Hoover工具扫描未关联的客户端的方法

sudo ./hoover.pl --interface=wlan0mon --tshark-path=/usr/bin/tshark --dumpfile==result.txt

!! Dumping detected networks:
!! MAC Address         SSID                           Count     Last Seen
!! -------------------- ------------------------------ ---------- -------------------
!! b4:43:0d:a9:f4:4e   Wildcard (Broadcast)[Malformed Packet]         17 1970/01/01 08:00:00 
!! b4:43:0d:a9:f4:4e   HeLLo                                 79 1970/01/01 08:00:00 
!! b4:43:0d:a9:f4:4e   Wildcard (Broadcast)                   89 1970/01/01 08:00:00 
!! 66:6e:97:23:41:46   gElLqPdSgXnLsRwUiZp4tTyUF1q7vaAW         1 1970/01/01 08:01:06 
!! 78:11:dc:ab:17:ad   Xiaomi_Leo                             1 1970/01/01 08:01:18 
!! Total unique SSID: 5

其中Count表示关联次数,Count越大越能说明关联没有成功

查看AP和客户端的关联关系

使用工具airgraph-ng可以绘图表示AP和客户端的关联关系

sudo airgraph-ng -i test-01.csv -o Image.png -g CAPR

捕获数据包

数据包概述

握手包

握手包指采用WPA加密方式的无线AP与无线客户端进行连接前的认证信息包,其中包含后期数据传输的密钥。

握手包只有在客户端和AP连接的时候才会出现,所以在抓包时,需要实施死亡攻击,让已经连接AP的客户端断线,当客户端再次连接时,就可以抓到握手包。

握手包包括4个交互过程,即4个握手包,协议为EAPOL

非加密包

捕获的数据包是否加密,主要取决于无线AP。

非加密包中可以看到每个包的地址、协议、内容等信息

加密包

用户需要解密后才能看到原始的数据包,加密的方式有:WEP或WPA等

802.11帧概述

802.11协议是无线局域网通用的标准

802.11中的帧可以分为三类:管理帧,控制帧和数据帧

数据帧

数据帧结构:

数据帧也分为4类:

  • IBSS(独立基本服务集): STA -> AP -> Ethernet
  • TO AP: STA -> AP
  • FROM AP : AP->STA
  • WDS(无线分布式系统): 让AP与AP间通信,WDS充当无线网络中继器

控制帧

控制帧主要用于竞争期间的握手通信和正向确认、结束非竞争期等。

常用的控制帧有四个:

  • RTS:请求发送
  • CTS:允许发送
  • ACK:应答
  • PS-poll:省电模式-轮询

管理帧

管理帧主要用于无线客户端与AP之间协商、关系的控制,如关联、认证和同步等

Beacon帧也属于管理帧

捕获数据包

无线网卡在监听数据包时会跳频,为了避免数据包丢失,用户可以手动设置监听信道

airmon-ng start <interface> <channel>

iwconfig [interface] channel N

然后打开wireshark捕获数据包

使用捕获过滤器

指定捕获的Mac地址:ether host xxx

分析数据包

分析Beacons帧可以查看AP的详细信息

解密数据包

路由器的数据包通常是使用WEP或WPA/WPA2进行加密。如果目标AP是使用WEP认证方式加密的话,则捕获到的包也是加密的

wlan.fc.type_subtype == 0x28来过滤出加密的数据包

对于WEP加密:密钥为AP密码的十六进制ASCII值用冒号连接

对于WPA/WPA2加密方式

也可以通过脚本来永久解密数据包

解密WEP加密数据包:airdecap-ng -w [password] [pcap file]

解密WPA加密数据包:airdecap-ng -e [ESSID] -p [password] [pcap file]

WPA/WPA2加密模式

WPA全名Wi-Fi Protected Access(Wi-Fi保护访问),是一种无线网络通信安全保护系统。

加密工作原理

WPA有4种加密类型,分别是WPA、WPA-PSK、WPA2、WPA2-PSK

WPA/WPA2

  • 客户端向接入设备发送一个EAPOL-Start报文,开始认证接入
  • 接入设备向客户端发送EAP-Request/Identity报文,要求客户端提交用户名
  • 客户端回应一个EAP-Response/Identity给接入设备的请求,其中包括用户名
  • 接入设备将EAP-Response/Identity报文封装到RADIUS Access-Request报文中,发送给认证服务器
  • 认证服务器产生一个Challenge,通过接入设备将RADIUS Access-Challenge报文发送给客户端,其中包含EAP-Request/MD5-Challenge
  • 接入设备通过EAP-Request/MD5-Challenge发送给客户端,要求客户端进行验证
  • 客户端收到EAP-Request/MD5-Challenge报文后,将密码和Challenge做MD5算法生成Challenged password,再由EAP- Response/MD5-Challenge回应给接入设备
  • 接入设备将Challenge、Challenged password和用户名一起送到RADIUS服务器,由RADIUS服务器进行认证
  • RADIUS服务器根据用户信息做MD5算法,判断用户是否合法。
  • 如果认证通过,用户通过标准的DHCP协议,通过接入设备而获取规划的地址
  • 接入设备发送计费开始请求到RADIUS用户认证服务器
  • RADIUS用户认证服务器回应计费开始请求报文

WPA-PSK/WPA2-PSK

是WPA/WPA2加密类型的一种简化版

  • 无线AP定期发送Beacon数据包,使无线终端可以更新自己的无线网络列表
  • 无线终端在每个信道广播Probe Request请求
  • 每个信道的AP回应Probe Response,包含ESSID及RSN信息
  • 无线终端向目标AP发送AUTH包。AUTH认证类型有两种,0表示开放式(WPA/WPA2必须是开放式),1表示共享式
  • AP回应网卡AUTH包(如果之前发送的是0,那么返回Success)
  • 无线终端向AP发送关联请求包Association Request数据包

sta收到认证successful报文后,决定加入网络,则会发送Assoc Req帧,指明要加入的网络,以及自己的Listen Interval(聆听间隔,即sta多久聆听一次Beacon帧)和自己的能力信息。 AP收到Assoc Req帧后,确认sta的Listen Interval自己是否接受,能力信息是否匹配。如果一切OK,则回复Assoc Rsp帧。携带Association ID(关联ID)和successful信息,表示关联成功。否则回复Assoc Rsp帧,携带falied信息,表明关联失败。

  • AP向无线终端发送关联响应包Association Response数据包
  • EAPOL四次握手进行认证

EAPOL认证算法

   max_mac, min_mac = sort(ap_mac, sta_mac)
   max_nonce, min_nonce = sort(ap_nonce, sta_nonce)

   message = b''.join([
       b'Pairwise key expansion\x00',
       min_mac,
       max_mac,
       min_nonce,
       max_nonce,
       b'\x00'
  ])
   eapol_frame_zeroed_mic = b''.join([
     eapol_frame[:81],
     b'\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0',
     eapol_frame[97:99]
  ])
   pmk = hashlib.pbkdf2_hmac('sha1', password_guess, SSID.encode(), 4096, 32)
   kck = hmac.new(pmk, message, hashlib.sha1).digest()[:16]
   calculated_mic = hmac.new(kck, eapol_frame_zeroed_mic, hashlib.sha1).digest()[:16]
   if calculated_mic == mic:
     print("Success")

万能钥匙?

安卓手机已连接的Wi-FI密码默认保存在/data/misc/wifi/wpa_supplicant.conf

kali自带的密码字典:/usr/share/wordlists

公众分享:https://crackstation.net/crackstation-wordlist-password-cracking-dictionary.htm

Crunch工具生成字典:crunch <min-len> <max-len> [character set] -o [file]

生成PMKs数据

除了7.1.3的脚本,还可以通过airolib-ng来生成PMKs数据

捕获握手包

要破解Wi-Fi密码,就必须要捕获到握手包

  • 首先指定目标AP,捕获握手包:sudo airodump-ng -w <file> --bssid <MAC> -c <CHANNEL> <WLAN INTERFACE>
  • 使用aireplay-ng命令来实施死亡攻击,切断AP与STA之间的联系,迫使STA重新连接,发送握手包sudo aireplay-ng -0 1 -a <AP-MAC> -c <CLIENT-MAC> <WLAN INTERFACE>其中-0表示实施死亡攻击,1表示攻击次数
  • wpaclean提取握手包wpaclean out.pcap in.cap
  • 验证握手包:wifite --check [pcapfile]或者Wireshark
  • 合并握手包数据:besside-ng-crawler <Input Directory> <Output File>

破解密码

  • Aircrack-ng: aircrack-ng -w <dict> <pcapfile>
  • Pyrit(可以GPU加速): pyrit -r [pcap file] -i [filename] -b [bssid] attack_passthrough

攻击无线AP

认证洪水攻击

简称为Auth攻击,也是无线网络拒绝服务攻击的一种方式。该攻击的目标主要针对那些通过验证和AP建立关联的关联客户端。攻击者向AP发送大量伪造的身份验证请求帧,当AP收到大量伪造的身份验证请求而超过所能承受的能力时,它将断开其他无线服务连接。

攻击原理:攻击者使用一些看起来合法但是是随机生成的MAC地址来发送大量的虚假连接请求到AP,导致AP失去响应,使得AP的连接列表出现错误,使得连接的合法客户端强制与AP断开连接

使用MDK3实施攻击:mdk3 <interface> a <test_options>

  • interface:用于指定攻击的网络接口
  • a:实施身份验证洪水攻击
  • -s <pps>:设置包的速率
  • -a <ap_mac>:指定目标AP的MAC地址
  • -i <bssid>:对指定BSSID进行攻击

取消认证洪水攻击

攻击者向整个网络发送伪造的取消身份验证报文,从而阻断了合法用户和AP之间的连接

sudo mdk3 wlan0mon d -c <channel>

假信标(Fake Beacon)洪水攻击

向无线信道中发送大量虚假的SSID来充斥客户端的无线列表,使客户端找不到真实的AP

mdk3 <interface> b <test_option>

  • -n <ssid>: 自定义ESSID
  • -f <filename>: 读取ESSID列表文件
  • -v <filename>: 自定义ESSID和BSSID对应的列表文件
  • -d: 自定义为Ad-Hoc模式
  • -w: 自定义为WEP模式
  • -g: 自定义为54Mbit模式
  • -t: 使用WPA TKIP加密
  • -a: 使用WPA ASE加密

mdk3 wlan0mon b -w -g -t -m -c 6

可以看到多了很多乱七八糟的WiFi名

攻击客户端

通过使用伪AP的方式来攻击客户端,监听数据、劫持会话、控制客户端

创建伪AP

  • 首先安装DHCP服务sudo apt-get install isc-dhcp-server -y
  • 修改/etc/dhcp/dhcpd.conf文件配置:
default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
authoritative;
subnet 192.168.2.0 netmask 255.255.255.0 {
      range 192.168.2.100 192.168.2.200;
      option subnet-mask 255.255.255.0;
      option routers 192.168.2.1;
      option broadcast-address 192.168.2.255;
      option domain-name-servers 192.168.2.1;
}
  • 修改/etc/default/isc-dhcp-server:
INTERFACESv4="wlan0"
  • 启动DHCP服务配置网络接口信息:ifconfig wlan0 192.168.2.1/24启动DHCP服务:sudo service isc-dhcp-server start查看DHCP服务状态:sudo service isc-dhcp-server status
  • 创建Iptables规则来启用包转发iptables –flush
    iptables –table nat –append POSTROUTING –out-interface eth0 -j MASQUERADE
    iptables –append FORWARD –in-interface wlan0 -j ACCEPT
    sysctl -w net.ipv4.ip_forward=1
  • 使用Hostapd创建伪AP编辑伪AP配置文件:/etc/hostapd/hostapd-wpa2.confinterface=wlan0
    ssid=WPA2
    channel=6
    beacon_int=100
    hw_mode=g
    wpa=2
    wpa_passphrase=12345678
    wpa_key_mgmt=WPA-PSK
    rsn_pairwise=CCMP启动:hostapd /etc/hostapd/hostapd-wpa2.conf

强制客户端连接到伪AP

通过取消认证洪水攻击来使用户断开与之前网络的连接,并连到我们设置的伪AP中去

劫持会话

用户连接到我们的网络中后,抓其流量包来劫持会话

监听数据

中间人攻击

Ettercap是一个基于ARP地址欺骗方式的网络嗅探工具,可以用来嗅探网络数据包