IPv6teal是一款由Python 3编写的工具,它可以使用构建在IPv6报头流标签字段之上的隐蔽信道,隐蔽的从内部网络中泄露数据。 其主要由以下2个部分组成:
背景Flow Label:20比特。IPv6中新增。
可以将该字段设置为任意值,而不会影响数据包传递到其目标。 因此,我们可以通过在此字段中存储数据来构建隐蔽信道。exfiltration脚本每20比特数据发送1个IPv6数据包,receiver脚本通过读取该字段重建数据。每个IPv6数据包发送的payload包含一个魔术值(magic value)以及一个序列号。因此,接收端可以确定哪些IPv6分组与其相关并进行解码。 使用基本要求:
Server在提取数据的计算机上,以root身份运行receive.py。
Client在泄露数据的计算机上,以root身份运行exfiltrate.py。
使用示例:
F.A.Q.我们不能直接将数据存储在ICMPv6 echo-request数据包或IPv6数据包本身的payload中吗? 当然可以。然而,这个PoC是为企业网络的(虚构)场景构建的,企业网络将具有严格的出口网络过滤,例如,将阻止从内部用户网络到互联网的ICMPv6,和/或DLP将分析IPv6/ICMPv6数据包的payload。 即使在这种情况下,也不太可能阻止所有传出的IPv6通信,因此仍然允许使用该技术进行数据泄露。 它的速度怎么样? 虽然发送的数据是使用GZIP压缩的,但速度非常慢。通过网络发送的每个IPv6数据包包含20比特数据(即两个半ASCII字符)。 在我的测试中,我设法在30分钟内在不同的DigitalOcean区域(阿姆斯特丹和法兰克福)的2台机器上传输1.2 MB的未压缩随机数据文件。 它可靠吗? 我的回答是不。任何IPv6数据包丢失都会导致传输失败。这是我故意这么做的,为了保持工具的简单特性,避免重新实现类似TCP的伪网络堆栈。 然后,它会处理乱序的IPv6数据包。 传输是否加密? 我的回答同样是不。如果你要传输敏感数据,最好在将数据提供给exfiltration脚本之前对客户端的数据进行加密。 它可以处理大文件吗? 可能不行。也许。无论如何它会很慢。 为什么脚本需要以root身份运行? 因为他们制作原始的ipv6数据包。如果这对你来说是个问题,那么你也可以将cap-net-raw功能提供给非超级用户,并让它来运行脚本。 有些数据包丢失了,该怎么办? 尝试增加exfiltration脚本的--packet-sending-interval-ms参数值。默认情况下为10毫秒,这意味着程序在发送每个新数据包之前会等待10毫秒。 关于该工具的最初灵感来源于锡拉丘兹大学的Norka B. Lucena,Grzegorz Lewandowski和Steve J. Chapin撰写的有关IPv6中的隐蔽信道的论文。 如果你对该工具有任何的疑问或错误报告,请随时打开issue或向我发送tweet @christophetd。 |
|