python无线网络安全入门案例【翻译】

原文链接: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个⽅法:

  1. 被动嗅探 - 这是通过在RF监视模式下嗅探⽆线流量来捕获帧。 通过分析帧,可以枚举⽹络,收集信息,确 定攻防弱点,并且制定可能的攻击点。
  2. 主动的数据包注⼊ - 你可以在此类型的被动数据收集中制定攻击计划。 该计划将涉及在开放系统互连的第2 层(数据链路)中执⾏原始数据包注⼊,并观察产⽣的⽹络或以及异常⾏为。 这可能导致检测到漏洞,例 如缓冲区溢出或绕过⾝份验证。

本⽂主要讨论这种被动嗅探的⽅法论。 以下是这种⽅法的步骤:

  1. 设置射频监听模式
  2. 嗅探嗅探数据包并发现⽹络接⼊点
  3. 发现隐藏的接⼊点和SSID(服务集标识符)
  4. 收集 MAC 和 IP 地址
  5. 通过嗅探执⾏相应的⼊侵检测

设置射频监听模式

当您设置射频监听模式时,其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()

图1 提供了这个特定数据包的PDF⽂档

此帧可以帮助你确定关键信息,如接⼊点的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也是可扩展的,允许您构建强⼤的脚本 来执⾏⽹络监控。

原文发布于微信公众号 - 玄魂工作室(xuanhun521)

原文发表时间:2017-04-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

一则邮件攻击样本分析分享

通过邮件投递病毒文件是网络攻击常用的一种方式,因此防御邮件攻击是每个安全团队都需要重点考虑的内容。中兴通讯每天都会收到数万封外部邮件,为了及时检测每封邮件是否含...

13520
来自专栏Golang语言社区

大型服务端开发的反模式技巧

1. 用线程池执行异步任务 ? 为了减少阻塞时间,加快响应速度,把无需返回结果的操作变成异步任务,用线程池来执行,这是提高性能的一种手段。 你可能要惊讶了,这么...

31960
来自专栏SDNLAB

【连载-5】数据中心网络虚拟化 网关及服务接入

网络虚拟化网关技术 虚拟网络中的虚拟机与外部网络通信的需求催生了网络虚拟化中网关(Gateway)技术的出现。现有虚拟化平台网关产品有:IBM SDN VE G...

36380
来自专栏pangguoming

最火的Android开源项目整理

一、代码库 1、from  代码家 整理比较好的源码连接 ***************************************************...

88840
来自专栏Android开发经验

Android USB转串口通信开发基本流程

37730
来自专栏FreeBuf

一次误报引发的DNS检测方案的思考:DNS隧道检测平民解决方案

随着dns隧道应用的越来越广泛,尤其是xshell事件被公布以后,各大公司纷纷启动对dns隧道的监控,参考xshell的逻辑,大多数公司采取了“监控多个终端请求...

51070
来自专栏ChaMd5安全团队

赛博地球杯初赛第三名,ChaMd5安全团队的writeup

WEB 大量设备报表不见了(签道题) 访问index.php会被跳转到index.php?id=1 而且还有写送分题,尝试很多后,发现是考验爆破,上burpsu...

42390
来自专栏假装我会写代码

Laravel Bash 别名

13320
来自专栏IT技术精选文摘

缓存更新的套路

看到好些人在写更新缓存数据代码时,先删除缓存,然后再更新数据库,而后续的操作会把数据再装载的缓存中。然而,这个是逻辑是错误的。试想,两个并发操作,一个是更新操作...

44570
来自专栏SDNLAB

【连载-5】数据中心网络虚拟化 网关及服务接入

1 网络虚拟化网关技术 虚拟网络中的虚拟机与外部网络通信的需求催生了网络虚拟化中网关(Gateway)技术的出现。现有虚拟化平台网关产品有:IBM SDN VE...

29980

扫码关注云+社区

领取腾讯云代金券