菜单

Exitmap:Tor出口中继节点扫描器

2017年1月23日 - 安全工具

工具简介

Exitmap是一个基于Python的Tor出口中继节点扫描器,具有快速和模块化的特点。 Exitmap模块执行在所有出口中继节点(的子集)上运行的任务。如果你有函数式编程的知识背景,可以把Exitmap看作是Tor出口中继节点的map()接口。

untitled.png

这些模块可以执行任何基于TCP的网络任务,例如获取网页、上传文件、连接到SSH服务器或加入IRC频道(Internet Relay Chat,互联网中继聊天,它是由芬兰人Jarkko Oikarinen于1988年首创的一种网络聊天协议)。

Exitmap的实际功能是监测出口中继节点的可靠性。当然很多人会利用Exitmap在Tor项目的检查服务中检查误报情况,并发现恶意的出口中继节点。为Exitmap开发新的模块也非常便捷,只需查看doc或目录中的HACKING文件,或者查看其中一个现有模块即可。

Exitmap使用Stem为所有给定的出口中继节点创建线路,并且一旦tor向Exitmap发出线路已建立的通知,Exitmap就会为新建立的线路调用模块。模块可以是纯Python脚本,也可以是可执行文件。对于可执行文件则需要用到torsocks工具(https://github.com/dgoulet/torsocks/)。

最后请注意Exitmap是一个网络评估工具,对普通的Tor用户没有用。Tor项目正在定期运行该工具,过多的Exitmap扫描只会导致额外的网络负载。Exitmap之所以开源是因为有人可能会对其源代码和结构感兴趣。

安装

Exitmap使用Stem库(Tor的python控制器库)与Tor进行交互。安装Stem的方式很多,最简单的应该是使用pip与现有的requirements.txt文件结合:

$ pip install -r requirements.txt

运行Exitmap

Exitmap所需的唯一参数是模块名称。例如,你可以通过以下方式运行Exitmap的checktest模块:

$ ./bin/exitmap checktest

然后命令行输出将显示如何进行Tor bootstrap,checktest模块输出和扫描摘要。如果你不需要3个hops,倾向于使用在静态的第一个hop之后的两个hops,请运行:

$ ./bin/exitmap --first-hop CCEF02AA454C0AB0FE1AC68304F6D8C4220C1912 checktest

若在德国出口中继节点上运行同样的测试,请执行:

$ ./bin/exitmap --country DE --first-hop CCEF02AA454C0AB0FE1AC68304F6D8C4220C1912 checktest

如果要在线路创建之间暂停五秒钟以减少Tor网络和扫描目标的负载,请运行:

$ ./bin/exitmap --build-delay 5 checktest

注意:

CCEF02AA454C0AB0FE1AC68304F6D8C4220C1912是一个由瑞典卡尔斯塔德大学运行的出口节点,你可以自由使用。但是分配扫描负载时请尽量使用自己的出口中继节点。

若想看到Exitmap的其它选项,请运行:

$ ./bin/exitmap --help

功能

Exitmap包含以下模块:

testfds:测试某出口中继节点是否能够获取简单网页的内容。若不能则说明该出口中继节点可能没有足够可用的文件描述符(打开一个文件需要维护很多数据,不光是权限的问题,内核对每一个打开文件都分配了一个数据结构,而文件描述符则是指向这些数据结构的索引,内核可以通过一个文件描述符查到相应文件的数据)。

checktest:尝试发现Tor项目检查服务中的误报。

dnspoison:尝试解析多个域名,并将接收到的DNS A记录与预期记录进行比较。

dnssec:检测解析器不证实DNSSEC(DNS安全扩展)的出口中继节点。

patchingCheck:检查是否存在文件篡改。

cloudflared:检查网站是否返回CloudFlare的验证码。

rtt:测量从某出口到各个目的地的往返时间。

配置

默认状态下,Exitmap会读取你的主目录中的.exitmaprc文件。该文件能够接受所有命令行选项,但是你必须用下划线代替减号。例如:

[Defaults]

first_hop = CCEF02AA454C0AB0FE1AC68304F6D8C4220C1912

verbosity = debug

build_delay = 1

analysis_dir = /path/to/exitmap_scans

测试

在提交代码合并请求之前,通过运行以下程序来确认所有配置均已通过测试:

$ pip install -r requirements-dev.txt

$ py.test –cov-report term-missing –cov-config .coveragerc –cov=src test

Exitmap下载链接:https://codeload.github.com/NullHypothesis/exitmap/zip/v2016.04.21

若对Exitmap的使用存在任何问题,可联系Philipp Winter phw@nymity.ch。

发表评论

电子邮件地址不会被公开。 必填项已用*标注