vulnerable

更新时间:2022-11-26 12:02:45 阅读: 评论:0


2022年11月26日发(作者:akb0048 next stage)

SSLTLS安全测试

本⽂介绍了使⽤半⾃动化⼯具执⾏SSL&TLS安全性评估的过程,以及如何使⽤⼿动及⼯具的测试⽅法验证并发现问题。⽬的是优化TLS和SSL安全测试流程,帮助信息安全顾

问在渗透测试时在TLS/SSL上花费更少的时间。

什么是TLS和SSL?

安全套接层(SSL)和传输层安全(TLS)加密⽤于通过互联⽹提供通信安全(传输加密)和来保护⽹络流量和互联⽹上的隐私,⽤于诸如⽹络,电⼦邮件,即时消息(IM)和

⼀些虚拟专⽤⽹络(VPN)。

因此,TLS安全配置很重要,应花时间学习如何识别常见的漏洞和安全配置错误。

TLS/SSL安全测试⼯具

是我们⾸选的测试⼯具,它涵盖了TLS和SSL评估所需的所有测试所需⼯具,并定期更新。

安装

您可以通过执⾏其gitclone来安装最新版本的:

gitclone/drwetter/

⽰例

有许多可以⽤于的测试选项,您应该使⽤的选项将在很⼤程度上取决于您的测试要求。以下是部分有关命令⾏选项的⽰例。运⾏./可以看到所有选

项。

测试单个主机上的所有内容并输出到控制台

./-e-E-f-p-y-Y-S-P-c-H-UTARGET-HOST

测试单个主机上的所有内容并输出到HTML

./-e-E-f-p-y-Y-S-P-c-H-UTARGET-HOST|aha>

测试⼦⽹上的所有主机并输出到HTML

./-e-E-f-p-y-Y-S-P-c-H-U192.168.1.0/24|aha>

与上述相同,但只列举每个服务器⽀持的密码类型:

./-E192.168.1.0/24|aha>

控制台输出的截图

HTML输出的截图

TLS和SSL漏洞测试

常见的TLS和SSL漏洞已经列在下⾯了,每个漏洞都有⼀个说明,如果可能的话可以⼿动或⾃动测试漏洞

SWEET32(CVE-2016-2183)

定义

64位块⼤⼩(如Triple-DES(3DES))的传统块密码在CBC模式下使⽤,易受到攻击。当使⽤CBC模式操作时,使⽤simplebirthdayattack来识别64位块密码冲突。当碰撞发

⽣时,这意味着输⼊与输出相同,使得可以执⾏BEASTstyleattack来渗透加密的数据。

作者KarthikBhargavan和GaetanLeurent能够在浏览器(作为MiTM)中运⾏JavaScript,并发送⼤量的数据导致冲突,然后使⽤此信息来恢复会话cookie。

测试SWEET32

确定服务器是否⽀持Triple-DES密码,如果服务器⽀持Triple-DES,则易受SWEET32攻击。

使⽤识别弱密码:

./--ciphersTARGET

如果输出显⽰TripeDES密码,就像下⾯的截图⼀样,⽬标服务器容易受到SWEET32的影响:

如果输出看起来像下⾯的截图,服务器不容易受到SWEET32的影响:

此外,您可以枚举服务器提供给每个协议的密码,⽅法如下:

./-ETARGET

使⽤3DES的任何密码都易受SWEET32影响。

SWEET32Nmap测试

Nmap也可⽤于枚举服务器的密码,NSE插件还将通知是否有任何64位块密码可⽤。

nmap--script=ssl-enum-ciphers-p443TARGET

如果您在输出中看到以下内容,则会发现64位块密码

warnings:

|64-bitblockcipher3DESvulnerabletoSWEET32attack

⼿动测试SWEET32

根据上⾯⽅法测试⽤NmapNSE脚本枚举密码

DROWN(CVE-2016-0800)

DROWN定义

DROWN(使⽤过时和弱化的eNcryption解密RSA),DROWN攻击的最⼀般变体利⽤了SSLv2协议的⼀个根本缺点,允许中间⼈(MiTM)攻击者利⽤导⼊符合20世纪90年代

