TorWard在Tor出口路由器上集成了入侵检测系统(IDS),用于Tor恶意流量的发现,分类和响应。 TorWard的早期版本可以发现和分类Tor中的恶意流量,而本文介绍的新TorWard也可以阻止和跟踪恶意流量。
Tor作为一种覆盖网络,通过Internet为TCP连接应用提供匿名通信,帮助用户躲避互联网审查制度。
Tor网络由Tor客户端(Tor clients)、洋葱路由器(onion routers)、目录服务器(directory servers)和应用服务器(application servers)四部分组成。
一般来说,
1. Tor客户端安装了*onion proxy(OP)*,是Tor网络与客户端之间的接口。 2. *Onion Router(OR)*构成核心的Tor网络,并在Tor客户端和应用服务器之间中继流量。 3. 目录服务器保存所有公用洋葱路由器信息。 4. 应用程序服务器承载TCP应用程序服务,例如Web。 5. Tor还提供了hidden service来隐藏服务器的位置;Bridge作为隐藏的洋葱路由器,进一步抵抗审查。为了通过Tor与远程服务器进行匿名通信(anonymously communicate),客户端从目录服务器下载洋葱路由器信息,并选择一系列洋葱路由器来建立三跳路径,称为电路(circuit)。这三个洋葱路由器分别称为entry(OR1),middle(OR2)和exit(OR3)。
客户端与目录服务器建立链接,并从目录服务器中选取一个时延最低的服务器作为第一个中继服务器/OR1;
客户端向OR1发送一个请求建链请求,OR1验证完客户端的合法性后生成一对密钥(公钥pubkey_OR1_Client、私钥prikey_OR1_Client),然后将公钥pubkey_OR1_Client发回给客户端(至此,客户端成功的建立了其与OR1的通信链路);
客户端又从目录服务器中选择一个时延最低的中继服务器OR2,并向OR1发送一个数据包:使用pubkey_OR1_Client加密OR2的地址;
OR1收到数据包后使用prikey_OR1_Client解开数据包,发现是一个让其自身与另外一个服务器OR2建立链接的请求,那么OR1重复步骤2与OR2建立链接,并将OR2返回的OR1与OR2链路的公钥pubkey_OR1_OR2返回给客户端;
客户端重复步骤3、4,建立OR2与OR3之间的通信链路,并接收到OR2与OR3之间链路的公钥pubkey_OR2_OR3;
至此,客户端与3个中继服务器之间的链路/circuit已经成功建立,客户端拥有3把公钥:pubkey_Client_OR1、pubkey_OR1_OR2、pubkey_OR2_OR3。
数据包是层层包裹,每经过一个中继服务器就解开一层,它的结构就跟洋葱相同,你只能看出它的外表,而想要看到核心,就必须把它层层的剥开(这就它叫洋葱/Onion路由的缘由)。Tor匿名的原理也正是基于此:真实数据包在层层包裹之后在链路上发送,Tor链路上的节点不知道数据包的源头,而只知道它要送往的下一个地址,这样就无法追踪到发送者IP地址。
因此,客户端数据在Tor网络内部传输时被加密。 IDS只能在出口(exit)路由器上检查客户端数据的内容,而不能在入口(entry)或中间(middle)路由器上检查。
用户使用源路由(source routing),选择几个(一般是三个,但是如果是hidden service的话,使用的方法是不同的)Tor路由器(Tor Routers),在这些Tor路由器之间建立匿名路由。用户和他的目的地址之间的流量沿此路由中继。
其中,最后一跳称为出口路由器(exit router),充当直接与目的地址通信的“代理(proxy)”。
因此,Tor出口路由器经常成为替罪羊,引起了《数字千年版权法案》(DMCA)的注意以及僵尸网络和垃圾邮件的攻击。某些情况下,它甚至会受到警方的攻击。由于Tor出口路由器主要由志愿者托管,因此这些滥用行为会阻止潜在的志愿者托管出口路由器,并妨碍Tor成为大型隐私增强网络的发展。
盗版肆虐,通过Tor传播盗版书籍、音频等;
以「丝绸之路」为代表的黑市通过Tor隐藏服务(hidden service)部署在线商场,贩卖违禁物;
因为Tor对于通信隐私的保护,所以攻击者可以运行僵尸网络C&C服务器,使用Tor发送垃圾邮件。
僵尸网络是互联网连接设备的集合,其中可能包括被常见类型的恶意软件感染和控制的PC、服务器、移动设备和物联网设备。用户通常不知道僵尸网络会感染他们的系统。
僵尸网络已成为发起各种Internet攻击的主要平台,例如垃圾邮件、分DDoS攻击、识别盗窃和网络钓鱼(phishing)。有两种典型的僵尸网络结构:P2P僵尸网络和集中式僵尸网络。
在P2P僵尸网络中,僵尸网络可以形成覆盖网络,并且每个僵尸网络都可以由僵尸网络主控者控制,以将命令分发给其他受控制设备或从受控设备中收集信息。尽管P2P僵尸网络更复杂并且管理起来可能成本更高,但是这种结构提供了更高的弹性。
在集中式僵尸网络中,使用IRC和HTTP等协议来构建集中式*Command and Control(C&C)*体系结构。由于开放源代码和可重复使用的C&C服务器的代码简单实用,集中式C&C渠道已被许多僵尸网络广泛使用。
图2说明了常见的集中式僵尸网络C&C的体系结构。如我们所见,它由三个部分组成:(1)Botmaster,它依靠C&C channel向其bot发出命令,并通过C&C服务器从受感染的主机接收信息;(2)C&C服务器,它代表Botmaster将命令转发给bots,从僵尸网络收集信息或将结果转发给Botmaster;(3)Bots,它们是带有僵尸网络的受感染计算机,并从C&C服务器接收控制命令以实际进行攻击。
Tor流量可以被分为入站流量(inbound)和出站流量(outbound)。入站流量在OR和OR以及OP和OR之间加密传输。出站流量由Tor exit routers解密,并转发到应用服务器。出口路由器充当Tor客户端的代理,并与应用程序服务器通信。
TorWard由四个组件组成:防火墙,IDS,透明代理和Tor exit router。防火墙处启用了端口转发,使得我们的exit router和公用网络中的middle routers之间可以进行通信。
为避免行政和法律投诉,TorWard将exit router处的出站流量重新定向(redirect)到Tor网络。我们开发了一种自动管理工具,可以自动添加和删除防火墙的转发规则:
修改出口路由器的代码,以便将出站连接信息(即目标IP地址和端口)发送到开发的自动管理工具。具体而言,在exit router启动出站连接(outbound connection)之前,我们将连接的目标IP地址和端口发送到此工具,并添加连接规则。之后,当exit router关闭出站连接时,通知该自动管理工具从防火墙中删除相应的规则。
位于防火墙的Tor客户端配置为充当透明代理,并侦听端口9040。我们的工具添加的规则实际上将相应的出站Tor连接重定向(redirect)到此代理端口。此过程对Tor出口路由器完全透明。
为了提高性能,修改了位于防火墙客户端代码以建立两跳电路,并将出站Tor流量中继到Tor网络中。这样,远程实际的Tor客户端实际上使用五跳电路。
T = m a x ( k / λ 1 , k / λ 2 , . . . , k / λ m ) T=max(k/λ_1, k/λ_2, ..., k/λ_m) T=max(k/λ1,k/λ2,...,k/λm)
其中,k是当 P n = k ( B ) P_{n=k}(B) Pn=k(B)达到100%,电路(circuit)连接的次数, λ i λ_i λi是单位时间内发生恶意流量的次数。
等式告诉我们,恶意流量创建电路的速度越快,检测该恶意流量的时间越短。 如果恶意流量处于活动状态,只要有足够的时间,就会在Tor exit router观察到不同类型的恶意流量。
如上文提到的,经过我们Tor exit router的流量分为inbound和outbound两类流量。为了识别其中的inbound流量,使用TShark的协议过滤器分析原始流量,并发现大约50%的流量是TLS(Transport Layer Security)流量,Tor使用它们对inbound流量进行加密。采用了DPI程序并获得了统计结果,如表所示。
从表中可以看出,nDPI识别的大部分流量是P2P和文件共享流量,P2P流量是各种侵犯版权问题的根源,并且是Tor出口节点遭到各种数字千年版权法案(DMCA)投诉的轰炸原因。
使用来自IDS的入侵检测警报技术,并通过我们的自定义Tor控制协议来决定是断开连接还是保留相应的outbound流量。
在TorWard防御系统中,有四个组件:一个Tor exit router,一个IDS,一个sentinel和一个数据库。
IDS监视通过exit router的流量,并将警报发送到sentinel进行实时处理,并发送到数据库进行离线分析。该sentinel从警报中检索可疑连接的目的地,并通过Tor控制协议将我们自定义的断开连接命令发送到Tor exit router。 Tor出口路由器获取IP地址和端口,然后搜索其连接列表。一旦发现可疑连接,相应的连接将被终止。
对于IDS,可以选择Suricata或Snort。可以将IDS配置为通过Unix Domain Socket将警报发送到哨兵。 Snort具有使用Unix Domain Socket的配置选项。 Suricata没有Unix Domain Socket功能。但是,可以配置Suricata将警报记录在二进制文件中。然后,可以使用Barnyard2来解析文件,并使用其配置文件中的“ alert_unixsock”选项将警报发送到sentinel。 Snort和Suricata都是基于签名的IDS,因此我们采用了Vulnerability Research Team (VRT) rules和Emerging Threats (ET)的规则。还可以在IDS配置文件中自定义规则,以检测特定类别的威胁。例如,如果我们担心通过Tor exit router的P2P流量,则可以仅将相关的P2P规则包括在IDS配置文件中。值得注意的是,开发的系统是通用的,并且可以部署其他基于异常的检测算法。
从IDS获得警报后,sentinel将处理警报,检索潜在恶意流量的IP地址和端口号,并通过我们的自定义Tor控制协议断开相应的连接。我们使用Tor控制协议将我们的自定义命令发送到exit router,该路由器执行指定的任务。例如,添加了命令“ CLOSEEXITCONN ip port”以断开可疑连接。出口路由器接收到此命令后,将向远程客户端发送“RELAY_COMMAND_END单元,其原因为“REASON_CONNECTREFUSED,以通知连接已关闭。
为了对警报进行离线分析,将IDS配置为将警报记录在数据库中。在我们的例子中,使用MySQL。 IDS将警报存储在一个二进制文件中,Barnyard2读取该文件并将警报发送到数据库。该数据库还由前端应用Basic Analysis and Security Engine(BASE)管理。值得注意的是,数据库不一定是TorWard的必要组件,无需使用数据库即可顺利运行。
Tracing的目的是寻找exit router上的僵尸网络流量与Tor上的entry router之间的联系。为此,采用了双音多频(DTMF)信令方法,该方法已被用于电话听筒、其他通信设备和交换中心的语音频带中的模拟电路上的电信信令中。在DTMF中,要发送单个键(例如“ 9”),选择低频和高频,并发送两个频率的正弦音调(sinusoidal tone)。该音调由交换中心解码,以确定已发送的密钥。原始DTMF采用8个频率来表示4×4 = 16键。受DTMF的启发,我们设计了一种基于DTMF信号的方法来跟踪Tor上的botmaster(s)。
回想一下上述网络攻击情况,在exit router发现了来自可疑电路的僵尸网络流量。我们想找到在Tor另一端生成该流量的实体,它可能是redirection server或botmaster。我们的目标是通过signaling的方法找到僵尸网络IP地址。假设我们通过将计算机贡献给Tor网络来控制一小部分exit router和entry router。(由于Tor是自愿运行的,因此该假设在实践中是有效的,已被广泛使用。) 跟踪僵尸网络流量的基本思想是:在受控exit router处,我们首先将表示一个信号(signal)的交流频率(alternating frequencies)作为额外的单元,注入到可疑电路中,然后尝试在受控entry router处确认信号。如果一个entry router检测到该信号,则该entry router将用于识别创建可疑电路的僵尸网络主机的IP地址。我们的DTMF signaling使用两个不同的频率分别表示比特0和比特1。信号(signal)由一系列二进制比特构成。
在IDS的帮助下,exit router可以找到可疑连接和对应传输IRC bot流量的电路。 相应地获得了IP地址和端口。(应该指的是middle router的IP地址和对应端口?)
一旦检测到可疑电路,我们就可以将额外单元注入电路并开始跟踪。对于IRC通道,不应显示注入的额外单元中的消息。空的IRC PRIVMSG消息可用于此目的。选择两个用于发送额外单元不同频率,称为特征频率,分别表示为0和1,并将信号调制进入被注入的流量。例如,要对位0进行编码,我们发送间隔时间为500ms(即特征频率为2Hz)的信元;为了对位1进行编码,我们发送间隔时间为333.33ms(即3Hz的特征频率)的单元。每个位可以持续更长的时间间隔,例如2秒,表示为位间隔。
在我们控制的entry router中,记录每个电路的信元,以便得出嵌入在信元中的特征频率并恢复信号。通过对采样间隔Ts中的cells数量进行计数来得出流量容量时间序列(traffic volume time series),它与对应的采样频率 F s = 1 / T s F_s=1/T_s Fs=1/Ts相关。我们表示时间序列为
X ( F 0 , F 1 , F s ) = { x 1 , . . . , x N } X(F_0, F_1,F_s)= \{x_1,...,x_N\} X(F0,F1,Fs)={x1,...,xN}
其中,其中 F 0 F_0 F0和 F 1 F_1 F1是代表位0和1的两个特征频率,N是样本大小, x i x_i xi是第i个采样间隔中的像元数。
为了恢复嵌入的特征频率,必须仔细选择采样频率 F s F_s Fs。我们期望在频率域中,特征频率应该比在预期特征频率附近的噪声具有更大的幅度。为了恢复特征频率 F I F_I FI(I为0或1),必须仔细选择采样频率 F s F_s Fs(对应于采样间隔 T s T_s Ts)。根据奈奎斯特抽样理论,我们有 F s ≥ 2 F I F_s\geq 2F_I Fs≥2FI。
恢复特征频率的一个问题是如何在entry router和exit router同步调制和解调。也就是说,我们想知道0和1的单元(在哪个cell)开始的时间。在我们的情况下可以解决此问题,因为我们控制在exit router处发送的信元。在我们将traceback cells注入电路之前,可以阻止可疑电路对应的进入entry router的僵尸网络流量。因此,可以引入诸如1秒之类的适当的静默时段来指示发送信号的开始时间。回想一下,该entry router必须监视其所有电路。没有这种静默期的电路则不是可以电路。对于具有静默期的电路,我们可以对单元进行计数。因为我们知道“ 1”和“ 0”信号开始和结束的时间,所以我们可以对相应的segment进行傅立叶变换。
对 X ( F 0 , F 1 , F s ) X(F_0, F_1,F_s) X(F0,F1,Fs)应用傅里叶变换。 回想一下,我们在entry router发送单元格时引入了周期性。 如果电路确实承载了僵尸网络流量,则将在特征频率F0和F1处观察到强振幅,分别对应于位0和1。 创建可疑电路的IP地址将公开可疑僵尸网络。