暗网系列之:利用Python + OnionScan 打造自己的安全威胁情报平台(一)

MottoIN暗网系列专题的目标,是让大家更加全面、更深入的了解暗网,这当中自然涉及安全威胁情报分析平台的话题。

OnionScan 是一个用来在暗网中寻找潜在的泄露数据的利器,最新版本中还加入了一些炫酷的可视化效果,尽管项目的管理团队并没有公布实现深度扫描的技术细节,也没有说明那些看起来非常酷的可视化效果是如何生成的。

不过,没关系,接下来,就让我们一起尝试使用 Python + OnionScan完成安全威胁情报平台的搭建,探讨如何在暗网中进行深度探索、寻找感兴趣的信息、分析有用的情报,顺便也提高一下数据可视化的技能。

通常让我们感到恐怖的,不是看不到的东西,而是看到了却不明白的东西”,深入暗网深处,看看能找到那些可怕的/宝贵的信息。

第一部分(Part  1)

流程简介

初始工作的简单流程,如下所述:

  1. 拥有一台可以7*24小时运行的服务器,扫描工作需要花费大量的时间(自己有服务器的话最好,练手的话也可以使用云服务器);
  2. 在服务器上运行Tor 软件;
  3. 安装 OnionScan;
  4. 编写Python脚本,处理扫描工作,并将扫描结果进行数据管理;
  5. Python进阶,优化数据分析结果的可视化展示效果

搭建合适的服务器及运行环境

第一步,创建服务器环境。推荐使用Ubuntu16.4(下文中也将以此作为演示环境)。根据自己的主机环境,选择合适的连接到服务器的方式。

  • windows系统:Putty;
  • Mac OS X或Linux系统:直接使用ssh命令(sshroot@IPADDRESS)

第二步,配置服务器的环境。连接到Ubuntu服务器上,运行如下命令:

apt-get update

apt-get install tor git bison libexif-dev

apt-get install python-pip

pip install stem

第三步:安装Go语言的运行环境。OnionScan是用Go语言编写的,参考Ryan Frankel 《http://www.hostingadvice.com/how-to/install-golang-on-ubuntu/》 的教程,在服务器上执行下列命令:

bash<<(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)

[[ -s “$HOME/.gvm/scripts/gvm” ]] && source “$HOME/.gvm/scripts/gvm”

source /root/.gvm/scripts/gvm

gvm install go1.8–binary

gvm use go1.8

也可以通过离线下载的方式进行安装:https://golang.org/dl/

第四步,安装OnionScan。命令如下:

go get github.com/s-rah/onionscan

go install github.com/s-rah/onionscan

完成上述步骤后,在终端输入:

onionscan

如果返回“onionscan”的命令行使用信息,恭喜你,onionscan已经安装成功了;

关闭终端后,如果发现不能运行onionscan的话,可以在终端输入下列命令解决该问题:

gvm use go1.8

第五步,修改Tor的配置

为了便于我们编写的Python脚本可以请求一个新的标识(一个新的IP地址),在这里需要对Tor的配置做一些小小的改动。后边在扫描的过程中如果遇到障碍,会用到这部分的内容。

在终端运行如下命令:

tor —hash-passwordYourPasswd

可以根据自己的喜好,设置“YourPasswd”的内容。这时你会接收到一串输出,把它们复制下来,然后在终端执行下来命令:

vim -w /etc/tor/torrc

此时会打开 torrc文件的编辑视图,跳转到文本底部,将之前复制的那串字符粘贴过来,效果类似下图所示:

完成之后,保存退出,在终端输入下来命令用于重启Tor服务:

service tor restart

至此,服务器环境搭建工作基本上就已经完成了。(不算太难,不是吗?)

在正式开始编写Python代码之前,还需要添加感兴趣的.onion地址清单,这样才能在暗网中顺利的执行扫描任务。例如:

wget https://raw.githubusercontent.com/automatingosint/osint_public/master/onionrunner/onion_master_list.txt

Tips:使用SSH连接到远程服务器后,执行一些扫描任务比较耗时,这种情况下,可以使用 Screen 命令,创建多个虚拟终端,在虚拟终端里执行命令,断开之前先把 Screen 挂起,重新启用时可以直接连接到之前的Screen上。

编写Python脚本,封装OnionScan

OnionScan是一款伟大的工具,为了能够更好的利用它为我们服务,需要对其进行封装,何况Tor的连接是出了名的不稳定,我们需要能够杀掉一个卡住的扫描进程,也需要能够从Tor网络中抓取新的IP地址。所以,是事后运用你的Python编码能力了。打开一个新的Python文件,并将其命名为onionrunner.py(完整代码参见文章末尾的更多资料部分)

第1-12行:载入脚本中所需的模块;

