办事端撑持heartbeat是存在heartbleed缝隙的需要前提,假定鉴定出某SSL端口不撑持heartbeat,那根基上便可以解除风险了。
在SSL握手阶段,假定Client Hello里声了然客户端撑持heartbeat,那么办事端会在Server Hello中声明本身是不是也撑持heartbeat。
在ssl-enum-ciphers.nse的根本上,改了一个nse脚本(http://pan.百度.com/s/1pJ37kF5),来按照上述特点鉴定SSL是不是撑持Heartbeat,该脚本在nmap 6.40下正常工作,貌似在5.x下会犯错,一些定义有冲突。
[kussa@Kussa scripts]$ nmap --script ssl-heartbeat -p 443 passport.百度.com
Starting Nmap 6.40 ( http://nmap.org) at 2014-04-10 09:59 CST
Nmap scan report for passport.百度.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
这个脚本可能对我们如许利用闭源方案比较多的公司比较有效,主如果为了借用nmap比较成熟的扫描机制,可以对公司做一次全网扫描,以解除暗藏的风险,然后对扫描出的撑持hearbeat的端口再做重点排查。
nmap --script ssl-heartbeat -Pn -p 443,993,995 -iL ip.txt -oN hb.txt
当然对脚本后面再加一个heartbeat的要求,就和阿谁python的PoC一样了……
PS(下面的说法没有颠末严格验证):
1.此刻的阿谁python的PoC貌似在措置有些办事器发来的Server Hello要求时会犯错,办事端明明发还了Server Hello,但因为格局不兼容这个脚本而被忽视,就卡在等候Server Hello这一步了,底子没发heartbeat包。所以用阿谁PoC检测出有标题问题标必然是有标题问题,但检测没标题问题标不必然没标题问题。
2.这个脚本恰好相反。
3.貌似不管是客户端仍是办事端,微软的产品都不撑持heartbeat,除非出格引进了OpenSSL的。