CryptoLyzer 是一个多协议加密设置分析器,具有 SSL/TLS、SSH 和 HTTP 标头分析能力。该工具的主要目的是告诉您在客户端或服务器上启用了哪种加密相关设置。
如果您对项目背后的原理不感兴趣,但对实践感兴趣,请随意跳过下一节并跳到实践部分。
有许多著名的开源项目(SSLyze、CipherScan、testssl.sh、tls-scan ……)和几个 SaaS 解决方案(CryptCheck、CypherCraft、Hardenize、ImmuniWeb、Mozilla Observatory、SSL Labs ……)来进行安全设置分析,尤其是当我们谈论 TLS 时,它是最常见和流行的加密协议。但是,这些工具中的大多数都严重依赖于一个或多个加密协议库的一个或多个版本,例如GnuTLS、OpenSSL或wolfSSL. 但为什么会出现这样的问题?
小问题是依赖很容易将它们卡在SSL / TLS / DTLS中,因为这些库无法直接实现其他加密协议(例如:IPSec VPN、Kerberos、OpenVPN、SSH ……)。分析器应用程序支持它们需要额外的努力。无论如何,对密码设置的大多数分析都不需要任何密码,因为在各方就密码算法达成一致之前,他们使用纯文本。
主要问题是分析应该测试有意触发的协议的特殊和极端情况。使用加密协议库很难做到这一点,该库是为生产而不是渗透测试或设置分析而设计的。在分析期间,尝试使用几乎不支持的、实验性的、过时的甚至不推荐使用的机制或算法来建立连接,以确定给定的客户端或服务器实现支持哪些机制或算法。这些机制和算法可能会或可能不会被任何加密协议实现的最新或任何版本支持。
这就是为什么大多数现有工具都需要依赖库的特殊构建,其中重新启用过去美好时光的所有协议版本和算法,以便有机会设置这些库以将它们作为客户端或服务器提供。但是如果我们想测试一个从未被依赖密码库实现过的算法或机制呢?
这不仅仅是一个理论。由 Pluralsight 作者Peter Mosmans维护的 OpenSSL的一个特殊分支旨在拥有尽可能多的密码。Mozilla Cipherscan 使用并推荐了这个 fork,然而,它可以提供不到 200 个密码套件,但根据Cipher Suite Info ,在不同的RFC中有超过 300 个密码套件。他们中的大多数人都很虚弱或不安全,这使得参与分析变得尤为重要。此外,确实有一些密码套件不在密码套件信息列表中,例如俄罗斯标准 ( GOST ) 密码套件。这些是很少使用的密码套件,但有一个实现它们的OpenSSL 引擎,因此应该检查它们。
TLS 协议的其他部分(如扩展)的情况类似。加密库不太可能支持每个扩展,但其中一些可能由某些库实现。例如, TLS 1.3 中的多证书状态请求扩展和 Diffie-Hellman 密钥交换不是由 OpenSSL 1.x 实现的,而是由 GnuTLS 和 WolfSSL 实现的。另一个例子可以是SSH 协议中基于 X.509 证书的身份验证,它由Tectia SSH支持并具有开源实现,但默认 OpenSSH 不支持。即使它们不那么常见,一个全面的设置分析器工具也应该对它们进行检查。
总结建立一个新项目而不是为现有项目做出贡献的主要原因是这样一种观点,即当我们触发特殊和极端情况时,分析主要是测试,几乎不支持、实验性、过时甚至弃用的机制和算法,所以综合分析器应尽可能独立于当前的加密协议实现来实现。
CrypytoLyzer 专注于全面性、多协议能力和库独立性。为此,实施加密协议客户端只关注必要的部分(通常是握手)。这种客户端可以根据很少或私人使用、不推荐或完全不安全的算法和机制检查服务器。
现有的解决方案只关注一种加密协议(TLS 或 SSH),尽管事实上所有加密协议都具有相同的构建块(身份验证、密钥交换、对称密码、完整性),因此它们可以在相同的情况下进行分析(或几乎相同)方式,只有分析所基于的信息可以不同地获取。
上面的目标只是目标,而不是当前的开发状态,特别是在撰写本文时实际版本号为 0.8.0。目前支持的加密协议系列是 SSL/TLS 和 SSH。您可以阅读下面的开源或专有 (SaaS) 解决方案的比较分析。我想像作者一样对竞争对手保持客观,但如果我没有做到,请原谅我。
Cryptolyzer 支持早期和已弃用的安全套接字层 (SSL) 2.0和每个传输层安全版本,直到TLS 1.3版本,包括草稿版本。尽管使用最流行的 SSL/TLS 实现(例如:GnuTLS、 LibreSSL 、OpenSSL、wolfSSL ……)很难或很难检查某些功能,或者只是不在它们的范围内。这些检查是 Cryptolyzer 的特色,例如支持ciphersuite.info(以及更多)上讨论的每个密码套件,包括俄罗斯政府标准 (GOST) 密码套件、Diffie-Hellman 参数检查、JA3 标签生成……
加密分析器 | Qualys SSL 实验室 | 免疫网 | 硬化 | 莫兹。观察。 | 测试.sh | SSL-yze | ||
---|---|---|---|---|---|---|---|---|
TLS 1.3 草案版本 | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ |
TLS 1.3 DH 参数 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ |
TLS GOST密码 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
TLS DH ParamPrime 检查 | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
TLS DHE 参数重用检查 | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
TLS ECDH 参数重用检查 | 0.9.x | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
SSH DH参数检查 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
JA3标签生成 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
JA3标签解码 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
89% | 33% | 0% | 11% | 0% | 0% | 22% | 0% |
一些应用层协议具有扩展以将纯文本连接升级到加密连接 (TLS),而无需使用称为机会 TLS (STARTTLS) 的单独端口。在大多数协议的情况下,分析器都支持这种机制。
加密分析器 | Qualys SSL 实验室 | 免疫网 | 硬化 | 莫兹。观察。 | 测试.sh | SSL-yze | |
---|---|---|---|---|---|---|---|
FTP | ✅ | ❌ | ❌ | ✅ | ❌ | ✅ | ✅ |
地图 | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
LDAP | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
LMTP | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ |
MySQL | 0.9.x | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ |
NNTP | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ |
POP3 | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
PostgreSQL | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
RDP | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
筛 | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ |
SMTP | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ |
XMPP (Jabber) | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
92% | 0% | 8% | 17% | 0% | 83% | 67% |
原始 TLS 规范有几个扩展,它们同时具有安全性和兼容性考虑。与大多数竞争对手相比,CryptoLyzer 可以分析大量的扩展类型。
加密分析器 | Qualys SSL 实验室 | 免疫网 | 硬化 | 莫兹。观察。 | 测试.sh | SSL-yze | |
---|---|---|---|---|---|---|---|
后备 SCSV | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ |
TLS 时钟偏差 | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
压缩 | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ |
安全重新协商 | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ |
不安全的重新协商 | 0.8.x | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ |
会话缓存 | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ |
会话票务 | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ |
椭圆曲线 | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ |
EC 点格式 | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
应用程序。层原型。谈判 | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ |
下一个协议协商 | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ |
扩展大师秘密 | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ |
加密然后mac | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ |
润滑脂检查 | 0.9.x | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
握手长度不容忍 | 0.9.x | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
80% | 73% | 40% | 0% | 0% | 73% | 53% |
除了 TLS,还有一些其他的加密协议,比如 SSH。加密协议具有相同的构建块(身份验证、密钥交换、对称密码、完整性),因此可以以相同的方式对其进行分析,并且可以使用 CryptoLyzer 使用相同的工具完成,而不会妥协。
加密分析器 | 莫兹。观察。 | 操作性 SSH 检查 | Rebex SSH 检查 | SSH 会议。审计师 | ssh 审计 | SSH 扫描 | |
---|---|---|---|---|---|---|---|
算法 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
主机密钥 | ✅ | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ |
主机证书 | 0.9.x | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
X.509 证书 | 0.10.x | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
DH 参数检查 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
横幅分析 | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ |
67% | 17% | 50% | 17% | 33% | 33% | 50% |
应用层也有安全机制,不仅在传输层。HTTP 协议就是一个很好的例子,因为加密(HSTS)、身份验证(Expect-CT、Expect-Staple)、内容完整性(子资源完整性、内容安全策略)相关的标头由 CryptoLyzer 详细解析。
加密分析器 | Qualys SSL 实验室 | 免疫网 | 硬化 | 莫兹。观察。 | 测试.sh | SSL-yze | |
---|---|---|---|---|---|---|---|
内容安全政策 | 0.9.x | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
CSP 报告对象 | 0.9.x | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
期望证书透明度 | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ |
期待 OCSP 主食 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
HTTP 严格传输安全 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
HTTP 公钥固定 | 0.10.x | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ |
推荐人政策 | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
子资源完整性 | 0.8.x | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ |
X 内容类型选项 | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ |
X 框架选项 | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ |
X XSS 保护 | 0.8.x | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ |
55% | 18% | 9% | 55% | 82% | 18% | 18% |
有几个 HTTP 标头与安全性没有密切关系。虽然,其中一些,特别是缓存头(Age、Cache-Control、Date、ETag、Expires、Last-Modified)在缓存头指示安全相关信息(例如:CRL)过时时可能具有重要意义。
加密分析器 | Qualys SSL 实验室 | 免疫网 | 硬化 | 莫兹。观察。 | 测试.sh | SSL-yze | |
---|---|---|---|---|---|---|---|
内容类型 | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
服务器 | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ |
应用横幅 | 0.9.x | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ |
年龄 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
缓存控制 | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
日期 | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ |
电子标签 | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
过期 | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
上一次更改 | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
编译指示 | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
代理横幅 | 0.9.x | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ |
设置Cookie | 0.10.x | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ |
75% | 0% | 0 | 8% | 75% | 42% | 0% |
TLS 中有一些与 X.509 相关的机制可能对安全性产生严重影响,特别是撤销检查,这是公钥基础设施(PKI)的弱点。Cryptolyzer 在该领域落后于竞争对手。
加密分析器 | Qualys SSL 实验室 | 免疫网 | 硬化 | 莫兹。观察。 | 测试.sh | SSL-yze | |
---|---|---|---|---|---|---|---|
OCSP 装订 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
OCSP 必须装订 | 0.8.x | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ |
证书透明度 | 0.8.x | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ |
多个受信任的根 CA 存储 | 0.9.x | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
撤销状态 | 0.10.x | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ |
20% | 100% | 80% | 100% | 40% | 80% | 80% |
可用性是 Cryptolyzer 应该发展的另一个领域。全面性还不够,要突出弱点、漏洞,使分析结果更容易理解。
加密分析器 | Qualys SSL 实验室 | 免疫网 | 硬化 | 莫兹。观察。 | 测试.sh | SSL-yze | |
---|---|---|---|---|---|---|---|
客户端仿真 | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ |
弱点检查 | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
漏洞检查 | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ |
输出亮点 | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
0% | 100% | 75% | 50% | 75% | 100% | 25% |
如今,与安全设置相关的信息尤其存储在 DNS 记录中,但不仅限于 SMTP 协议。CryptoLyzer 可以分析这些记录,并计划很快完成必要的实施。
加密分析器 | Qualys SSL 实验室 | 免疫网 | 硬化 | 莫兹。观察。 | 测试.sh | SSL-yze | |
---|---|---|---|---|---|---|---|
DNS CAA | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
MTA-STS | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ |
丹麦人 | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ |
防晒指数 | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ |
DMARC | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ |
TLS-RPT | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ |
0% | 17% | 17% | 100% | 17% | 17% | 0% |
一些加密协议使用 TLS 协议的变体。一些协议封装了原来的 TLS 协议,如OpenVPN、QUIC,根据 UDP 的需要,还有一个 TLS 的修改版本,称为DTLS。将来他们的支持将在 CryptoLyzer 中相对容易地实现。
CryptoLyzer 可以从Python 包索引(PyPi)轻松安装
$ pip install cryptolyzer
或通过 Docker Hub 容器映像库(docker hub)中的 Docker
$ docker pull coroner/cryptolyzer
并且有用于基于 DEB(Debian、Ubuntu、...)和 RPM(Fedora、RHEL、SUSE)的系统的预构建包。
命令行界面与 OpenSSL 命令行工具稍有相似。在每个级别的子命令上,都可以使用 –help 选项提供全面的帮助。分析主题可以作为 URL 格式的参数多次给出。URL 的大部分时间方案和端口部分根据分析器具有默认值(例如:tls、ssh)。
$ cryptolyze tls all www.example.com
$ cryptolyze tls1_2 ciphers https://www.example.com:443
$ cryptolyze ssh all www.example.com
$ cryptolyze ssh2 ciphers ssh://www.example.com:22
$ cryptolyze http headers http://www.example.com/path?query#fragment
或者可以通过 Docker 使用
$ docker run --rm coroner/cryptolyzer tls all www.example.com
$ docker run --rm coroner/cryptolyzer tls1_2 ciphers https://www.example.com:443
$ docker run --rm coroner/cryptolyzer ssh all www.example.com
$ docker run --rm coroner/cryptolyzer ssh2 ciphers ssh://www.example.com:22
$ docker run --rm coroner/cryptolyzer http headers http://www.example.com/path?query#fragment
CryptoLyzer:一个全面的密码设置分析器根据知识共享署名-相同方式共享 4.0 国际许可证获得许可
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。