博文作者:雕哥
釋出日期:2014-01-09
閱讀次數:56
博文内容:
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系統的整體架構如下圖一所示。
圖一 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探過濾規則的設計,能支援全局過濾規則和特定域名的過濾規則兩種,目前通用的HTTP探測規則主要有:公益404,圖檔404,HttpCode過濾等。HTTP探測過濾規則中最主要的是rule字段,它由多個規則子項組成,各規則子項是邏輯與的關系。隻有當所有規則子項都為真時,該條HTTP探測規律規則才比對。比對了過濾規則的CGI将認為不存在,将被過濾掉。公益404頁面的過濾規則可寫成圖三形式:
圖三 公益404過濾規則
4、效果
目前,Storm-Cgi是由分布在不同IDC機房的13台機器組成的小分布式叢集,每天可處理2T左右的日志檔案,每天平均過濾4億個CGI資料,從中采集到5萬左右準确的CGI(部分CGI在CGI庫中已經存在)。整體效果如下圖。
圖四 Storm-Cgi分布式叢集清單
圖五 Storm-Cgi各元件過濾情況
5、總結
Storm-Cgi能從大量的資料中實時地采集出海量的CGI資料,并通過合法性過濾,Rewrite過濾,HTTP探測過濾,最終得到準确的CGI資料,供Web漏洞掃描器做安全漏洞掃描。它好比Web漏洞掃描器的眼睛,能讓Web漏洞掃描器透過海量髒的URL資料,看到真實準确的CGI,進而發現Web安全漏洞,使漏洞無處遁形。