文章信息
论文题目:INFLOW: Inverse Network Flow Watermarking for Detecting Hidden Servers
期刊(会议):IEEE INFOCOM 2018 - IEEE Conference on Computer Communications
级别:CCF A
文章链接:https://sci-hub.yt/10.1109/infocom.2018.8486375
概述
INFLOW是第一种能够在流量的目的地嵌入水印,并且即使在水印生成器目标方向上没有足够的流量传输时也能在流量源头检测到所嵌水印的技术。
旧方法不足:多年来,研究人员提出了各种网络流水印技术,以解决面对多种威胁的准确归因问题。不幸的是,所有这些方法都有一个共同缺点:水印只能沿着载体流量同向传播。这意味着水印可以有效追踪从来源到目的地的流量,但无法实现反向追踪。这在双向流量的情况下不是问题,但检测单向流量来源的情况下是一个问题。例如,用户从Web服务器(可能隐藏在TOR网络上)下载数字对象,则服务器到客户端将持续有流量,而相反方向的数据包很少。
INFLOW原理:INFLOW旨在利用TCP/TOR拥塞管理机制,该机制会导致数据源停止发送消息,直到从目的地收到先前消息的确认。INFLOW的水印生成器在目的地利用TCP连接的ACK数据包和TOR的SENDME消息,从而向我们想要探测的发送者的TCP流注入由受控时间间隔组成的签名。
背景和攻击场景
Tor简介
TOR电路是在基于TCP的覆盖网络上建立的加密安全虚拟路径,其中来自客户端的应用层数据通过多个TOR中继路由。电路可以传输一个或多个应用层流的数据。通常,客户端通过选择三个中继(入口、中间和出口中继)来建立电路,并使用洋葱路由算法将数据流加密和封装到电路中。 TOR中的流被定义为通过电路传输的应用程序数据流,而在传统通信中,通常会封装在单个传输层流中。应用层数据被打包成相同大小的单元(等于512字节)。入口中继通常被称为入口守卫或入口节点。只有TOR客户端和出口中继可以将单元与流关联起来。
当客户端要访问一个隐藏的服务时,它选择一个中继作为它的汇聚节点并建立到它的回路;隐藏服务也建立了到汇聚节点的回路,如图1所示。在客户与隐藏服务之间的通信中,汇聚节点将流消息转发到隐藏服务的出口节点,并代表两个回路之间的交换点。
场景
分发者通过在TOR上创建隐藏服务器(HS)来提供其内容。 HS发布滥用或非法内容,并通过生成洋葱URL使其可供客户使用。一个洋葱网址通常是一个由16个字符组成的半数字字符串,以.onion作为后缀,可以唯一地识别隐藏的网页。当客户想要访问TOR上的隐藏服务时,它在洋葱浏览器上插入洋葱URL,并在初始化阶段后,建立了从客户到HS的通信通道。从HS到客户的通用TOR路径如图1所示。 从客户到服务器的路径对应于两个TOR电路,并由六个中间节点组成。
TOR拥塞控制
为了避免TOR中继拥塞并保持公平的资源共享,TOR对于任何给定的电路使用端到端拥塞窗口。该窗口(固定大小为1000个单元)对应于任何给定电路中可以同时传输的单元的最大数量。为了控制这一点,电路的端节点发送一个SENDME消息,每接收100个单元就通知发送方单元组的正确接收。收到SENDME消息后,发送方窗口滑动100。TOR还在子电路级别即流级别使用端到端窗口,即采用精确机制。它允许每个流中最多有500个正在传输的单元。在流级别,每发送50个单元就发送一个SENDME消息。
水印系统
去匿名化的实体(DE)(例如执法机构):希望检索TOR暗网中分发滥用或非法内容的隐藏服务(HS)的IP地址。DE拥有一个目标隐藏服务的洋葱URL。如果需要,DE还成为隐藏服务提供者的授权客户,以便访问其Web服务。我们假设DE控制HS的入口卫兵,这是关于去匿名化HS文献或针对HS的攻击技术的一个常见假设。
TOR客户端节点:在其中放置了水印嵌入模块。从TOR客户端使用洋葱URL访问隐藏服务并建立到HS的TOR电路。
嵌入模块:在选定的流量上打上水印。
检测器模块:放置在受控的HS入口卫兵上,监视并分析通过的所有流量。检测器验证观察到的流量中水印的存在/缺失。一旦在观察到的流量中检测到水印,服务器的源IP地址将从该流中提取并提供给DE。
TCP流情况:
- 流量方向(从客户端入口节点到客户端的方向):存在大量流量
- ACK方向(从客户端到客户端入口节点的方向): ACK 和少数带负载的数据包
水印嵌入算法
嵌入算法旨在在ACK方向上丢弃选定的TCP数据包突发(主要是TCP ACK),以诱导伪随机的静默间隔模式。 以下我们将区分三种不同的时间间隔。
- 丢弃间隔(dropping interval):对应于水印嵌入器不断丢弃从客户端到客户端入口节点的包的间隔;
- 客户端静默间隔(client silent interval):对应于观察者由于水印嵌入器的丢弃操作的影响而不看到来自客户端到其入口守卫的任何数据包的间隔。客户端静默间隔包括丢弃间隔,但它可能更长。
- HS静默间隔(HS silent interval):对应于观察者由于水印嵌入器的丢弃操作的影响而不看到来自HS到其入口守卫的任何数据包的间隔。
水印嵌入器选择参考时期内的非连续子间隔的子集,并丢弃在选定的子间隔期间观察到的流包,从而创建一组客户端静默间隔。水印嵌入器有两个主要功能:1)丢弃间隔的选择(由丢弃间隔序列生成器(DISG)执行),2)数据包丢弃(由丢弃器dropper执行)。图2显示了INFLOW的嵌入方案。
具体过程:
- 参考时期开始,DISG向dropper提供一组随机选择的子区间标识符。DISG使用一个秘密密钥和一个nonce的拼接作为密码学安全函数的种子,该函数生成从概率质量函数中提取 m ~ + 1 \widetilde{m} +1 m +1个伪随机整数数字。
- 设 D 是包含选择为客户端静默区间的参考周期中子区间的起始时间的向量; dropper 将根据 D 中的次数丢弃,dropper 开始在一个持续时间为 δ \delta δ的间隔内丢弃所有在 ACK 方向上观察到的 TCP 包。
报文突然丢失的影响:
当入口守卫发送的未确认数据量达到RWIN (TCP receive window)值时,入口守卫停止发送新报文,并在每个过期时间后继续发送重传报文。所有未确认的数据,以及从洋葱链上一个节点接收到的新数据,都在入口守卫的 TCP缓冲区中不断累积。因为入口守卫不能向客户端释放新的单元格,所以客户端不会发送任何新的SENDME消息,而多达500个单元格会累积并保留在客户端入口守卫中。因此,会合节点停止向HS发送 SENDME 消息;由于TOR 的拥塞控制机制,在发送了500个未确认的 cell 之后,HS 在收到该电路的一个新的 SENDME 消息之前不能发送任何新的 cell。如果水印在TCP协议确定何时关闭连接的过期时间内停止在 ACK 方向上丢弃数据包,客户机的入口节点就会恢复向客户机发送数据包,并向洋葱链发送SENDME消息,这样整个通信过程就可以重新启动。这种行为确保了从HS到HS入口节点的通信中产生一个时间间隔(HS 静默间隔),这可以很容易地被TOR电路检测器识别。
水印检测算法
检测器拦截并分析重要流量,并寻求识别与所观察流中的水印对应的HS静默间隔的模式。检测器和水印生成器必须同步,以商定参考周期和有效向量D之间的对应关系。外部网络时间协议(NTP)用于保持水印生成器和检测器之间的同步。
此外,检测器知道两条关键信息:DISG的输入数据和水印生成器使用的加密函数,因此可以计算向量D。检测器分析每个流的分组间隔时间,并构建静默间隔的序列。如果在流中观察到的连续静默间隔之间的距离序列与在当前参考时间段有效的丢弃向量D中的值之间的距离的子序列匹配,则该流被标记为带水印的流。
具体来说可分为3个主要步骤(如图4所示):
- IPD计算:对IP流进行嗅探,并测量数据包到达时间 Φ = [ ϕ 1 , … , ϕ F ] \Phi =[\phi _{1},\dots ,\phi _{F} ] Φ=[ϕ1,…,ϕF]。然后根据到达时间计算包间间隔 Δ Φ = [ ϕ 2 − ϕ 1 , … , ϕ F − ϕ F − 1 ] \Delta \Phi =[\phi _{2}-\phi _{1},\dots ,\phi _{F}-\phi _{F-1} ] ΔΦ=[ϕ2−ϕ1,…,ϕF−ϕF−1]。包间间隔通过相邻到达时间做差可以得到。
- 静默间隔识别:将 Δ Φ \Delta \Phi ΔΦ中所有比阈值 θ t h \theta _{th} θth大的间隔抽取出来形成 Δ S \Delta _{S} ΔS。根据 Δ S \Delta _{S} ΔS计算出向量 D ^ \hat{D} D^,其每个值 d ^ i \hat{d}_{i} d^i为 Δ S \Delta _{S} ΔS中间隔的开始时间。
- 比较和探测:设 q q q是最小的静默间隔匹配长度, D ( q ) D ^{(q)} D(q)和 D ^ ( q ) \hat{D} ^{(q)} D^(q)是 D D D和 D ^ \hat{D} D^长度为 q q q的子序列。如果一个流被嵌入了水印,就会存在一对子序列 ( D ( q ) , D ^ ( q ) ) (D^{(q)},\hat{D} ^{(q)} ) (D(q),D^(q)),使得如下公式成立 ∑ j = 2 q ∣ ( d j ( q ) − d j − 1 ( q ) ) − ( d ^ j ( q ) − d ^ j − 1 ( q ) ) ∣ < β \sum_{j=2}^{q}\left | (d_{j}^{(q)}-d_{j-1}^{(q)})-(\hat{d}_{j}^{(q)}-\hat{d}_{j-1}^{(q)} ) \right | <\beta ∑j=2q (dj(q)−dj−1(q))−(d^j(q)−d^j−1(q)) <β,其中 β \beta β是阈值。
都是公式,很抽象,解释一下:水印嵌入的时候有个向量 D D D,这个向量决定了客户端静默间隔的开始时间。但客户端出现静默间隔时,HS那边不会立马也出现静默间隔,会有一定的延迟。所以不能通过开始时间来判断是否某个流被嵌入了水印。但是可以通过两个静默间隔开始时间之间的差值来判断,因为差值是不变的。上面的公式就是围绕这一点描述的。
性能评估
实验设计
混合测试框架有四个主要组件(客户端、水印嵌入器、检测器和HS),安装在Amazon Web Services(AWS)上的虚拟实例上,流量被迫通过我们无法控制的TOR网络。通用架构如图5所示。客户端由虚拟私有云(VPC)上的AWS实例组成。水印嵌入器是安装在客户端实例上的模块。来往客户端的所有流量都会通过水印嵌入器。HS和检测器安装在第二个VPC上的两个不同AWS实例上。来往HS的所有流量都通过检测器,检测器分析分组时间戳并应用检测逻辑来检测水印。这两个VPC分别在两个不同的地区(俄勒冈和爱尔兰)执行。
在每次实验开始时,启动水印嵌入器和检测器。然后,客户端建立了到汇聚节点的新电路并联系HS,然后HS也建立到汇聚节点的电路。一旦整个通信线路建立,一个数据文件通过六个TOR中继从HS传输到客户端。 实验划分如下:
(A)750次测试,以评估检测器检测带水印流量的能力;
(B)750次测试,以测试针对未标记流的检测算法效果;
(C)750次测试,针对使用与检测器使用的输入密钥不同的输入密钥进行水印标记的流来测试检测算法。
下表是实验参数
实验结果
图 6 显示了在真阳性(TP)和假阳性(FP)率方面的准确性。结果表明,该检测器能够正确识别带有水印的流量,具有较高的准确率。
TP率的测量方法:用检测器正确标记为带水印的流的数量除以A组中测试流量的总数。
FP率的测量方法:用检测器错误标记为带水印的流的数量除以被测试流量的总数。
六种主要用于反流量水印技术的威胁类型,评估INFLOW对此类技术的鲁棒性:定时扰动、包丢失、流再封装,分裂和混合、虚拟包插入和包填充。
思考
水印嵌入器是通过在 ACK 方向上大量丢弃数据包来诱导的,但也有其他方法可以用于获得类似的效果,从而在流量源处诱导水印:
- 延迟 SENDME 消息;
- 流量方向的丢包突发;
- 在通信方向上丢弃选定的数据包及其后续重传副本
INFLOW 的主要缺点:
- 在INFLOW的场景中,INFLOW假设DE可以控制HS的入口守卫;尽管一些研究人员已经表明,HS选择由DE控制的中继的概率不可忽略,但TOR社区在防止旨在恶意控制入口守卫的攻击方面也投入了巨大的努力;
- 通过INFLOW嵌入的水印对第三方并不是不可见的,这意味着任何观察到其中有静默间隔的流的实体都很可能怀疑该流已被加了水印;然而,第三方无法确定它是一个真正的水印(嵌入了正确的水印密钥)还是一个模仿水印行为的东西。
总结
INFLOW利用TCP拥塞控制和TOR的滑动窗口机制的相互依赖性,提供了一种将水印嵌入TOR流的独特方法,展示了如何使用短时丢弃ACK分组的突发来嵌入由静默间隔序列组成的水印。在伪随机选择的时间点,数据流的相反方向(即从TOR客户端到其入口节点)的ACK分组被丢弃。以这种方式,INFLOW隐式地在来自客户端已联系的HS的流量中创建受控的静默间隔模式。水印可以被知道密钥的检测器识别,检测器被放在从HS到HS的入口守卫的路径上。
此外,INFLOW对针对传统水印技术的已知攻击具有鲁棒性。最后,通过对流经真实TOR网络的流进行一组实验来证明INFLOW的有效性。结果表明,INFLOW实现了高TP率和低FP率。通过正确调整系统参数,可以获得TP和FP速率之间的最佳平衡。