WAF實(shí)現(xiàn)掃描器識(shí)別 徹底抵擋黑客掃描
目前安全測(cè)試的軟件越來(lái)越多,也越來(lái)越強(qiáng)大,越來(lái)越多的人成為黑客,今天在網(wǎng)上看到一個(gè)文章說(shuō)攔截wvs的掃描,勾起了我寫(xiě)這篇文章的欲望。
因?yàn)楣镜娜髽I(yè)務(wù)之一就有一個(gè)云WAF,每天攔截的日志里面,有將近90%的請(qǐng)求是掃描器發(fā)出,WAF接收到請(qǐng)求會(huì)解析數(shù)據(jù)包,然后過(guò)一遍規(guī)則,過(guò)完成百上千條規(guī)則必定對(duì)性能有一定的影響。如果能識(shí)別出來(lái)是人還是掃描器的請(qǐng)求,就可以在這方面節(jié)省很大的資源。
下面的分析介紹只針對(duì)web安全掃描器。
目前全能型的掃描器主要是wvs(Acunetix Web Vulnerability Scanner)、AppScan、WebInspect,國(guó)內(nèi)的像aisec、bugscan等等…還有國(guó)內(nèi)那些老安全廠商的掃描器就不說(shuō)了,主要提一下像wvs這種使用率比較高的。另外還有目錄文件型的掃描器、注入工具(類(lèi)似sqlmap、Havij)等等。
掃描器識(shí)別主要從以下幾點(diǎn)來(lái)做:
1、掃描器指紋(head字段/請(qǐng)求參數(shù)值等)
2、單IP+ cookie某時(shí)間段內(nèi)觸發(fā)規(guī)則次數(shù)
3、隱藏的鏈接標(biāo)簽()
4、Cookie植入
5、驗(yàn)證碼驗(yàn)證
6、單IP請(qǐng)求時(shí)間段內(nèi)Webserver返回http狀態(tài)404比例
一、掃描器指紋(head字段/請(qǐng)求參數(shù)值等)
目前最常見(jiàn)的手法就是收集掃描器的指紋特征來(lái)做識(shí)別,不同的掃描器都有自己的一些特征,比如發(fā)出的請(qǐng)求會(huì)加一些特定的head 字段,測(cè)試漏洞的請(qǐng)求參數(shù)的值會(huì)帶上自己掃描器的名稱(chēng)等。
下面通過(guò)抓網(wǎng)絡(luò)數(shù)據(jù)包來(lái)看常見(jiàn)掃描器的指紋特征:
wvs(Acunetix Web Vulnerability Scanner):
下面是我抓到的一個(gè)wvs的請(qǐng)求
GET /help/website-performance-settings/x HTTP/1.1 Pragma: no-cache Cache-Control: no-cache Referer: http://www.anquanbao.com/help Acunetix-Aspect: enabled Acunetix-Aspect-Password: 082119f75623eb7abd7bf357698ff66c Acunetix-Aspect-Queries: filelist;aspectalerts Cookie: xxxxxxxxxxxx Host: www.anquanbao.com Connection: Keep-alive Accept-Encoding: gzip,deflate User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.63 Safari/537.36 Accept: */*
請(qǐng)求頭里面有三個(gè)很明顯的標(biāo)志:
Acunetix-Aspect: enabled Acunetix-Aspect-Password: 082119f75623eb7abd7bf357698ff66c Acunetix-Aspect-Queries: filelist;aspectalerts
另外在請(qǐng)求的參數(shù)值,比如URL跟POST數(shù)據(jù)中都有很明顯的acunetix_wvs_security_test特征,下圖是我從waf攔截中調(diào)取到的結(jié)果。
根據(jù)以上抓取到的特征,我們可以把這個(gè)作為wvs的一個(gè)指紋,在waf中進(jìn)行過(guò)濾。
Appscan:
同樣的,appscan也有自己的一些特征,如下
Bugscan:
關(guān)于Bugscan,我咨詢了一下作者,作者給了XSS模塊的掃描源碼我看了下,主要特征是:
–>’”><H1>XSS@HERE</H1>
另外還有一些特征就不一一列舉。
注意:并不是所有的請(qǐng)求都會(huì)帶有掃描器的特征,比如下面的一個(gè)包也是wvs發(fā)出的,但是沒(méi)有帶上面我們說(shuō)的特征,掃描器指紋特征只能抵擋住一部分的掃描,但是我們可以利用這些信息識(shí)別出掃描器然后干掉IP等。
二、單IP+ cookie某時(shí)間段內(nèi)觸發(fā)規(guī)則次數(shù)
根據(jù)某個(gè)IP+ cookie某時(shí)間段內(nèi)觸發(fā)waf攔截規(guī)則的次數(shù)大于設(shè)定的某個(gè)閥值,比如在20秒內(nèi),某個(gè)IP+cookie觸發(fā)waf攔截規(guī)則10次。
數(shù)據(jù)證明如下圖:
另外還可以根據(jù)IP+user angent等,或者更多維度。
三、隱藏的鏈接標(biāo)簽等()
掃描器的爬蟲(chóng)會(huì)把頁(yè)面里面的所有鏈接都抓出來(lái)去做漏洞探測(cè),特別是現(xiàn)在基于webkit一類(lèi)的掃描器,能夠渲染css跟js,可以爬出更多的鏈接測(cè)試。
下面貼出一個(gè)百度百科關(guān)于webkit的介紹
WebKit 是一個(gè)開(kāi)源的瀏覽器引擎,與之相對(duì)應(yīng)的引擎有Gecko(Mozilla Firefox 等使用)和Trident(也稱(chēng)MSHTML,IE 使用)。同時(shí)WebKit 也是蘋(píng)果Mac OS X 系統(tǒng)引擎框架版本的名稱(chēng),主要用于Safari,Dashboard,Mail 和其他一些Mac OS X 程序。WebKit 前身是 KDE 小組的 KHTML,WebKit 所包含的 WebCore 排版引擎和 JSCore 引擎來(lái)自于 KDE 的 KHTML 和 KJS,當(dāng)年蘋(píng)果比較了 Gecko 和 KHTML 后,仍然選擇了后者,就因?yàn)樗鼡碛星逦脑创a結(jié)構(gòu)、極快的渲染速度。Apple將 KHTML 發(fā)揚(yáng)光大,推出了裝備 KHTML 改進(jìn)型 WebKit 引擎的瀏覽器 Safari。
隱藏的標(biāo)簽鏈接是指人看不見(jiàn)的鏈接,如:
<a href=”http://www.cnseay.com/”></a>
形式,人是點(diǎn)擊不到的,只有軟件能夠匹配出這個(gè)地址,我們新建一個(gè)網(wǎng)頁(yè),抓掃描器數(shù)據(jù)包測(cè)試。
<html> <head> <title>test</title> </head> <body> <a href="</a> </body> </html>
當(dāng)然如果在正常情況下也給所有用戶植入這種代碼是非常令人反感的,用戶體驗(yàn)也會(huì)大打折扣,可以在前期先做一些條件限制,比如固定時(shí)間段內(nèi)觸發(fā)waf攔截規(guī)則到達(dá)預(yù)定閥值,再給這個(gè)用戶單獨(dú)植入一個(gè)隱藏鏈接。
四、Cookie植入
Cookie植入的方式跟上面講的隱藏鏈接植入大同小異,實(shí)現(xiàn)原理是:當(dāng)一個(gè)IP+user angent在固定時(shí)間段內(nèi)觸發(fā)規(guī)則的次數(shù)到達(dá)一定閥值,給發(fā)起請(qǐng)求的這個(gè)人植入一個(gè)cookie,如果下次再請(qǐng)求沒(méi)有攜帶這個(gè)cookie,則說(shuō)明是掃描器。
cookie植入有利有弊,優(yōu)點(diǎn)是更直接,種下cookie馬上就能根據(jù)下一個(gè)請(qǐng)求判斷。缺點(diǎn)是這個(gè)方式在基于webkit的掃描器上面行不通。
五、驗(yàn)證碼驗(yàn)證
驗(yàn)證碼驗(yàn)證的方式跟上面的cookie植入也大同小異,不過(guò)是把cookie換成了驗(yàn)證碼的方式,這種方法也被用于防CC攻擊。
六、單IP請(qǐng)求時(shí)間段內(nèi)Webserver返回http狀態(tài)404比例
這種方法主要用來(lái)應(yīng)對(duì)探測(cè)敏感目錄和文件的掃描器,這類(lèi)的掃描器都是基于字典文件,通過(guò)對(duì)字典內(nèi)的url進(jìn)行請(qǐng)求獲得的返回信息來(lái)進(jìn)行判斷目錄或者文件的是否存在。
如果某個(gè)IP在一段時(shí)間內(nèi)請(qǐng)求頻率過(guò)快,這時(shí)候waf可以進(jìn)行收集一段時(shí)間內(nèi)webserver返回404狀態(tài)數(shù)目,到達(dá)一定閥值后進(jìn)行封殺。
看過(guò)上面幾種方法的介紹,應(yīng)該大部分人都會(huì)想到兩個(gè)問(wèn)題,
1. 一大撥人使用同一個(gè)公網(wǎng)IP,怎么判斷誰(shuí)是攻擊者?
2. 一大撥人使用同一個(gè)公網(wǎng)IP,怎么才能保證不誤殺?
第一,對(duì)于怎么判斷攻擊者,當(dāng)然不能單純的從一個(gè)IP判斷,一般一個(gè)完整的http請(qǐng)求都會(huì)帶有
user angent、cookie等信息,我們可以結(jié)合ip+user angent來(lái)判斷請(qǐng)求的人,或者再加一個(gè)cookie的維度,當(dāng)然在給這個(gè)攻擊者植隱藏鏈接、cookie或者驗(yàn)證碼之前,需要它觸發(fā)一些規(guī)則閥值,以免影響用戶體驗(yàn)。
第二,說(shuō)到怎么保證不誤殺,也就是怎么去封殺的問(wèn)題,關(guān)鍵在于怎么二次判斷攻擊者,目前最好的方法也是利用ip+user angent,在判斷是掃描器請(qǐng)求后,根據(jù)IP+user angent進(jìn)行封殺,另外也是靠cookie封殺,關(guān)鍵在于是攜帶某個(gè)cookie鍵的封殺掉還是不帶的封殺掉。