一、实验内容
1.1 网络安全属性与攻击模式
网络安全属性 | 含义 | 网络攻击模式 | 含义 |
---|---|---|---|
机密性 | 信息不能被未授权的人明白、使用 | 截获 | 获取双方的通讯信息 |
完整性 | 信息不能随意被更改 | 篡改 | 修改内容,违反完整性 |
可用性 | 被授权的人可以使用 | 中断 | 使通话无法继续 |
真实性 | 不能随便被冒充 | 伪造 | 假冒身份 |
不可抵赖性 | 通信中不能否认自己发出的信息 | —— | —— |
—— | —— | 中间人攻击 | 假设AB进行通话,C对两人的通话进行拦截,并对A声称自己是B,对B声称自己是A |
1.2 网络协议攻击
网络接口层——以太网协议缺陷
MAC地址欺骗攻击:可随意修改网卡的物理MAC地址,在发送数据帧伪造成别的网络接口
网络层——IP协议缺陷
- IP源地址欺骗原理: IP协议下在进行分组交换时,不进行IP源地址验证,只根据目的地址进行转发。因此,攻击机可以修改IP协议包头,伪造发送源,收到欺骗数据包的目标主机会向修改后的假IP源地址发送响应包,但是攻击机无法收到响应包,这类欺骗技术主要应用于不需要收到响应包的情况。
因为攻击机收不到响应包,而一般网络控制服务都是基于TCP协议的,要建立TCP对话首先需“三次握手”
所以,想要进一步攻击,攻击机就要成为“预言家”——预测TCP初始序列号(ISN),然后就有了下面这种攻击
- IP假冒攻击: 基于IP源地址欺骗,通过对受信任主机进行拒绝服务,使其无法正常工作,然后以猜测的ISN伪造受信任主机IP的SYN包,发送给目标主机。
防范措施:
- 使用随机的ISN,这样攻击机就猜不准了
- 使用网络层安全传输协议
- 对传输数据包加密
- 避免采用基于IP地址的信任策略
- IP分片攻击: 利用一些操作系统协议栈、防火墙、入侵检测系统处理特殊IP分片包时的错误和缺陷,以拒绝服务或躲避检测
网络层——ICMP协议缺陷
- ICMP路由重定向攻击: 攻击机伪装成路由器,利用ICMP路由重定向控制数据包路由路径,通过向目标主机发送重定向报文,是自己加入到路由路径中,从而进行嗅探等操作。
ICMP路由重定向是当网络拓扑结构变化或网络出现故障时,可利用ICMP路由重定向报文更新主机的路由表,是主机重新选择更优化的路由路径传输数据。
- Ping洪泛攻击: 攻击机向目标主机发送大量的ICMP Echo请求报文,造成目标主机网络阻塞
防范措施:
- 过滤一些类型的ICMP数据包
- 设置防火墙过滤
- 判断ICMP重定向报文是不是来自路由器
网络层——ARP协议缺陷
-
ARP欺骗攻击: 前面学习了ARP协议的原理,知道ARP采用广播方式来确认目标 MAC地址,但是没有任何验证,攻击机可以伪造回应,使目标主机的IP-MAC映射表里的记录错误。
-
ʕ••ʔฅ 举个栗子ʕ••ʔฅ —— 比如A发送数据给B,C要对A进行ARP欺骗攻击。A会使用ARP协议广播ARP请求包,按理讲广播域内只有B会回应A,发送IP(B)MAC(B)。但攻击机C也会响应,发送IP(B)MAC(C)给A,并且不断发送ARP响应包,以覆盖B发送的ARP响应包在IP-MAC映射表中的信息
防范措施:
- 静态绑定关键的IP与MAC的映射
- 使用ARP防范工具(如ARP防火墙)
- 使用VLAN虚拟子网细分网络拓扑、加密传输数据
传输层——TCP协议缺陷
-
TCP RST攻击: TCP重置报文通过修改“reset”标志位(从0改1)以切断一个TCP会话连接,攻击者可以通过滥用TCP重置报文,切断两个主机间的通信
TCP RST攻击也有可爱的一面 (●’◡’●) ,比如有些网络入侵检测和防御系统使用TCP RST攻击技术阻断可疑的攻击连接,比如我们的长城就是用这个技术对包含封禁内容的会话连接进行中断(似乎又不那么可爱了…)
防御措施: 建立防火墙就好了,比如使用防火墙对带有RST位的包直接丢弃 -
TCP会话劫持攻击: 劫持通信双方已建立的TCP会话连接,冒充其中的一方,与另一方进行通信。劫持可以通过上述的ICMP路由重定向攻击实现
防御措施:
- 禁用主机上的源路由
- 采用静态绑定IP-MAC映射表以及避免ARP欺骗
- 引用和过滤ICMP重定向报文
- 网络层加密机制(IPsec协议)
- TCP SYN洪泛攻击: 利用TCP三次握手,向目标主机发送大量伪造源地址的SYN连接请求,消耗主机的连接队列资源,使通信网络阻塞。
防范措施:
- SYN-Cookie技术
- 防火墙地址状态监控技术
传输层——UDP协议缺陷
UDP洪泛拒绝服务攻击: 通过向目标主机和网络发送大量的UDP数据包,造成目标主机计算机负载提升或网络拥塞,从而使得目标主机和网络陷入不可用的状态,造成拒绝服务攻击,一般被用于分布式拒绝服务攻击(DDos)
防范措施:
- 禁用或过滤监控和响应服务
- 禁用或过滤其他UDP服务
- 利用防火墙或代理机制过滤
二、实验过程
任务:完成TCP/IP协议栈重点攻击实验,具体包括ARP缓存欺骗攻击、ICMP重定向技术、SYN Flood攻击、TCP RST攻击以及TCP会话劫持攻击
Netwox是一款非常强大和易用的开源工具包,可以创造任意的TCP/UDP/IP数据报文,其中包含了超过200个不同功能的网络报文生成工具,每个工具都拥有一个特定的编号)
首先介绍实验用虚拟机,分别是
A:kali虚拟机(攻击机)
B: windows本机(一号靶机)
C: SEED_Ubuntu虚拟机(二号靶机)
分别记录下A,B,C三台计算机的IP地址和MAC地址,使用 sudo ifconfig
或 sudo ip addr
均可查看,windows使用ip/all
命令查MAC地址
主机 | IP地址 | MAC地址 |
---|---|---|
A | 192.168.1.106 | 00:0c:29:ef:16:f7 |
B | 192.168.1.104 | 58:00:E3:C9:A6:4D |
C | 192.168.1.105 | 00:0c:29:25:61:37 |
ARP缓存欺骗攻击
原理
这部分原理较简单,在实验内容部分已总结
实验
- 首先相互ping一下,检查一下了连通性,更新ARP表,后面好做对比
- 实验使用netwox进行ARP欺骗 ,首先使用
sudo apt-get install netwox
命令安装。如果不确定netwox命令的用法,可以通过在终端输入sudo netwox
进入指导界面,选择序号5,再输入想要使用的命令编号,可以查看使用规则
Netwox可以使用33号工具 Spoof EthernetArp packet(构造任意的以太网ARP数据报),80号工具Periodically send ARP replies(周期性地发送ARP应答)报
- 使用
netwox 80 -e MAC(A) -i IP(C)
,带入地址后的命令为netwox 80 -e 00:0c:29:ef:16:f7 -i 192.168.1.104
,成功的将攻击机伪装成Windows
-
为了便于在kali中使用wireshark进行验证,需要对Windows的ARP表也进行更新,使用
netwox 80 -e 00:0c:29:ef:16:f7 -i 192.168.1.105
命令,成功的将攻击机伪装成Windows -
完成ARP欺骗,打开wireshark,让SEED靶机 ping Windows靶机,kali就可以监听到两个靶机之间的通信了。
- 实验结束两个靶机再互相ping一下,还原ARP表
ICMP重定向攻击
原理
ICMP重定向攻击的具体步骤:
-
攻击节点使用IP源地址欺骗技术,冒充IP网关,向攻击节点发送ICMP重定向报文(攻击机先嗅探网络中的数据包,根据自己设定的要求,选择数据包,向源IP地址发送ICMP重定向报文)
-
被攻击节点审核后,将攻击节点设为新网关(路由器)
-
攻击节点开启路由转发,对被攻击节点和外部网络通信进行嗅探监听
-
转发过程中根据重定向原理会发送真实的重定向报文
实验
Netwox可以使用86工具 Sniff and send ICMP4/ICMP6 redirect(ICMP重定向攻击)
-
使用
netwox 86 -f "host 192.168.1.105" -g 192.168.1.106 -i 192.168.1.1
命令,这句话的意思是,嗅探网络中来自SEED靶机192.168.1.105的数据包时,以网关192.168.1.1(网关)的名义,向数据包的源地址发送一个ICMP重定向报文,使之使用192.168.1.106作为默认的路由 -
打开SEED靶机中的wireshark开始抓包,随便访问一个网页,可以看到攻击机以192.168.1.1网关的名义向SEED靶机发送ICMP重定向报文,把自己作为默认路由
- 在SEED靶机中ping另一个靶机,可以看到下一跳路由(nexthop)为攻击机192.168.1.106
Tips:传输层的TCP攻击更大程度上都可使用了网络层的攻击技术进行部分实现!比如TCP会话攻击中的第一步劫持,可以使用IP协议源路由选项、ICMP重定向攻击和ARP欺骗攻击,但是现在大多数路由设备都禁用前两个,因此最普遍的是通过ARP欺骗攻击来进行TCP会话劫持。
Tips:前面的实验鬼使神差的选择了windows做靶机,可能就是觉得本机和虚拟机连比较好玩,到后面要用telnet就傻眼了。因为telnet是明文传输,很不安全,windows只有客户端没有服务器…总之我尝试了半天也没弄清楚。
最后只好改为这样的配置:
A:kali(攻击机)
B: Metasploitable_linux(一号靶机)
C: SEED_Ubuntu(二号靶机)
主机 | IP地址 | MAC地址 |
---|---|---|
A | 192.168.1.106 | 00:0c:29:ef:16:f7 |
B | 192.168.1.108 | 00:0c:29:9d:22:9c |
C | 192.168.1.105 | 00:0c:29:25:61:37 |
Metasploitable_linux同样设置为桥接模式,但是可以通过ifconfig
发现它的IP地址并不会自动变化,需要手动设置。
-
使用
sudo vim /etc/network/interfaces
命令修改 -
使用
sudo /etc/init.d/networking restart
命令重置网卡 -
使用
ifconfig
命令可以查看到IP地址改为了设置的192.168.1.108
到此,三个虚拟机就在一个局域网内了
可以继续愉快的实验了!!
TCP SYN Flood攻击
原理
-
攻击机伪造很多地址向主机发送大量的SYN,消耗靶机的队列资源。
-
此时靶机会回复SYN/ACK,并等待的回复,但是大部分伪造地址是非活跃的,并不会回复RST,靶机就继续发送SYN/ACK,并积压很多半开放队列,最终挤满。
实验
-
设计使用kali攻击SEED靶机的telnet23号端口
-
先利用Metasploitable_linux对SEED靶机发起telnet访问,即
telnet 192.168.1.105
,使用SEED的用户名和密码登录,发现可以正常连接,输入exit退出
Netwox可以使用76工具 Synflood (SYN洪泛)
- 在kali打开wireshark抓包,并在终端使用
netwox 76 -i 192.168.1.105 -p 23
命令开始对SEED靶机进行SYN Flood攻击,在wireshark可以看到大量的伪造源IP的SYN包
- 再次让Metasploitable_linux对SEED靶机发起telnet访问,就变得很慢很慢,但是还是连接上了(队列没被消耗完)
TCP RST攻击
原理:
这一部分在实验内容总结的比较清楚了,不在赘述
实验
Netwox可以使用78工具 Reset every TCP packet (重置每个TCP包)
-
TCP RST攻击与TCP SYN Flood攻击相似,但是比后者要狠,会导致通信直接断开
-
还是打开kali的wireshark抓包,使用
netwox 78 -i 192.168.1.105
命令,这次Metasploitable_linux和SEED靶机彻底失联了…
TCP会话劫持攻击
原理
-
目标主机先与telnet服务器进行连接,并通过身份认证
-
telnet服务器会向靶机发送响应包,并包含服务器当前序列号(SVR_SEQ)以及期望客户端发送的下一个序列号(SVR_ACK)
-
攻击者通过ARP欺骗实施中间人攻击,嗅探出靶机和telnet服务器之间的通信内容,然后假冒靶机的IP地址及身份,向telnet服务器发送数据包,声称自己是靶机。攻击者发送数据包中的序列号必须满足条件:SVR_ACK<=CLT_SEQ<=SVR_ACK+SVR_WND
-
这时靶机仍然会继续与talent服务器之间的连接会话,但是由于与telnet服务器之间的ACK值互相不匹配出现ACK风暴(死循环)
实验
-
打开kali的wireshark抓包,Metasploitable_linux对SEED靶机发起telnet访问建立通信,并输入ls
-
可以在wireshark使用
tcp.port==23
筛选出通信双方之间的数据包,找到ls相关数据包,“l”和“s”是分开发送的,并且一个数据包发送,一个数据包确认
直接找到最后的一个包
- 点击
TransmissionControl Protocol
查看其中的源端口,目的端口,SEQ 和 ACK 信息
- 因为我们要伪造发下一个包,所以直接采用 next SEQ 作为下一个包的 ACK ,采用 ACK 作为下一个包的 SEQ,攻击机使用 netwox 40伪装成Metasploitable_linux给SEED靶机发一个TCP包
Netwox可以使用40工具 Spoof Ip4Tcp packet (伪造Ip4Tcp包)
- 攻击机命令如下
sudo netwox 40 --ip4-dontfrag --ip4-offsetfrag 0 --ip4-ttl 64 --ip4-protocol 6 --ip4-src 192.168.1.108 --ip4-dst 192.168.1.105 --tcp-src 40895 --tcp-dst 23 --tcp-seqnum 1166 --tcp-acknum 97 --tcp-ack --tcp-psh --tcp-window 64 --tcp-data "68656C6C6F776F726C64"
-
参数说明:
-
--ip4-src和--ip4-dst就是源地址和目的地址
-
--tcp-src 40593 就是wireshark中的
-
--tcp-seqnum序列号CLT_SEQ值
-
--tcp-acknum确认号SVR_ACK
-
--tcp-data是伪造的数据
-
第一次发送成功后,并没有出现ACK风暴,failed…找原因
-
询问了同学,最后找到了问题。因为构造数据包是基于最后一个包,但这个包是ACK,而不是数据包。因此SEQ不用+1,并且要使用带raw的,没有raw的是相对值
-
修改后代码(要再从头来一遍):
sudo netwox 40 --ip4-dontfrag --ip4-offsetfrag 0 --ip4-ttl 64 --ip4-protocol 6 --ip4-src 192.168.1.108 --ip4-dst 192.168.1.105 --tcp-src 44476 --tcp-dst 23 --tcp-seqnum 3926719700 --tcp-acknum 384897573 --tcp-ack --tcp-psh --tcp-window 64 --tcp-data "68656C6C6F776F726C64"
- 可以在data部分看到自己设定的数据
- 发送成功后,Metasploitable_linux就会失去连接,但是它还是会一直与SEED虚拟机联系,单方面发送TCP ACK。同时SEED靶机会把攻击机当作Metasploitable_linux,这样攻击机就实现了会话劫持。
Telnet服务过程详解
Telnet远程登录服务分为以下4个过程:
-
本地与远程主机建立连接。该过程实际上是建立一个TCP连接,用户必须知道远程主机的Ip地址或域名
-
将本地终端上输入的用户名和口令及以后输入的任何命令或字符以NVT(Net Virtual Terminal)格式传送到远程主机。该过程实际上是从本地主机向远程主机发送一个IP数据包
-
将远程主机输出的NVT格式的数据转化为本地所接受的格式送回本地终端,包括输入命令回显和命令执行结果
-
最后,本地终端对远程主机进行撤消连接,该过程是撤销一个TCP连接
所以在进行TCP SYN Flood攻击、TCP RST攻击以及TCP会话劫持攻击中,我们使用telnet本质上就是建立一个TCP连接。且telnet以明文形式传输数据,所以非常适合被攻击,我们在wireshark中可以直接在data部分看到发送的数据,通过SEQ\ACK等内容,从而可以伪造数据包等。
三、存在问题
问题一: 虚拟机联不上网,三个虚拟机要设置为统一局域网内
解决方法: 一开始将三个虚拟机都设置为NAT模式,但是SEED虚拟机连不上网,于是选择将三个虚拟机都设置为桥接模式,直接连外网
- 首先查看本机的网络,进入“网络与共享中心”,可以在右侧看到网络WLAN
- 点击WLAN,查看属性,选择Microsoft网络客户端,在上方可以看到本机连接网络的名字
- 切换到VMware,编辑 ——> 虚拟网络编辑器 ——> 以管理员权限更改设置 ——> 选择VMnet0 桥接模式,在下方选择本机网络的名字
设置完成,大家都愉快的联网了,相互也ping通了
问题二: kali安装netwox时,找不到这个包,安装失败
解决办法:先使用sudo apt-get update
命令更新一下,再使用sudo apt-get install netwox
命令就可以成功下载了
问题三: Metasploitable_linux改为桥接模式后,IP地址不会更新
解决办法: 在实验过程中已配图说明
四、学习体会
本章主要学习了以网络层、传输层基于不同协议缺陷的攻击原理与方法,虽然一开始理论都看懂了,但是真正实践的时候,还是会乱,需要反复地琢磨不同协议的通信过程,弄清楚。最后的TCP会话劫持攻击那个长长的命令看的眼花,反复了4、5次才终于输对了。
参考资料:
-
网络测试工具集-netwox
-
ARP缓存欺骗攻击
-
ICMP重定向攻击实验流程
-
Metasploitable2的网络配置