美国政府的限制(EXPORT等级加密在下⾯的FREAK漏洞描述中详细描述)的密码学。

测试DROWN

N测试

./-DTARGET

NmapDROWN测试

nmap-p443-sV--script=sslv2-drown

FREAK(CVE-2015-0204)

FREAK定义

FREAK(破解RSA导出密钥),利⽤了TLS/SSL中的加密弱点,这是美国政府⼏⼗年前最初引⼊的。使⽤RSA_EXPORT密钥的想法是允许导出包含不能被⼤多数计算机破解

的加密密钥。如果RSA_EXPORT密钥加密为512位或更少,那么以⽬前的计算机性能很容易破解。

FREAK执⾏降级攻击(强制服务器使⽤较弱的密码),当与中间⼈(MiTM)类型攻击相结合时,这允许攻击者捕获数据并中断弱密钥的解密。

FREAK攻击的⾃动测试

K攻击测试

./testssl-FTARGET

⼿动测试FREAK攻击

使⽤./-ETARGET或者nmap-p443--script=ssl-enum-ciphersTARGET枚举服务器密码,确保服务器⽀持的以下类型密码不包含:EXPORT。

例:

Logjam(CVE-2015-4000)

Logjam问题利⽤TLS协议(1.2及更早版本)通过Diffie-Hellman组合交换的⽅式发现的漏洞。该漏洞允许中间⼈(MiTM)攻击者执⾏降级攻击,并使⽤Diffie-Hellman导出密码

(DHE_EXPORT)。

Logjam⾃动测试

logjam的测试

./-JTARGET

⼿动测试Logjam

禁⽤EXPORT密码,说明与FREAK攻击相同,如上所述。

⼿动枚举由服务器提供的密码套件,使⽤./-ETARGET或nmap-p443--script=ssl-enum-ciphersTARGET。

Heartbleed(CVE-2014-0160)

⼼脏出⾎的定义

以OpenSSL处理TLS和DTLS⼼跳扩展数据包的⽅式发现了⼀个缺陷,允许攻击者从加密的TLS/DTLS数据中公开信息。恶意客户端可以发送特制的TLS或DTLSHeartbeat数据

包,以便从连接的客户端或服务器的每个请求中获得内存部分。

公开的内存部分可能包含敏感信息,诸如私钥(由服务提供商⽤于加密数据),实际⽤户的姓名,⽤户名和密码。允许攻击者窃听通信,冒充⽤户并窃取数据。

⾃动化测试

使⽤进⾏测试:

#./-B10.0.1.159

###2.8rc1from/dev/

(424cf232016-08-0910:35:58--1.531)

butionand

modificationunderGPLv2permitted.

USAGEw/TYOUROWNRISK!

Pleafilebugs@/bugs/

###Using"OpenSSL1.0.2-chacha(1.0.2i-dev)"[~183ciphers]

onkali:./bin/.x86_64

(built:"Jun2219:32:292016",platform:"linux-x86_64")

Start2017-01-2022:43:38-->>10.0.1.159:443(10.0.1.159)<<--

rDNS(10.0.1.159):--

Servicedetected:HTTP

Testingforheartbleedvulnerability

Heartbleed(CVE-2014-0160)

VULNERABLE(NOTok)

Done2017-01-2022:43:41-->>10.0.1.159:443(10.0.1.159)<<--

使⽤Nmap测试Heartbleed

#l10.0.1.159

StartingNmap7.25BETA2()at2017-01-2022:45EST

Nmapscanreportfor10.0.1.159

Hostisup(0.00028slatency).

PORTSTATESERVICE

443/tcpopenhttps

|ssl-heartbleed:

|VULNERABLE:

|TheHeartbleedBugisariwsforstealinginformationintendedtobeprotectedbySSL/TLSencryption.

|State:VULNERABLE

|Riskfactor:High

