判斷是否支持Heartbeat的NSE腳本
服務(wù)端支持heartbeat是存在heartbleed漏洞的必要條件,如果判斷出某SSL端口不支持heartbeat,那基本上就可以排除風(fēng)險(xiǎn)了。
在SSL握手階段,如果Client Hello里聲明了客戶端支持heartbeat,那么服務(wù)端會(huì)在Server Hello中聲明自己是否也支持heartbeat。
在ssl-enum-ciphers.nse的基礎(chǔ)上,改了一個(gè)nse腳本(http://pan.baidu.com/s/1pJ37kF5),來根據(jù)上述特征判斷SSL是否支持Heartbeat,該腳本在nmap 6.40下正常工作,貌似在5.x下會(huì)出錯(cuò),一些定義有沖突。
[kussa@Kussa scripts]$ nmap --script ssl-heartbeat -p 443 passport.baidu.com
Starting Nmap 6.40 ( http://nmap.org ) at 2014-04-10 09:59 CST
Nmap scan report for passport.baidu.com (61.135.185.194)
Host is up (0.0039s latency).
PORT STATE SERVICE
443/tcp open https
|_ssl-heartbeat: no[kussa@Kussa scripts]$ nmap --script ssl-heartbeat -p 443 login.taobao.com
Starting Nmap 6.40 ( http://nmap.org ) at 2014-04-10 10:00 CST
Nmap scan report for login.taobao.com (42.156.184.11)
Host is up (0.030s latency).
PORT STATE SERVICE
443/tcp open https
|_ssl-heartbeat: yes
這個(gè)腳本可能對(duì)我們這樣使用閉源方案比較多的公司比較有用,主要是為了借用nmap比較成熟的掃描機(jī)制,可以對(duì)公司做一次全網(wǎng)掃描,以排除潛在的風(fēng)險(xiǎn),然后對(duì)掃描出的支持hearbeat的端口再做重點(diǎn)排查。
nmap --script ssl-heartbeat -Pn -p 443,993,995 -iL ip.txt -oN hb.txt
當(dāng)然對(duì)腳本后面再加一個(gè)heartbeat的請(qǐng)求,就和那個(gè)python的PoC一樣了……
PS(下面的說法沒有經(jīng)過嚴(yán)格驗(yàn)證):
1.現(xiàn)在的那個(gè)python的PoC貌似在處理有些服務(wù)器發(fā)來的Server Hello請(qǐng)求時(shí)會(huì)出錯(cuò),服務(wù)端明明發(fā)回了Server Hello,但因?yàn)楦袷讲患嫒葸@個(gè)腳本而被忽略,就卡在等待Server Hello這一步了,根本沒發(fā)heartbeat包。所以用那個(gè)PoC檢測出有問題的一定是有問題,但檢測沒問題的不一定沒問題。
2.這個(gè)腳本恰恰相反。
3.貌似無論是客戶端還是服務(wù)端,微軟的產(chǎn)品都不支持heartbeat,除非特別引入了OpenSSL的。