20199324 2019-2020-2 《网络攻防实践》第4周作业
作业说明
这个作业属于哪个课程 :课程链接
这个作业的要求在哪里 :作业要求链接
我在这个课程的目标是 :学习网络攻防相关技术并进行实践
这个作业在哪个具体方面帮助我实现目标:学习网络嗅探技术与网络协议分析
作业正文
1.实践内容(知识点总结)
网络嗅探
- 定义:网络嗅探是一种黑客常用的窃听技术,利用计算机的网络接口截获目的地为其他计算机的数据报文,以监听数据流中所包含的用户账户密码或私密信息等。
- 网络嗅探器:实现网络嗅探技术的工具称为网络嗅探器。嗅探器捕获的数据报文是经过封包处理之后的二进制数据,因此通常会结合网络协议分析技术来解析嗅探到的网络数据,这样才能恢复出TCP/IP协议栈上各层网络协议的内容,以及事件发送的应用层信息。
- 网络嗅探器的原理和实现
- 以太网工作原理:以太网采用了CSMA/CD技术,由于使用了广播机制,所有与网络连接的工作站都可以看到网络上传递的数据。网卡是网络中主机接收发送数据的硬件设备。网卡完成收发数据包的工作。网卡对于数据的接收有四种模式:
- 广播模式:该模式下的网卡能够接收网络中的广播数据。
- 组播模式:该模式下的网卡能够接收组播数据。
- 直接模式:只有匹配目的MAC地址的。网卡才能接收该数据。
- 混杂模式:无论其目的MAC地址是什么,网卡都能够接收一切监听到的数据。
- 网络监听的原理:
- 利用以太网的特性把网卡置为混杂模式状态的工具,一旦网卡设置为这种模式,它就能接收经过它的每一个信息包。
- 共享式网络嗅探:使用集线器连接,集线器上任意一台主机都能够嗅探整个集线器上的全部网络流量。
- 交互式网络嗅探:通过MAC地址映射表来发送数据。通常有以下三种方式实现嗅探:
- MAC地址泛洪攻击
- MAC欺骗
- ARP欺骗
- 以太网工作原理:以太网采用了CSMA/CD技术,由于使用了广播机制,所有与网络连接的工作站都可以看到网络上传递的数据。网卡是网络中主机接收发送数据的硬件设备。网卡完成收发数据包的工作。网卡对于数据的接收有四种模式:
- 网络嗅探器软件
- 类UNIX平台网络嗅探器软件
- libpcap抓包开发库:类UNIX平台上基于内核态BPF向应用程序提供的标准抓包开发库。
- tcpdump嗅探器软件:最老的也是最通用的嗅探器程序。是通用的命令行网络嗅探与数据包分析程序,允许用户能够从主机所在网络上截取和显示特定的TCP/IP数据包。善用BPF过滤器规则也是利用tcpdump进行深入网络数据包与分析的关键所在。
- wireshark嗅探器软件:是当前类UNIX平台下最好的基于图形界面的嗅探器软件。可以捕获网络数据包,并进行详细的协议分析。
- Windows平台上有类UNIX平台上对应的移植版本,此外还有snifferPro等。
- 类UNIX平台网络嗅探器软件
- 网络嗅探的检测与防范
- 检测:网络嗅探是一种被动攻击手段,检测困难。可以通过探测网卡是否处于混杂模式来进行检测;可通过构建MAC地址不合法但是IP地址有效的ICMP Echo请求进行测试网卡是否处于混杂状态。Windows平台,mac地址前8位是否为0xff。
- 防范措施:使用安全的网络拓扑;用静态ARP和“MAC-端口映射表”;重视网络安全中集中位置点的安全防范;避免使用明文传输口令或敏感信息的网络协议。
网络协议分析
- 定义:网络协议分析是网络嗅探器进一步解析与理解捕获数据包必须的技术手段,是指对网络上传输的二进制格式数据包进行解析,以恢复出各层网络协议信息以及传输内容的技术方法。
- 原理:网络协议分析需要从底向上逐层解析网络协议,同时进行IP分片包以及TCP会话的重组,需要解析与保存各个网络层次上的所有包头字段信息,以及最高层的应用层数据,并提供给用户以了解网络数据包的全方位信息。
- 数据包的解包过程图示:
- 技术实现:在开源的软件如Tcpdump、Wireshark和Snort中都有相应源码实现。
- 网络协议分析工具:Wireshark
- 过滤源ip、目的ip:在wireshark的过滤规则框Filter中输入过滤条件。例如:查找源/目的地址为192.168.200.2的包
ip.src/dst==192.168.200.2
- 端口过滤:
- 把源端口和目的端口为80的包都过滤出来:
tcp.port==80
- 只过滤目的端口为80的包:
tcp.dstport==80
- 只过滤源端口为80的包:
tcp.srcport==80
- 把源端口和目的端口为80的包都过滤出来:
- 协议过滤:在Filter框中直接输入协议名即可
- http模式过滤:
- 过滤get包
:http.request.method=="GET"
- 过滤post包:
http.request.method=="POST"
- 过滤get包
- 可以使用and、or、not连接多个条件
- 过滤源ip、目的ip:在wireshark的过滤规则框Filter中输入过滤条件。例如:查找源/目的地址为192.168.200.2的包
2.实践过程
动手实践:tcpdump
使用tcpdump开源软件对在本机上访问www.tianya.cn网站过程时进行嗅探。回答问题:在访问www.tianya.cn网站首页时,浏览器将访问多少个Web服务器?他们的IP地址都是什么?
- 先在kail上访问www.tianya.cn网站
- 在terminal运行命令
sudo tcpdump src 192.168.200.3 and tcp dst port 80
,其中src
和dst
是确定传输方向的关键字,指明ip包中源地址是192.168.200.3
,表示只捕获80端口的TCP协议数据包,监听192.168.200.3的http通信。
- 成功得到浏览器访问的Web服务器的IP地址
124.225.135.230
、124.225.65.154
、124.225.214.205
、124.225.65.155
。 - 通过
nslookup tianya.cn
命令查看www.tianya.cn对应的IP地址。
- 查看相关资料,发现还可以用命令
tcpdump host tianya.cn
、tcpdump -nn '(tcp[tcpflags] & tcp-syn !=0 and tcp[tcpflags] & tcp-ack!=0) and (host 192.168.0.11)'
等实现。其中 后者中的-nn
指定将每个监听到的数据包中的域名转换成IP、端口从应用名称转换成端口号后显示,(tcp[tcpflags] & tcp-syn !=0 and tcp[tcpflags] & tcp-ack!=0)
是同时抓取带有SYN和ACK的数据包。
动手实践:Wireshark
任务:使用Wireshark开源软件对在本机上以telnet方式登录BBS进行嗅探与协议分析。回答如下问题并给出操作过程:
- 你所登录的BBS服务器的IP地址与端口各是什么?
- telnet协议是如何向服务器传送你输入的用户名及登录口令的?
- 如何利用Wireshark分析嗅探的数据包,并从中获取用户名及登录口令?
- 选择在主机上进行telnet,首先将telnet打开
- 打开wireshark
- 以
bbs.fudan.edu.cn
为例,在命令行输入telnet bbs.fudan.edu.cn
进入论坛
- 发现所登录的BBS服务器的IP为
202.120.225.9
,然后输入new
进行注册
- 再重新进入:
- 在wireshark的过滤器直接输入 telnet ,即可过滤显示telnet相关的数据包,通过查看wireshark里面可知其端口号为23
- 可以发现这里传递用户名和密码时,是一个字符一个字符传递的。
- 可以看到传递密码是用明文传输的,很容易被获取,可知telnet是明文传输非常的不安全。
- 也可以通过追踪TCP流可以看到用户名和密码
- telnet协议是如何向服务器传送你输入的用户名及登录口令的?
- Telnet是一个简单的远程终端协议,Telnet服务是建立在tcp基础之上的
- 终端用户通过键盘输入的数据传给操作系统内核的终端驱动进程,由终端驱动进程再将数据传给Telnet客户进程,Telnet客户进程把收到的数据传送TCP,由TCP在客户端和服务器端建立TCP连接,数据就通过TCP连接送到了服务器端,服务器的TCP层将收到的数据送到相应的应用层Telnet服务器进程。
实践作业-取证分析实践:解码网络扫描
分析由人为构造的到一台蜜罐主机的5次不同类型的端口扫描。网络入侵检测器 snort捕获每次扫描的流量并存入tcpdump格式二进制网络日志文件中。
问题:
1. 攻击主机的IP地址是什么?
2. 网络扫描的目标IP地址是什么?
- 打开下载好的
listen.pcap
,选择菜单栏中的统计->会话,再点击IPv4,可以看到172.31.4.178
和172.31.4.188
之间有大量的双向的网络数据包,因此可初步确定这两个是攻击主机IP和网络扫描的目标主机IP。
- 查看会话数据包内容,发现所有的请求数据包(如TCP SYN包)则是从172.31.4.178发起,所有的响应数据包(如SYN/ACK包)均是从172.31.4.188发出。
- 攻击主机的IP地址是:
172.31.4.178
- 网络扫描的目标IP地址是:
172.31.4.188
3. 本次案例使用了哪个扫描工具发起这些端口扫描?你是如何确定的?
- 将
listen.pcap
复制到kali虚拟机中,使用snort对二进制记录文件进行入侵检测。
sudo apt-get update // 更新APT库
sudo apt-get install snort // 安装snort
sudo chmod 777 /etc/snort/snort.conf // 给予snort.conf可读可写可执行权限
snort -A console -q -u snort -c /etc/snort/snort.conf -r ~/listen.pcap // -A开启报警模式,-q不显示状态报告,,-u为初始化后改变snort的UID,-c为使用后面的配置文件,进入IDS模式,-r从pcap格式的文件中读取数据包
- 可以发现本次攻击是使用nmap发起的。
4. 你所分析的日志文件中,攻击者使用了哪种扫描方法,扫描的目标端口是什么,并描述其工作原理。
-
扫描前nmap会通过arp更新目标MAC地址,所以使用Wireshark的过滤器扫描出arp包,可以看到共进行4次nmap扫描。
-
可以看出攻击机第一次nmap扫描和第二次nmap扫描之间没有数据包,则第一次nmap扫描为探测目标IP是否活跃,指令为
nmap -sP 172.31.4.188
-
nmap扫描原理是基于ping的,因此每次扫描时,nmap会通过ARP来确定目标MAC地址,在wireshark中过滤到四组ARP(从攻击机到目标主机),说明共进行了四次端口扫描。
-
观察第二次扫描的末尾数据包,发现有大量的TCP协议、ICMP协议、UDP协议数据,并使用了大量构造的标志位,以触发不同的响应包。
-
猜测该扫描为主动探测操作系统
nmap -O
扫描。Nmap内部包含了2600多种已知操作系统的指纹特征,根据扫描返回的数据包生成一份系统指纹,将探测生成的指纹与nmap-os-db中指纹进行对比,查找匹配的操作系统。如果无法匹配,则以概率形式列举出可能的系统。 -
第三次ARP后均为TCP协议数据,并且数据量庞大(从2071排到了133219),可以看到在数据包中存在大量SYN请求包,通过过滤器搜索
tcp
-
可以看到序号9、10、13是一组半开放扫描,使用不完整的tcp三次握手来对目标主机进行尝试性的连接,攻击主机的57738号端口对目标ip的3306号端口发送SYN包,目标ip的3306号端口开放,返回一个 TCP SYN & ACK 包,然后攻击主机发送一个 RST 包停止建立连接。这是典型的半开放扫描(TCP SYN 扫描),下面红色和蓝色框框中的也是类似,分别监测出目标主机的23号端口、80号端口和139号端口开放。
-
再看绿色框框中,攻击主机对目标机的955号端口发送了SYN包,该端口返回一个 TCP RST & ACK 包,说明该端口关闭。
-
猜测以扫描的指令可能为
nmap -sS -p 1-65535 172.31.4.188
进行TCP SYN全端口扫描。 -
第四次ARP后,不仅有TCP协议数据,还有HTTP、TELNET、SMB应用层协议的数据。
-
在TCP的端口中,某些端口是确定的,比如22号端口用于ssh登录。以22号端口为例使用过滤器命令为
tcp.port == 22
。
-
发现除了建立TCP SYN扫描,还建立了ssh连接,这是为了探测靶机的网络服务,于是猜测攻击机对靶机进行了
-sV
的版本扫描。
5. 在蜜罐主机上发现哪些端口是开放的?
- 通过过滤器的
tcp.flags.syn == 1 and tcp.flags.ack == 1
可以过滤出SYN | ACK的数据包,这是目标主机反馈攻击主机的端口活跃信息。可查看靶机的开放端口有:21 22 23 25 53 80 139 445 3306 3632 5432 8009 8180
6. 攻击主机的操作系统是什么?
- 使用p0f工具,p0f是一款被动探测工具,能够通过捕获并分析目标主机发出的数据包来对主机上的操作系统进行鉴别,即使是在系统上装有性能良好的防火墙的情况下也没有问题。
- 在终端先输入
sudo apt-get install p0f
安装p0f,再输入sudo p0f -r listen.pcap
探测,得知版本为linux 2.6.x。
实践作业-攻防对抗实践
攻击方用nmap扫描(达到特地目的),防守方用tcpdump嗅探,用Wireshark分析,并分析出攻击方的扫描目的以及每次使用的nmap命令。
- kali为攻击方,IP地址为
192.168.200.3
,seedubuntu为防守方,IP地址为192.168.200.6
。 - 在seedubuntu上利用指令
tcpdump -i eth6 -w /home/seed/dump.pcap
监听并且保存文件为dump.pcap。 - 在kali主机上用nmap进行攻击,依次包括
-sP,-sT,-sS,-O,-sV
攻击。 - 利用Wireshark进行分析查看
哪些端口是开放的?
- 通过过滤器的
tcp.flags.syn == 1 and tcp.flags.ack == 1
可查看靶机的开放端口只有22号。
攻击者使用了哪种扫描方法?
-
通过查看ARP数据包推测攻击方的命令:
nmap -sp 192.168.200.6
-
IP存在,该IP会通过ARP回应攻击IP,发送自己的MAC地址与对应的IP。
-
ARP适用范围多限于内网,通过互联网进行地址扫描一般基于Ping请求。如果IP存在,则返回Ping reply。
-
因为已知扫描目标主机只开放了22号端口,所以通过过滤器的
tcp.port==22
查看。攻击方:首先发起SYN
包;目标:返回SYN ACK
;攻击方:发起ACK
;攻击方:发起RST ACK
结束会话,证明目标端口开启。这是典型的全连接扫描,调用操作系统提供的connect()函数,通过完整的三次TCP连接来尝试目标端口是否开启。全连接扫描是一次完整的TCP连接。推测攻击方的命令:nmap -sT 192.168.200.6
-
半连接扫描不使用完整的TCP连接。攻击方发起
SYN
请求包;如果端口开启,目标主机回应SYN ACK
包,攻击方再发送RST
包。如果端口未开启,目标主机直接返回RST
包结束会话。下图用半开放扫描扫描到22号端口开放,推测攻击方的命令:nmap -sS 192.168.200.6
-
发现还建立了ssh连接,这是为了探测靶机的网络服务,于是猜测攻击机对靶机进行了-sV的版本扫描,命令为
nmap -sV 192.168.200.6
3.学习中遇到的问题及解决
-
问题1:
-
问题1解决方案:在终端先输入
sudo apt-get install p0f
安装p0f,再输入sudo p0f -r listen.pcap
探测 -
问题2:
-
问题2解决方案:原因是不存在名称为eth0的网卡,执行命令
ifconfig -a
查看本机的网卡名称是eth6,把命令里面的网卡名称eth0替换成本机网卡名eth6 ,问题解决。
4.实践总结
本章学习了tcpdump的一些命令,还有wireshark的过滤等功能全部实践下来,对wireshark还是不够熟悉,其中使用nmap进行网络服务类型探查时wireshark抓包的分析还是不很清楚。还要多加努力。