作者:
Seay
·
2013/11/08 11:04
0x00 背景
目前安全測試的軟體越來越多,也越來越強大,越來越多的人成為[駭客],今天在網上看到一個文章說攔截wvs的掃描,勾起了我寫這篇文章的慾望。
因為公司的三大業務之一就有一個雲waf,每天攔截的日誌裡面,有將近90%的請求是掃描器發出,waf接收到請求會解析資料包,然後過一遍規則,過完成百上千條規則必定對效能有一定的影響。如果能識別出來是人還是掃描器的請求,就可以在這方面節省很大的資源。
下面的分析介紹只針對web安全掃描器。
0x01 分析特徵
目前全能型的掃描器主要是wvs(Acunetix Web Vulnerability Scanner)、AppScan、WebInspect,國內的像aisec、bugscan等等…還有國內那些老安全廠商的掃描器就不說了,主要提一下像wvs這種使用率比較高的。另外還有目錄檔案型的掃描器、注入工具(類似sqlmap、Havij)等等。
掃描器識別主要從以下幾點來做:
一、 掃描器指紋(head欄位/請求引數值等)
二、 單IP+ cookie某時間段內觸發規則次數
三、 隱藏的連結標籤(<a>)
四、 Cookie植入
五、 驗證碼驗證
六、 單IP請求時間段內Webserver返回http狀態404比例
一、掃描器指紋(head欄位/請求引數值等)
目前最常見的手法就是收集掃描器的指紋特徵來做識別,不同的掃描器都有自己的一些特徵,比如發出的請求會加一些特定的head 欄位,測試漏洞的請求引數的值會帶上自己掃描器的名稱等。
下面透過抓網路資料包來看常見掃描器的指紋特徵:
wvs(Acunetix Web Vulnerability Scanner):
下面是我抓到的一個wvs的請求
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: */*
請求頭裡面有三個很明顯的標誌:
Acunetix-Aspect: enabled
Acunetix-Aspect-Password: 082119f75623eb7abd7bf357698ff66c
Acunetix-Aspect-Queries: filelist;aspectalerts
另外在請求的引數值,比如URL跟POST資料中都有很明顯的acunetix_wvs_security_test特徵,下圖是我從waf攔截中調取到的結果。
根據以上抓取到的特徵,我們可以把這個作為wvs的一個指紋,在waf中進行過濾。
Appscan
同樣的,appscan也有自己的一些特徵,如下
Bugscan
關於Bugscan,我諮詢了一下作者,作者給了XSS模組的掃描原始碼我看了下,主要特徵是:
–>’”><H1>[email protected]</H1>
另外還有一些特徵就不一一列舉。
注意:並不是所有的請求都會帶有掃描器的特徵,比如下面的一個包也是wvs發出的,但是沒有帶上面我們說的特徵,掃描器指紋特徵只能抵擋住一部分的掃描,但是我們可以利用這些資訊識別出掃描器然後幹掉IP等。
二、單IP+ cookie某時間段內觸發規則次數
根據某個IP+ cookie某時間段內觸發waf攔截規則的次數大於設定的某個閥值,比如在20秒內,某個IP+cookie觸發waf攔截規則10次。
資料證明如下圖:
另外還可以根據IP+user angent等,或者更多維度。
三、隱藏的連結標籤等(<a>)
掃描器的爬蟲會把頁面裡面的所有連結都抓出來去做漏洞探測,特別是現在基於webkit一類的掃描器,能夠渲染css跟js,可以爬出更多的連結測試。
下面貼出一個百度百科關於webkit的介紹
WebKit 是一個開源的瀏覽器引擎,與之相對應的引擎有Gecko(Mozilla Firefox 等使用)和Trident(也稱MSHTML,IE 使用)。同時WebKit 也是蘋果Mac OS X 系統引擎框架版本的名稱,主要用於Safari,Dashboard,Mail 和其他一些Mac OS X 程式。WebKit 前身是 KDE 小組的 KHTML,WebKit 所包含的 WebCore 排版引擎和 JSCore 引擎來自於 KDE 的 KHTML 和 KJS,當年蘋果比較了 Gecko 和 KHTML 後,仍然選擇了後者,就因為它擁有清晰的原始碼結構、極快的渲染速度。Apple將 KHTML 發揚光大,推出了裝備 KHTML 改進型 WebKit 引擎的瀏覽器 Safari。
隱藏的標籤連結是指人看不見的連結,如
<a href="http://www.cnseay.com/"></a>
形式,人是點選不到的,只有軟體能夠匹配出這個地址,我們新建一個網頁,抓掃描器資料包測試。
#!html
<html>
<head>
<title>test</title>
</head>
<body>
<a href="http://localhost/1.php?id=1"></a>
</body>
</html>
透過抓取wvs的資料包可以看到,掃描器很快的捕獲了http://localhost/1.php?id=1這個連結,並進行漏洞測試。
當然如果在正常情況下也給所有使用者植入這種程式碼是非常令人反感的,使用者體驗也會大打折扣,可以在前期先做一些條件限制,比如固定時間段內觸發waf攔截規則到達預定閥值,再給這個使用者單獨植入一個隱藏連結。
四、Cookie植入
Cookie植入的方式跟上面講的隱藏連結植入大同小異,實現原理是:當一個IP+user angent在固定時間段內觸發規則的次數到達一定閥值,給發起請求的這個人植入一個cookie,如果下次再請求沒有攜帶這個cookie,則說明是掃描器。
cookie植入有利有弊,優點是更直接,種下cookie馬上就能根據下一個請求判斷。缺點是這個方式在基於webkit的掃描器上面行不通。
五、驗證碼驗證
驗證碼驗證的方式跟上面的cookie植入也大同小異,不過是把cookie換成了驗證碼的方式,這種方法也被用於防CC攻擊。
六、單IP請求時間段內Webserver返回http狀態404比例
這種方法主要用來應對探測敏感目錄和檔案的掃描器,這類的掃描器都是基於字典檔案,透過對字典內的url進行請求獲得的返回資訊來進行判斷目錄或者檔案的是否存在。
如果某個IP在一段時間內請求頻率過快,這時候waf可以進行收集一段時間內webserver返回404狀態數目,到達一定閥值後進行封殺。
0x02 思考
看過上面幾種方法的介紹,應該大部分人都會想到兩個問題,
1. 一大撥人使用同一個公網IP,怎麼判斷誰是攻擊者?
2. 一大撥人使用同一個公網IP,怎麼才能保證不誤殺?
第一,對於怎麼判斷攻擊者,當然不能單純的從一個IP判斷,一般一個完整的http請求都會帶有user angent、cookie等資訊,我們可以結合ip+user angent來判斷請求的人,或者再加一個cookie的維度,當然在給這個攻擊者植隱藏連結、cookie或者驗證碼之前,需要它觸發一些規則閥值,以免影響使用者體驗。
第二,說到怎麼保證不誤殺,也就是怎麼去封殺的問題,關鍵在於怎麼二次判斷攻擊者,目前最好的方法也是利用ip+user angent,在判斷是掃描器請求後,根據IP+user angent進行封殺,另外也是靠cookie封殺,關鍵在於是攜帶某個cookie鍵的封殺掉還是不帶的封殺掉。
PS:如果誤殺太大,如果剛好哪個妹紙線上看小電影到激情片段,這是多傷人妹紙的心啊。
出自:http://www.cnseay.com/3469/
本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!