xiaoxiong's blog Thinking and Action

威胁情报-证书关联原理

2020-02-23

简述

主要讲SSL证书关联相关原理,透明证书、空间扫描及证书元数据

证书签发相关知识

签发证书的过程

  1. 撰写证书元数据:包括 签发人(Issuer)、地址、签发时间、有效期 等,还包括证书持有者(Owner)基本信息,比如 DN(DNS Name,即证书生效的域名)、 Owner 公钥 等信息
  2. 使用通用的 Hash 算法(如SHA-256)对证书元数据计算生成 数字摘要
  3. 使用 Issuer 的私钥对该数字摘要进行加密,生成一个加密的数字摘要,也就是Issuer的 数字签名
  4. 将数字签名附加到数字证书上,变成一个 签过名的数字证书

将签过名的数字证书与 Issuer 的公钥,一同发给证书使用者

验证证书的过程

  1. 证书使用者获通过某种途径(如浏览器访问)获取到该数字证书,解压后分别获得 证书元数据 和 数字签名
  2. 使用同样的Hash算法计算证书元数据的 数字摘要
  3. 使用 Issuer 的公钥 对数字签名进行解密,得到 解密后的数字摘要
  4. 对比 2 和 3 两个步骤得到的数字摘要值,如果相同,则说明这个数字证书确实是被 Issuer 验证过合法证书,证书中的信息(最主要的是 Owner 的公钥)是可信的

参考关于证书链的一点认知

导出网站证书

echo -n | openssl s_client -connect www.github.com  

Censys 怎么做的?

涉及到证书搜索,censys 在业内地位可谓是独占鳌头,独辟蹊径基于SSL证书实现 子域名收集、绕过 Cloudflare 定位真实 IP、钓鱼域名检测 等功能。

那么 censys 是如何获取相关证书数据的了,查询官方源说明:censys数据源说明链接

截止 2020/02/22 93% 的数据来自 透明证书(CT),6.92% 的数据来自网络空间扫描

根据文章 Patrik Hudak Censys.io Guide: Discover SCADA and Phishing Sites , censys 大约 80% 的数据来自透明证书(CT),20%来自网络空间扫描(文章发布时间 2018/05/10 )。

透明证书

可以看到透明证书在 censys 数据来源中已经占比 93% 以上,对透明证书进行说明

Certificate Transparency 证书透明化,是谷歌牵头发起的,在谷歌多次发现有CA滥发证书(有意无意)之后,目的是监测和审计数字证书。通过证书日志、监控和审计系统,证书透明度使网站用户和域名持有者可以识别不当或恶意签发的证书,以及识别数字证书认证机构(CA)的作为。

相当于一个巨大的日志库,如果 CA 签发证书,需要在日志库中进行记录,谷歌在 Chrome 68 中执行了透明证书策略

当然,这个巨大的日志库只能添加,不能修改、删除。

收集和监控 ct 证书,网址

  • https://crt.sh/
  • https://censys.io/
  • https://developers.facebook.com/tools/ct/ (实现对签发证书的监控)
  • https://google.com/transparencyreport/https/ct/

网络空间扫描

虽然网络空间扫描获得的证书占比越来越少,但是获取设备、网站、证书、ip关系绝大多数都是依靠网络空间扫描结果。

网络空间扫描主体是ip,与域名相关联时涉及到两个概念:虚拟主机、服务器名称指示

虚拟主机:虚拟主机(英语:virtual hosting)或称 共享主机(shared web hosting),又称虚拟服务器,是一种在单一主机或主机群上,实现多网域服务的方法,可以运行多个网站或服务的技术。

服务器使用虚拟主机实现一个 IP 上可以绑定多个域名,那么在进行以 IP 为主体的网络空间扫描时(不提供域名),服务器会如何响应?

会使用默认的虚拟主机项,Nginx 在接收请求时,默认使用第一个为VirtualHost。

服务器名称指示(英语:Server Name Indication,缩写:SNI)是TLS的一个扩展协议[1],在该协议下,在握手过程开始时客户端告诉它正在连接的服务器要连接的主机名称。这允许服务器在相同的IP地址和TCP端口号上呈现多个证书,并且因此允许在相同的IP地址上提供多个安全(HTTPS)网站(或其他任何基于TLS的服务),而不需要所有这些站点使用相同的证书。它与HTTP/1.1基于名称的虚拟主机的概念相同,但是用于HTTPS。

同理,在扫描IPv4空间时,也只能获取默认虚拟主机的ssl证书

