HW实战:浅谈信息采集中的自动化数据分析

  备案注销     |      2023-09-30
HW实战:浅谈信息采集中的自动化数据分析

文腾讯安全平台部颜修

一、WHAT

现在很多信息收集工具或者文章基本上停留在信息收集的早期阶段。很多文章或者工具着重于拓宽信息收集的渠道,从搜索引擎、被动DNS到爆破词典的丰富性等等,很少提及。获取信息后是否以及如何处理。此外,还有一些渗透测试人员每次收集信息时都会将结果放入文本文件中,而且几乎每次渗透测试都要进行新的信息收集过程。这种方法的缺点是非常明显的。首先,造成比较大的时间消耗。其次,收集到的信息二次利用非常繁琐且不够自动化,后期需要大量的人工干预。

为了解决以上两个问题,自然还有后期的信息采集,就是本文标题中讨论的——信息采集中的自动化数据分析。

说到信息采集,大家都很熟悉,但是有些人可能会有疑问,信息采集中的数据分析是什么?在讨论数据分析之前,我们先来思考一个常见问题。有哪些方法可以认定两个域名属于同一家公司的资产?读者在发表答案之前可以先思考一下这个问题。下面谈谈作者的思考:

ICP备案信息WHOIS联系信息证书信息DNS解析信息WHOIS-NAMESERVER信息网页响应信息

1-4比较容易理解。这里我们详细讨论一下5和6。由于很多大公司都使用自建DNS,所以他们的域名基本上都会指向自建DNS NAMESERVER。这一特征可以作为判断是否为同一公司资产的标准之一。具体可以看下图的qq.com的whois;这里的网页响应信息可以传递CSP头、网页相似度、引入静态资源的域名、网站配置文件等。通过以上6种方法判断是否是同一家公司的过程就是一个数据分析的过程。同时我们还可以发现,这种确认方式是可逆的,也就是说,当我们知道其中一个域名的时候,我们就想知道该公司的其他域名。那么上面的方法仍然有效。

二、WHY

如果要问为什么要做自动化数据分析,首先要知道自动化数据分析的目的。我理解的数据分析主要有两个目的,一是扩充和补充,二是去伪存真。这两个其实还是比较容易理解的。扩展和补充的原理与信息收集基本相同。主要目的是收集尽可能多、完整的目标信息,而去伪存真则是为了确认目标信息,去除不相关的噪音信息,避免伤及无辜,避免给自己带来不必要的麻烦。

我们先来说说扩展和补充的问题。对于外部测试人员来说,渗透测试目标的资产主要包括域名和IP。当然,严格来说,还可以包括安装包等客户端。但是,如果是在线系统的测试,那么最重要的资产其实就是域名和IP。获得更多的域名和IP就相当于获得更多的资产。

如果小A想向台橡提交漏洞,如何收集更多腾讯相关资产?很多文章都会讲到子域名爆破、端口扫描等,但是爆破哪些域名呢?这些域名够完整吗?获取端口信息的IP是否足够完整?回答这些问题就是数据分析的作用。那么回到上面提到的资产是否相同的问题,如果小A确认qq.com的域名属于腾讯,通过上面的模型关系,他可以找到除qq.com之外的更多同级域名,当然这只是数据分析的一小部分。数据分析的功能还包括获取更多的子域名、判断哪些域名未启用、判断哪些域名是公共服务域名。

简单来说,信息收集中的数据分析就是发现更多诸如上述的相关性,并在信息收集中以自动化的方式构建它们,以提高我们信息收集的广度和质量。

三、HOW

刚才讲了信息收集中什么是数据分析,为什么要用数据分析,但是我们忽略了一个非常关键的问题,那就是数据分析的数据是什么?下面是一个表格,列出了一些可以用来分析的常用数据以及它们之间的对应关系:

谁是

证书

网址转发

域名系统

ICP

太阳能光伏发电

域名电话

IP域

IP域

域名-IP

域名组织

域名-BRODOMAIN

域名组织

IP组织

CNAME-IP

域名-BRODOMAIN

域-子域

域名电子邮件

域名组织

域名CNAME

域名服务器

域-子域

域名-BRODOMAIN

域名-BRODOMAIN

注:DOMAIN表示域名,SUBDOMAIN表示子域名,BRODOMAIN表示兄弟域名,ORG表示组织,NAMESERVER表示DNS地址,CNAME表示DNS解析的CNAME字段;url forward表示访问IP跳转到域名;

