CGI好比Web漏洞掃描器的眼睛,只有CGI更全更準,Web漏洞掃描器才能更好的“看到”漏洞,為業務的Web安全保駕護航。本文簡單介紹了基于分布式流計算平臺Storm的海量CGI采集去重系統——Storm-Cgi。
1、開源分布式流計算平臺Storm簡介
Storm是一個由Twitter公司開源的與Hadoop并駕齊驅的分布式,實時流計算系統。可以簡單、可靠的處理大量的數據流。
1.1、Storm系統的主要特點
a、簡單的編程模型。類似于MapReduce降低了并行批處理復雜性,Storm降低了進行實時處理的復雜性。
b、可以使用各種編程語言。你可以在Storm之上使用各種編程語言。默認支持Clojure、Java、Ruby和Python。要增加對其他語言的支持,只需實現一個簡單的Storm通信協議即可。
c、容錯性。Storm會管理工作進程和節點的故障。
d、水平擴展。計算是在多個線程、進程和服務器之間并行進行的。
e、可靠的消息處理。Storm保證每個消息至少能得到一次完整處理。任務失敗時,它會負責從消息源重試消息。
f、快速。系統的設計保證了消息能得到快速的處理,可以使用MQ或Netty作為其底層消息隊列。
1.2、Storm的組成
Storm編程中的主要術語包括Stream、Spout、Bolt、Task、Worker、Stream Grouping和Topology。
1.3、Storm的廣泛應用
Storm在國內外的應用都相當廣泛,包括Twitter,Yahoo等,國內公司有阿里,淘寶,騰訊,百度,360等。
2、Storm-Cgi系統整體架構
Storm- Cgi系統,采集CGI的來源主要有三種,分別是IDS光纖旁路出來HTTP請求日志文件,門神旁路的HTTP請求日志文件,還有Web2.0爬蟲抓取的 URL。Storm-Cgi中的Spout組件Valid_Rewrite_Spout從這些數據源中抓取CGI,并進行合法性過濾和Rewrite過 濾, Http探測過濾,最終得到高質量的實際存在的CGI。Storm-Cgi系統還能從CGI庫中讀取庫存CGI數據,進行迭代過濾,保證庫存CGI數據的 準確有效性。Storm-Cgi系統的整體架構如下圖一所示。
3、主要模塊的設計
3.1、Valid_Rewrite_Spout
該 模塊負責從各數據源采集CGI,并做合法性過濾與Rewrite過濾。Valid_Rewrite_Spout會從不同格式的數據源中抓取出統一格式的 CGI,并進行合法性驗證與Rewrite過濾。合法性過濾包括:Host合法性驗證,URL的Path段合法性過濾,請求的UA過濾,靜態資源過濾等。 Rewrite過濾能自動生成Rewrite規則,并迭代得過濾庫存的CGI。
3.2、Pv_Bolt
Storm- Cgi系統讀取的數據源包括了旁路的HTTP請求日志,在一段時間間隔內,必定有大量重復請求的CGI數據,這些數據其實只需要一個CGI走后續的過濾流 程即可,避免重復CGI過濾帶來的資源耗損。所以,Pv_Bolt模塊的作用是攔截重復的CGI數據,起到降流去重的作用。數據顯示,5分鐘內,一個 CGI被重復請求的次數有時可高達3萬多次,平均10ms就被請求一次。
Pv_Bolt就是CGI的統計 緩存,緩存中統計了一個CGI在一段時間內的PV值和緩存它時的時間戳。該緩存中的CGI采用的淘汰算法為最近最少使用算法(LRU),將一段時間內PV 小于3的CGI清理出去,避免緩存過大導致內存耗盡。同時,根據時間戳,將時間戳超過一定閾值的CGI也清理掉。這樣,保證了CGI數據不會因后續流程故 障等原因導致遺漏。
3.3、HttpAccess_Bolt
HttpAccess_Bolt 的主要功能是對CGI進行HTTP探測過濾,探測一個CGI是否存在,即存在性驗證。一個CGI的返回碼HttpCode為404表示該CGI不存在,可 以被過濾掉。還包括其他類型的CGI存在性驗證過濾。比如公司不存在的頁面都引用了一個公益404頁面,這種CGI也可別過濾掉。
HTTP探測過濾的規則可配置,能動態加載。過濾規則為一個JSON字符串。形式如圖二所示
HTTP 探過濾規則的設計,能支持全局過濾規則和特定域名的過濾規則兩種,目前通用的HTTP探測規則主要有:公益404,圖片404,HttpCode過濾等。 HTTP探測過濾規則中最主要的是rule字段,它由多個規則子項組成,各規則子項是邏輯與的關系。只有當所有規則子項都為真時,該條HTTP探測規律規 則才匹配。匹配了過濾規則的CGI將認為不存在,將被過濾掉。公益404頁面的過濾規則可寫成圖三形式:
4、效果
目前,Storm-Cgi是由分布在不同IDC機房的13臺機器組成的小分布式集群,每天可處理2T左右的日志文件,每天平均過濾4億個CGI數據,從中采集到5萬左右準確的CGI(部分CGI在CGI庫中已經存在)。
5、總結
Storm- Cgi能從大量的數據中實時地采集出海量的CGI數據,并通過合法性過濾,Rewrite過濾,HTTP探測過濾,最終得到準確的CGI數據,供Web漏 洞掃描器做安全漏洞掃描。它好比Web漏洞掃描器的眼睛,能讓Web漏洞掃描器透過海量臟的URL數據,看到真實準確的CGI,從而發現Web安全漏洞, 使漏洞無處遁形。