|OpenSSLversions1.0.1and1.0.2-betareleas(including1.0.1fand1.0.2-beta1)allowsforreadingmemoryofsystemsprotectedbythevulnerableOpenSSLversionsandcouldal

|

|References:

|/news/cadv_

|/cve/2014-0160/

|_/cgi-bin/?name=CVE-2014-0160

MACAddress:00:0C:29:35:3D:E8(VMware)

Nmapdone:1IPaddress(1hostup)scannedin0.36conds

⼿动测试Heartbleed

使⽤Metasploit验证已存在的Heartbleed,使⽤详细设置将显⽰Heartbleed暴露的内存泄漏。

msf>uauxiliary/scanner/ssl/openssl_heartbleed

msf>trhostsTARGET-ADDRESS

msf>tverbotrue

msf>run

POODLESSLv3(CVE-2014-3566)

POODLE定义

Google的安全⼩组在2014年10⽉14⽇发现了POODLE攻击(PaddingOracleOnDowngradedLegacyEncryption)。该漏洞利⽤了SSLv3处理填充字节的⽅式(密码块链

接)CBC操作模式。

该缺陷允许中间⼈(MiTM)攻击者在少于256个SSLv3连接中解密密⽂的所选字节,如果他们能够强制受害者应⽤程序重复发送相同的数据通过新创建SSL3.0连接。

⾃动测试POODLE

使⽤Nmap测试POODLE

#l10.0.1.159

StartingNmap7.25BETA2()at2017-01-2022:50EST

Nmapscanreportfor10.0.1.159

Hostisup(0.00037slatency).

PORTSTATESERVICE

443/tcpopenhttps

|ssl-poodle:

|VULNERABLE:

|SSLPOODLEinformationleak

|State:VULNERABLE

|IDs:CVE:CVE-2014-3566OSVDB:113251

|TheSSLprotocol3.0,asudinOpenSSLthrough1.0.1iandother

|products,usnondeterministicCBCpadding,whichmakesiteasier

|forman-in-the-middleattackerstoobtaincleartextdataviaa

|padding-oracleattack,akathe"POODLE"issue.

|Disclosuredate:2014-10-14

|Checkresults:

|TLS_RSA_WITH_AES_128_CBC_SHA

|References:

|/113251

|/cgi-bin/?name=CVE-2014-3566

|/2014/10/14/

|_/~bodo/

MACAddress:00:0C:29:35:3D:E8(VMware)

Nmapdone:1IPaddress(1hostup)scannedin0.35conds

使⽤测试POODLE

./-O10.0.1.159

###2.8rc1from/dev/

(424cf232016-08-0910:35:58--1.531)

butionand

modificationunderGPLv2permitted.

USAGEw/TYOUROWNRISK!

Pleafilebugs@/bugs/

###Using"OpenSSL1.0.2-chacha(1.0.2i-dev)"[~183ciphers]

onkali:./bin/.x86_64

(built:"Jun2219:32:292016",platform:"linux-x86_64")

Start2017-01-2022:52:59-->>10.0.1.159:443(10.0.1.159)<<--

rDNS(10.0.1.159):--

Servicedetected:HTTP

TestingforSSLv3POODLE(PaddingOracleOnDowngradedLegacyEncryption)

POODLE,SSL(CVE-2014-3566)VULNERABLE(NOTok),usSSLv3+CBC(checkTLS_FALLBACK_SCSVmitigationbelow)

TestingforTLS_FALLBACK_SCSVProtection

TLS_FALLBACK_SCSV(RFC7507),adeattackpreventionNOTsupported

⼿动测试POODLE

Kali附带的openssl版本不再⽀持SSLv3。使⽤⼆进制码/bin/.x86_64进⾏⼿动SSLv3测试。

./.x86_64s_client-ssl3-connect10.0.1.159:443

如果握⼿完成,则服务器容易受到POODLE的影响。

对于容易受到POODLE影响的服务器的输出⽰例(从响应中删除的证书):

---

NoclientcertificateCAnamesnt

ServerTempKey:DH,1024bits

---

SSLhandshakehasread1398bytesandwritten373bytes

---

