在上一篇文章:《Open EASM CyberPunk version will coming soon》写完之后的大概三周后,OpenEASM终于迎来了第一个版本。如果你感兴趣的话,可以直接访问 https://asm.imfht.com 进行体验。
我在这个版本中完成了以下这些功能:
1. 子域名信息收集
子域名通过API集成了多个数据源,通过集成这些优秀的平台,OpenEASM的子域名收集能力可以快速对齐一流的安全厂商。
渗透测试千万步,子域名收集是信息收集的第一步。不知道上面的前沿厂商的数据能力能否满足你的需求呢?
2. ICP备案信息收集
ICP备案数据是中国特有的一个产物,很多国外的厂商没有这个数据,导致在信息收集存在比较多的遗漏。OpenEASM的选择是选择直接查询工信部官网,并且通过微服务的方式集成到项目中。相关代码可见:https://github.com/openeasm/ICP-API。
OpenEASM在对主域进行信息收集的同时,还会对同ICP下的其他域名进行信息收集,以扩大攻击面。
3. DNS 解析记录探活&收集
这里用到的模块叫ZDNS,通过ZDNS的高并发可以快速获取到子域名的存活情况。这是一个非常有效过滤陈旧数据的方法。我想,每个人都愿意看到干净和与时俱进的数据,而不是一堆无法访问的历史解析域名。
4. 子域名探活与指纹识别
和DNS 记录探活一样,子域名探活我也使用的是 go语言的二进制包,这里用到组件叫做ppscan,里面集成了很多好用的特性(甚至还集成了一个商业的IP数据库!)。这个二进制包可以从轻松hold住十万到百万级别的网站数据抓取,最后通过json的数据给出抓取结果。
再说指纹识别,国内的指纹识别的方法各有千秋,有类似fofa这样只识别首页内容的,也有像云悉这样直接全目录爆破识别的。OpenEASM则是采用了国外比较受追捧的 wappalyzer,开源厂商projectdiscover也有基于go语言的检测库。于是直接集成到了ppscan中,ppscan的功能就又多了一个。
受限于其中的商业IP库,ppscan暂时没有开源,我也在开发一个类似更通用的程序叫做 punk_map,这个程序现在已经支持包括对HTTP(S)/RDP/SSH/MySQL/RabbitMQ多种服务的识别,并且可以保持优异的性能和稳定性,感兴趣的朋友们可以保持关注 https://github.com/openeasm/punkmap。
5. IP信息收集
IP信息收集当前使用的是shodan的API,通过shodan的API去获取域名解析后IP的属性。从实际测试上来看,shodan的数据并不太好,尤其对于国内的一些IP的结果,往往差强人意。
为此我也在开发一个自己的测绘平台,预览如下。现在看起来比shodan的数据会丰富很多,这个可能会在下一个版本中替换shodan的数据源。
6. 漏洞扫描器的集成
我集成了AWVS到这套系统中,和一般的集成方式不太一样的是,我分析了AWVS的调用方式,绕过了官方的API,直接调用二进制包来完成扫描的任务。这个对应的一个大优点是能够大量节省资源的消耗,要知道,官方的API需要在容器中跑一个postgresql数据库,一个python的backend,和这个二进制文件。所有的数据要经由python处理、存储进postgresql后才能通过API查询,并发性存在很大的问题。
因为法律法规的原因,这个功能默认是不启用的,同时也可能存在一些版权的问题。在下个版本里我会集成进另外一个优秀的Web扫描器,OWASP开源的ZAP(Zed Attack Proxy),以解决版权的问题。
AWVS还真的发现了我的一个安全问题:我的静态网站下有一个Dockerfile,借助AWVS自动发现资产的能力,OpenEASM还真帮我发现了这个问题(现在已经修复了)。
这套系统也为一些互联网公司找到了一些安全问题,通过SRC提交之后也获得了一些奖励 ^_^
7. 一个简单的WebUI
最后
安全是没有止境的,信息收集也没有止境。也有很多的安全公司在做类似的事情,而且如果只看介绍的话,就会发现每家公司做的都差不多,甚至和开源的没有区别。作为一个项目的Owner,我认为OpenEASM有这样几个优点。
- 能跑(用)起来。这一条看起来要求很低,实际上github上很多个人开源的信息收集项目是跑不起来的,或者只能在开发者的一些特定环境下跑起来。OpenEASM 定位SaaS产品,这一特性让我能确保它能在一段时间内稳定提供服务。
- 媲美商业公司的信息收集能力。OpenEASM的很多数据都来自于上游专业安全公司,OpenEASM承担的更多是数据的加工和验证的角色。把专业的事情交给专业的团队来干,肯德基不需要开一个养殖场,OpenEASM也不需要自己运营十万亿的DNS记录。
- 大量数据的快速处理。因为核心的影响吞吐的模块都是go语言写的,不论是只有几十个域名的的imfht.com还是数千个域名的tencent.com,系统都能用很低的负载hold住并快速处理,而且可以很方便的进行水平扩展 ^_^
有优点必然就有缺点,请再等待我的下一篇文章或者下一个版本release吧!