一、前言
相信大家对暗网这个概念并不陌生,众所周知,暗网藏着一个暗黑版的交易市场,违法工具、色情交易、毒品交易、枪械信息比比皆是,俨然一个网络犯罪分子聚集的“虎狼之穴”。我们使用Tor浏览器等可以轻松访问暗网中的浅层网,主要是黄赌毒和数据情报信息,如丝绸之路等。对于企业而言,往往不免被黑客攻击而被获取大量的数据,而这些数据一般会优先在暗网售卖,如近年来的12306、各大互联网公司等的数据泄露事件。为了及时响应突发的数据泄露事件,企业需要一款实时监控暗网数据泄露的威胁情报平台,用来监控敏感数据泄露、薅羊毛、业务安全风险等事件。
二、代理服务器搭建
由于国内网络环境的原因,为了顺利访问暗网,我们需要一台海外服务器,系统版本是ubuntu 18.04
(当然其他系统也可以,只是本文会把这个版本的系统作为例子),同时需要在这台服务器上安装Tor
与Privoxy
用作访问代理服务器。
本文的系统版本:
1 | root@536ef99cab94:/# cat /etc/issue.net |
2.1 整体架构
从图上可以看到,Privoxy
作为一个中转代理,主要是把http协议转socks5协议,而Tor
则负责把socks5转Tor协议。所以整个代理访问过程为:
1、用户输入后缀为onion的地址,由Privoxy
暴露的8118端口访问http协议;
2、Privoxy
把http协议转发给Tor
,Tor
获取该网站公钥进行加密,通过Tor通信链路发送信息给Tor节点,由该节点转发请求到.onion网站;
2.2 安装Tor
可能很多人一开始会直接执行这条命令:sudo apt-get install tor
,从这个命令安装的Tor
是v2版本的,不支持较新的加密算法,所以导致访问不到某些使用最新加密算法的暗网网址。Tor v2
到Tor v3
的转变主要表现为如下几点:
1、签名算法从SHA1/DH/RSA1024升级到SHA3/ed25519/curve25519。
2、改进的Tor directory protocol,安全性更高。
3、更好的洋葱地址,换成sha3,可以提高枚举生成一样地址的难度。
4、可拓展的交换协议。
参考官网的安装方法,安装最新版(v3版本)的Tor
步骤如下:
1、在/etc/apt/sources.list
添加如下源:
1 | deb https://deb.torproject.org/torproject.org bionic main |
2、添加gpg密钥,执行如下命令:
1 | curl https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | gpg --import |
3、安装Tor:
1 | apt update |
4、查看安装好Tor
的版本,可知本文安装的Tor
版本为0.3.5.8。
1 | root@536ef99cab94:/# tor -v |
2.3 配置Tor
Tor
配置文件位于/etc/tor/torrc
与/etc/tor/torsocks.conf
:/etc/tor/torsocks.conf
定义了让socks协议转Tor协议的端口与地址;/etc/tor/torrc
是Tor
的用户配置,在这个文件里我们修改http代理(polipo、privoxy)、即时通信(pidgin、lrssi)、TorDNS等。
为了支持Tor
v3版本,需要在/etc/tor/torrc
文件中加上:
1 | HiddenServiceDir /var/lib/tor/other_hidden_service/ |
修改完成后,在命令行输入service tor start
或tor
即可启动Tor。
启动tor需要切换debian-tor这个用户执行 tor –defaults-torrc /usr/share/tor/tor-service-defaults-torrc -f /etc/tor/torrc –RunAsDaemon 0
,如果切换用户后执行有错,也可以直接用root执行tor这个命令。
2.4 安装与配置Privoxy
这里暂时没有什么版本要求,所以可以直接执行apt-get install privoxy
。
安装好后,为了让Privoxy
把http协议转发到Tor
,需要编辑/etc/privoxy/config
加上:
1 | forward-socks5 / 127.0.0.1:9050 . |
修改后,重启服务service privoxy restart
。
2.5 验证代理器是否可用
- Tor浏览器虽然可以使用
meek-azure
来访问暗网网站,但是访问速度较慢。为了验证我们搭好的代理服务器是否可用,我们可以修改Tor浏览器的网络设置(假设我们的代理服务器ip为:11.11.11.11):
设置完成后访问一个暗网网站,如果能访问成功的话即说明我们的代理服务器可用,同时访问速度也比meek-azure
快得多。 - 当然,我们也可以更快捷地输入下面的命令进行测试:
1 | ➜ ~ curl -x 11.11.11.11:8118 https://httpbin.org/ip |
可以查询到178.175.132.225的所在地为国外的摩尔多瓦,为Tor节点的出口地址。
三、开发实时监控程序
在上一章节我们搭好了代理服务器,相当于拥有了访问暗网的钥匙,虽然可以用Tor浏览器+代理更快访问暗网网址,但是人工并不能做到24小时监控而及时发现数据泄露事件,因此我们需要开发一个爬虫程序实时监控暗网网站。
3.1 暗网网站的特点
暗网网站不同于表层网网站,没有太多花里胡哨的动态js与强大的反爬策略,因此对暗网网站爬虫也相对简单。在总结了几个常见的暗网网站后,发现暗网网站的反爬策略一般是如下几种情况:
- Referer;
- 针对Cookie的请求频率限制;
- User-Agent;
- 验证码;
- 对网站代码进行更新,修改html标签名字或位置。
3.2 暗网网站的反反爬虫
针对3.1的反爬虫策略我们可以设法绕过,由于本文的主旨并不在探究反爬虫策略,故简单地说下绕过方法:
- 指定请求头的referer为访问暗网网站的域名;
- 建立多账号Cookie池,同时使用Redis对url去重实现增量爬取减少请求量;
- 指定User-Agent为FireFox浏览器:{‘User-Agent’: ‘Mozilla/5.0 (Windows NT 6.1; rv:60.0) Gecko/20100101 Firefox/60.0’};
- 暗网网站的验证码一般比较简单,可以简单使用ocr技术识别,如
tesseract
; - 需要及时更新爬虫代码,有针对地修改反反爬虫代码。
3.3 暗网监控的爬虫架构
Scrapy 是用 Python 实现的一个为了爬取网站数据、提取结构性数据而编写的应用框架。Scrapy 常应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。通常我们可以很简单的通过 Scrapy 框架实现一个爬虫,抓取指定网站的内容。
本文在Scrapy基础上结合3.2小节的反爬虫绕过方法实现了一个实时监控程序,其架构如下:
3.4 监控程序的具体实现
本文的监控程序是同时监控几个常见的暗网网站,由于篇幅有限,故只拿某暗网网站作为例子。
Scrapy代理设置:
1 |
|
多账号登录核心代码:
1 | for accounts in Accounts: |
去重组件,主要用来减少请求量:
1 | class DuplicateRequestMiddleware(object): |
指定请求头的referer及User-Agent:
1 | LOGIN_HEADERS = { |
解析网页,主要是取出内容存入数据库:
1 | def parse(self, response): |
当发现监控的关键字新增记录时,通过邮件通知:
1 | def send_html_email(title, html, content, mailto, cc=None): |
四、可视化爬虫数据
Grafana
是一个跨平台的开源的度量分析和可视化监控工具,可以通过将采集的数据查询然后可视化的展示,并及时通知,4.3以后的版本已支持MySQL数据源,因此读者可以使用Grafana
来可视化同时配置邮件告警,具体操作方法还请自行查阅。- 但是本文的暗网实时监控程序接入了安全管理平台,故采用自研的管理页面,可以更方便地搜索与查看暗网爬虫数据,大致效果如下:
五、总结
暗网监控对于大多数人是一个神秘的存在,本文一步一步地带领读者揭开这层神秘的面纱,从搭建代理服务器开始,在解释常见的反爬策略后,讲解了如何从零开发一个暗网网站监控程序,最后介绍了Grafana
可视化监控工具,可以结合监控程序使用。
p.s.特别鸣谢y1r0nz大佬的指导,给了一些非常好的实施建议。
本文链接: http://dayun.shystartree.online/2019/06/18/%E4%BC%81%E4%B8%9A%E5%A8%81%E8%83%81%E6%83%85%E6%8A%A5%E5%B9%B3%E5%8F%B0%E5%BB%BA%E8%AE%BE%E4%B9%8B%E6%9A%97%E7%BD%91%E7%9B%91%E6%8E%A7/
版权声明:本博客所有文章除特别声明外,均采用知识共享署名-非商业性使用-相同方式共享4.0国际许可协议许可协议。欢迎转载,但转载请注明来自qingyu’s blog,并保持转载后文章内容的完整,本人保留所有版权相关权利。