嗅探技术是网络安全攻防技术中很重要的一种,通过它可以获取网络中的大量信息。与主动扫描相比,嗅探更难以被察觉,能够对网络中的活动进行实时监控。
网络嗅探器实际上就是网络中的窃听器,其用途就是捕获分析网络中的数据包,帮助网络管理员发现入侵、分析网络问题等等,它是能够进行嗅探的软件或硬件设备。通过嗅探得到二进制的数据包后,对这些数据包进行解析和理解,获得协议字段与传输的数据的过程就是网络协议分析。所以说,网络嗅探与网络协议分析联系紧密。
对于攻击者来说,通过网络嗅探,进行协议分析,能够窃取内部机密,搜集信息。而对于管理员来说,网络嗅探可以实现网络流量情况的监听,定位网络故障,并且能够为网络入侵检测提供底层的数据来源。
网络嗅探的关键在于以太网的通信机制和网卡的工作模式。迄今为止,以太网仍然是最普遍的组网方法之一,而以太网的共享特性决定了嗅探能够成功。由于以太网是基于广播方式传送数据,因此网络中所有的数据信号都会被传送到每一个主机节点,这样每一台机器实际上都能接受到数据帧。一个网络接口使用网卡的接收模式有以下几种:
因此只要将网卡的工作模式设置为“混杂模式”,网卡将会接受所有传递给他的数据包,从而实现嗅探。嗅探得到结果后,再进行网络协议分析,根据网络协议分析的粒度可以分为三种:针对原始数据包进行分析,层次最低、最细粒度;对网络流(会话)进行分析,通过5元组进行流(会话);以及网络流高层统计。针对网络报文分析的工具,常用的有集成工具WireShark,网络流重组工具Nstreams、Snort,进行高层统计和摘要分析的Netflow、RRDTools等等。
作为一款高效免费的抓包工具,wireshark可以截取各种网络封包,显示网络封包的详细信息,其最大的优势就是免费、开源以及多平台支持,如今其已是全球最广泛的网络数据包分析软件之一。
Wireshark不可以做什么?
Wireshark只能查看封包,而不能修改封包的内容,或者发送封包。且对于网络上的异常流量行为,Wireshark不会产生警示或是任何提示。
Wireshark安装
前往Wireshark官网进行下载,下载完成后一路next安装即可。
(1)打开wireshark,主界面如下图所示。
(2)利用wireshark开始抓包。选择菜单栏上捕获——>选项,只勾选WLAN的混杂模式,点击开始(也可以直接双击上图的WLAN开始)。
(3)查看抓包情况(此时wireshark正不停地捕获WLAN下传输的数据包)
(4)数据包详细信息
各行信息分别为
wireshark与对应的OSI七层模型
wireshark捕获到的TCP包中的每个字段内容
(5)wireshark过滤器
直接使用WireShark捕获包将会得到大量的冗余信息,在几千甚至几万条记录中很难找到自己需要的部分,因而,使用过滤器十分重要。使用WireShark的过滤器有两种方法:
第一种是在Capture Filter中按照libpcap过滤器语言设置好过滤条件。此外,我们也可以捕获后过滤。先捕获所有的数据包,然后通过设定显示过滤器,只让Wireshark显示我们想要观察的那些类型的数据包。我们使用WireShark过滤器时,输入规则若是正确的,则过滤器输入框的背景为绿色,否则,背景为红色。
wireshark过滤器表达式的规则:
直接在抓包过滤框中直接输入协议名即可。tcp,只显示TCP协议的数据包列表;http,只查看HTTP协议的数据包列表;icmp,只显示ICMP协议的数据包列表
ip.src == 192.168.1.102,显示源地址为192.168.1.102的数据包
ip.dst == 192.168.1.102,显示目标地址为192.168.1.102的数据包
ip.addr == 192.168.1.102,显示源IP地址或目标IP地址为192.168.1.102的数据包
tcp.port == 80,显示tcp协议的源主机或者目的主机端口为80的数据包
tcp.srcport == 80,显示TCP协议的源主机端口为80的数据包
tcp.dstport == 80,显示TCP协议的目的主机端口为80的数据包
http.request.method == GET, 只显示HTTP协议下GET请求的数据包
http.request.method == POST,只显示HTTP协议下POST请求的数据包
过滤多个条件组合时,使用and/or。比如获取IP地址为192.168.1.104的ICMP数据包表达式为ip.addr == 192.168.1.104 and icmp
TCP三次握手
抓取TCP包
启动wireshark,打开浏览器输入www.baidu.com;
终止抓包,在过滤栏输入http以过滤隐藏其他无关数据包;
右键选中,点击追踪流——>TCP流,
可以看到这里截获了三个TCP握手数据包,第四个是HTTP数据包,说明HTTP的确是使用TCP建立连接的。
第一次握手,客户端向服务器发送了一个TCP连接请求,标志位SYN = 1,客户端序号Seq(Sequence number)为x = 0,表示客户端请求建立连接
第二次握手,服务器向客户端发回一个确认包,标志位SYN = 1,ACK = 1。服务器序号seq(y)=0,将确认序号ack(Acknowledgement Number)设置为客户端序号seq(x)加1,即0+1=1。
第三次握手,客户端收到服务器发来的包后检查确认序号是否正确,即第一次发送的序号seq是否加1(X+1= 0+1=1)以及标志位ACK是否为1。若正确,客户端会再向服务器端发送一个数据包,标志位ACK=1,确认序号=Y+1=0+1=1,并且把服务器发来的序号seq加1发送给对方,发送序号seq为X+1= 0+1=1。服务器收到后确认序号值与ACK=1。至此,一次TCP连接建立,可以传送数据了。
网络嗅探对于安全防护一般的网络来说,操作简单但同时威胁巨大,很多攻击者使用嗅探器进行网络入侵的渗透。故防范网络嗅探显得尤为重要,可以采用以下防御措施:
[1] Wireshark抓包使用指南
[2] Wireshark使用入门
[3] Wireshark基本介绍和学习TCP三次握手