该项目旨在构建一个易于使用的工具,该工具将解析pcap
文件以返回 TCP 数据包中发现的任何歧义。我们目前也在致力于实现 UDP 和 ARP 分析。
大纲:
贡献:欢迎任何评论/想法/贡献。
make
./p2a -v ./pcap_files/some_pcap_file.pcap -s results.json
$ ./p2a -h
Usage: ./p2a [OPTIONS] FILE
-h,--help: display this help message
-v,--verbose: verbose option
-d,--debug: debug option
-x,--exclude OPTIONS: exclude some possible ambiguities from analysis
--exclude ret,mac,ttl
ret: exclude retransmission analysis
mac: exclude MAC addresses analysis
ttl: exclude TTL analysis
-s,--save FILENAME: saves results to file FILENAME
JSON format - FILENAME should contain the JSON extension
Examples:
./p2a -v ./pcap_files/some_pcap_file.pcapng
./p2a --exclude mac,ttl --verbose my-pcap-file.pcap -s results.json
我刚刚添加了将所有结果保存到 JSON 文件的选项。为此,可以使用--save file.json
选项。它将所有会话保存在此文件中,无论是否在其中发现歧义。我目前正在研究一种在 HTML 文件中很好地呈现 JSON 文件的方法(使用一些 JavaScript)。
SHA(IP, Port)
我们使sha
脚本可用于调试目的。它采用 IP 地址和端口号作为参数,并返回 (IP|Port) 的 SHA1 哈希值。该值用作p2a
脚本中的会话标识符。
make sha
./sha -h
Usage:
./sha IP PORT
./sha 127.0.0.1 12345
IP: 127.0.0.1
Port: 12345
SHA1: 21bf549a8095063f49cff573e689b6b10365f4c8
IP 地址和whois
如果某个会话可疑,了解其相关内容可能会很有用。为此,可以使用 Wireshark 并应用显示过滤器以仅显示给定会话。
一种更简单的方法是使用whois
来了解谁拥有 IP 地址。
要将whois
与捕获文件中的所有 IP 地址一起使用:
for ip in $( tshark -r file.pcapng -T fields -e ip.dst -e ip.src | egrep -o " [0-9]+.[0-9]+.[0-9]+.[0-9]+ " | sort | uniq ) ; do whois $ip | egrep " ^[Oo]rgani[sz]ation " ; done
如果
tshark
不起作用,这里有一个 C 脚本可以做同样的事情。
IP 数据包的生存时间(TTL) 字段对应于该数据包在被路由器丢弃之前“允许”在网络中传输的时间长度。它是一个 8 位值,通常每跳减一。
根据 Cisco 关于 TTL 过期攻击的页面:
“当IOS设备收到TTL值小于或等于1的数据包时,IOS设备会发送ICMPv4 Type 11,Code 0报文,从而对CPU产生相应的影响。出现这种影响是因为更多的CPU响应(使用 TTL 超出的数据包)TTL 值小于 1 的数据包需要进行处理,而不是简单地转发 TTL 值大于 1 的数据包。”
“TTL 过期行为会创建针对网络设备的拒绝服务 (DoS) 攻击向量。网络设备是专门为尽快转发普通数据包而设计的。当遇到异常数据包(例如 TTL 值过期的数据包)时,数量会有所不同路由器花费了很大的精力来做出适当的响应。”
分析/代码:
在utils.c
中,我们定义了TTL_THRESHOLD
(目前=10)。如果数据包的 TTL 低于此值,则会出现一个标志以指示 TTL 较低。如果出现太多此类标志,则可能是 TTL 过期攻击。
示例 pcap 文件(包含低 TTL 的数据包)是使用./attack_scripts/low_ttl
目录中的脚本捕获的。
ARP 中毒在于欺骗主机,使其相信我们是默认网关。受害者定期向默认网关询问其 MAC 地址(ARP 协议)。但攻击者可以向受害者发送数据包,称默认网关位于另一个 MAC 地址(例如攻击的 MAC 地址)。攻击者只需要“足够定期”发送这些数据包,以便受害者“丢弃”来自默认网关的真实消息。
这可以让攻击者以多种方式继续攻击受害者:中间人、DoS、黑洞……
例子:
受害者的IP地址是192.168.10.2
,默认网关是192.168.1.1
:
sudo arpspoofing -i wlan0 -t 192.168.10.2 192.169.1.1
攻击者将继续向受害者发送 ARP 数据包,告诉受害者192.168.1.1
是攻击者的 MAC 地址。这样,受害者会将其数据包(针对互联网)发送给攻击者,而攻击者不会重定向它们( -r
选项来重定向它们)。
分析/代码:
为了进行分析,由于我们只查看 IP 数据包(目前), p2a
将它遇到的所有对(MAC address, IP address)
保存在链表中。检查新的给定对时,它会遍历链表,如果 IP 地址已与另一个 MAC 地址关联,则返回错误。
对于上面的示例,我们的脚本将检测到192.168.1.1
(默认网关)与两个不同的 MAC 地址相关联:真实的 MAC 地址,直到攻击者进来并告诉受害者它是默认网关并且其 MAC 地址已获取与默认网关关联(从受害者的 vue 角度来看)。
TCP 连接中发送的每个数据字节都有一个关联的序列号。这在TCP 标头的序列号字段上指示。
当接收套接字检测到传入的数据段时,它使用 TCP 标头中的确认号来指示已收到。发送一包数据后,发送方将启动一个可变长度的重传定时器。如果在定时器到期之前没有收到确认,发送方将假定该数据段已丢失并重传。
当另一个数据包拥有与当前数据包相同的确认和序列号时,我们可以看到TCP 重传。
TCP 重传非常常见,并且可能是完全正常的(如果一个数据包因合法丢失而重传),但也可能是网络或通信出现问题的征兆。
当同一 IP 数据包中包含的两个片段具有表明它们在数据包内的定位彼此重叠的偏移量时,就会发生IP 片段重叠漏洞利用。这可能意味着片段 A 被片段 B完全覆盖,或者片段 A 被片段 B部分覆盖。某些操作系统无法正确处理以这种方式重叠的片段,并且可能会引发异常或以其他不良方式运行收到重叠片段后。这是泪滴攻击的基础。 (来自维基百科)
重叠片段也可用于尝试绕过入侵检测系统。在此漏洞中,攻击的一部分与附加随机数据一起以片段形式发送;未来的碎片可能会用攻击的剩余部分覆盖随机数据。如果 IDS 未正确重组完整的数据包,则攻击将无法检测到。
泪滴攻击:涉及向目标机器发送具有重叠、超大有效负载的损坏的 IP 片段。
尚未实施
如果我们观察到给定会话的多个 TTL 值,则可能意味着路由已更改,这意味着数据包不会像连接开始时那样遵循与连接结束时相同的路径。这可能是由于外部真正的变化,但也可能意味着攻击者更改了数据包所采用的路由(例如进行 MiTM 攻击)。
然而,大多数时候,一个会话在整个连接中具有两个或三个不同的 TTL 值:大多数时候,客户端和服务器不使用相同的初始 TTL 值。
如果给定会话有两个以上不同的 TTL 值,则脚本将返回错误。
目录 | 描述/内容 |
---|---|
./attack_scripts | 用于测试和记录一些 TCP 歧义(欺骗、低 TTL)的简单脚本 |
./pcap_files | 用于测试p2a PCAP 文件 |
./tests_libpcap | 用于测试和开始使用libpcap 两个脚本 |
libpcap
pcap
应用程序pcap
示例文件位于网页末尾tcpdump
过滤器libpcap
教程libpcap
pcap.h
手册页