New,TLSv1/SSLv3,CipherisDHE-RSA-AES256-SHA

Serverpublickeyis1024bit

SecureRenegotiationISsupported

Compression:NONE

Expansion:NONE

NoALPNnegotiated

SSL-Session:

Protocol:SSLv3

Cipher:DHE-RSA-AES256-SHA

Session-ID:C7B2623CB2145A1C6655BDD8CC281F882C3B9E0ED35E88360639BA

Session-ID-ctx:

Master-Key:6A56AC01754D9441ACFD6C0B9E534E33450CD2F0E0D619F235E2ACC1780CFD86E769B9AE82D0D5AAA4C62B295B5BB598

Key-Arg:None

PSKidentity:None

PSKidentityhint:None

SRPurname:None

StartTime:1484971085

Timeout:7200(c)

Verifyreturncode:9(certificateisnotyetvalid)

---

如果服务器不容易受到POODLE的影响,握⼿将失败,发⽣如下错误:

CONNECTED(00000003)

28395584:error:14094410:SSLroutines:ssl3_read_bytes:sslv3alerthandshakefailure:s3_pkt.c:1475:SSLalertnumber40

28395584:error:1409E0E5:SSLroutines:ssl3_write_bytes:sslhandshakefailure:s3_pkt.c:656:

---

nopeercertificateavailable

---

CCS注⼊漏洞(CVE-2014-0224)

CCS注⼊定义

某些版本的OpenSSL存在弱点,允许客户端和服务器通过特制的握⼿包来强制使⽤弱密钥进⾏通信。允许中间⼈攻击者解密和修改客户端与服务器之间的流量。

受影响的OpenSSL版本:

OpenSSLbefore0.9.8za

OpenSSL1.0.0before1.0.0m

OpenSSL1.0.1before1.0.1

CCS注⼊⾃动化测试

注⼊测试

./-ITARGET

NmapCCS注⼊测试

nmap-p443--script=ssl-ccs-injectionTARGET

POODLETLS(CVE-2014-8730)

POODLETLS定义

由于TLS填充是SSLv3的⼀个⼦集,因此可以重新使⽤针对TLS的POODLE攻击。TLS对于它的填充格式是⾮常严格的,但是⼀些TLS实现在解密之后不执⾏填充结构的检查。

即使使⽤TLS也不会容易受到POODLE攻击的影响。

测试POODLETLS

LETLS测试

与以上针对POODLESSL的指令相同

NmapPOODLETLS测试

与上⾯针对POODLESSL的Nmap说明相同

BREACH(CVE-2013-3587)

BREACH攻击定义

BREACH代表通过⾃适应压缩超⽂本进⾏浏览器检测和渗透。与CRIME相似之处是利⽤HTTP压缩中的漏洞,允许攻击者识别页⾯中是否存在⽂本。

BREACH攻击基本流程

当页⾯上发⽣⽂本重复时,将删除重复的术语,有助于减⼩页⾯的⼤⼩。这可以⽤于识别现有的页⾯内容,下⾯是Web应⽤程序的⽰例,显⽰当前登录的⽤户在页⾯中反映的⽤

户名:

1.输⼊您认为不存在于搜索参数中的⽤户名

2.注意返回页⾯的⼤⼩

3.发送您认为存在的⽤户名的其他搜索请求

4.注意返回页⾯的⼤⼩,如果⽤户名与登录⽤户名匹配(确认存在),页⾯⼤⼩对⽐上次将会缩⼩

通过分析响应的⼤⼩可以预测⽂本,实际上没有流量被“解密”

为了使BREACH攻击成功地渗透数据,必须有⼀种机制来反映渲染页⾯中的⽤户输⼊,并且服务器必须⽀持HTTP压缩。

BREACH⾃动测试

使⽤测试BREACH

./-TTARGET

BREACH⼿动测试

openssls_client-connectTARGET:443

输⼊以下内容来确定服务器是否使⽤压缩:

GET/HTTP/1.1

主机:⽬标

Accept-Encoding:compress,gzip