根据笔者的实践,这里的部分数据可以通过开放的第三方获取,比如Censys(https://scans.io/)提供了全局的CERTIFICATE数据,主要是443端口和8443端口的证书数据。此前,这些数据也被直接在公共网络上可用。目前下载的内容受到部分限制,但仍然可以通过申请获取。如果你觉得申请麻烦,而且你有资源,也可以自己扫描;和WHOIS、DNS一样,Python有比较完整的封装,可以直接调用,但由于注重隐私,目前的DNS联系信息基本被屏蔽,但仍有一些ORG或NAMESERVER字段仍然可以使用; URL FORWARD信息和CSP信息用于爬虫扫描或目录爆破,只需添加少量代码即可满足此需求;至于ICP数据,其实也有一些接口,但是要么数据更新太慢,要么收费,所以得自己想办法解决。至于一些系统的验证码,目前传统字符验证码的AI识别成功率比较高,实测基本在90%+,识别时间也在毫秒级,如下图。

刚才讲了很多理论,相信大家都看得云里雾里,然后进入实战阶段。我们以CERTFICATE数据为例,说明如何获取、存储和关联这些数据。值得一提的是,扫描获取证书信息已经有一些比较成熟的项目。例如,刚才提到的Censys使用zgrab(https://github.com/zmap/zgrab),它与Zmap属于同一家族。它的优点是速度比较快。但是缺点和Zmap类似,会有很大的扫描流量。由于目前大家大量使用Python语言,为了方便读者,这里也贴出Python获取证书信息的关键代码:

另外,CERTFICATE本身其实还有很多信息,比如加密方式等,如果只是用于相关场景,我们只需要关注组织、通用名和备用名即可:

对于数据存储,笔者选择了常见的MySQL。要问为什么,最重要的原因就是便宜。当然,MongoDB其实很适合存储这些分散的信息,但是不太适合关联,所以最终选择了MySQL。这里仍以证书信息的存储为例,这里设计了如下两个表:

表1. 证书信息表

领域

ip

有机的

常见

更新时间

域名

ip

组织ID

域名是否常用

更新时间

去掉*等,并使用反向功能,方便类似操作,多轮数据优化的结晶。

这与备用域名不同

有自动更新机制,超过30天,自动更新

表2. 组织信息表

组织

有机的

区域

协会名称

组织ID

区域

接下来,您可以导入分析后的数据,或者自由扫描。值得注意的是,如果自己扫描的话,建议Zmap先过端口,再获取证书,这样会事半功倍。当数据落入他的一亩三分地时,他就可以为所欲为。回到刚才小A的需求,他已经知道腾讯拥有qq.com域名。如果他想获得其他兄弟的根域名,该怎么办?其实很简单,就是一条SQL语句:

这里有一个地方没有规范让[.]等于1。没有考虑com.cn的情况。然而,这是为了演示而简化的。实际的处理会稍微复杂一些。需要关联dns数据才能看到域名的基本信息。进行下一步确认。执行后可以得到如下一些结果,总共有100多个:

至于获取qq.com的子域名则不是问题。部分结果截图如下:

其他做法还有很多,这里就不一一举例了。总之,有了数据在手,很多东西就可以挖掘出来。另外,就像上面的证书例子一样,表中的其他数据还有很多可以挖掘的点。通过推理,获取并存储这些数据,并通过代码固化这些关系,那么我们的自动化数据分析平台就基本完成了。向上。此刻,我们再次回顾信息收集过程。信息收集经过自动化数据分析后,会演化成一个什么样的过程:

关联CERTFICA信息查找同一组织的所有同级域名,递归关联查找同一组织的同级域名的同级域名和子域名;

关联WHOIS信息,查找同一公司、同一组织、同一电子邮件地址的所有同级域名;

关联CSP信息,查找所有同级域名和子域名;

关联ICP信息,查找同一公司域名的同级域名和部分注册IP;

关联DNS信息,查找IP对应的域名(非CDN);找到DNS NAMESERVER对应的域名;

关联FORWARD信息,获取IP对应的域名;

……

实际上,这些过程是递归进行的,直到找到所有的域名信息和IP信息。这些完成之后就可以进行其他的工作了,比如爆破子域名等等。

刚才提到了信息采集中对同级域名和子域名的自动分析,那么还有哪些应用实践呢?笔者根据自己的实践,随机列出了两条:

案例一:

我们以域名中经常出现的CDN为例。如何判断域名是否使用CDN?目前一般有两种方法,一种是通过IP属性聚合,另一种是通过CNAME后缀字符串判断。对于第二种,可以直接通过聚合不同ORG域名对应的同一CNAME的后缀来过滤。也可以通过ip聚合属性来做,但是比较麻烦。

案例二:

在收集目标的IP信息时,可以通过爆破后查看目标C段IP请求响应信息来确认是否是目标IP。同时,通过获取TitTitle以及状态码后的聚合也可以发现垃圾页面。

当然,这种关系属性还有很多,这里不再赘述,读者可以自行探索。笔者认为,自动化数据分析不仅方便信息收集,更重要的是思维和视野的改变。以前收集信息就像去菜市场买菜,但现在你有了自己的家。当你需要蔬菜的时候,把它取下来。

最后,这篇文章写得仓促,很多地方写得不够详细,抛砖引玉是对的。

最后的最后,如果你有志于安全领域深入发展,想见识更多的场景,欢迎投递简历至Security at tencent.com,在这里您可以打磨安全产品,分析和对抗高级黑客攻击,为互联网用户保驾护航,深度参与威胁情报的建设和运营,更深入地参与内部和外部的渗透测试、红蓝对抗和其他的项目。