在资产梳理过程中,如何通过证书有效地排除干扰

在资产梳理过程中,如何通过证书有效地排除干扰

背景痛点

FOFA工程师一个主要的业务场景就是做攻击面梳理,又叫暴露面管理。核心的要求就是尽可能全面,并且尽可能准确。一个行之有效的方式是通过cert.is_valid语法来做组合查询,快速验证资产的证书是否是由受信任的证书颁发机构所颁发,比如使用语法:cert="fofa.info" && cert.is_valid=true

cert.is_valid是判断这个证书有效的方式,但是后来大家发现在梳理攻击面的时候容易出现干扰:有很多不是企业资产,但是被人绑定dns记录(比如很多网站被DDoS攻击后,故意把DNS绑定到baidu.com,会把攻击流量引导到大型互联网公司),如下图所示:

p9T0bNT.md.png

这个时候我们就发现那些故意绑定到大公司官方IP的域名并非我们需要梳理的有效攻击面,因此需要对这些干扰进行处理。

解决思路

一个最简单粗暴的方式就是,我们模拟浏览器的行为,判断域名跟证书内的信息是否匹配。但是这个方式马上会带来另一个问题:一个证书是有效的,但是并不匹配域名的资产,是否就不是目标暴露面的一部分?是我们认为的干扰数据?

我们看这个例子:

p9TBGvj.md.png

上面的搜索结果中,我们已知IP肯定都是某银行的资产,因为只有有证书私钥的情况下才可以绑定证书,打开后浏览器会提示证书无效,如果通过证书是否匹配,这个域名就被我们丢弃掉了,实际上我们肉眼可见的可以判断出来,这其实是我们目标的暴露面。

这种情况大量存在,我们推测一下情况应该是这样的:运维团队把有效的证书放到了一台服务器,内部有一个业务域名,但是不在证书中进行登记。有可能运维团队后续会进行更新只是目前还没有登记,也或者内部觉得证书是可信的就行了,不用再去登记,反正可以使用,至少比自签名的证书要强。

基于上面的案例,我们抛弃了简单的加一个“证书可信”的开关,而是要兼顾到全面性和准确性的要求,最终,我们在研究的基础上,添加了cert.is_match语法,同时顺便解决了证书是否过期的判断。

我们将以前的判断语法和新添加的两个语法放在一起进行解释:

  • cert.is_valid 证书是否可信(非自签名的验证是否为信任证书机构颁发,true可信、false不可信)

  • cert.is_match 证书是否匹配(资产的域名和证书使用者的域名是否匹配,true匹配、false不匹配)

  • cert.is_expired 证书是否过期(true为已过期、false为未过期)

我们回到举证的案例中,cert="fofa.info" && cert.is_valid=true && cert.is_match=true 就可以将干扰资产排除掉。

p9oNYy6.md.png

当然除此之外,还有当可信性是true,是否匹配是false,但是资产仍然是自身资产的情况,也就是我们上文中提到的案例,也可以通过语法:cert="abchina.com.cn" && cert.is_valid=true && cert.is_match=false直接获取到。

p9TuMNV.md.png

写在最后

关于新添加的证书验证语法,可以在资产收集的过程中起到了很大的作用,包括FOFA开放实验室里的攻击面梳理也已经应用了这个语法。

同时这种判断方式的语法可以单一使用,也可以多组合使用,更大程度上地给到了大家可选性。欢迎各位表哥们开发这套语法,发现他更多的新姿势。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值