如果服务器返回乱码的字符,如下⾯的截图所⽰,则服务器⽀持压缩,容易受到BREACH的攻击:

如果⽬标Web服务器不返回压缩数据输出,则它不容易受到BREACH的影响,并且是被禁⽤压缩。

RC4CVE-2013-2566

TLS协议和SSL协议中使⽤的RC4算法具有许多单字节偏移。远程攻击者可以通过使⽤相同明⽂的⼤量会话中的密⽂统计分析来进⾏明⽂破解攻击。

⾃动RC4测试

4测试

./-4⽬标

⼿动RC4测试

使⽤./-ETARGET⼿动枚举服务器密码或者nmap-p443--script=ssl-enum-ciphersTARGET确保服务器⽀持密码类型不使⽤RC4。

CRIME(CVE-2012-4929)

CRIME攻击定义

CRIME是TLS1.2漏洞,允许中间⼈(MiTM)攻击者识别加密数据,(潜在)执⾏会话劫持。攻击者可以通过检查密⽂的⼤⼩来识别加密数据,同时从浏览器引⼊多个有效载

荷,当字符匹配在标题内时,其⼤⼩会有所不同,允许攻击者修改会话cookie。实际上没有使⽤CRIME攻击解密数据,TLS1.2处理压缩的⼀个弱点使得攻击者可以通过⽐较返

回的⼤⼩来识别头⽂件何时存在。

CRIME⾃动测试

使⽤测试CRIME

./-CTARGET

⼿动测试CRIME

Kali使⽤的openssl客户似乎不再允许TLS1.2压缩。如果您使⽤此版本的openssl进⾏测试,即使⽬标服务器启⽤了TLS1.2压缩,响应将始终为“Compression:NONE”。可以使

⽤附带的.x86_64⼆进制⽂件来解决此问题。

./bin/.x86_64s_client-connect10.0.1.158:443

⽰例输出–不易受CRIME影响

如果服务器不容易受到CRIME的影响。“压缩:⽆”表⽰压缩在服务器上被禁⽤,并且不易受到CRIME的攻击。

Compression:NONE

⽰例输出–易受CRIME影响

如果服务器易受CRIME攻击:

Compression:zlibcompression压缩:zlib压缩

Renegotiation(CVE-2009-3555)

TLS/SSL重新协商漏洞定义

2009年发现⼀个利⽤TLS和SSL协议Renegotiation的漏洞,允许攻击者将数据插⼊会话可危及其完整性。

条件

必须满⾜以下条件才能利⽤此漏洞:

服务器不⽀持curerenegotiation

服务器必须允许clientsiderenegotiation

Renegotiation的⾃动测试

测试curerenegotiation以及clientsiderenegotiation.

#./-R10.0.1.159

###2.8rc1from/dev/

(424cf232016-08-0910:35:58--1.531)

butionand

modificationunderGPLv2permitted.

USAGEw/TYOUROWNRISK!

Pleafilebugs@/bugs/

###Using"OpenSSL1.0.2-chacha(1.0.2i-dev)"[~183ciphers]

onkali:./bin/.x86_64

(built:"Jun2219:32:292016",platform:"linux-x86_64")

Start2017-01-2100:04:30-->>10.0.1.159:443(10.0.1.159)<<--

rDNS(10.0.1.159):--

Servicedetected:HTTP

TestingforRenegotiationvulnerabilities

SecureRenegotiation(CVE-2009-3555)notvulnerable(OK)

SecureClient-InitiatedRenegotiationnotvulnerable(OK)

Done2017-01-2100:04:31-->>10.0.1.159:443(10.0.1.159)<<--

⼿动测试Renegotiation

测试SecureRenegotiation

openssls_client-connectTARGET:443

SecureRenegotiation未启⽤的⽰例:

---

SSLhandshakehasread1606bytesandwritten503bytes

---

New,TLSv1/SSLv3,CipherisDHE-RSA-AES256-SHA

Serverpublickeyis1024bit

SecureRenegotiationISNOTsupported

Compression:NONE

Expansion:NONE

NoALPNnegotiated