这样可以仅观察扫描主机上存在的一小部分证书。

证书元数据说明

  • X.509版本号 指出该证书使用了哪种版本的X.509标准,版本号会影响证书中的一些特定信息。目前的版本是3。
  • 证书的序列号 由CA给予每一个证书分配的唯一的数字型编号,当证书被取消时,实际上是将此证书序列号放入由CA签发的CRL(Certificate Revocation List证书作废表,或证书黑名单表)中。这也是序列号唯一的原因。(理论上需要 Issuer 和 SerialNumber 结合是唯一的)
  • 签名算法/签名哈希算法 用来指定CA签署证书时所使用的签名算法。算法标识符用来指定CA签发证书时所使用的公开密钥算法和HASH算法。
  • 颁发者 认证机构:证书发布者,是签发该证书的实体唯一的CA的X.500名字。使用该证书意味着信任签发证书的实体。(注意:在某些情况下,比如根或顶级CA证书,发布者自己签发证书)
  • 有效期 证书起始日期和时间 以及终止日期
  • 使用者 主题信息:证书持有人唯一的标识符(或称DN-distinguished name)这个名字在 Internet上应该是唯一的(应该是一定吗)
  • 公钥/公钥参数 包括证书持有人的公钥、算法(指明密钥属于哪种密码系统)的标识符和其他相关的密钥参数。(理论上是唯一的)
  • 指纹 证书内容(包括签名) hash 值。(理论是唯一的)
  • 使用者密钥标识符 使用者/主题 Key (censys Extension Subject Key ID) This is a hash value of the SSL certificate. (理论上也是唯一的):SKI is calculated from the Subject and Public Key while the fingerprint is generated from the whole certificate. https://knowledge.digicert.com/solution/SO18140.html#SKI https://tools.ietf.org/html/rfc3280#section-4.2.1.2 https://security.stackexchange.com/questions/200295/the-difference-between-subject-key-identifier-and-sha1fingerprint-in-x509-certif https://www.quora.com/What-is-the-actual-difference-between-Subject-key-identifier-and-Thumbprint-extension-in-a-X-509-v3-SSL-certificate
  • 授权密钥标识符 certification authority (CA)公钥 (censys Extension Auth Key ID)

参考 :

  1. https://blog.cnbluebox.com/blog/2014/03/24/shu-zi-zheng-shu/
  2. https://zh.wikipedia.org/wiki/X.509
  3. https://blog.csdn.net/JohnLongYuan/article/details/48676553
  4. https://docs.microsoft.com/en-us/previous-versions/windows/apps/hh464941(v=win.10)?redirectedfrom=MSDN

使用者可选名称(subjectAltName): 一个证书覆盖多个主机名是可以做到的。X.509 v3规范引入了subjectAltName字段,该字段允许一个证书指定多个域名,并在通用名和subjectAltName字段中使用通配符。

IP 能拥有 SSL 证书吗

https://1.1.1.1/ DigiCert签发的合法证书

存在IPSSL证书

参考 (https://www.zhihu.com/question/25488745)[https://www.zhihu.com/question/25488745]

https://106.54.251.56 使用者:CN = 106.54.251.56 使用者可选名称:IP Address=106.54.251.56

https://1.1.1.1 使用者:

CN = cloudflare-dns.com
O = Cloudflare, Inc.
L = San Francisco
S = California
C = US

使用者可选名称:

DNS Name=cloudflare-dns.com
DNS Name=*.cloudflare-dns.com
DNS Name=one.one.one.one
IP Address=1.1.1.1
IP Address=1.0.0.1
IP Address=162.159.132.53
IP Address=2606:4700:4700:0000:0000:0000:0000:1111
IP Address=2606:4700:4700:0000:0000:0000:0000:1001
IP Address=2606:4700:4700:0000:0000:0000:0000:0064
IP Address=2606:4700:4700:0000:0000:0000:0000:6400
IP Address=162.159.36.1
IP Address=162.159.46.1

检测钓鱼网站 和 近似域名

钓鱼网站

实时的 CT log stream 通过黑名单库对实时数据流推送的CA证书进行检测

参考链接:

  • https://github.com/x0rz/phishing_catcher
  • https://blog.0day.rocks/catching-phishing-using-certstream-97177f0d499a

近似域名

Doppelganger domain

使用 someone@financesomecompany.example 来守株待兔 someone@finance.somecompany.example

参考文献Censys.io Guide


Comments