MottoIN暗网系列专题的目标,是让大家更加全面、更深入的了解暗网,这当中自然涉及安全威胁情报分析平台的话题。
OnionScan 是一个用来在暗网中寻找潜在的泄露数据的利器,最新版本中还加入了一些炫酷的可视化效果,尽管项目的管理团队并没有公布实现深度扫描的技术细节,也没有说明那些看起来非常酷的可视化效果是如何生成的。
不过,没关系,接下来,就让我们一起尝试使用 Python + OnionScan完成安全威胁情报平台的搭建,探讨如何在暗网中进行深度探索、寻找感兴趣的信息、分析有用的情报,顺便也提高一下数据可视化的技能。
“通常让我们感到恐怖的,不是看不到的东西,而是看到了却不明白的东西”,深入暗网深处,看看能找到那些可怕的/宝贵的信息。
第一部分(Part 1)
流程简介
初始工作的简单流程,如下所述:
- 拥有一台可以7*24小时运行的服务器,扫描工作需要花费大量的时间(自己有服务器的话最好,练手的话也可以使用云服务器);
- 在服务器上运行Tor 软件;
- 安装 OnionScan;
- 编写Python脚本,处理扫描工作,并将扫描结果进行数据管理;
- 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
前端 onionscan + tor 实现暗网爬取
1、安装相关依赖
123456 |
yum update yum install git bison libexif-devyum install toryum install epel-release yum install python-pippip install stem |
2、 安装 go 语言环境
12345678910111213141516 |
wget https://dl.google.com/go/go1.12.6.linux-amd64.tar.gz# 解压tar -C /usr/local -xzf go1.12.6.linux-amd64.tar.gz# 创建go项目路径mkdir -p /root/gopath# 添加环境变量vi /etc/profile# 添加内容GOROOT=/usr/local/goGOPATH=/root/gopath export GOROOT export GOPATH export PATH=$PATH:$GOPATH/bin:$GOROOT/bin# 使环境变量生效 source /etc/profile |
3、安装 onionscan
12345678910 |
# 由于golang.org被墙,不能直接下载文件,所以需要从镜像仓库手动下载相应的依赖文件 mkdir -p /root/gopath/src/golang.org/x cd /root/gopath/src/golang.org/x/git clone https://github.com/golang/net.git git clone https://github.com/golang/crypto.gitgit clone https://github.com/golang/sys.git# 安装onionscan go get github.com/s-rah/onionscan go install github.com/s-rah/onionscan |
在命令行输入onionscan
返回相应的命令信息表示 onionscan 安装成功
4、Tor 的配置
由于 onionscan 是通过 tor 代理进行访问暗网,而 tor 在国内不能直接连接上,所以需要进行代理配置
1234567891011121314 |
# 编辑tor配置文件vi /etc/tor/torrc# 在文件最后添加Socks4Proxy 192.98.203.92:1088 #socks4代理地址,也支持http代理和sock5代理 # tor不能用root用户运行,创建一个用户来运行toruseradd tor# 创建tor运行所需的目录,以及赋予权限mkdir -p /run/tor chown -R tor:tor /run/tor # 用tor用户登录su tor# 启动tortor |
出现如下图输出,表示 tor 启动成功
onionscan 的使用
123456 |
127.0.0.1:9050 -depth 1 -jsonReport -verbose wallstyizjhkrvmj.onionmkdir -p /opt/onionscandb onionscan -dbdir /opt/onionscandb -torProxyAddress |
参数说明:
- -dbdir 指定爬取数据存储目录,未指定情况下会保存在当前路径下
- -torProxyAddress 使用 tor 代理
- -depth 指定扫描暗网的深度
- -jsonReport 扫描结果生成 json 报告
- -verbose 控制台输出详细信息
扫描结果效果图