第14-15行:初始化两空链表,分别保存我们完整的 onion列表和正在进行的会话的onion扫描列表。

第17-18行:利用一个事件对象协调两个将被执行的线程。必须首先设置 Event对象,以便默认情况下主线程可以执行。。

接下来还需要构建一些辅助函数,这些函数将处理 main onions列表,并确保能够继续将新发现的onions添加到列表:

第23行:定义get_onion_list函数,主要用于加载我们的扫描清单。

第26-33行:一个判断,如果onion_master_list.txt文件存在(26),那么打开它,并祖杭阅读,将结果添加到stored_onions(30);如果文件不存在,则输出一条错误消息(32)并退出脚本(33)。

第35-37行:简单地输出加载的onions的总数(35),Return。

第41行:定义store_onion函数,它接受一个参数(onion),这是我们希望添加到master列表中的隐藏服务(onion网址)。

第45-46行:打开onion_master_list.txt列表文件(45),然后写入隐藏服务的onion地址(46)。

现在我们将实施与运行onionscan二进制做实际的扫描工作处理功能。保持你的编辑器添加代码:

接下来,将处理与运行onionscan二进制文件执行扫描任务相关的代码。

更多源代码的分析,感兴趣的话,可以自行阅读。

终端下,运行一下殒命,就可以开始扫描工作了:

python onionrunner.py

此时,你会看到如下所示的输出:

# python onionrunner.py

[*] Total onions for scanning: 7182

[*] Running 0 of 7182.

[*] Onionscanningnfokjthabqzfndmj.onion

[*] Running 1 of 7182.

[*] Onionscanning gmts3xxfrbfxdm3a.onion

检查 onionscan_results 目录,你会看到新增的一些JSON 文件,这些文件一扫描的隐藏服务的地址命名。让它继续运行吧,如果你真的想收集这些目标的信息的话。当然了,如果你使用了本文中所列的Onions列表,那么可以选择直接下载扫描结果:

https://github.com/automatingosint/osint_public/tree/master/onionrunner

利用Shodan搜索引擎扩大暗网 OSNIT的能力

Shodan 搜索引擎可以说是安全专业人员的最常用工具之一,它的搜索能力极其强大,所以,我们需要想办法把它集成到我们的威胁情报分析平台中。幸运的是,Shodan提供了Python接口,这便于我们利用其API进行一些低水平的交互。

首先,安装Shodan。

Windows: pip install shodan

Mac/Linux: sudo pip install shodan

一般情况下,人们不会将同一台服务器同时托管在“公共网络”和“暗网”中,但是也不能排除这种可能。接下来,我们就以检索暗网中的SSH密钥信息为例,进行测试,看看能否碰撞出一些奇妙的结果。

依照咱们的惯例,依然需要编写一个Python脚本来完成此项工作。这一次我们创建一个名为 “sshkeys.py”的脚本(下载链接参见文末更多资料部分):

sshkeys.py 脚本的代码如下图所示:

第3行:加载了shodan 模块;

第19-20行:如果扫描结果中包含一个 SSH 密钥,打印出一个友好的提示;

第22-25行:如果 key_to_hosts字典里已经包含了该SSH 密钥(22),添加当前隐藏的服务并存储在密钥列表里(23)。这里之所以使用一个密钥列表,是因为存在同一个SSH 密钥关联多个隐藏服务的情况,这确实很有趣。如果key_to_hosts 字典中没有该SSH 密钥,那么用一个新的列表初始化字典,并添加当前的隐藏服务(25);

第27-35行:当上边的循环代码遍历完所有的JSON文件,我们需要针对每个密钥做一个快速的分析,判断它是否被多个隐藏服务共享。

第37-50行:利用 Shodan 的API,检查密钥的指纹信息(公共网络中的IP地址)。

你可以使用下列命令,直接运行该脚本:

# python sshkeys.py

至此,你可以去检索一下这些公共网络中的IP地址与暗网中隐藏服务的潜在联系了。当然你也可以使用现成的威胁情报分析工具来自动化完成分析工作。

结论

关于暗网中情报的收集和分析,有很多有趣的工作可以去做。

本文只是一个开始,我们希望读者能更多的从信息安全和隐私保护的角度看待暗网,走进暗网,利用智能的情报分析,帮助我们更多地保护客户。

更多资料

http://www.hostingadvice.com/how-to/install-golang-on-ubuntu/

https://raw.githubusercontent.com/automatingosint/osint_public/master/onionrunner/onionrunner.py

https://github.com/automatingosint/osint_public/blob/master/onionrunner/analysis/sshkeys.py

https://www.hunch.ly

原创文章,作者:M0tto1n,如若转载,请注明出处:http://www.mottoin.com/104491.html

发表评论

登录后才能评论

联系我们

021-62666911

在线咨询:点击这里给我发消息

邮件:root@mottoin.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code