企業安全漏洞通告引擎
*本文原創作者:RipZ,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載
背景
如今大多數企業都在用漏洞掃描+漏洞通告,存在如下兩個問題:
1、漏掃存在「掃描周期長、掃描庫更新不及時」等情況,同時掃描報告中有無數干擾項,導致了漏掃報告約等於「漏洞信息堆砌」,真正有用的可能沒幾個,而讓甲方運維人員從中找到有用的信息,真是異常耗時耗力。
2、安全廠商的漏洞通告是「只通知,具體影響那台伺服器,運維自己找去吧。」
由以上兩個痛點,我們想出來一個二者結合的用法:
通過各種方法收集到所有伺服器當前的中間件、資料庫等版本,再通過資產列表匹配到相應伺服器的運維人員郵箱,最後再到靠譜的安全廠商漏洞公告網站抓到最新的漏洞資訊以及影響範圍,一旦「當前版本」處於「影響版本」範圍內,則立即進行郵件告警。
整體框架
整體分為輸入、主引擎以及輸出三個部分。
1、輸入部分
a) 版本探測:針對伺服器各應用的版本探測掃描、不便於掃描的區域進行手工檢查版本並錄入
b) 爬蟲:選出多家安全廠商,通過其安全漏洞公告的網站進行每日(或更高頻次)漏洞信息抓取
2、主引擎部分
a) Python:真心好用
b) 資料庫:制定「應用-IP-版本-管理員」表
c) 版本比較:通過比較漏洞影響範圍&當前應用版本,來判斷是否存在安全問題
d) 最新漏洞告警:定時任務運行(每日一次或更高頻次),以自動發現最新的安全漏洞
3、輸出部分
根據「應用-IP-版本-管理員」的對應關係,自動將相應的應用漏洞發送給相應的運維管理員,實現較為精準的自動化漏洞通告&新漏洞預警。
輸入部分
這裡有多種方式來實現版本的自動掃描,如Nessus、各廠家的漏掃等等。
由於應用版本更新頻率低,漏洞更新頻率高,故而通過每個月一次的掃描可以較為準確地獲得當前可探測到的伺服器中所運行的應用版本。
另外需要製作出「應用-IP-版本-管理員」的對應關係,以便發現最新漏洞後通知給相應應用的負責人。
1、製作「應用- IP-版本」對應關係表(表名為apps)
首先需要定位「版本信息」所在位置,通過漏掃導出的excel主機報表可以發現,僅在「掃描報告-漏洞信息sheet-返回信息列」可能會包含版本信息(如下圖)。
故想辦法定位到指定sheet+指定列,從而使用正則獲取到形如[Microsoft-IIS/8.5]中的信息
這裡會用到pyexcel_xls,該模塊可以讀取excel表中信息,如下。
之後再通過細粒度的正則和各種奇葩內容的排除後,得到當前版本信息,如nginx 1.8.1,存到資料庫待用。
每次掃描都會有大量的主機報表產生(如下圖)
此時需要逐個遍歷目錄中的所有文件:
於是通過目錄遍歷+excel遍歷後,應用- IP-版本的對應關係就搞定了。
2、完善「應用-IP-版本-管理員關係對應表」
有了上面的表還不夠,即使有漏洞通告,無法自動落實到人,也是空談。於是要將IP-管理員的對應關係加入進來。
此時我們需要先要有信息系統資產表,其中至少應包括「IP-管理員」(如下圖)
再根據每次遍歷掃描結果輸出目錄中的報表IP作為查詢條件,進行資產表查詢,將獲取到的管理員名稱添加到「apps」表中的對應位置,製作完畢後如下圖所示,資產輸入部分完畢。
3、漏洞公告網站爬蟲
爬蟲的目的:抓到所有應用名稱的漏洞信息&影響範圍。
爬蟲示例:
綠盟漏洞公告爬蟲
思路:
1、在keyword的參數值處提交當前系統環境中所具備的應用名稱
2、利用urllib(或urllib2)抓到所有頁面的應用漏洞信息
3、可能存在多頁記錄,每一頁都遍歷全
4、把所有抓到的標題做匯總,得到「漏洞標題+漏洞超鏈接」的list
5、遍歷list,將同時存在「應用名稱」和「遠程命令執行」(或者遠程拒絕服務)這一類高危漏洞篩選出來。
6、如果「xxx漏洞」符合步驟e中的篩選條件,則進一步用爬蟲抓取「xxx漏洞」中的漏洞詳情信息(標題、受影響版本、描述、建議等),如「nginx文件路徑處理遠程命令執行漏洞」,相應頁面URL為
http://www.nsfocus.net/vulndb/15077
7、 使用正則獲取「受影響系統」中的版本信息(如下圖),備用來比較。
9、使用正則獲取「受影響系統」中版本信息前面的符號,(如『<』『-』『<=』『=』等,見下列多圖),這一步很關鍵,為引擎的判斷來做最基本的正確性保障。
至此,受影響版本的獲取已經搞定,綠盟的爬蟲也製作完畢。
引擎部分
引擎主體包括版本比較與最新漏洞通告兩個部分。
1、版本比較
在上一步中我們已經用爬蟲獲取到了「指定應用、指定危害描述」的漏洞信息以及受影響版本,在主引擎中我們要做版本比對:
如果「當前應用版本」小於或等於「受影響範圍」中的版本,則可能存在該漏洞。
在版本比較中遇到的問題是1.1和1.2這兩個float可以比較,但是1.1.1和1.1.2怎麼比較呢?
逛了各種論壇找到了distutils.version模塊,可以輕鬆進行版本比對,實現起來非常簡單。
示例:
如果ab返回1。以此方法比較後,對於返回0和-1的漏洞就可以準備著手進行通告處理了。
2、 最新漏洞通告
既然為最新漏洞通告,則舊的漏洞不應再次提示,至少對於該模塊下來說不應再次提示。
同時新建一個表格存放當前已經通告過「某某IP存在xx漏洞」,此後再跑程序的時候先判斷這個表裡的time次數,如果為1,就不會再重複通告。
一旦某天出現了重大信息安全漏洞(比如Struts2),漏洞檢索引擎會爬取到廠商的公開信息並及時發送告警。
輸出部分
輸出這部分目前只有郵件告警,在有符合條件的漏洞出現後,直接將漏洞郵件發送給步驟2.2中已經制定的對應表中的管理員,郵件內容如下所示。
Bug
在處理遺留漏洞方面,該引擎只能通過版本比較來發現漏洞,而通過打補丁、改配置文件等方式修復的漏洞可能還會重新被通告。
比如當前環境中有IIS 7.0,公開漏洞信息中提示的影響範圍是IIS 7.0,但是管理員打了補丁,此時依舊會通告該漏洞。
總結
對於新增漏洞來說,該引擎較為好用,然而對於舊的漏洞來說,效果一般。
希望安全廠商能夠在研發掃描器上多一些可定製的靈活性,避免出現「漏洞堆砌」類的無用消息,更好地提供安全掃描工具。
*本文原創作者:RipZ,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載


