企業安全怎麼建設?企業安全性漏洞通告引擎。 如今大多數企業都在用漏洞掃描+漏洞通告,存在如下兩個問題:
1. 漏掃存在「掃描週期長、掃描庫更新不及時」等情況,同時掃描報告中有無數干擾項,導致了漏掃報告約等於「漏洞資訊堆砌」,真正有用的可能沒幾個,而讓甲方運維人員從中找到有用的資訊,真是異常耗時耗力。
2. 安全廠商的漏洞通告是「只通知,具體影響那台伺服器,運維自己找去吧。 」
由以上兩個痛點,我們想出來一個二者結合的用法:通過各種方法收集到所有伺服器當前的中介軟體、資料庫等版本,再通過資產清單匹配到相應伺服器的運維人員郵箱,最後再到靠譜的安全廠商漏洞公告網站抓到最新的漏洞資訊以及影響範圍,一旦「 當前版本」處於「影響版本」範圍內,則立即進行郵件告警。
0×01 整體框架
整體分為輸入、主引擎以及輸出三個部分。
1. 輸入部分:
a) 版本探測:針對伺服器各應用的版本探測掃描、不便於掃描的區域進行手工檢查版本並錄入
b) 爬蟲:選出多家安全廠商,通過其安全性漏洞公告的網站進行每日(或更高頻次)漏洞資訊抓取
2. 主引擎部分:
a) Python:真心好用
b) 資料庫:制定「應用-IP-版本-管理員」表
c) 版本比較:通過比較漏洞影響範圍&當前應用版本,來判斷是否存在安全問題
d) 最新漏洞告警:定時任務運行(每日一次或更高頻次),以自動探索最新的安全性漏洞
3. 輸出部分:
根據「應用-IP-版本-管理員」的對應關係,自動將相應的應用漏洞發送給相應的運維管理員,實現較為精准的自動化漏洞通告&新漏洞預警。
0×02 輸入部分
這裡有多種方式來實現版本的自動掃描,如Nessus、各廠家的漏掃等等,由於應用版本更新頻率低,漏洞更新頻率高,故而通過每個月一次的掃描可以較為準確地獲得當前可探測到的伺服器中所運行的應用版本。 另外需要製作出「應用-IP-版本-管理員」的對應關係,以便發現最新漏洞後通知給相應應用的負責人。
2.1 製作「應用- IP-版本」對應關係表(表名為apps)
首先需要定位「版本資訊」所在位置,通過漏掃匯出的excel主機報表可以發現,僅在「掃描報告-漏洞資訊sheet-返回資訊列」可能會包含版本資訊(如下圖),故想辦法定位到指定sheet+指定列,從而使用正則獲取到形如[ Microsoft-IIS/8.5]中的資訊
這裡會用到pyexcel_xls,該模組可以讀取excel表中資訊,如下。
#從excel中讀出漏洞資訊這個sheet
vulList = xls_data[u'漏洞資訊']
#設置一個去重的集合,存放當前IP的app和version
currentIPApps = set()
#從第二行開始讀
for i in range(1,len(vulList),1):
#取excel表中第4列的漏洞描述和第14列的版本資訊
#print vulList[i]
name = vulList[i][3]
try:
version = vulList[i][13]
if "/" in version:
if ("[" in version) and ("]" in version):
version_tmp = re.findall("\[(\w+.*/\d+.*)]",version)
之後再通過細細微性的正則和各種奇葩內容的排除後,得到當前版本資訊,如nginx 1.8.1,存到資料庫待用。
每次掃描都會有大量的主機報表產生(如下圖)
此時需要逐個遍歷目錄中的所有檔:
def GetFileList(dir, fileList):
newDir = dir
if os.path.isfile(dir):
fileList.append(dir.decode('gbk'))
elif os.path.isdir(dir):
for s in os.listdir(dir):
# 如果需要忽略某些資料夾,使用以下代碼
# if s == "xxx":
# continue
newDir = os.path.join(dir, s)
GetFileList(newDir, fileList)
return fileList
於是通過目錄遍歷+excel遍歷後,應用- IP-版本的對應關係就搞定了。
2.2 完善「應用-IP-版本-管理員關係對應表」
有了上面的表還不夠,即使有漏洞通告,無法自動落實到人,也是空談。 於是要將IP-管理員的對應關係加入進來。
此時我們需要先要有資訊系統資產表,其中至少應包括「IP-管理員」(如下圖)
再根據每次遍歷掃描結果輸出目錄中的報表IP作為查詢準則,進行資產表查詢,將獲取到的管理員名稱添加到「apps」表中的對應位置,製作完畢後如下圖所示,資產輸入部分完畢。
2.3 漏洞公告網站爬蟲
爬蟲的目的:抓到所有應用名稱的漏洞資訊&影響範圍。
爬蟲示例:綠盟漏洞公告爬蟲