导语:Harpoon是一种自动化威胁情报和开源情报任务的工具。它是用Python 3编写的,并以插件的形式组织,所以它的思路是每个平台或任务都有一个插件。代码在Github上,你可以随意地打开问题并提出请求。
Harpoon是一种自动化威胁情报和开源情报任务的工具。它是用Python 3编写的,并以插件的形式组织,所以它的思路是每个平台或任务都有一个插件。代码在Github上,你可以随意地打开问题并提出请求。
安装和配置:
pip install git+ssh://[email protected]/Te-k/harpoon --process-dependency-links npm install -g phantomjs harpoon config -u harpoon config
然后检查如何使用每一个带有harpoon help MODULE 的模块
Harpoon ?
在过去的一年半里,我一直致力于研究威胁情报和开源情报在一些恶意软件上的运作。威胁情报一方面主要依赖于Passive DNS/恶意软件数据库,另一方面依赖于数据库的恶意活动。它的目的是映射出攻击者的基础设施结构,如果可能的话将其与其他的恶意活动联系起来。一些威胁情报平台是人人都可以访问的(例如 OTX 或者 RobTex),也有一些是商业化的或者不允许免费访问的(例如 VirusTotal 或者 PassiveTotal)。该活动的很大一部分是在不同的平台上寻找信息。许多人试图创建一个平台,集中管理来自其他平台的信息,但在研究过程中,总是会有另一个平台需要考虑。
新的标准问题完全适用于威胁情报(xkcd 927)
另一方面,开源情报(又称OSINT)则是更加多样化。它的目的是尽可能多地获取关于某人或一群人使用任何可在网上公开访问的数据来源的信息。当然也有一些有趣的平台(比如SpyOnWeb),但是你也需要在社交媒体,缓存平台和其他一些随机的任务中进行研究,这取决于你的调查方向。
总之,大量的任务都是手工完成的,体验很糟糕。起初,我试图创建随机python脚本来让一些任务变的自动化,但很快就变得一团糟: 太多的脚本,有的在python2 有的在python3,有的使用配置文件,有的在参数中获得API密钥…一段时间之后,我开始将这些脚本整理为一个叫做Harpoon工具的模块,并且经过几个月的使用之后,我认为是时候开放源代码,看看它能否帮助别人。
关于该工具的一些原则的注释:
·Python 3是唯一可以使用的,Python 2已经不再使用, 我甚至不打算再支持它
·许多OSINT工具试图从一个指示符(域或电子邮件)中收集尽可能多的信息,而不关心它来自何处。Harpoon不会遵循这种逻辑。它主要允许在每个指令中实现单个任务(使用多个工具来实现几个更通用的指令) 我认为在一项调查中,了解信息的来源和可靠性是非常重要的。
·在很多情况下,我还想探究API以了解使用它们可能实现的东西,最终我还是重写了一些数据库(比如SpyOnWeb),因为我想知道它到底做了什么以及如何做。所以我重复使用了很多次,最终对它们很满意。
·Harpoon被组织成易于实现的子命令,这些命令依赖于内部或外部的数据库。这些命令还使用一个单独的配置文件,当需要一个API key时,您需要手动完成这个配置文件。
·这个工具并完美,它只完成我们需要自动化完成的事情,目前它可能存在问题,并且有许多未来我想要实现的操作(但这也可能永远不会发生)。你可以随意地打开问题并提出请求
这篇文章可能会无聊,主要是因为我试图尽可能详尽地完成关于该工具的有限制的文档。你可以随意跳转到你感兴趣的部分。
安装
TL;DR:
pip install git+ssh://[email protected]/Te-k/harpoon --process-dependency-links npm install -g phantomjs harpoon config -u harpoon config
无聊但是必须要做的部分:如何安装Harpoon。我试着通过pip(在@cybersteez的巨大帮助下)尽可能地将它打包,这样所有的东西都会通过pip install git+ssh://[email protected]/Te-k/harpoon –process-dependency-links是安装好的状态。
打包的主要挑战是,我编写的许多数据库都是在github上托管的,而不是在Pypi中,所以打包时应该同时安装它们。或者,在你克隆完数据库(pip install -r requirements.txt)之后,你可以安装来自requirements.txt的所有东西。
如果你想使用截图模块(获取一个网站的截屏),你还需要通过npm : npm install -g phantomjs来安装。
现在Harpoon应该被安装了,你可以拿harpoon help ip为例来验证它是否能正常工作。然后,您需要安装Harpoon需要的文件并配置它。要安装所需的文件(目前主要是MaxMind GeoIP数据库),只需要运行harpoon config -u 并等待。最后配置该工具,主要是通过提供您可以使用或想要使用的平台的API 密钥。要做这一步,只需要运行 harpoon config,它将复制空的配置文件并使用vim打开它,这样就可以使用给定的API密钥了。如果没有API密钥,只需要让API密钥空着就行,Harpoon会在可能的时候避免使用这个平台。在我当前的系统上,可以看到用 harpoon config -c配置好的模块的列表,如下:
Configuration check: -hibp -> OK -twitter -> OK -misp -> FAILED -robtex -> OK -totalhash -> OK -pt -> OK -asn -> OK -otx -> OK -bitly -> OK -vt -> OK -screenshot -> OK -dns -> OK -safebrowsing -> OK -threatgrid -> OK -help -> OK -shodan -> OK -greynoise -> OK -crtsh -> OK -domain -> OK -pgp -> OK -github -> OK -malshare -> OK -config -> OK -hunter -> OK -hybrid -> OK -cache -> OK -spyonweb -> OK -telegram -> FAILED -fullcontact -> OK -ip -> OK -censys -> OK -googl -> OK
所有Harpoon需要的文件(包括配置文件)都被安装在~/.config/harpoon。
特性
在不列出模块的情况下来描述这些特性是很困难的,因为我几乎为每一个需要自动化的任务创建了一个新的命令。让我们用例子来组织分类:
·威胁情报平台 : Virus Total, Passive Total, Hybrid Analysis, AlienVault OTX, Shodan, Censys, RobTex, ThreatGrid, GreyNoise, TotalHash, MISP, MalShare:
$ harpoon otx -s cdnverify.net No analysis on this fileListed in 1 pulses-Sofacy targeting Romanian Embassy Sofacy targeting the embassy of Romania in Moscow - Email Subject: Upcoming Defense events February 2018 Created: 2018-02-08T11:50:07.652000 References: https://twitter.com/ClearskySec/status/960924755355369472 id: 5a7c396f6db26d7636273c44 URL list: [2018-02-06T19:12:50] https://cdnverify.net/ on IP 151.80.74.167 [2018-02-02T18:44:09] http://cdnverify.net/ on IP 151.80.74.167
·除此之外,我还执行了一些更高级别的命令,用于从所有这些平台上收集ip和域的信息。这些命令从几乎所有配置的插件中搜索有趣的信息:
$ harpoon domain intel cdnverify.net###################### cdnverify.net ###################[+] Downloading OTX information....[+] Downloading Robtex information....[+] Downloading Passive Total information....[+] Downloading VT information....----------------- Intelligence Report OTX: -Sofacy targeting Romanian Embassy (2018-02-08 - https://otx.alienvault.com/pulse/5a7c396f6db26d7636273c44) PT: Nothing found!----------------- Malware [PT (Emerging Threats (Proofpoint))] 36524c90ca1fac2102e7653dfadb31b2 2018-02-04----------------- Urls [VT] http://cdnverify.net/ - 2018-02-15[VT] https://cdnverify.net/ - 2018-02-09[OTX] https://cdnverify.net/ - 151.80.74.167 2018-02-06[OTX] http://cdnverify.net/ - 151.80.74.167 2018-02-02----------------- Passive DNS [+] 151.80.74.167 (2018-02-07 -> 2018-02-07)(PT) [+] 151.80.74.167 (2018-02-04 -> 2018-02-04)(VT) [+] 151.80.74.167 (2018-02-02 -> 2018-02-06)(Robtex) [+] 208.91.197.91 (2018-01-31 -> 2018-01-31)(PT)
·网络信息:命令ip、dns和asn提供关于ip、域名或ASN号(位置、dns分辨率或ASN的信息)的基本信息。没什么特别的,但它一直在起作用:
$ harpoon ip info 151.80.74.167MaxMind: Located in Roubaix, France MaxMind: ASN16276, OVH SAS ASN 16276 - OVH, FR (range 151.80.0.0/16) Censys:https://censys.io/ipv4/151.80.74.167Shodan:https://www.shodan.io/host/151.80.74.167IP Info:http://ipinfo.io/151.80.74.167BGP HE:https://bgp.he.net/ip/151.80.74.167IP Location:https://www.iplocation.net/?query=151.80.74.167
·社交媒体:当在社交媒体平台上进行研究时(我不确定API是否是最好的方法),我发现在调查过程中(比如在Twitter删除Russian trolls之前),从一个社交媒体账户中快速保存所有的东西是非常有用的。同样的想法,也可以用截图命令来获取一个网站的截图。目前,存在的只有Twitter和Telegram:
$ harpoon twitter -s realDonaldTrump > @realDonaldTrump
·URL 网址缩略:我还实现了bit.ly and goo.gl 网址缩略的指令,这个想法是为了尽可能多的从API获取信息:
$ harpoon bitly -H 2oh6Nrj -------------------- Bit.ly Link infos ------------------- # INFO Link: http://bit.ly/2oh6Nrj Metrics: http://bit.ly/2oh6Nrj+ Expanded url: https://ooni.torproject.org/post/mining-ooni-data/ Creation Date: 2018-02-19 00:15:03 Aggregate link: http://bit.ly/2E6V2dF 2 bitly redirect to this url # LINK INFO original_url: https://ooni.torproject.org/post/mining-ooni-data/ canonical_url: https://ooni.torproject.org/post/mining-ooni-data/ html_title: OONI - I have hands, how can I mine OONI data? aggregate_link: http://bit.ly/2E6V2dF indexed: 1519017306 # USERS User: 2oh6Nrj Invalid user! # CLICKS 0 clicks on this link # COUNTRIES # REFERRERS
·然后,我还实现了其他一些命令,因为我想看看都能从某些API获取些什么。例如,有个github 的指令可以在github repos中搜索,或者是pgp用来搜索API 密钥。我特别喜欢的一个命令是缓存命令,它可以检查一个网页在不同缓存平台上的存在。
$ harpoon cache https://citizenlab.ca/2016/11/parliament-keyboy/ Google: FOUND https://webcache.googleusercontent.com/search?q=cache%3Ahttps%3A%2F%2Fcitizenlab.ca%2F2016%2F11%2Fparliament-keyboy%2F&strip=0&num=1&vwsrc=1 (2018-02-05 20:02:18+00:00) Yandex: FOUND https://hghltd.yandex.net/yandbtm?fmode=inject&url=https%3A%2F%2Fcitizenlab.ca%2F2016%2F11%2Fparliament-keyboy%2F&tld=ru&lang=en&la=1518660992&tm=1519019381&text=https%3A%2F%2Fcitizenlab.ca%2F2016%2F11%2Fparliament-keyboy%2F&l10n=ru&mime=html&sign=ef543d285bc848b89e51b5a654f7f6aa&keyno=0 Archive.is: NOT FOUND Archive.org: FOUND -2018-02-03 10:05:03: http://web.archive.org/web/20180203100503/https://citizenlab.ca/2016/11/parliament-keyboy/ Bing: FOUND http://cc.bingj.com/cache.aspx?d=5023416941477933&w=p_fS69zzGSfsYoCCryqQAHXJ09tpPdBB (2016-11-17 00:00:00)
·最后并且很重要的,帮助命令(希望)提供关于任何命令的详细信息:
$ harpoon help ip # IP Gathers information on an IP address Get information on an IP: harpoon ip info 172.34.127.2 MaxMind: Located in None, United States MaxMind: ASN21928, T-Mobile USA, Inc. ASN 21928 - T-MOBILE-AS21928 - T-Mobile USA, Inc., US (range 172.32.0.0/11) Censys: https://censys.io/ipv4/172.34.127.2 Shodan: https://www.shodan.io/host/172.34.127.2 IP Info: http://ipinfo.io/172.34.127.2 BGP HE: https://bgp.he.net/ip/172.34.127.2 IP Location: https://www.iplocation.net/?query=172.34.127.2 * Get intelligence information on an IP: harpoon ip intel IP
Harpoon工具
在某种程度上,我讨厌用 harpoon XXX来做一些我一直在使用的命令。所以我创建了一个harpoontools数据库,它可以用Harpoon特性来执行安装命令。你可以通过 pip install git+ssh://[email protected]/Te-k/harpoontools来安装。
到目前,我只实现了 ipinfo, asninfo and dns :
$ cat ips | ipinfo 66.249.66.6 ; ASN15169 ; Google LLC ; Mountain View ; United States 184.105.139.116 ; ASN6939 ; Hurricane Electric, Inc. ; Fremont ; United States 184.105.247.206 ; ASN6939 ; Hurricane Electric, Inc. ; Salt Lake City ; United States
举例
其实要举一个Harpoon真实的例子是很难的,因为它对不同类型的研究都有帮助,但是我们来试试最近的Palo Alto关于Quasar RAT的报告,并且集中于域名akamaicdn[.]ru.
首先让我们看看实际的DNS解析是什么:
$ harpoon dns akamaicdn[.]ru # A No A entry # AAAA No AAAA entry configured # NS ns2.reg.ru. - 176.99.13.12 - ASN197695 Domain names registrar REG.RU, Ltd - None Russia ns1.reg.ru. - 176.99.13.15 - ASN197695 Domain names registrar REG.RU, Ltd - None Russia # MX: No MX entry configured # SOA NS: ns1.reg.ru. Owner: [email protected] # TXT: No TXT entry configured
没有任何条目,我猜操作停止了。 我们来看看是否能用robtex获取更旧的IP:
$ harpoon robtex domain akamaicdn.ru Passive DNS info: [+] A194.85.61.76(2017-03-16T14:55:12 -> 2017-03-16T14:55:12) [+] NSns1.expired.r01.ru(2017-03-16T14:55:12 -> 2017-03-16T14:55:12) [+] A109.70.26.37(2017-03-16T14:55:12 -> 2017-03-16T14:55:12) [+] NSns2.expired.r01.ru(2017-03-16T14:55:12 -> 2017-03-16T14:55:12) [+] MXnomail.nic.ru(2017-03-16T14:55:12 -> 2017-03-16T14:55:12)
检查这些IP的详细地址:
$ ipinfo 194.85.61.76 109.70.26.37 194.85.61.76 ; ASN48287 ; Jsc ru-center ; Moscow ; Russia 109.70.26.37 ; ASN48287 ; Jsc ru-center ; None ; Russia
检查是否用crt.sh为该域名创建了证书:
$ harpoon crtsh -d akamaicdn.ru Certificates sni11878.cloudflaressl.com 2017-03-02T00:00:00+00:00 2017-09-03T23:59:59+00:00 B05CB0F1425FBFA7E9407C777C6B4DC0E3F7F1B6 sni11878.cloudflaressl.com 2017-02-21T00:00:00+00:00 2017-08-06T23:59:59+00:00 7B9F1F8A2F7211C332C60EBFDB6CF739DF7D2A3A sni11878.cloudflaressl.com 2017-01-22T00:00:00+00:00 2017-07-30T23:59:59+00:00 D372B140802DA627BD0745B447A9E3A48B2FBD15 sni11878.cloudflaressl.com 2017-01-19T00:00:00+00:00 2017-07-23T23:59:59+00:00 3868C466BC8D131B2EB6B65CD7B20E7FFB255C51 sni11878.cloudflaressl.com 2016-12-05T00:00:00+00:00 2017-06-04T23:59:59+00:00 BBEBA7914A4287C8BDDCD81510A327D33E6476F5 sni11878.cloudflaressl.com 2016-12-05T00:00:00+00:00 2017-06-04T23:59:59+00:00 F0F0A0D02A8E16B3A261382D75B8C96393A16264 sni11878.cloudflaressl.com 2016-11-27T00:00:00+00:00 2017-06-04T23:59:59+00:00 E285191C82EA0F5FD23EF4688A62E5772F4584D4 sni11878.cloudflaressl.com 2016-11-23T00:00:00+00:00 2017-05-28T23:59:59+00:00 7F40B0D369700BFC27C2AD2EB858D8DF4955624D sni11878.cloudflaressl.com 2016-11-21T00:00:00+00:00 2017-05-28T23:59:59+00:00 EDE5454F23BBC7BFBA17F2E293D7FBDD1266B260 sni11878.cloudflaressl.com 2016-10-23T00:00:00+00:00 2017-04-30T23:59:59+00:00 68D504FAEB6AF1DDA50062B16CBFB46AAD490171 sni11878.cloudflaressl.com 2016-10-23T00:00:00+00:00 2017-04-30T23:59:59+00:00 2F2231766F8432343B579DB21ECF829CB171E481 sni11878.cloudflaressl.com 2016-10-23T00:00:00+00:00 2017-04-30T23:59:59+00:00 B11FCBEAD0A2D174C661D8095A0693955FC62A99 sni11878.cloudflaressl.com 2016-09-12T00:00:00+00:00 2017-03-19T23:59:59+00:00 62578BABE0AFFE15ABE3FBD68A6EE8EF76AB556A sni11878.cloudflaressl.com 2016-05-18T00:00:00+00:00 2016-11-20T23:59:59+00:00 5630B82083D14B0D5202FEAC7566971ECA41BBDC sni11878.cloudflaressl.com 2016-05-18T00:00:00+00:00 2016-11-20T23:59:59+00:00 D5A7B4CC6DF2340E8F547E3CC0A17163A81FD51A sni11878.cloudflaressl.com 2016-05-06T00:00:00+00:00 2016-11-06T23:59:59+00:00 500DA087F038AEB5A37D9F60638332DBA8368BA2 sni11878.cloudflaressl.com 2016-05-06T00:00:00+00:00 2016-11-06T23:59:59+00:00 C54AEC0DA67F1B12A134C6B997EE93DFA0EEE4F2 sni11878.cloudflaressl.com 2016-04-11T00:00:00+00:00 2016-10-16T23:59:59+00:00 E746CD3581198237D3D26F8A80FF71BAD88D1544 sni11878.cloudflaressl.com 2016-02-18T00:00:00+00:00 2016-08-21T23:59:59+00:00 451608653F741F079CC52569F7FAFB8C5B1F8855
显然,他们使用Cloudfare来托管该域名。由于Robtex的限制,我们可能对passive DNS信息有部分看法,但是我们先检查OTX是否知晓IP地址194.85.61.76的所有信息:
$ harpoon otx -s 194.85.61.76 No analysis on this file Listed in 5 pulses -BadRabbit-Ransomware - A Modified Version of NotPetya Created: 2017-11-03T17:58:14.502000 References: id: 59fcae36f0c4a216de3560ea -Blueliv Chasing cybercrime: Vawtrak v2 IOCs Vawtrak is a serious threat for the finance sector and is predicted to be the next major banking Trojan. Blueliv's investigation into Vawtrak v2 has revealed new information to piece together a more complete view of the Vawtrak banking Trojan and the cybercriminal groups behind it than we've seen before. The report also provides real infection data and Indicators of Compromise (IoCs) that readers can input into their existing security solutions to enhance their protection. Here is the full list of Vawtrak and Moskalvzapoe IOCs discovered as part of the Blueliv analysis. Created: 2016-09-12T17:36:18.734000 References: https://community.blueliv.com/#/s/57d6d33d82df41127d7a6ca4, https://www.sophos.com/en-us/medialibrary/PDFs/technical%20papers/sophos-vawtrak-v2-sahin-wyke.pdf?la=en id: 57d6e794aa954c115b68a85f -Ursnif CnC Created: 2016-02-17T00:35:04.809000 References: id: 56c3c03867db8c12501745c6 -Angler EK Network IOC Angler EK Network IOC observed in the past year. Created: 2016-02-17T15:25:35.814000 References: id: 56c490f067db8c1250175b9d -Chinese Government Website Compromised, Leads to Angler Despite a recent takedown targeting the Angler Exploit Kit (EK), it's back to business as usual for kit operators. On 30-October-2015, ThreatLabZ noticed a compromised Chinese government website that led to the Angler Exploit Kit with an end payload of Cryptowall 3.0. This compromise does not appear targeted and the compromised site was cleaned up within 24 hours. We have noticed some recent changes to Angler, as well as the inclusion of newer Flash exploits. A set of indicators for this compromise is at the end of this post. Created: 2015-11-03T19:21:57.947000 References: http://research.zscaler.com/2015/11/chinese-government-website-compromised.html id: 563909554637f2388aaf2311 Passive DNS: [SNIP]
创建一个新的命令
Harpoon是一种基于插件的工具,所以通过创建新插件很容易添加新特性。要做到这一点,您需要在harpo/Command中创建一个新文件,并实现一个继承命令类的类。假设我们想要实现一个ping命令(这不是很有帮助),我们可以创建下面的ping.py文件:
import os from harpoon.commands.base import Command class CommandPing(Command): """ # Ping Here put the help in markdown format """ name = "ping" decription = "Ping command" def add_arguments(self, parser): # Here add arguments to the parser (which is an argparse parser) parser.add_arguments('IP', help='IP to ping') # It is nice to save the parser to call help later if needed self.parser = parser def run(self, conf, args, plugins): # here, implements the actual task # args contains the arguments received from the parser os.system("ping -c 1 " + args.IP)