※【周五預告】FreeBuf.公開課 | 行業資深律師為你解讀《網路安全法》對白帽子的影響
※成人網站PornHub跨站腳本(XSS)漏洞挖掘記
※【新手科普】盤點常見的Web後門
※FreeTalk安全沙龍 | 全國巡演議題徵集
※一種結合了點擊劫持、Self-XSS、複製粘貼劫持的新型XSS攻擊
TAG:FreeBuf |
※凌通的通告
※成都警方發布通告 加強雙流機場凈空區域安全保護
※省防指發布汛情通告
※石河子市公安局交警支隊關於開放科目三社會化考場的通告
※中方發布安全通告設禁飛區 或是中國再次反導測試
※蠕蟲病毒攻擊 緊急安全預警通告
※中國外交部通告警惕假冒駐外使館的詐騙電話
※通告:總局關於第5批次中藥飲片不合格通告
※食葯監總局通告1批醫療器械產品不符合標準
※關於舉行天師府頭門上樑儀式的通告
※淮安市食葯監局通告1批次不合格椒鹽西瓜子風險控制情況
※登機前安檢將升級!針對所有飛往美國的商業航班,國安部發安全通告
※模特、演員通告!超多靠譜通告信息匯總!
※Petya勒索病毒安全預警通告
※天津市市場監管委通告高樂高食品有限公司不合格食品風險控制情況
※廣州市環境保護局 廣州市公安局 廣州市交通委員會關於在全市限制高污染汽車通行的通告
※國家食葯監總局通告5批次食品不合格
※食葯監總局通告2批次食品不合格
※嶗山太清宮方丈升座暨全真派道士傳戒活動通告