20199112 2019-2020-2 《网络攻防实践》第 5 周作业
内容总结及实践过程
网络安全属性
名称 | 内容 |
---|---|
机密性 | 网络中的信息不被非授权实体获取和使用,通常基于加密算法进行保障 |
完整性 | 信息未经授权不能进行改变的特性,即信息在存储和传输过程中保待不被修改、不被破坏和丢失的特性 |
可用性 | 指被授权实体访问并按需求使用的特性,即当需要时能够正常地存取和访问所需的信息与服务 |
真实性 | 确保通信对方是它所声称的真实实体,而非假冒实体 |
不可抵赖性 | 是指在通信中确保任何方无法抵赖自己曾经做过的操作的安全特性,包括对自己行为的不可抵赖及对行为发生时间的不可抵赖,有时也被称为不可否认性和可审查性 (Accountability) |
网络攻击基本模式
在网络通信中,攻击者可以采取如下四种基本的攻击模式,包括截获、中断、篡改与伪造。
截获是一种被动攻击模式,其目的是获取网络通信双方的通信信息内容,是对机密性的违反,具体攻击技术为嗅探 (Sniffing) 与监听 (Eavesdropping);中断、篡改与伪造都属于主动攻击模式,中断攻击的目标是致使正常的网络通信和会话无法继续,是对可用性的破坏,具体攻击技术为拒绝服务 (Denial of Service, DoS) ;而伪造则是假冒网络通信方的身份,欺骗通信对方达到恶意目的,是对真实性属性的背离,具休攻击技术为欺骗 (Spoofing) ;篡改则是对网络通信过程的信息内容进行修改,使得通信一方或双方接收到篡改后的虚假信息,是对完整性的违背,具体技术为数据包篡改,一般需要结合身份欺骗进行中间人攻击。
网络接口层
网络接口层协议最常用的是以太网协议。在以太网接口检测数据帧,当检测到的数据帧目标 MAC 地址不属于自己时,就直接把它忽略,不发往上层协议,但当网络接口处于混杂模式下时,则可以直接嗅探并截获数据包。
常用的网络接口层协议还有 PPP (Point to Point Protocol) 协议,PPP 协议为在点对点连接上传输多协议数据包提供了一个标准方法,它最初设计是为两个对等节点之间的数据包流量传输提供一种封装协议,主要用来创建电话线路及 ISDN 拨号接入 ISP 的连接,利用以太网资源,在以太网上运行 PPP 来进行用户认证接入的方式称为 PPPoE, 目前流行的 ADSL 上网即使用这一协议。
互联层
互联层的基础协议是互联网协议 IPv4, 其他还包括 ICMP 、 ARP (Address Resolve Protocol, 地址解析协议)、BGP (Border Gateway Protocol, 边界网关协议)等动态路由协议。ICMP 协议运行在 IP 协议之上,BGP 协议运行在 TCP 协议之上,但它们是配合 IP 协议完成网际互联的关键协议,保证了分组交换的正确转发,因此也被认为是互联层的一部分,对于 ARP 协议,一些看法认为是属于 OSI 的数据链路层,但对于 TCP/lP 协议栈则属于互联层,这些都说明了 TCP/IP 协议栈与 OSI 七层模型之间并非具有清晰的层次对应关系。
传输层
传输层协议主要包括 TCP 和 UDP。TCP 建立会话之后的连接过程中,仅仅依靠 IP 地址、端口和 SEQ/ACK 号对通信对方进行验证。UDP 协议作为一种简单的无状态的传输协议,一般只用来传输数据。
应用层
应用层协议非常多样化,目前一些流行应用的应用层协议如 HTTP、FTP、POP3/SMTP、DNS、SMB 等均缺乏安全考虑,并大多采用明文传输,存在被嗅探监听、欺骗与中间人攻击的风险。
IP 源地址欺骗
IP 源地址欺骗 (IP Spoofing) 是指攻击者伪造具有虚假源地址的 IP 数据包进行发送,以达到隐藏发送者身份、假冒其他计算机等目的。
IP 源地址欺骗可以实现的根本原因:IP 协议在设计时只使用数据包中的目标地址进行路由转发,而不对源地址进行真实性的验证。
步骤如下:
- 对受信任主机进行拒绝服务攻击,使其丧失工作能力,避免其在接受到响应包后影响欺骗过程;
- 对目标主机的 TCP 初始序列号 (ISN) 进行取样与猜测,TCP 初始序列号是指目标主机在接受 SYN 报文后,返回 SYN/ACK 报文中的 SEQ 值,攻击主机只有在随后进一步伪造的 ACK 报文中,将 ACK 值正确地设控为目标主机的 ISN + 1,才能够通过目标主机的验证,真正建立起连接,达到欺骗效果;
- 伪造源地址为受信任主机 IP 的 SYN 数据包,发送给目标主机;
- 等待目标主机将 SYN/ACK 包发给已瘫痪的受信任主机;
- 再次伪装成被信任主机向目标主机发送 ACK 包,设置发送数据包的 ACK 值为预测目标主机 ISN + 1,可以通过发送大量不同 ACK 值的数据包以提高命中的可能性;
- 连接建立,假冒被信任主机与目标主机通信。
ARP 欺骗
ARP 欺骗 (ARP Spoofing),有时候也被称为 ARP 下毒 (ARP Poisoning),是指攻击者在有线以太网或无线网络上发送伪造 ARP 消息,对特定 IP 所对应的 MAC 地址进行假冒欺骗,从而达到恶意目的的攻击技术。
ARP 欺骗的原理:
首先我们可以肯定一点的就是发送 ARP 欺骗包是通过一个恶毒的程序自动发送的,正常的 TCP/IP 网络是不会有这样的错误包发送的,而人工发送又比较麻烦。也就是说当黑客没有运行这个恶毒程序的话,网络上通信应该是一切正常的,保留在各个连接网络计算机上的 ARP 缓存表也应该是正确的,只有程序启动开始发送错误 ARP 信息以及 ARP 欺骗包时才会让某些计算机访问网络出现问题。接下来我们来阐述下 ARP 欺骗的原理。
第一步:假设这样一个网络,一个 Hub 或交换机连接了3台机器,依次是计算机 A,B,C。
A的地址为:IP:192.168.1.1 MAC: AA-AA-AA-AA-AA-AA
B的地址为:IP:192.168.1.2 MAC: BB-BB-BB-BB-BB-BB C的地址为:IP:192.168.1.3 MAC: CC-CC-CC-CC-CC-CC |
第二步:正常情况下在 A 计算机上运行 ARP -A 查询 ARP 缓存表应该出现如下信息。
Interface: 192.168.1.1 on Interface 0x1000003
Internet Address Physical Address Type 192.168.1.3 CC-CC-CC-CC-CC-CC dynamic |
第三步:在计算机 B 上运行 ARP 欺骗程序,来发送 ARP 欺骗包。
B 向 A 发送一个自己伪造的 ARP 应答,而这个应答中的数据为发送方 IP 地址是 192.168.10.3(C 的 IP 地址),MAC 地址是 DD-DD-DD-DD-DD-DD(C 的 MAC 地址本来应该是 CC-CC-CC-CC-CC-CC,这里被伪造了)。当 A 接收到 B 伪造的 ARP 应答,就会更新本地的 ARP 缓存(A 可不知道被伪造了)。而且 A 不知道其实是从 B 发送过来的,A 这里只有 192.168.10.3(C 的 IP 地址)和无效的 DD-DD-DD-DD-DD-DD MAC 地址。
第四步:欺骗完毕我们在 A 计算机上运行 ARP -A 来查询 ARP 缓存信息。你会发现原来正确的信息现在已经出现了错误。
Interface: 192.168.1.1 on Interface 0x1000003
Internet Address Physical Address Type 192.168.1.3 DD-DD-DD-DD-DD-DD dynamic |
从上面的介绍我们可以清楚地明白原来网络中传输数据包最后都是要根据 MAC 地址信息的,也就是说虽然我们日常通讯都是通过 IP 地址,但是最后还是需要通过 ARP 协议进行地址转换,将 IP 地址变为 MAC 地址。而上面例子中在计算机 A 上的关于计算机 C 的 MAC 地址已经错误了,所以即使以后从 A 计算机访问 C 计算机这个 192.168.1.3 这个地址也会被 ARP 协议错误的解析成 MAC 地址为 DD-DD-DD-DD-DD-DD。问题也会随着 ARP 欺骗包针对网关而变本加厉,当局域网中一台机器,反复向其他机器,特别是向网关,发送这样无效假冒的 ARP 应答信息包时,严重的网络堵塞就会开始。由于网关 MAC 地址错误,所以从网络中计算机发来的数据无法正常发到网关,自然无法正常上网。这就造成了无法访问外网的问题,另外由于很多时候网关还控制着我们的局域网 LAN 上网,所以这时我们的 LAN 访问也就出现问题了。
ICMP 路由重定向攻击
ICMP 路由重定向攻击 (ICMP Redirect Attack) 是指攻击者伪装成路由器发送虚假的 ICMP 路由路径控制报文,使得受害主机选择攻击者指定的路由路径,从而进行嗅探或假冒攻击的一种技术。
TCP RST 攻击
TCP RST 攻击也被称为伪造 TCP 重置报文攻击 (spoofed TCP reset packet),是指一种假冒干扰 TCP 通信连接的技术方法。
两个例子:
- A 向 B 发起连接,但 B 之上并未监听相应的端口,这时 B 操作系统上的 TCP 处理程序会发 RST 包。
- A 和 B 已经正常建立连接,正在通讯时,A 向 B 发送了 FIN 要求关连接,B 发送 ACK 后,A 网断了,A 通过若干原因放弃了这个连接(例如进程重启)。网络恢复之后,B 又开始或重发数据包,A 不知道这连接哪来的,就发了个 RST 包强制把连接关闭,B 收到后会出现 onnect reset by peer 错误。
TCP 会话劫持攻击
TCP会话劫待 (TCP Session Hijacing) 则是一项更为复杂的 TCP 协议攻击技术方法,其目标是劫持通信双方已建立的 TCP 会话连接,假冒其中一方(通常是客户端)的身份,与另一方进行进一步通信。
UDP Flood 拒绝服务攻击
由于 UDP 协议的无状态不可靠的天然特性,UDP Flood 拒绝服务攻击的原理非常简单,即通过向目标主机和网络发送大量的 UDP 数据包,造成目标主机显著的计算负载捉升,或者目标网络的网络拥塞,从而使得目标主机和网络陷入不可用的状态,造成拒绝服务攻击。
实践作业
请在网络攻防实验环境(以 SEED_YM 作为攻击机,Linux Metasploitable/Windows Metasploitable 1个为靶机)中完成 TCP/IP 协议栈重点协议的攻击实验,具体包括 ARP 缓存欺骗攻击、ICMP 重定向攻击、SYN Flood 攻击、TCP RST 攻击及 TCP 会话劫持攻击 (bonus)。
实验环境:
虚拟机名称 | IP | MAC |
---|---|---|
Kali | 192.168.1.7 | 00:0c:29:a3:04:04 |
Linux MetaSploitable | 192.168.1.8 | 00:0c:29:9e:e1:98 |
SEED | 192.168.1.9 | 00:0c:29:6b:9f:c2 |
ARP 缓存欺骗攻击
使用 SEED ping
Linux,并用 arp -a
查看 arp 缓存表:
在 kali 上安装 netwox 工具:
sudo apt-get install netwox
使用 kali 对 Linux 进行 arp 欺骗攻击,在 kali 上执行:
sudo netwox 80 -e 00:0c:29:a3:04:04 -i 192.168.1.8
上述命令表示使用 netwox 的 80 号工具 (Periodically send ARP replies) 不断地向 Linux 发送 arp 响应包,SEED 上会强制更新 arp 缓存。执行命令后终端无任何输出,但已经正常执行。
在 SEED 上再次查看 arp 缓存表,可以看到 Linux 的 MAC 地址已经被改变了:
ICMP 重定向攻击
首先打开 SEED 的 Wireshark,终端 ping
一下百度,可以看到 SEED 能正常访问网络:
接着在 Kali 上执行:
sudo netwox 86 -f "host 192.168.1.9" -g 192.168.1.7 -i 192.168.2.1
即嗅探到 192.168.1.9(SEED)的数据包时,以 192.168.2.1 的名义发送 ICMP 重定向报文,使 192.168.1.7(Kali)成为其默认路由。
SEED 再次 ping 百度,同时观察 Wireshark 的数据包,发现其访问百度的数据包已经被重定向到 192.168.1.7。
SYN Flood 攻击
在 SEED 中,执行以下命令,登录 Linux 靶机,用户名密码都是 msfadmin
:
telnet 192.168.1.8
在 Kali 上对靶机的 23 号端口进行 SYN Flood 攻击:
sudo netwox 76 -i 192.168.1.8 -p 23
打开 SEED 的 Wireshark,可以看到攻击机向靶机发送了大量的虚假 IP 发出的 SYN 连接请求,这些虚假的连接请求没有 MAC 地址,无法溯源攻击者的真实身份:
同时,SEED 上已经登录的 Linux 已经无法 ping 百度了:
电脑风扇也会起飞。。
TCP RST 攻击
在 SEED 中使用 telnet
登录 Linux 靶机,然后在 kali 中使用 78 号工具对靶机进行 TCP RST 攻击:
sudo netwox 78 -i 192.168.1.8
此时,SEED 中已登录的 Linux 连接被中断:
TCP 会话劫持攻击
使用这个工具完成实验:https://github.com/revanth5/shijackk
打开 Wireshark,在 SEED 上使用 telnet
连接 Linux 靶机并登录,随便输入一个字符,可以在 Wireshark 中抓到 Telnet 包,查看源端口号,结果为 44294:
在 kali 中,进入上述工具目录,执行:
sudo ./shijack-lnx eth0 192.168.1.9 44294 192.168.1.8 23
参数依次为网卡名,源地址,源端口,目的地址,目的端口。
此时,在 SEED 中再次随意输入内容,kali 就劫持成功了:
这时,SEED 的连接被中断,在 kali 中可以直接与 Linux 靶机进行通信了。
例如在 kali 中输入 pwd
,在 Wireshark 中可以捕获到伪装成 SEED 向 Linux 靶机发送的数据:
劫持成功。
学习中遇到的问题及解决
Q:TCP 会话劫持攻击实验中,运行指令提示“command not found”
A:一番折腾过后,发现只要赋予被执行文件全部权限就行:sudo chmod 777 shijack-lnx
实践总结
做这些实验真的需要耐心,总会遇到各种各样的坑,工具终归是工具,会用的同时理解基本原理还是更重要的,以后还是少做搬运工吧,尽力自己去弄明白每一步的原理。