20199101 2019-2020-2 《网络攻防实践》第四周作业
网络嗅探与协议分析
0.总体结构
本次作业属于哪个课程 | 网络攻防实践 |
---|---|
这个作业要求在哪里 | 网络嗅探与协议分析 |
我在这个课程的目标是 | 学习网络攻防相关技术和原理 |
这个作业在哪个具体方面帮助我实现目标 | 网络嗅探和解析网络协议来分析截获到的信息 |
1.实践内容
第四章的内容分为两个部分,分别是网络嗅探和网络协议分析。具体分为以下几个部分进行回顾。二者通常结合使用来分析截获到的数据。
- 网络嗅探:网络嗅探基本介绍
- 网络嗅探:原理及实现(以太网)
- 网络嗅探:嗅探器软件
- 网络协议分析技术
网络嗅探:网络嗅探基本介绍
网络嗅探利用计算机的网络接口截获目的地址为其他计算机的数据报文,以监听数据流中所包含的私密信息。实现网络嗅探技术的工具称为网络嗅探器。截获到的是经过封包的二进制数据,通常会结合网络协议分析技术来解析嗅探到的网络数据。网络嗅探是攻击者经常使用的内网渗透技术,通常在攻击者获得内部网络中的一台主机的访问权后实施。可以静默地、被动地嗅探网络上传输的数据。所以针对网络嗅探的检测与防范还是比较困难的。下面介绍一些基本的检测防范方法。
- 网络嗅探的检测:如检查网卡是否运行在混杂模式下。也可以通过操作系统和协议栈对混杂模式的香型不同来判断。
- 网络嗅探的防范:采用安全的网络拓扑(交换式网络),用静态ARP代替动态,避免明文传输,重视网络集中节点的保护(路由器,交换机等)。
以太网和WiFi是有线局域网和无线局域网最流行的链路层协议,也是网络嗅探的主要监听对象。
- tcpdump支持对以太网的嗅探
- kismet支持WiFi网络的监听
- 以上两种针对不同局域网的嗅探器在对数据包实际进行破解和分析的时候完全没有区别。唯一的区别是无线嗅探器可以读取和分析符合无线传输协议的数据包。
网络嗅探器按照实现形式可以分为软件嗅探器和硬件嗅探器:
- 硬件嗅探器通过专用网络对网络数据进行捕获和分析,也称为协议分析仪。
- 软件嗅探器一般实现位不同操作系统类型上的应用软件,通过对网卡进行编程实现。
网络嗅探:原理及实现(以太网)
这一小节从以太网的工作原理到共享式网络和交换式网络的嗅探,最后介绍了类Unix平台和Windows平台的网络嗅探技术的实现。
-
以太网的工作原理:以太网是共享通信信道数据以帧为单位传输,以太网帧头中包括发送源的MAC地址与目标MAC地址。当站点需要发送数据时,通过协议栈进行TCP/IP封包,在数据链路层“装配”帧头与帧尾,发送至共享通信介质上。网卡驱动程序在正常模式下,只会接受目标MAC地址与自身MAC地址相匹配的数据帧。但是网卡的混杂模式将会接收一切通过它连接共享通信媒介的数据帧。
-
共享式网络嗅探:使用集线器连接,集线器上任意一台主机都能够嗅探整个集线器上的全部网络流量。
-
交互式网络嗅探:通过MAC地址映射表来发送数据。通常有以下三种方式实现嗅探
- MAC地址泛洪攻击:向交换机发送大量含有虚构MAC地址和IP地址的数据包,使映射表溢出无法处理,交换机进入类似集线器的工作方式。
- MAC欺骗:通常用于突破基于MAC地址的局域网访问控制。这里书上讲的比较模糊,参考MAC地址欺骗
- ARP欺骗:利用IP地址与MAC地址之间进行转换时的协议漏洞,达到MAC欺骗,这里推荐详细参考ARP欺骗窃听秘密及实现。
-
类Unix网络嗅探技术实现:通过内核态的BPF和用户态的libpcap抓包工具库实现。BPF是数据链路层上的原始接口,提供原始链路层封包的收发功能。如果网卡处于混杂模式,将会收到网络上所有包。libpcap与内核态BPF包嗅探与过滤机制想配合,为类Unix平台上的应用程序提供标准的网络嗅探接口,网络数据包的标准格式为pcap。
-
Windows网络嗅探技术实现:Windows操作系统内核不提供标准的网络嗅探与抓包接口。NPF是一个内核态虚拟设备驱动程序,功能是过滤数据包,将数据包原封不动传给用户模块。WinPcap包括packet.dll和wpcap.dll两层模块的标准抓包接口。
网络嗅探:嗅探器软件
通常使用的网络嗅探器软件一般基于标准接口BPF和libpcap,最常用包括libcap抓包开发库、tcpdump以及wireshark嗅探器软件(类Unix平台和Windows平台)。
- libpcap抓包开发库:libpcap开发的基本步骤是打开网络设备、设置过滤规则、捕获数据、关闭网络设备。详细内容可以参考libpcap详解。(虽然现在已经好多一体化的敲两个命令就完成的软件,但是通过抓包库开发一个自己用的仍然意义重大。)
- tcpdump:tcpdump是通用的命令行网络嗅探器与数据包分析协议。通过
src 192.168.199.200 and tcp dst port 80
可以查看源主机向外连接的HTTP网络流量的情况。通过tcpdump
将监视第一个网络接口上所有流过的数据包。 - Wireshark嗅探器软件:是一款开源数据包分析工具,主要作用是捕获网络数据包,对于数据包进行协议分析以尽可能显示详细的情况,并以更容易理解的格式呈现给用户。
网络协议分析技术
网络嗅探截获的是通过封包过程组装的二进制格式原始报文内容,为了获取其包含信息,要根据TCP/IP协议栈的协议规范重新还原数据包在各个协议层上的协议格式及内容。目前主要的网络协议分析工具是wireshark。网络协议分析的典型过程包括以下几个步骤(找了一张高清图):
-
网络嗅探得到的原始数据是在链路层传输的二进制数据包。
-
对帧结构进行分析,得到帧头各字段结构,根据帧头字段确定网络层的协议类型,并提取包含网络层数据的内容。
-
进一步对IP数据包进行分析,确定传输层协议类型,提取传输层数据内容。
-
根据TCP或UDP目标端口确定确定具体的应用层协议,得到应用层特定协议的应用交互内容。
-
依据相应应用层协议对数据进行整合恢复,得到实际传输数据。
2.实践过程
tcpdump
任务:利用tcpdump对在本机上访问www.tianya.cn网站过程进行嗅探。在访问网站首页时,浏览器将访问多少个web服务器,IP地址是什么?
Solution
访问天涯主页,使用命令
tcpdump -nn '(tcp[tcpflags] & tcp-syn !=0 and tcp[tcpflags] & tcp-ack!=0) and (host 192.168.3.7
解释一下这个命令,指定IP192.168.3.7
,搜索条件是:tcp-syn !=0
和tcp-ack!=0
,即抓取syn不等于0并且ack不等于0的包。关于tcpdump还有许多指令,例如,tcpdump host tianya.cn
,tcpdump src 192.168.3.7 and tcp dst port 80
等等。可以通过tcpdump抓包实例学习更多的tcpdump指令。
通过观察上图,发现主要经过的Web服务器如下:
221.182.218.238
221.182.218.244
221.182.218.151
39.156.66.179
124.225.214.214
52.94.234.174
54.240.131.213
动手实践Wireshark
任务:使用wireshark对在本机上以telnet方式登录BBS进行嗅探与协议分析。
- BBS服务器的IP地址与端口?
- telnet协议是如何向服务器传送你输入的用户名及登录口令?
- 如何利用wireshark分析嗅探的数据包,并从中获取用户名及登录口令?
Solution
首先说明一下自己遇到的坑:我的kali攻击机对中文是乱码的,所以我参照Kali中文乱码安装了中文字体等等操作,我的终端也是可以显示中文字体的,甚至我把系统改成中文,然而进BBS还是下图这个鬼样子。后来经过不懈寻找,终于我发现了原来一条指令解决问题luit -encoding gbk telnet bbs.fudan.edu.cn
(指定编码格式)。
下面开始正文:
后面的以复旦大学bbs为例。首先打开Wireshark,然后在终端输入luit -encoding gbk telnet bbs.fudan.edu.cn
进入复旦大学bbs论坛。通过Wireshark的捕获,我们发现其IP地址为202.120.225.9
,其端口为23
。
Telnet协议在传输用户名和密码时采用的时明文传输,我们通过追踪TCP流可以看到我们的用户名guest
。选择下方的对话是从你的主机到复旦大学bbs,可以发现用户名为guest
,密码为空。
取证分析实践
任务人为构造的到一台蜜罐主机的5次不同类型的端口扫描。
- 攻击主机的IP地址是什么
- 网络扫描的目标IP地址是什么
- 本次案例中是使用了哪个扫描工具发起这些端口扫描?你是如何确定的
- 你所分析的日志文件中,攻击者使用了那种扫描方法,扫描的目标端口是什么,并描述其工作原理
- 蜜罐主机上哪些端口被发现是开放的
- 攻击主机的操作系统是什么
Solution
攻击主机的IP地址是什么?网络扫描的目标IP地址是什么?本次案例中是使用了哪个扫描工具发起这些端口扫描?
- 我们可以使用snort对二进制记录文件进行入侵检测。首先通过
sudo apt-get install snort
安装snort,并给予snort.conf
可读可写可执行权限sudo chmod 777 /etc/snort/snort.conf
,运行指令sudo snort -A console -q -u snort -c /etc/snort/snort.conf -r ~/listen.pcap
查询结果如下(详细的snort指令介绍,本文用到的-A
是开启报警模式,-q
为不显示状态报告,-r
为从pcap格式的文件中读取数据包)。 - 同时,我们也可以采用Wireshark进行分析(导入文件后打开统计中的conversations观察)。
- 通过上面两个软件的分析,我们可以得到攻击主机的IP为
172.31.4.178
,网络扫描的目标IP是172.31.4.188
。通过snort可以看出是采用namp发起的扫描。
攻击者的扫描方法,并描述其工作原理。
-
首先我们在Wireshark中筛选ARP,因为nmap每次探测主机活跃是在广播域内广播
arp request
报文,而nmap每次扫描之前都会进行主机活跃探测。我们发现第一个和第二次之间并没有数据包,可以确定第一次是采用namp -sP
进行主机活跃探测。 -
通过观察第二次扫描的末尾数据包,发现攻击机针对 ssh、 TCP 和 UDP 的1端口,并使用了大量构造的标志位,以触发不同的响应包,不难确认这些流量是由其
nmap -O
选项所触发的。主要是进行远程主机的操作系统探测,具体实现机制是通过构造一些特殊的数据包发送给目标主机,然后收集反馈包中存在的一些微妙"指纹"(不同操作系统网络协议栈实现上的差异),并与一个已知操作系统"指纹"数据库(nmap-os-fingerprints 文件)进行比较。 -
接下来观察第三次扫描,第三次扫描的往返是13W数据包,估计扫描端口六万多,所以应该是指定端口扫描,使用
namp -sS -p 1-65535
(猜测是全端口扫描),其中-p
指定扫描的端口数。 -
最后来观察最后一次扫描,我们发现第四次扫描的时间都要高于之前扫描的时间,所以我们也可以猜测是
namp -sV
进行网络服务的探测。具体来看下,我们找一个8180
端口(http)。我们发现普通的活跃性检测就是半开扫描,SYN->SYN,ACK->RST
,但是我们观察第四次扫描,建立了握手,并且建立了HTTP连接,说明这次扫描应该是namp -sV
无疑了。
操作系统和端口
-
首先确定端口,通过筛选
tcp.flags.syn == 1 and tcp.flags.ack == 1
,得到开放的端口有:21 22 23 25 53 80 139 445 3306 5432 8009 8180
-
确定操作系统,首先我使用
nmap -O -r listen.pcap
进行操作系统类型的探测,感觉结果不太对,所以又利用p0f -r listen.pcap
进行探测得到结果如下(首先用apt-get install p0f安装),是Linux 2.6.X。
攻防对抗实践
任务:攻击方用nmap扫描,防守方用tcpdump嗅探,用wireshark分析,并分析出攻击方的扫描目的以及每次使用的nmap命令。
说明:这里的重要的分析点已经在上述的实践中完成, 这里仅展示一些攻击。
- 攻击方IP为
192.168.124.128
,用metasploitable作为嗅探IP为172.16.245.128
。 - 在metasploitable上利用指令
tcpdump -i eth0 -w dump.pcap
监听并且保存文件为dump.pcap。 - 在kali主机上用nmap进行攻击,包括
-sP,-sV,-sS,-O
攻击。 - 利用
tcpdump -r dump.pcap
查看和分析,或者导出利用Wireshark进行分析查看。
2.学习中遇到的问题及解决
- 问题一:登陆bbs中文乱码问题
- 问题一解决方案:首先从系统字体入手,发现只要更改登陆的编码即可。
- 问题二:取证分析实践,需要很多知识和工具,在这里浪费了很多时间
- 问题二解决方案:不断查询工具以及其原理
3.学习感悟、思考
- 本次作业已经对专业只是有一定的要求,自己的计算机网络知识方面还比较薄弱,需要继续学习。
- 一边学习,一边做题还是蛮痛苦的。