原文链接:http://www.devx.com/security/Article/34741
翻译:诸神的黄昏
整理校对:玄魂
---
随着⽆线⽹络在家庭和商业中的普及,新的安全挑战是⽆法避免的。保护⼀个⽹络的第⼀步是判断⼀个⽹络的状态 (不需要前置知识),然后来提供相关的防御措施。随着 Scapy 的⾯世,这是⼀个⽤python写的绝佳封包⼯具, 作者是Philippe Biondi ,跟其他的嗅探⼯具 Kismet 和 Airodump-ng 不同,Scapy 可以个性化定制,并且⾮常简 单易⽤。 本⽂概述了使⽤诸如Scapy等⼯具的技术进⾏⽆线⽹络评估和⼊侵检测的⽅法。
⽅法:被动嗅探
⼀个⽆线⽹络包含⼏个⼤的基站,主要分为2个⼤的部分:接⼊点 (access points)和 网卡 (NICs)。这些 基站使⽤ IEEE 802.11 标准来通信。802.11的包封装了下⾯3个帧:管理帧,控制帧以及数据帧。每⼀个部分都包 含了⽤于建⽴连接的不同频道通信的重要信息。
⼀个⽆线⽹络的评估防范可以使⽤下⾯2个⽅法:
- 被动嗅探 - 这是通过在RF监视模式下嗅探⽆线流量来捕获帧。 通过分析帧,可以枚举⽹络,收集信息,确 定攻防弱点,并且制定可能的攻击点。
- 主动的数据包注⼊ - 你可以在此类型的被动数据收集中制定攻击计划。 该计划将涉及在开放系统互连的第2 层(数据链路)中执⾏原始数据包注⼊,并观察产⽣的⽹络或以及异常⾏为。 这可能导致检测到漏洞,例 如缓冲区溢出或绕过⾝份验证。
本⽂主要讨论这种被动嗅探的⽅法论。 以下是这种⽅法的步骤:
- 设置射频监听模式
- 嗅探嗅探数据包并发现⽹络接⼊点
- 发现隐藏的接⼊点和SSID(服务集标识符)
- 收集 MAC 和 IP 地址
- 通过嗅探执⾏相应的⼊侵检测
设置射频监听模式
当您设置射频监听模式时,其NIC应能够嗅探2.4 GHz频谱以捕获802.11数据包。 ⼤多数802.11a / b / g 的⽹ 卡具有这种能⼒。例如,本⽂使⽤Linux来设置NIC,Linux内核包含⼀个驱动程序来搞定此功能。
下⾯是把网卡置于监听模式的命令:
root@bluelinux:/home/shreeraj/wifi# iwconfig eth1 mode monitor root@bluelinux:/home/shreeraj/wifi# iwconfig eth1
eth1 IEEE 802.11b ESSID:"" Nickname:"Prism I" Mode:Monitor Frequency:2.462 GHz Access Point: Not-Associated Bit Rate:11 Mb/s Sensitivity:1/3 Retry min limit:8 Encryption key:off
Power Management:off Link Quality=76/92 Signal level=-26 dBm Noise level=-149 dBm Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0
注意:对于madwifi,您可能需要使⽤wlanconfig命令进⾏设置。
接下来,您需要定义要执⾏数据包嗅探的通道或频率。 使⽤以下命令(⽤频道11做演⽰):
root@bluelinux:/home/shreeraj/wifi# iwconfig eth1 channel 11
您也可以通过为每个频道分配⼀段时间来嗅探不同的频道.
嗅探嗅探数据包与网络发现
接⼊点是关键的基础设施; 它们是⽆线和有线IP⽹络之间的桥梁。 其他NICs连接这些接⼊点,并通过⽆线⽹络将 其连接到较⼤的⽹络。 但是⾮常不幸运的是,接⼊点也正是恶意⿊客的攻击点。 对⽆线⽹络评估的第⼀个要求是 尽最大可能识别接⼊点。
接⼊点被配置为以某种规则的间隔发射信标管理帧(emit beacon management frames)。 这些帧包含关于SSID,MAC地址,时间戳等信息。⼀旦eth1 网卡处于监听模式,⼈们就可以开始访问信标帧。 您可以使⽤Scapy访获取些数据包,如下所⽰:
root@bluelinux:/home/shreeraj/wifi# scapy
Welcome to Scapy (1.0.4.1beta)
>>> conf.iface="eth1"
>>> p=sniff(count=1)
>>> p
>>> p[0]
>>>>>>>>>
>>>
前⾯的代码表明Scapy已经启动并且嗅探到eth1上的⼀个数据包。 查看分组的内容,它是⼀个包含ot11分组信息的信标帧。 Scapy提供了⼀种获取图形视图的⽅法。 在交互式提⽰符下输⼊以下命令可以查看:
>>> pkt=p[0] >>> pkt.pdfdump()
此帧可以帮助你确定关键信息,如接⼊点的MAC地址,SSID和WEP⽀持情况。 您可以为所有不同的Dot11数据包 和帧构建⼀个相同的视图。 该视图对学习802.11标准有很⼤的帮助.
以下是⼀组命令,⽤来从数据包中提取关键字段,该块提供SSID和基本MAC地址:
>>> pkt.addr2
'00:12:17:3c:b6:ed'
>>> pkt.payload.payload.info
'netsquare4'
>>>
您可以从以下命令中得到相同的信息,也可以使⽤sprintf(),这是查看数据包的各种字段的不错⽅法。
>>> pkt.sprintf("%Dot11.addr2%[%Dot11Elt.info%|%Dot11Beacon.cap%]") "00:12:17:3c:b6:ed['netsquare4'|ESS]"
>>>
以下是⼀个收集所有信标包并提取信息的简单脚本。 它使⽤⼀个 unique列表来维护您的基于MAC地址的收集的 信标列表。 这提供了⼤量报⽂中的⼀个可过滤的⽅法。
#!/usr/bin/env python
import sys from scapy import *
interface = sys.argv[1]
unique = []
def sniffBeacon(p):
if p.haslayer(Dot11Beacon):
if unique.count(p.addr2) == 0:
unique.append(p.addr2)
print p.sprintf("%Dot11.addr2%[%Dot11Elt.info%|%Dot11Beacon.cap%]")
sniff(iface=interface,prn=sniffBeacon)
Netsquare7有⼀个隐私位打开开关,表明它是⽀持WEP的。 运⾏此脚本可以发现在其附近的⽆线接⼊点及其配 置。
发现隐藏的接⼊点和SSID
在许多情况下,接⼊点的部署是⽤⼀种限制信标包(beacon)⼴播的形式。 同时,也可以隐藏SSID,因此⽆法通过简单地查 看信标来确定。 前⾯的例⼦检测到⼀个具有隐蔽SSID的信标包,会产⽣如下的结果:
00:06:25:51:6b:79['\x00\x00\x00\x00\x00\x00\x00'|ESS+privacy]
您可以嗅探⾮信标数据包,并尝试确定隐藏的接⼊点或隐藏的SSID。 管理帧的探测和关联会显⽰这些值。 Scapy 还⽀持⼏个层,如下所⽰:
下⾯是⼀个简单的脚本来提取⾮信标包和SSID:
输出结果如下:
很显然,我们已经从接⼊点 00:06:25:51:6b:79收集了 'linksys' SSID,从探测请求和响应数据包中提取出 来。 每当新客户端尝试访问接⼊点时,该数据包将在‘空中’重新发送,并由相应的接⼊点提供服务。 这样你就可以 发现空中隐藏的⽹络。
收集MAC和IP地址
⼀个站点的MAC地址是确认⼀个⽆线⽹络⾝份的关键点。 Dot11数据包在头部有四个地址(见图1)。 Addr1是收 件⼈的地址,addr2是发送者的地址。 这些MAC地址可以很容易地被收集。 这是⼀个简单的脚本来捕捉它们:
以下是⼀个相同的⽰例输出:
该信息可以链接到接⼊点MAC地址以获得连接到该接⼊点的客户端列表! 访问⼀些内部MAC地址以及IP地址的另⼀种⽅法是通过捕获位于Dot11数据包中的ARP和IP层。 如果数据包没有使 ⽤WEP密钥加密,则数据包可以显⽰此内部信息。
这是⼀个⽤于收集这些数据包和信息的⽰例脚本:
这些地址中的⼀些可能在⽹络内部。
MAC地址可以帮助攻击者⼊侵有MAC过滤功能的接⼊点。 接⼊点在关联客户端地址之前对其认证帧中的MAC地址 进⾏认证,攻击者可以通过复制从嗅探流量提取的来MAC地址来欺骗⼀个接⼊点。 所以接⼊点的基于MAC的过滤 抵御是微不⾜道的。
内部IP地址暴露构成另⼀个威胁。 攻击者可以绑定IP地址以及MAC地址,以成为内部⽹络的⼀部分,并启动⼀些 经典的扫描⼯具。
通过嗅探执⾏相应的⼊侵检测
到目前为止,我们已经可以使用上⾯描述的⽅法构建⼊侵检测系统,并可⽤来监视⽆线流量。 您可以使⽤Scapy嗅探此流量,并 在其上构建脚本。 该脚本可以帮助跟踪⼊侵检测。
以下部分介绍了⼀些⽰例。
### 发现诈骗接⼊点:
如果您的⽹络上部署了未经授权的接⼊点,管理员则可以通过捕获信标包或分析⽆线IP流量来查找流量并将其从⽹ 络中排除。 例如假设您的⽹络是192.168.7.0,它由⼀个地址为00:15:3d:3c:a6:eb的接⼊点组成。 您的⽬标 是跟踪正在访问192.168.7.0⽹络的除接⼊点以外的任何周围的接⼊点。
这是⼀个监控流量的⼩脚本:
上⾯的脚本⽤来捕获所有数据包,并深⼊到IP层。 ⼀个⽤来报告的点是数据包的源和⽬标IP地址。 如果这些数据 包不是由MAC地址定义的授权接⼊点的⼀部分,则标记它们。 这可能是运⾏在192.168.7.0上的潜在接⼊点。 ⼀旦 您发现⼊侵,您可以从有线端检验他们的存在和流量以减少误报。 此⽰例使⽤正则表达式来⽐较这些⽹络。 这是 脚本的输出结果:
上述的⽰例是⼀个授权的MAC地址使⽤ ip 192 .168 .7 。*。 ⽽来⾃未授权的MAC(接⼊点)的⽹络 192.168.7.0的流量会被嗅探到。 这可能就是⽹络中的⼊侵。
前⾯的脚本使⽤⼀个带有基地址和SSID的授权接⼊点,嗅探其信标包,同时使⽤不同的基本MAC寻找相同的 SSID。 该脚本报告任何和所有接⼊点,如下所⽰:
未经授权的MAC地址检测
你可以通过嗅探所有数据包来检测尝试访问MAC地址,其地址不在授权列表的攻击者的探针。 你也可以根据 DHCP服务器分配的IP建⽴授权MAC列表。 例如,为了观察源⾃未授权MAC的流量,准备⼀个授权的MAC列表, 并将它们放在⼀个⽂件中。 然后使⽤这个脚本:
⾸先读取⽂件,然后继续监控⽬标接⼊点。 报告包含未授权MAC的Dot11数据包,如下所⽰:
⽤这种⽅法你可以持续地监控来⾃攻击者的未授权流量,并维护⼀份MAC地址的⽩名单。
监测破解授权以及破解分组
从未经授权的MAC地址来的解密和解除分组包可以清楚地表明这是⼀个攻击⽹络的⾏为。 他们可能会是拒绝服务 (DoS)或中间⼈(man-in-the-middle)攻击。 以下脚本可以报告这些数据包,并附有MAC地址。 如果接⼊点未重 新启动,并且这些数据包是可观察的,则有⼈可能会在客户端注⼊这些数据包。
这样你就可以跟踪来⾃恶意硬件的任何⼊侵。
以下是您可以监视的其他⼏个⼊侵检测点:
.检测客户端探针 - 笔记本电脑等客户端通常连接到家庭⽹络。 当在⼯作场所使⽤时,这些客户端将继续向家 庭⽹络发送探测请求。 攻击者可以设置接⼊点来为这些客户端提供服务。 这种双重托管服务和⽹络使⽹络 受到威胁。 持续地嗅探流量来检测这些可能的⼊侵点。
.Ad-hoc 客户端检测 - 可以通过嗅探流量来检测Ad-hoc客户端,并对双⽹络主机构成威胁。
.接⼊点信道改变 - 接⼊点信道可以通过未经授权的访问或当⼀个虚拟接⼊点在具有相同SSID的不同信道上⼯ 作时被改变。
随机MAC地址 - 如果通过随机MAC访问接⼊点,则可以假定⼯具或脚本正在被运⾏。
.确定数据包的注⼊ - 发送多个数据包⽽却未实际连接到接⼊点的客户端可能在尝试注⼊恶意数据包。
.破解包 Flood - ⼀个⼤量破解认证帧的接⼊点表⽰可能的DoS攻击尝试。 类似地,可以使⽤有线来检测到使 ⽤不同帧的Flood。
.弱点检测 - 您可以嗅探流量来检测⽹络上的默认SSID,⼴播SSID,弱IV,ad-hoc操作,使⽤Hotspot SSID 运⾏的接⼊点,NetBIOS流量,外出的ARP数据包以及连接到流氓的授权客户 接⼊点
通过好的嗅探脚本可以⽣成警报,以减少对⽆线基础设施的威胁。 ⼀旦这些信息到位,您可以通过以适当的功能 修补驱动程序,将数据包注⼊⽆线⽹络来执⾏主动的⽹络评估。 在这⾥,Scapy也派上⽤场,因为它可以使⽤ sendp()在第2层注⼊数据包。
检测您的⽆线⽹络中的漏洞
虽然⽆线评估正在成为渗透测试和⽹络评估的重要组成部分,但分析⽆线⽹络和相关产品是⼀项具有挑战性的任 务。 本⽂结合Scapy讨论的⽅法可以帮助您检测⽆线⽹络中的漏洞。 Scapy在Python中以交互式和脚本⽅式运作, 增强了其有效性,使其成为⽆线⽹络评估⼯具包中必不可少的⼯具。 Scapy也是可扩展的,允许您构建强⼤的脚本 来执⾏⽹络监控。
本文首发于玄魂工作室微信订阅号