SSL-Session:

SecureRenegotiation启⽤的⽰例:

---

SSLhandshakehasread1560bytesandwritten495bytes

---

New,TLSv1/SSLv3,CipherisDHE-RSA-AES256-GCM-SHA384

Serverpublickeyis1024bit

SecureRenegotiationISsupported

Compression:NONE

Expansion:NONE

NoALPNnegotiated

SSL-Session:

测试ClientInitiatedSecureRenegotiation

openssls_client-connectTARGET:443

类型:

HEAD/HTTP/1.1

R

如果你看到响应:

HEAD/HTTP/1.1

R

RENEGOTIATING

即服务器允许clientrenegotiation。

如果你看到回应:

HEAD/HTTP/1.1

R

RENEGOTIATING

6040:error:1409E0E5:SSLroutines:ssl3_write_bytes:sslhandshakefailure:s3_pkt.c:656:

则服务器不⽀持clientrenegotiation。

TLS和SSL证书

对没有加密的服务器证书应该被评估为配置错误和弱加密签名,下⾯是证书检查的项⽬列表:

使⽤以下⽅式获取⽬标服务器证书:

openssls_client-connectTARGET:443|opensslx509-noout-text

证书检查项⽬表

名称描述

识别证书颁发者确保证书颁发机构(CA)来⾃受信任的来源,不使⽤⾃签名证书,因为⾃签名证书允许中间⼈员攻击(除⾮是内部的,并且与内部CA签名)。

签名算法⽤于确保证书完整性的算法,您应该确保密码是安全的,⽽不是使⽤MD5(已知不安全)或SHA1。

公钥关键长度应该⾜够长以确保它不能被破解,最⼩值应该是2048位。

NotBefore证书开始⽇期。

NotAfter证书结束⽇期。

Subject&SubjectAlternative

Name

Subject应该列出证书所涉及的DNS名称,如果这是不正确的浏览器会引发错误。SubjectAlternativeName应列出通配符证书的DNS名称,应列

出此证书的所有DNS名称。

HTTPSecurityHeaders

什么是HTTPSecurityHeaders?

如果配置正确,HTTPSecurityHeaders可为您的域提供额外的安全功能。以下是主要HTTP安全头⽂件的概述:

可以使⽤BurpSuite,Curl或(任何许多其他⼯具)来检查HTTPSecurityHeaders。

使⽤Curl检查HTTP安全头⽂件

curl-s-D-TARGET-o/dev/null

⽰例输出:

HTTP/1.1301MovedPermanently

Date:Mon,23Jan201716:15:51GMT

Server:Apache

Content-Security-Policy:default-src'lf'*.target

X-Frame-Options:SAMEORIGIN

X-Content-Type-Options:nosniff

Location:TARGET

Cache-Control:max-age=3600

Expires:Mon,23Jan201717:15:51GMT

Vary:Accept-Encoding

Content-Length:233

Content-Type:text/html;chart=iso-8859-1

使⽤检查HTTP安全头

./-H

HTTP安全性头⽂件

名称定义

HSTS

HSTS安全头⽂件强制Web浏览器或客户端仅通过HTTPS连接与服务器进⾏通信。HSTS确保连接仅使⽤HTTPS,并防⽌中间⼈(MiTM)攻击,降级攻击和cookie

劫持。HSTS是TrustonFirstU(TOFU),这意味着它必须通过HTTP发送⾄少⼀个不安全的连接到主机以传输安全的头。HSTS预载列表是为浏览器提供⽀持

HSTS的站点列表,以避免最初不安全的连接。

内容安全

策略

(CSP)

内容安全策略(CSP)是⼀个HTTP安全头⽂件策略,可帮助减轻某些类型的数据注⼊攻击(如XSS(跨站点脚本))的风险。CSP允许⽹站管理员通过定义⼀个策

略来便⾯或减少XSS攻击,该策略规定了浏览器应该信任什么位置并允许脚本执⾏。

X-Frame

选项

该X-Frame选项报头防⽌⽹站的代码部分展⽰出就像