如何仿照OSINT模式进行机密信息的收集与发掘
luochicun 嘶吼专业版
OSINT的历史及获取情报的渠道
公开资源情报计划(Open source intelligence ),简称OSINT,是美国中央情报局(CIA)的一种情报搜集手段,从各种公开的信息资源中寻找和获取有价值的情报。OSINT不同于一般的调查,可以为特定的个人或团队量身定制特定的信息支持。
公开源情报工作开始于1941年,以美国外国广播监测处(Foreign Broadcast Monitoring Service, FBMS)创立为标志。其发展过程实际上就是情报界观念的改变过程,即注意力从秘密情报转向公开源情报的过程。分析人员最初认为公开源 情报只能作为验证秘密情报的一种辅助用具。后来,随着其在海量信息供应、解析他国文化、链接信息碎片、掩护情报来源等多方面价值的体现,公开源情报逐步成为一项专门工作。据美国中央情报局统计,2007年的情报收集总数中超过80%来自公开源情报。
获取情报的5种公开渠道
1.媒体:报纸(newspapers)、杂志(magazines)、电台( radio)、电视节目(television)、基于计算机的信息(computer-based information)。
2.基于网络社区(Web-based communities)和用户创造的内容(user generated content):社交站点(social-networking sites)、视频分享站点(video sharing sites)、维基百科(wikis)、博客(blogs)、通俗分类(folksonomies)。
3.公开数据(Public data):政府报告(government reports)、官方数据(official data )如预算(budgets)、人口统计资料(demographics)、听证会(hearings)、立法辩论(legislative debates)、新闻发布会(press conferences)、演讲(speeches)、海洋和航空的安全警告(marine and aeronautical safety warnings)、环境影响图片( environmental impact statements)、合同签订(contract awards)。
4.观察(Observation)和报告(reporting):利用业余观察家们的成果,如某些人通过对谷歌地球(Google Earth)进行标注、上传某一地区的照片,从而大量借此扩展出了许多有价值的情报信息。
5.专家(Professional)和学者( academic):会议(conferences)、研讨会(symposia)、专业组织(professional associations)、学术论文(academic papers)、专家(subject matter experts)
6.地理信息数据:地图(maps)、地图集(atlases)、地名录( gazetteers)、港口规划(port plans)、重力数据(gravity data)、航空数据(aeronautical data)、导航数据(navigation data)、人类分布数据( human terrain data ,如文化和经济上的)、环境数据(environmental data)、商业影像(commercial imagery)、激光雷达(LIDAR ,Light Detection And Ranging)、超多光谱数据(hyper and multi-spectral data)、机载成像(airborne imagery)、地理名称(geo-names)、地理特征(geo-features)、城市地形(urban terrain)、垂直阻塞的数据(VOD, vertical obstruction data)、界标数据(boundary marker data)、地理空间聚合(geospatial mashups)、空间数据库(spatial databases)、web服务(web services)。许多信息都可以利用地理信息系统(GIS)进行整合、分析、聚合的。
仿照OSINT模式进行***测试
为了验证OSINT收集情报的威力,我们会在本文中采用黑盒测试的办法。同白盒测试相比,黑盒测试比较费时,同时对技术要求比较高。在安全业界的***测试眼中,黑盒测试能更逼真地模拟了一次真正的***过程。黑盒测试依靠测试人员的能力探测获取目标系统的信息,作为一次黑盒测试的***测试者,通常不需要找出目标系统的所有安全漏洞,而只需要尝试找出并利用可以获取目标系统访问权代价最小的***路径,并保证不被检测到。
本文,我将以谷歌的官网https://www.google.com/为例,来进行机密数据收集与发掘。
Burp Suite是一个集成化的***测试工具,它集合了多种***测试组件,使我们自动化地或手工地能更好的完成对web应用的***测试和***。
所以我们的第一步就是设置浏览器代理及burp suite代理设置从历史记录读取数据,另外我还安装了根SSL证书。
如果你查看的是BurpSuite的侧栏,则位于目标>站点地图> https://www.google.com/下。此时,我们已经可以快速浏览网站的详细文件结构和加载的脚本。注意,这只是情报侦察阶段,我们需要在这个阶段保持谨慎,躲避任何的检测。
如果你使用的是BurpSuite Professional,你可以点击右键选择“被动扫描此主机”选项,此时,它将搜索你现有的请求页面代码,以查找已知漏洞,泄露的电子邮件等。
根据常识,至少80端口或443端口是开放的,至于还有什么在运行?你可以打开Shodan,或者你可以使用非常酷的nmap脚本。
获取Shodan API密钥后,将其放置在以下nmap命令行中运行:
nmap --script=shodan-api --script-args 'shodan-api.apikey=XXXXXX'google.com
虽然过程很简单,但却能获得很多有价值的情报,比如以下内容:
-sn:禁用端口扫描;
-Pn:跳过主机发现,不ping主机;
-n:跳过DNS解析
然后Nmap会意识到它没有什么可做的,并将运行shodan-api脚本。 此时,Shodan API脚本将被发送到shodan.io并检索它所知道的有关主机的所有信息,其中就包括主机版本和端口号。
DNS暴力破解
在进行DNS暴力破解之前,我们需要先研究一下DNS区域传送,DNS区域传送(DNS zone transfer)指的是一台备用服务器使用来自主服务器的数据刷新自己的域(zone)数据库。区域传送最初是一种用于服务器管理员的工具,允许它们轻松复制DNS数据库,例如转移到新域名。如果要***的公司曾经迁移过他们的网站,并且几乎没有做任何安全措施,那么暴力***的效果最明显。一般来说,DNS区域传送操作只在网络里真的有备用域名DNS服务器时才有必要用到,但许多DNS服务器却被错误地配置成只要有client发出请求,就会向对方提供一个zone数据库的详细信息,所以说允许不受信任的互联网用户执行DNS区域传送(zone transfer)操作是后果最为严重的错误配置之一。
区域传送漏洞的危害是:***可以快速的判定出某个特定zone的所有主机,收集域信息,选择***目标,找出未使用的IP地址,***可以绕过基于网络的访问控制。
我们可以使用名为dnsenum的工具轻松进行域名转移,它是用Perl编写的。它是一个非常可靠的***测试工具,可以发现了一些有关主机的有趣内容,比如:
1.主机地址:这是你在域上执行简单nslookup时将获得的IP;
2.通配符主机(Wild Card Host):这是当你调用随机子域(例如kttfvatukbld)时将返回的IP,它通常是来自你的DNS提供商或ISP的IP。
3.域名服务器(Nameserver):NameServer的主要功能是为整个MQ集群提供服务协调与治理,具体就是记录维护Topic、Broker的信息,及监控Broker的运行状态,这些可能是非常有用的信息。
- 邮件交换记录 (MX record):邮件交换记录 (MX record)是域名系统(DNS)中的一种资源记录类型,用于指定负责处理发往收件人域名的邮件服务器。现在这些信息很容易被忽略。它将揭露域的MX服务器,企业、的许多业务都是使用外部托管的电子邮件,如Outlook,这些记录往往包含公司的整个工作流程。
接着,我会使用Aiodns,它是一个DNS解析器,可以通过异步介质进行同步调用。简而言之,这意味着你可以在每次请求后无需关闭连接的情况下有效地进行多次调用。
接着,我会使用Aiodnsbrute(一个DNS异步暴力破解程序),它可以在1.5-2分钟内提供了大约10万个DNS解析。
此时,我们在google.com上看到以下内容:
$ aiodnsbrute google.com
可以看到,DNS解析器会发现有很多以92开头的IP地址。还记得以上我说过在DNS中查找通配符吗?它也具有相同的IP。我们可以使用以下grep命令轻松解决这个问题。
aiodnsbrutegoogle.com | grep -v "the resolver IP"
抓取邮件
Harvester是一个邮箱挖掘器,它会抓取谷歌搜索结果、标题、描述、元数据,并查找类似电子邮件地址./theHarvester.py-d companydomain.com -b google的所有内容。
为了方便讲解,我使用了protonmail.com。
总共抓取了16000个结果,我们可以从中分析出电子邮件的常见模式。
我们可以使用这些信息做很多事情,比如可以将它加载到电子邮件程序中并发送钓鱼电子邮件,也可以使用一种被称为“密码喷洒(Password Spraying)”的技术来进行测试和***。
Weleakinfo.com
还记得Adobe、LinkedIn和MySpace的数据泄露吗?这些泄露的数据目前仍然存在与网络中,虽然你仍然可以找到零星的数据,但是要将数据还原,就不是那么容易了。
而Weleakinfo会将所有这些零星的数据编译成一个大的、可以快速搜索的数据库,你甚至可能在其中找到一些旧密码。***甚至不需要***目标的服务器,就已经有了他们的账户密码了。
分析16000电子邮件最好的方式就是进行使用Weleakinfo进行自动化分析。实际上,Weleakinfo提供了一个公共API ,它允许每秒3个请求,如果你想更快,可以试试ProxyDock 这样的工具。
Geo2IP
现在你已经知道主机的位置了,但却不知道它的确切细节。这时你可以使用Geo2Ip,它会找出该主机的坐标位置。然后,你再将这些内容提供给nslookup工具(由微软发布用于对DNS服务器进行检测和排错的命令行工具),以发现与主机关联的所有信息。
反向域名Whois查询
此时你可以用到reverse whois,现在,你可以使用这些工具输入公司名称、电子邮件地址或注册者名称(从以前的侦察中获得的),然后对新获得的电子邮件、域名和其他信息执行相同的步骤。
至此,你已经获得了目标设备的全部信息,它们都是日常OSINT中要用到的至关重要的信息。
以LinkedIn为例,进行电子邮件信息收集。
找到电子邮件地址
在此你可以使用hunter.io神器来搜索公司的电子邮件地址,它甚至可以分析出使用当前的公司使用的电子邮件结构类型。
第1阶段:找出命名约定(naming conventions)
以google.com为例,现在我们假设发现了一些格式为hsimpson@google.com的电子邮件,使用hunter.io我们很快就能了解公司使用的电子邮件结构类型,通常是{firstinitial}{lastname}@{companyname}.com,这可能因组织不同而异。但是我们很快就能找到命名约定,然后我们进入第2阶段。
第2阶段:获取员工信息并生成电子邮件
如果我们能得到在公司工作的每个人的姓名列表,那么我们就可以将这些信息输入python脚本,并根据命名约定生成电子邮件地址,通常情况下我们可以很容易地通过google dorking获得它们的名称,Google Dorking,该工具可以识别出存在漏洞的系统,并发现它们在互联网上的特定位置。不过我用的是GoogLinked,当与ProxyDock 结合使用时,效果比Google Dorking要好很多。
在运行此操作之前,你要做的一件事是修改脚本。现在它使用Microsoft和microsoft.com作为参数,所以你要将其修改为“公司名称”(如LinkedIn所示)和公司电子邮件域名。在上面的示例中,我会将所有结果导入到一个文件中。
返回了很多电子邮件地址:
正如你所看到的,有一些生成的电子邮件地址。然后,采用run_search()函数中定义的格式。
请注意,names.each部分。根据你发现的公司格式修改它,在本文的示例中,tarr[0]和tarr[-1]分别被修改为firstname和lastname。注意,当引入中间名时,***测试可能会出现一点意外,所以此处请留意。
如果你想制作一个PR来添加自定义功能,请随意。现在你有了这些电子邮件,把它们传到weleaksinfo.com,就可以进行情报获取了。
进一步的数据挖掘
在2000年以后,暴力破解是每个***测试人员都在做的事情。他们会在Web服务或RDP之类的远程访问服务上找到一个有效的帐户,并使用诸如rockyou.txt之类的密码表对其进行破解。如今,供应商也变得重名了,他们会检测失败的登录尝试,记录它们,如果有人对这些账户进行连续过多的登录尝试,则锁定这些帐户。
不过,供应商通常会在锁定帐户前,允许4-5次连续的错误密码尝试。另外即使供应商没有锁定帐户,他们也开始实施密码复杂性规则、密码轮换策略等,这些都让暴力破解无法施展。
所以根据目前的安全形势,密码喷洒才是最佳的数据挖掘打开方式。
对密码进行喷洒式的***,这个叫法很形象,因为它属于自动化密码猜测的一种。这种针对所有用户的自动密码猜测通常是为了避免帐户被锁定,因为针对同一个用户的连续密码猜测会导致帐户被锁定。所以只有对所有用户同时执行特定的密码登录尝试,才能增加破解的概率,消除帐户被锁定的概率。
通过密码喷洒可以探测到以下情报:
1.了解目标公司的业务结构(这个通过电子邮件可以了解的最详细);
2.得到目标中有效的电子邮件地址列表;
3.了解密码复杂性规则;
4.了解常用密码;
分析出一家公司的业务结构是相当容易的,你可以使用DNSDumpster(DNSdumpster可以为给定的域名找到大量的子域名。),并输入你的目标域名并检查MX记录和TXT记录,它们都是Microsoft.com格式。
如果你正在与一家使用Office 365处理电子邮件的公司打交道,你会看到microsoft-com.mail.protection.outlook.com和TXT记录等内容。
密码喷洒不仅限于电子邮件服务,它还会在Jira或其他类似的平台检查子域,JIRA 是目前比较流行的基于Java架构的管理系统。
电子邮件的抓取
以上我曾介绍过相关的方法,不过现在我要介绍一个更好的方法,使用我开发的工具——EmailGen 即可完成目的。
现在,你需要了解公司用于构建电子邮件地址的格式。我们可以手动执行此操作,或者使用https://hunter.io/。
一旦搜索结果被返回,hunter通常会返回我们可以输入到EmailGen中的格式,例如:{first}.{last}@{domain}。
在Microsoft环境中,我们将运行以下代码:
./EmailGen.rb -c "Microsoft" -d "microsoft.com" -f "{first}.{last}@{domain}" -o microsoft-emails.txtMicrosoft" -d "microsoft.com" -f "{first}.{last}@{domain}" -o microsoft-emails.txt
现在已经有了这些电子邮件地址,我们可以开始下一个阶段了。
查找泄露的信息
对于外行人来说,WeLeaks是一个收集漏洞信息并对其进行索引的服务平台。Dropbox、AdultFriendFinder、MySpace、LinkedIn等服务都曾一度遭到******,用户信息也遭到了泄露。所以以前大家都可以使用WeLeaks搜索这些信息,不过现在这个平台已经不好用了。
现在,行家都会使用一种被称为“密码填充”的技术,即先获取被泄露的数据,并尝试用泄露的密码登录用户的账户。实际上,我个人就受到了这个***的影响,当时,我的MacBook Pro电脑就通过这种方式被远程锁定。
既然WeLeaks不好用了,建议大家使用我开发的一个名为CredCatch的工具,它使用Selenium(浏览器自动化测试框架)来抓取WeLeaks付费帐户以获取明文凭据。
可以通过WeLeakInfo或breachcompile手动获取泄露的数据,获得此类数据后,将电子邮件和密码放入如下文件中。
alice@example.org:breachedPass123 alice@example.org:breachedPass33 bob@example.org:mysupersecretleakedpass
稍后,我们会用到这些文件。
生成密码喷洒列表
我编写了一个工具,称为X-Prey。X-Prey会将你之前创建的密码列表以及电子邮件列表放在一起,生成一个专门用于喷洒的密码列表。生成此组合列表后,你就能够在喷洒活动中利用潜在的密码重用。
根据密码喷洒,我们已经实现了以下一些信息的获取:
1.生成电子邮件列表;
2.发现泄露的密码;
3.生成一个用于喷洒的密码列表;
如果一切顺利,你的密码列表应该如下:
wordlist.txt
(Truncated)
alice@example.org:NaviSec2019!
alice@example.org:Pa$$w0rd!
sean@example.org:12345
sean@example.org:Spring2019
sean@example.org:Spring2019!
sean@example.org:Pa$$w0rd!
dcuthbert@example.org:DontCallMeDanny
dcuthbert@example.org:NaviSec2019
dcuthbert@example.org:Pa$$w0rd!
让我们把这个密码列表分成两部分,这样我们就可以将它提供给BurpSuite:
cat wordlist.txt | sed 's/:/ /g' | awk '{ print $1 }' >> wordlist_users.txt && cat demo_wordlist.txt | sed 's/:/ /g' | awk '{ print $2 }' >> wordlist_passes.txt
使用BurpSuite继续挖掘
打开Burpsuite后,确保代理配置正确,并且浏览器安装了根SSL证书。
1.现在访问你的目标站点并尝试登录,我通常使用admin:password;
2.右击代理请求,选择“发送给***者”;
3.进入“发送给***者”选项后,在顶部导航菜单中选择“位置”,将“***类型”设置为“Pitchfork”,确保位置设置正确;
- 现在就可以加载你的用户名和密码列表,然后点击开始;
此时,喷洒的所有结果都会出现。由于以上所讲的是一个纯粹用于演示目的的服务器,所以在这个示例中没有进行身份验证。