证书透明度Certificate Transparency
- 在证书透明度(CT)下,证书颁发机构(CA)必须发布它们在公共日志记录中发出的所有SSL / TLS证书
- 任何人都可以查看CT日志并查找为域颁发的证书
- CT允许网站用户和域所有者识别错误或恶意发布的证书。这有助于域所有者和浏览器供应商识别错误的CA.
- 有关已知CT日志文件的详细信息,请访问
你可以在我们的技术博客“证书透明的光明和黑暗面”:https://blog.appsecco.com/certificate-transparency-the-bright-side-and-the-dark-side-8aa47d9a6616上阅读有关证书透明度的更多信息。
1.证书透明度 - OSINT角度下的CT
按照CT的设计,证书透明度(CT)日志包含参与CA为任何给定域颁发的所有证书。SSL / TLS证书通常包含域名,子域名和电子邮件地址。这些日志可以公开获取,任何人都可以查看这些日志。这使的证书透明成为攻击者的宝库。
通过查看CT日志,攻击者可以以完全被动的方式收集有关组织基础结构的大量信息,即内部域,电子邮件地址。
2.搜索证书透明CT日志
有各种搜索引擎收集CT日志,让任何人搜索它们:
- https://crt.sh/
- https://censys.io/
- https://developers.facebook.com/tools/ct/
- https://google.com/transparencyreport/https/ct/
(1)使用crt.sh
- 在crt.sh Web界面上
https://crt.sh
,使用类似于以下的搜索运算符来提取具有模式的任何域的证书(在本例中为example.com)。使用像这样的自由搜索算子可能会导致一些误报,但很难错过任何潜在的子域
%example.com
crt.sh
提供RSS源,可以使用URL https://crt.sh/atom?q=%wikimedia.org查询crt.sh
为他们的数据提供PostgreSQL接口。下面的脚本使用crt.sh
PostgreSQL接口提取给定域名的子域
#!/bin/sh
# Script by Hanno Bock - https://github.com/hannob/tlshelpers/blob/master/getsubdomain
query="SELECT ci.NAME_VALUE NAME_VALUE FROM certificate_identity ci WHERE ci.NAME_TYPE = 'dNSName' AND reverse(lower(ci.NAME_VALUE)) LIKE reverse(lower('%.$1'));"
echo $query | \
psql -t -h crt.sh -p 5432 -U guest certwatch | \
sed -e 's:^ *::g' -e 's:^*\.::g' -e '/^$/d' | \
sort -u | sed -e 's:*.::g'
https://github.com/appsecco/the-art-of-subdomain-enumeration/blob/master/crtsh_enum_psql.sh
3.跟踪组织的子域名
https://developers.facebook.com/tools/ct/
- Facebook的证书透明度监控工具不仅可以搜索CT日志,而且还有订阅选项,每当在您订阅的域的CT日志中找到新证书时,将发送电子邮件警报
- 这有助于域所有者跟踪为其管理的域颁发的证书,另一方面,攻击者可以使用它来跟踪他们所针对的组织的域,以快速了解创建的任何新子域
4.证书透明度的缺陷
- 证书透明度日志只能增加不能减少,这意味着一旦SSL / TLS证书附加到CT日志,就无法删除它们
- 明显缺点就是证书透明CT日志中找到的域/子域名可能已经不存在,因此无法解析为任何有效的IP地址
5.使用Massdns提取可解析子域
- Massdns是一个超快的DNS解析器,可以在相当短的时间内解析大量的域名
- Massdns可以与从CT日志中提取子域的脚本结合使用,以快速识别唯一可解析的域名
# ct.py - extracts domain names from CT Logs(shipped with massdns)
# massdns - will find resolvable domains & adds them to a file
./ct.py icann.org | ./bin/massdns -r resolvers.txt -t A -q -a -o -w icann_resolvable_domains.txt -
6.使用Censys.io 收集子域名数据
- Censys.io汇总了作为scans.io项目的一部分收集的数据
- Censys.io聚合SSL / TLS证书并允许我们搜索它们,因此它可能有助于我们发现新的子域
- Censys.io有一个REST API,有助于提取数据 -https://censys.io/api
- Censys.io有一个官方的Python库 -https://github.com/Censys/censys-python
- 使用censys python库,我们编写了一个脚本来提取给定域的子域。这些工具以JSON格式生成输出
- 该脚本可在此处获得 -https://github.com/yamakira/censys-enumeration