本文以对www.uestc.edu.cn进行测试为例,对https://github.com/ssllabs/ssllabs-scan/blob/master/ssllabs-api-docs-v3.md中response objects部分内容进行翻译。
在浏览器地址栏中输入 https://api.ssllabs.com/api/v3/info 的结果。
在浏览器中输入https://api.ssllabs.com/api/v3/analyze?host=www.uestc.edu.cn的结果。
analyze API中有Endpoint对象,下面对Endpoint对象的内容进行如下的解释。在浏览器中输入链接https://api.ssllabs.com/api/v3/analyze?host=www.uestc.edu.cn
在官方文档里,写了使用API/getEndpointData?host=www.ssllabs.com&s=173.203.82.166,但作者在进行测试的时候并没有成功。于是,使用了analyze的api,同时将参数all设置为on,并从中提取endpintdetails的内容。
红色框内即为EndpointsDetails。因为很长很长,所以截图没截完,下面将对重要的测试点进行截图,对每个内容进行解释,对于复杂的概念会剖出好一些的解释网站。
hostStartTime 对端点评估的开始时间。
certChains 服务器证书的证书链。记录了每一级CA的证书的ID。
issues 描述链及其问题的标志
noSniSuites (noSni) 仅在不支持服务器名称指示(SNI)的客户端上观察到的密码套件。
在这里扩展以下SNI的解释。Server Name Indicator, 服务器名称指示,是TLS的一个扩展协议[1],在该协议下,在握手过程开始时客户端告诉它正在连接的服务器要连接的主机名称。这允许服务器在相同的IP地址和TCP端口号上呈现多个证书,并且因此允许在相同的IP地址上提供多个安全(HTTPS)网站(或其他任何基于TLS的服务),而不需要所有这些站点使用相同的证书。1更多阅读可以看:What Is SNI? How TLS Server Name Indication Works
suites[] 每个协议支持的密码套件
namedGroups 命名组对象的实例(主要是对椭圆曲线的关注)
serverSignature HTTP Server响应标头的内容
prefixDelegation 如果可以通过带有www前缀的主机名访问此端点,则为true
noprefixDelegation 如果可以通过不带www前缀的主机名访问此端点,则为true
vulnBeast 如果端点易受BEAST攻击,则为true
什么是Beast攻击?
Short for Browser Exploit Against SSL/TLS,此攻击利用CBC的弱点,利用安全套接字层(SSL)/传输层安全性(TLS)协议。 CBC漏洞可以启用对SSL的中间人攻击,以以静默方式解密并获取身份验证令牌,从而使黑客可以在Web服务器和Web浏览器之间传递的数据。
相关阅读:BEAST: Surprising crypto attack against https && 关于SSL/TLS中AES安全性|BEAST攻击的详细步骤以及RC4强度的一些笔记
解决方法:升级OpenSSL版本到1.0.1以便支持TLSv1.1和TLSv1.2
renegSupport 这是一个整数值,描述端点对重新协商的支持
什么是renegotiation?什么是secure renegotiation?
重协商是指在已经协商好的SSL/TLS TCP连接上重新协商,用以更换算法、更换数字证书、重新验证对方身份、更新共享密钥等等。美国某安全公司的研究人员发现SSL/TLS协议重协商机制有严重的安全漏洞,中间人可以利用这个漏洞,将自己的数据注入到客户端与服务器的SSL/TLS“安全连接”之中。该漏洞被发现的第二年,通过RFC 5746引入新的“安全重协商”机制,来解决这个漏洞。
相关阅读:干货|白话SSL/TLS默认重协商漏洞原理与安全重协商对抗机制
sessionResumption 描述端点对会话恢复的支持
继续使用上一次会话协商出的结果。
但是这种机制会有以下两个弊端:1)负载均衡中,多机之间往往没有同步 Session 信息,如果客户端两次请求没有落在同一台机器上就无法找到匹配的信息;2)服务端存储 Session ID 对应的信息不好控制失效时间,太短起不到作用,太长又占用服务端大量资源。Session Ticket(会话记录单)可以解决这些问题,Session Ticket 是用只有服务端知道的安全密钥加密过的会话信息,最终保存在浏览器端。浏览器如果在 ClientHello 时带上了 Session Ticket,只要服务器能成功解密就可以完成快速握手。2
compressionMethods 描述支持的压缩方法的整数值。其中DEFLATE设置为bit 0。
那么什么是压缩方法呢?
用于压缩由HTML,Javascript和CSS组成的文本数据的方法,这些压缩方法主要由无损压缩算法组成。目前,web上有两种主要的HTTP压缩方案:DEFLATE和GZIP。更多阅读:en.wikipedia.org/wiki/DEFLATE。
supportsNpn 服务器是否支持Npn
npnProtocols 支持的NPN协议列表
supportsAlpn 服务器是否支持Alpn
alpnProtocols 支持的ALPN协议列表
什么是NPN和ALPN?
ALPN(Application-Layer Protocol Negotiation)也是 TLS 层的扩展,用于协商应用层使用的协议。 用来确定建立 TLS 连接后接下来要使用的协议,比如是 HTTP1.1 还是 HTTP/2? ALPN 的前身是 NPN,最初用于协商和切换 HTTP 协议和 Google SPDY 协议,后者现在已经标准化为 HTTP/2。更多阅读:HTTPS 交互过程分析
sessionTickets 指示是否使用session Tickets
ocspStapling 如果OCSP装订被支持,则为True
staplingRevocationStatus 如果OCSP装订被响应
staplingRevocationErrorMessage 装订的OCSP响应问题的说明(如果有)。
sniRequired 访问该网站是否需要SNI支持。
httpStatusCode 最终HTTP响应的状态代码。 提交HTTP请求时,将遵循重定向,但前提是重定向必须导致相同的主机名。 如果此字段不可用,则表示HTTP请求失败。
rc4WithModern RC4是否与现代客户一起使用。
protocolIntolerance 指示版本不兼容的问题
miscIntolerance 表示各种其他类型的不兼容的问题
sims SimDetails的实例。这里sims是simulations的缩写,这里列出了ssllabs模拟了不同操作系统或浏览器的客户端尝试与服务器握手后的结果。
heartbleed 服务器是否容易受到Heartbleed攻击
heartbeat 服务器是否支持heartbeat扩展
什么是heartbleed?3什么是heartbeat扩展?
心跳扩展为TLS / DTLS提供了新协议,允许在不执行重新协商的情况下使用保持活动功能,用以检查对方是否仍然在场或是否已经离开。没有心跳扩展,做到这一点的唯一方法是通过重新谈判(renegotiation),相对而言,这是昂贵的。
Heartbleed错误仅存在于SSL和TLS 的OpenSSL实现中。heartbleed的产生是因为在heart extension种存在bug。通过构造出载荷短、长度字段中的数值却很大的请求,向存在缺陷的一方(通常是服务器)发送畸形心跳包,利用心脏出血漏洞,引起受害者的回应,这样,攻击者便可读取到受害者内存中至多64千字节的信息,而这块区域先前OpenSSL有可能已经使用过。例如,正常的心跳请求可能会要求一方“返回4个字符的单词‘bird’”,那一方就返回“bird”;“心脏出血请求”(恶意的心跳请求)如“返回500个字符的单词‘bird’”会导致受害者返回“bird”,紧接着是恰储存在受害者活跃内存中的496个字符。这样,攻击者便可能会收到敏感数据,从而危及受害者其它安全通信的保密性。虽然攻击者能对返回的内存块大小有所控制,但却无法决定它的位置,因而不能指定要显示内容。该程序错误 属于缓冲区 错误读取,即可以读取的数据比应该允许读取的还多。
应对heartbleed可以通过升级所使用的openssl版本来解决。
更多阅读:Everything you need to know about the Heartbleed SSL bug
openSslCcs CVE-2014-0224测试
什么是CVE-2014-0224
SSL / TLS会话过程中服务器和客户端通过ClientHello和ServerHello握手启动协商,协商的内容为使用的协议版本,加密协议,加密密钥,消息身份验证代码(MAC)机密和初始化矢量(IV)以及支持的扩展等。按照标准(RFC 2246,RFC 5246)“ ChangeCipherSpec消息是在握手期间在安全参数已达成共识之后,但在发送验证完成消息之前发送的。” 但是,OpenSSL即使在安全性参数达成一致之前,它也接受了CCS。这就产生了中间人攻击的情况:在安全参数达成一直之前,向双方插入CCS数据包,这导致了OpenSSL使用零长度的主主密钥。数据包被发送到连接的两端。会话密钥是使用零长度的预主密钥导出的。攻击者由此可以解密甚至修改传输中的数据包。
最简单的解决方案是确保使用发行版提供的最新版本的OpenSSL。
更多阅读:OpenSSL MITM CCS注入攻击(CVE-2014-0224)
openSSLLuckyMinus20 CVE-2016-2107测试
什么是CVE-2016-2017
允许远程身份验证的用户通过未指定的载体获取敏感信息或修改数据
可以通过https://filippo.io/cve-2016-2107/对服务器进行测试。
更多阅读:Yet Another Padding Oracle in OpenSSL CBC Ciphersuites
ticketbleed CVE-2016-9244 测试
什么是CVE-2016-9224?
ticketbleed类似于heartbleed。Ticketbleed是F5 BIG-IP设备的TLS / SSL堆栈中的软件漏洞,允许远程攻击者一次提取高达31字节的未初始化内存。当客户端提供SessionID和Session Tickets时,服务器应回显SessionID以表示Session Tickets的接受。Session ID的长度可以在1到31个字节之间。即使Session ID再短,F5堆栈总是回显32字节的内存。提供1字节Sessio ID的攻击者将接收到31字节的未初始化内存信息。
可以通过https://filippo.io/ticketbleed/对网站进行测试
更多阅读FINDING TICKETBLEED && Ticketbleed:F5 BIG-IP设备TLS/SSL堆栈漏洞(CVE-2016-9244)
bleichenbacher the Return Of Bleichenbacher’s Oracle Threat (ROBOT)测试
什么是the Return Of Of Bleichenbacher’s Oracle Threat?
这是一种自适应选择密文攻击,如果会话密钥通过RSA算法加密,而填充系统为PKCS #1 1.5,攻击者可简单将随机会话密钥发送给TLS服务器,并询问是否有效,TLS服务器将会以简单的“是”或“否”给出回应。这意味着攻击者可通过简单的暴力破解攻击猜测这个会话密钥,并解密在TLS(HTTPS)服务器和客户端(浏览器)之间交换的所有HTTPS消息。
解决方法:不适用RSA算法加密(不是RSA不安全,是填充算法不安全),使用椭圆曲线算法。
可以通过https://myssl.com/robot_detect.html对网站进行检测
更多阅读:TLS ROBOT Attack漏洞 && Is it still safe to use RSA Encryption?
zombiePoodle Zombie POODLE测试
goldenDoodle GOLDENDOODLE测试
什么是Zombie POODLE和GOLDENDOODLE?
由于TLS 1.2依然支持早已过时的加密方法:密码块链接(CBC)。这些缺陷允许中间人(MitM)攻击用户的加密Web和VPN会话。
解决方案: 禁用TLS CBC密码
更多阅读:Introducing Zombie POODLE and GOLDENDOODLE
zeroLengthPaddingOracle 0-Length Padding Oracle (CVE-2019-1559)测试
什么是zeroLengthPaddingOracle?
CBC操作模式允许使用诸如AES或3DES的分组密码对任意长度的明文进行加密。在CBC模式下,每个明文块在被块密码加密之前都与前一个密文块进行异或。
填充oracle攻击利用了CBC的可延展性。CBC的问题在于,它允许攻击者在不知道对称密钥的情况下执行有意义的明文修改。更具体地说,它允许攻击者通过翻转前一个密文块中的某个位来翻转特定的明文位。此CBC属性已被许多攻击(例如,最近在Efail攻击中)利用。
更多阅读:https://github.com/RUB-NDS/TLS-Padding-Oracles/blob/master/README.md && 论文Scalable Scanning and Automatic Classification of TLS Padding Oracle Vulnerabilities 产生的原因是
解决方案:OpenSSL 1.0.2用户应升级到1.0.2r
sleepingPoodle Sleeping POODLE测试
sleepingPoodle没有找到相关的资料,但是在一篇有关ssllab的帖子中4写到:“针对使用CBC(密码块链接)分组密码模式的网站发布了诸如Zombie POODLE, GOLDENDOODLE,0长度OpenSSL和Sleeping POODLE的新漏洞。仅当服务器使用具有CBC密码模式的TLS 1.2或TLS 1.1或TLS 1.0时,这些漏洞才适用。”SSL实验室将从2019年5月底开始对受这些漏洞影响的服务器给予“ F”级评级。
更多阅读:更多资料 && TLS Fallback Signaling Cipher Suite Value (SCSV)
for Preventing Protocol Downgrade Attacks
poodle 如果端点易受POODLE攻击,则为true;否则为false。
poodleTLS POODLE TLS测试
fallbackScsv 如果服务器支持TLS_FALLBACK_SCSV,则为true,否则为false。 如果无法测试服务器对TLS_FALLBACK_SCSV的支持,则此字段将不可用,因为它仅支持一个协议版本(例如,仅TLS 1.2)。
fallbackScsv的作用是什么?5
防止协议降级攻击。本规范适用于TLS 1.0 [RFC2246],TLS 1.1 [RFC4346]和TLS 1.2 [RFC5246]的实现,以及DTLS 1.0 [RFC4347]和DTLS 1.2 [RFC6347]的实现。它实际上并不对应于一套密码系统,并且服务器永远不能在握手中选择它。它在Client Hello消息中的存在是从客户端到服务器的向后兼容信号。
对于客户端,如果发送消息前ClientHello.cipher_suites中支持的最高的协议版本低于实际的能够支持的最高协议版本,就在消息中包含TLS_FALLBACK_SCSV信号。
对于服务器,如果客户端在ClientHello.cipher_suites中支持的最高的协议版本低于服务器支持的最高的协议版本,且其中包含了TLS_FALLBACK_SCSV信号时,就返回拒绝链接的消息。
相关阅读:How Do I Setup TLS_FALLBACK_SCSV On NetScaler? && TLS Fallback Signaling Cipher Suite Value (SCSV) for Preventing Protocol Downgrade Attacks
freak 如果服务器容易受到FREAK攻击,则为true,这意味着它支持512位密钥交换。
什么是freak攻击?6
就是使用512位及以下的RSA加密!1990年代时,美国对于货物的出口设立了一些规定,从而引入了这个缺陷。规定中指出,美国软件制造商出口的软件只能使用512位及以下的RSA加密(即所谓的出口级加密)。此举是为了便于NSA破译加密。时至2015年,随着计算能力的发展,破解这种加密已经不再是政府机构才能做到的事,任何人只要拥有充足的计算资源,就能通过普通数域筛选法加上约100美元的云计算服务轻而易举地将其破译。
hasSct 有关证书透明度信息的可用性的信息(嵌入式SCT)
关于CT更多的内容可以看博主之前的博客:Certificate Transparency
dhPrimes[] 服务器使用的十六进制编码的DH素数列表。 如果服务器不支持DH密钥交换,则不存在。
dhUsesKnownPrimes 服务器是否使用已知的DH素数。 如果服务器不支持DH密钥交换,则不存在。
dhYsReuse-如果DH临时服务器值已重用,则为true。 如果服务器不支持DH密钥交换,则不存在。使用临时Diffie-Hellman(DHE),每个连接使用一个不同的密钥,并且私钥的泄漏仍然意味着所有通信都是安全的。7
ecdhParameterReuse 如果服务器重用其ECDHE值,则为true
logjam 如果服务器使用的DH参数小于1024位,则为true。
什么是logjam?8
Logjam是针对Diffie-Hellman密钥交换的安全漏洞,范围从512位到1024位密钥。作者演示的一种利用此漏洞启用的方法是,使用中间人网络攻击者将传输层安全性(TLS)连接降级,以使用512位DH 出口级加密,从而使他们能够读取交换的数据并将数据注入到连接中。它会影响HTTPS,SMTPS和IMAPS协议等。作者需要一周使用数千个CPU内核才能为单个512位素数预计算数据。但是,一旦完成,使用两个18核Intel Xeon CPU 可以在大约一分钟内解决单个对数问题。其CVE ID为CVE-2015-4000。
可以使用SSLyze,Qualys SSL服务器测试,testssl.sh或keycdn.com扫描程序等基于TLS的服务(例如提供HTTPS的 Web服务器)检查该漏洞
chaCha20Preference 如果服务器在决定是否使用ChaCha20套件时考虑了客户端首选项,则为true。
什么是chaCha20?
ChaCha是Salsa的变种,是一种流加密算法。
参考论文:ChaCha, a variant of Salsa20
hstsPolicy{} 服务器的HSTS策略,服务器的HSTS策略。 (还在实验中)
关于HSTS更多的内容可以看博主之前的博客:HSTS 严格传输安全
hstsPreloads[] 有关预加载的HSTS策略的信息。
由于第一次链接时并不知道服务器端设置了HSTS,所以在第一次链接时仍存在中间人攻击。因此可以设置预加载HSTS策略来抵御这种攻击。在SSLLAB结果是使用列表list的形式展开的。相关阅读:解决缺陷,让HSTS变得完美
HstsPreload对象包含当前主机名的一个源的预加载HSTS状态。 对当前主机名而不是域名进行预加载检查。
source 来源名称
hostname 主机名
status 预加载状态
error 错误信息,当状态为error时
hpkpRoPolicy{} 服务器的HPKP策略9
HTTP公共密钥固定(HTTP Public Key Pinning,HPKP)是一项安全功能,它是HTTPS网站防止攻击者利用数字证书认证机构(CA)错误签发的证书进行中间人攻击的一种安全机制,用于预防CA遭受入侵或其他会造成CA签发未授权证书的情况。采用公钥固定时,网站会提供已授权公钥的哈希列表,指示客户端在后续通讯中只接受列表上的公钥。
相关阅读:什么是HTTP公钥固定(HPKP)以及如何添加此功能?
hpkpRoPolicy{} 服务器的Public-Key-Pins-Report-Only策略(与hpkpPolicy数据结构类似)
HTTP响应头部Public-Key-Pins-Report-Only用于设置在公钥固定不匹配时,发送错误信息到report-uri。 但和Public-Key-Pins不同的是,即便公钥固定异常, 其允许浏览器继续访问服务器。
staticPkpPolicy{} 服务器的SPKP策略
浏览器可以预加载(即嵌入到浏览器中)公钥密码,我们称之为静态公钥密码。
httpTransactions[] HttpTransaction对象的数组。这里是模拟http访问并产生访问结果的对象。使用了https协议链接。
drownHosts[] DROWN主机的列表。
“DROWN"全称是 Decrypting RSA with Obsolete and Weakened eNcryption,是指"利用过时的脆弱加密算法来对RSA算法进破解”,主要针对SSLv2协议漏洞来对TLS进行跨协议攻击。
更多资料:DROWN: Breaking TLS using SSLv2
drownErrors 如果DROWN测试中发生错误,则为true。
implementsTLS13MandatoryCS 如果服务器支持强制性TLS 1.3密码套件(TLS_AES_128_GCM_SHA256),则为true;如果不支持TLS 1.3,则为null。
zeroRTTEnabled 0-RTT测试的结果。 仅在启用TLS 1.3的情况下才执行此测试。
什么是0-RTT?
同等情况下,TLS1.3比1.2少一个RTT时间。
客户端完成TCP握手需要一个RTT时间, TLS1.2完成TLS密钥协商需要2个RTT时间, TLS1.3只需要1个RTT时间。
certs 证书集合。
Limitation in SSL Labs Detections4
These tests are specific to protocol/cipher suite, SSL Labs only checks with preferred Protocol and CBC Cipher suite. There is a probability that the server could be vulnerable with other set of protocol/cipher suite.
SSL Labs only checks with a limited set of CBC cipher suite
服务器名称指示_维基百科 ↩︎
TLS 握手优化详解 ↩︎
心脏出血漏洞_维基百科 ↩︎
Zombie POODLE and GOLDENDOODLE Vulnerabilities ↩︎ ↩︎
TLS Fallback Signaling Cipher Suite Value (SCSV) for Preventing Protocol Downgrade Attacks ↩︎
FREAK缺陷 ↩︎
Ephemeral Diffie-Hellman with RSA (DHE-RSA) ↩︎
Logjan_维基百科 ↩︎
HPKP_维基百科 ↩︎