作者:Heige(a.k.a Superhei) of KnownSec 404 Team
时间:2020年5月25日
原文链接:https://paper.seebug.org/1219/
英文链接:https://paper.seebug.org/1220/
今年一月发布的ZoomEye 2020里上线了ZoomEye的历史数据查询API接口,这个历史数据接口还是非常有价值的,这里就介绍我这几天做的一些尝试追踪APT的几个案例。
在开始之前首先你需要了解ZoomEye历史api接口的使用,参考文档:https://www.zoomeye.org/doc#history-ip-search 这里可以使用的是ZoomEye SDK https://github.com/knownsec/ZoomEye 另外需要强调说明下的是:ZoomEye线上的数据是覆盖更新的模式,也就是说第2次扫描如果没有扫描到数据就不会覆盖更新数据,ZoomEye上的数据会保留第1次扫描获取到的banner数据,这个机制在这种恶意攻击溯源里其实有着很好的场景契合点:恶意攻击比如Botnet、APT等攻击使用的下载服务器被发现后一般都是直接停用抛弃,当然也有一些是被黑的目标,也是很暴力的直接下线!所以很多的攻击现场很可能就被ZoomEye线上缓存。
当然在ZoomEye历史api里提供的数据,不管你覆盖不覆盖都可以查询出每次扫描得到的banner数据,但是目前提供的ZoomEye历史API只能通过IP去查询,而不能通过关键词匹配搜索,所以我们需要结合上面提到的ZoomEye线上缓存数据搜索定位配合使用。
案例一:Darkhotel APT
在前几天其实我在“黑科技”知识星球里提到了,只是需要修复一个“bug”:这次Darkhotel使用的IE 0day应该是CVE-2019-1367 而不是CVE-2020-0674(感谢廋肉丁@奇安信),当然这个“bug”不影响本文的主题。
从上图可以看出我们通过ZoomEye线上数据定位到了当时一个Darkhotel水坑攻击现场IP,我们使用ZoomEye SDK查询这个IP的历史记录:
╭─heige@404Team ~
╰─$python
Python 2.7.16 (default, Mar 15 2019, 21:13:51)
[GCC 4.2.1 Compatible Apple LLVM 10.0.0 (clang-1000.11.45.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
import zoomeye
zm = zoomeye.ZoomEye(username="xxxxx", password="xxxx")
zm.login()
u'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpX...'
data = zm.history_ip("202.x.x.x")
22
列举ZoomEye历史数据里收录这个IP数据的时间节点及对应端口服务
...
>>>for i in data['data']:
... print(i['timestamp'],i['portinfo']['port'])
...
(u'2020-01-28T10:58:02', 80)
(u'2020-01-05T18:33:17', 80)
(u'2019-11-25T05:27:58', 80)
(u'2019-11-02T16:10:40', 80)
(u'2019-10-31T11:39:02', 80)
(u'2019-10-06T05:24:44', 80)
(u'2019-08-02T09:52:27', 80)
(u'2019-07-27T19:22:11', 80)
(u'2019-05-18T10:38:59', 8181)
(u'2019-05-02T19:37:20', 8181)
(u'2019-05-01T00:48:05', 8009)
(u'2019-04-09T16:29:58', 8181)
(u'2019-03-24T20:46:31', 8181)
(u'2018-05-18T18:22:21', 137)
(u'2018-02-22T20:50:01', 8181)
(u'2017-03-13T03:11:39', 8181)
(u'2017-03-12T16:43:54', 8181)
(u'2017-02-25T09:56:28', 137)
(u'2016-11-01T00:22:30', 137)
(u'2015-12-30T22:53:17', 8181)
(u'2015-03-13T20:17:45', 8080)
(u'2015-03-13T19:33:15', 21)
我们再看看被植入IE 0day的进行水坑攻击的时间节点及端口:
>>> for i in data['data']:
... if