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个⽅法:
- 被动嗅探 - 这是通过在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()
图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也是可扩展的,允许您构建强⼤的脚本 来执⾏⽹络监控。
本文首发于玄魂工作室微信订阅号
python无线网络安全入门案例的更多相关文章
- Python字典的入门案例
查看python版本: [root@localhost ~]# python -V Python 2.7.5 1.基本的字典操作 案例1:简单电话本实现 [root@localhost ~]# vim ...
- Python爬虫Scrapy(二)_入门案例
本章将从案例开始介绍python scrapy框架,更多内容请参考:python学习指南 入门案例 学习目标 创建一个Scrapy项目 定义提取的结构化数据(Item) 编写爬取网站的Spider并提 ...
- Python入门(案例)
Python入门(案例) #一.上课案例: #输出hello wordprint('hello word') #python注释有两种#1.单行注释#这是单行注释#2.多行注释'''这是多行注释''' ...
- 【Zigbee技术入门教程-01】Zigbee无线组网技术入门的学习路线
[Zigbee技术入门教程-01]Zigbee无线组网技术入门的学习路线 广东职业技术学院 欧浩源 一.引言 在物联网技术应用的知识体系中,Zigbee无线组网技术是非常重要的一环,也是大家感 ...
- Python pandas快速入门
Python pandas快速入门2017年03月14日 17:17:52 青盏 阅读数:14292 标签: python numpy 数据分析 更多 个人分类: machine learning 来 ...
- 无线网络安全攻防实战进阶(杨哲) PDF|网盘下载内附提取码|
面对当前国内企事业单位及soho无线网络的飞速发展.智能手机等便携式设备的广泛使用.无线网络犯罪案例日益递增的发展现状,<无线网络安全攻防实战进阶>作为<无线网络安全攻防实战> ...
- 零起点PYTHON机器学习快速入门 PDF |网盘链接下载|
点击此处进入下载地址 提取码:2wg3 资料简介: 本书采用独创的黑箱模式,MBA案例教学机制,结合一线实战案例,介绍Sklearn人工智能模块库和常用的机器学习算法.书中配备大量图表说明,没有枯 ...
- 想学Python不知如何入门,教你!
一.入门引导 想必有很多小伙伴想学习Python,又不知道如何入门,总觉得学习一定要头悬梁,锥刺股!NO,今天给大家分享下如何轻松入门Python! 首先,我们要学习Python,那一定要和你 ...
- Python学习--01入门
Python学习--01入门 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.和PHP一样,它是后端开发语言. 如果有C语言.PHP语言.JAVA语言等其中一种语言的基础,学习Py ...
随机推荐
- mybatis进阶--一对一查询
所谓的一对一查询,就是说我们在查询一个表的数据的时候,需要关联查询其他表的数据. 需求 首先说一个使用一对一查询的小需求吧:假设我们在查询某一个订单的信息的时候,需要关联查询出创建这个订单对应的用户信 ...
- c++编程思想(二)--对象的创建和使用
1.解释器:将源码转换为动作(机器语言),并立即执行 编译器:编译器也会将源码转换为机器语言,但是中间会经过好多步骤,分段编译 ,然后链接,可以实现将代码模块化 2.c++不鼓励多使用预处理命令 3. ...
- C++ 中的 delete[] 机制剖析
本文简单总结了delete[]放在析构函数中VS放在主函数中的区别(针对自己定义类). delete原理简单剖析(摘至https://zhidao.baidu.com/question/1540902 ...
- devexpress设置皮肤、字体以及折叠菜单、伸缩Panel的实现
1.为了体现系统的个性化,越来越多的系统增加了换肤功能.这里例举一个devexpress实现换肤的案例,效果图对比: 第二张图片中更换了皮肤与字体. 2.皮肤数据源绑定代码: //循环添加皮肤名称 f ...
- 初级:使用MD5对字符串进行加密操作
加密技术在企业数据安全中的应用: 大型企业管理软件的应用越来越广泛,企业数据平台涉及局域网.广域网. Internet等,在各类系统中保存的企业关键数据量也越来越大,许多数据需要保存数十年以上,甚至是 ...
- 每天一个Linux命令(08)--cp命令
cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一.一般情况下,shell会设置一个别名,在命令行下复制文件时,如果目标文件已经存在,就会询问是否覆盖,不管你是否使用-i参数.但是如果是 ...
- solr 学习之简介及安装
一.solr简介 Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器.Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置.可扩展,并对索 ...
- 2017-2-22 if语句 if语句的嵌套 以及课堂练习 经典猜拳游戏,闰年判断,输出当前时间的天数等
(一)if语句 1.格式 if(){ }else if() { } 注意:如果if后面不写花括号,只执行下面第一句 (二)语句1:顺序语句 2:循环语句 3:分支语句 课后练习: 1.猜拳游戏(用 ...
- webpack 引用 jquery + bootstrap 报错解决
webpack 引用 jquery + bootstrap , error : jQuery is not defind 在webpack.dev.conf.js plugins[] 加入 new w ...
- 初识Windous程序
文本框Label MaxLength 设置输入文本最大字符 Multiline 表示是否输入多行文本 passwodechar 指示在文本框显示的字符,而不是实际内容 ReadeOnly 表示是否可 ...