libevent详解_详解Tor Bridge及Pluggable Transport(Part 1)

36cea8101a7a528a44883a8fe3fb1707.png

 

0x00 前言

在西弗吉尼亚州查尔斯顿举行的 SecureWV 2019 网络安全会议上,我和Peixue做了名为“详解Tor Bridge及Pluggable Transport”的 主题演讲 。 这里我们将通过两篇文章与大家分享更多细节,在第一篇文章中,我将介绍如何通过逆向工程找到Tor内置的Bridge(网桥),以及在启用Bridge时Tor浏览器的工作方式。  

0x01 Tor浏览器及Tor网络

Tor浏览器 是用来提供匿名Internet连接的一款工具,可以通过Tor网络实现多层加密。 当用户使用Tor浏览器浏览网站时,真实IP地址会被Tor网络隐藏,因此目的网站永远不知道真实源IP地址。 用户可以在Tor网络上自己创建站点,域名后缀为 .onion 。 通过这种方式,只有Tor浏览器能够访问该站点,并且没有人知道站点的真实IP地址。 这也是勒索软件犯罪分子要求受害者通过Tor浏览器访问 .onion 网站上付款页面的原因之一。 Tor项目团队也知道这一点,在项目博客中明确指出“Tor已经被滥用于犯罪场景中”。 Tor浏览器是基于 Mozilla Firefox 的一个开源项目,我们可以从官网下载源代码。 Tor网络是一个全球overlay网络,由数千个自愿加入的中继节点所组成。 该网络有两种中继节点: 普通中继节点以及bridge中继节点。 普通中继节点可以通过Tor主目录查看,网络传感器可以轻松识别并阻止到普通中继节点的连接。 bridge的信息在Firefox的配置文件中定义,因此我们可以在Tor浏览器的地址栏中输入 about:config 中显示该信息,如图1所示: 012997a6ac632cc0405f12c89d26cae6.png 图1. 在Tor浏览器中显示配置信息 然而,bridge中继节点并没有在Tor主目录中显示,这意味着传感器无法轻松阻止到这类节点的连接。 在本文中,我将介绍如何利用Tor浏览器的内置功能来寻找这类bridge及中继节点。 为了在Tor浏览器中使用bridge中继,我们可以采用两种方式。 Tor浏览器内置了一些bridge供用户选择。 如果内置的bridge无法正常工作,用户可以从Tor网络设置中获取更多bridge。 用户可以访问 https://bridges.torproject.org/ ,或者向 bridges@bridges.torproject.org 发送邮件来获取该信息。  

0x02 实验环境

我们的实验环境如下所示:
  • Windows 7 32-bit SP1
  • Tor浏览器8.0
  • TorLauncher 0.2.16.3(扩展)
  • Torbutton 2.0.6(扩展)
所使用的Tor浏览器版本信息如下: c9da5f5c2f89022aa2fb7e5bb734d37e.png 图2. Tor浏览器版本信息 在分析过程中,Tor浏览器推出了一个新版本(2019年10月22日): Tor浏览器9.0版,大家可以阅读本文附录了解更多信息。  

0x03 使用内置Bridge运行Tor浏览器

我分析的Tor浏览器提供了4种bridge: obfs4ftemeek-azure 以及 obfs3 ,这些bridge称为“Pluggable Transpoort”(可插拔传输器),具体设置如图3所示: 5013fc5adca7407c0852516f042aa2d6.png 图3. 在Tor网络设置页面选择使用内置bridge Tor官网强烈推荐使用 Obfs4  Bridge,下文所有分析工作都基于这种bridge开展。 当Tor浏览器建立 obfs4 连接时,我分析了通信流量,发现TCP会话由 obfs4proxy.exe 创建,该进程是bridge客户端进程。 使用 obfs4 启动Tor浏览器时的进程依赖情况如图4所示,其中 firefox.ex 启动 tor.exe ,后者随后启动 obfs4proxy.exeobfs4proxy.exe 进程位于 Tor_installation_folder\Browser\TorBrowser\Tor\PluggableTransports 路径中,一开始我认为内置的 obfs4  bridge应该硬编码在 obfs4proxy.exe 进程中。 1435163a1243c23d373b14fefaa1457c.png 图4. 使用 obfs4  bridge的进程树  

0x04 分析obfs4proxy.exe进程

启动调试器,attach到 obfs4proxy.exe ,然后在 connect  API上设置断点,该API通常用来创建TCP连接。 通常情况下,通过逆向工程我们可以通过该API快速找到IP地址及端口。 然而当连接到我们创建的 obfs4  bridge时,断点从来没被触发过。 进一步分析 obfs4proxy.exe 进程后,我发现该进程实际使用的是来自 mswsock.dll 的另一个API: MSAFD_ConnectEx2a4846c30ca048fdbdd0617c01d8c1f7.png 图5. 调用 MSAFD_ConnectEx  API 如图5所示, obfs4proxy.exe 即将调用 mswsock.MSAFD_ConnectEx() 来与内置 obfs4  bridge建立TCP连接,使用的IP地址及端口为 192.95.36.142:443 。 该函数的第二个参数为指向 sockaddr_in 结构变体的一个指针,其中包含待连接的IP地址及端口信息。 随后,该函数会调用 WSASendWSARecv 来与 obfs4  bridge通信
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值