0x00 前言:

事情源於之前不太認真的認真回答,見:知乎使用者:NLP 在威脅情報中有哪些應用?,於是乎就有人私信問了,實際上對於這一部分我也是剛剛才開始接觸,至於這個需求是怎麼來的,實際上有兩個原因,第一個原因是因為boss的強迫症:告警推送全都是要求用自然語言表達,第二個原因是因為威脅情報的分類問題,我們在捕獲威脅情報的時候,共識是使用爬蟲去爬取有對應訊息的源(源這裡實際上是經過篩選的,篩選的過程等以後有時間再說),這個時候問題就來了,國內的源要麼訊息滯後要麼不提供RSS的介面(xx廠商為首),而國外的源相反,訊息更新的很快,有RSS和郵件推送,甚至有些資訊做到了json推送,這個時候另一個問題就來了,推送個英語過來的還好,這要是推送個思密達這種,沒有語言功底的人還確實看不懂,所以這個時候想到了用NLP(自然語言處理)來解決情報處理的問題。

0x01 確定要收集的資訊:

我們現在假設這樣一個場景:老大讓你收集一些關鍵元件的漏洞披露情況,如果有高風險的話,立馬透過IM、郵件的形式推送到老大的面前。拋開規劃不談,這種針對特定元件的漏洞收集工作實際上是比較繁瑣的一件事兒,因為你也不知道什麼時候爆發什麼漏洞,但是我們還是有些特定的收集技巧,我們按照披露的灰度來對源進行分類:

漏洞發現過程:這個時候最好的選擇是oss-sec下面的bugtraq和oss mailing-list,或者是openwall mailing-list,如果你曾經給redhat這種提交過漏洞,也可以混到他們的郵件列表中去獲取相對應的情報資訊

漏洞披露之後:最直接的方法是直接去爬去每天更新的cve列表,mitre有介面可以操作

完成這個過程之後,實際上你就可以去編寫爬蟲了,至於編寫爬蟲的過程,略,大概爬完就是這種效果:

{

“id”

“CVE-2018-6439”

“cvss”

{},

“seen_wild”

false

“date_created”

“2018-12-03T00:00:00”

“description”

“A Vulnerability in the configdownload command of Brocade Fabric OS command line interface (CLI) versions before 8。2。1, 8。1。2f, 8。0。2f, 7。4。2d could allow a local attacker to escape the restricted shell and, gain root access。”

“reference”

{

“name”

“https://www。broadcom。com/support/fibre-channel-networking/security-advisories/brocade-security-advisory-2018-730”

“type”

“UNKNOWN”

“external_source”

“CONFIRM”

“href”

“https://www。broadcom。com/support/fibre-channel-networking/security-advisories/brocade-security-advisory-2018-730”

}

],

“products”

[],

“mitre”

“https://cve。mitre。org/cgi-bin/cvename。cgi?name=CVE-2018-6439”

“exploit”

[]

}

0x02 機讀轉人讀

這個時候你就能大概瞭解到了這個漏洞的一些資訊,but,你只知道了這個漏洞的資訊,但是你並不知道這個漏洞是否值得響應,那麼什麼樣的漏洞資訊值得你去響應呢,一般情況下這個值得響應是跟資產相關、漏洞危害、在野利用、是否披露等多個方面進行評估之後才能得出是否需要修復的決策的,這顯然不是威脅情報生產團隊需要考慮的(畢竟有幹實事兒的SRC存在),但是情報側要提供資訊可以幫助他們決策,以上面這個漏洞而言,我們需要關注的是描述這裡:

A Vulnerability in the configdownload command of Brocade Fabric OS command line interface (CLI) versions before 8。2。1, 8。1。2f, 8。0。2f, 7。4。2d could allow a local attacker to escape the restricted shell and, gain root access。

我們在這裡使用自動化的方法完成對這段話的處理,處理的目的在於:

(1)提高情報的可運營效率,也就是說人話讓運營人員能操作

(2)提高情報指向性,方便運營人員排查資產是否受影響

(3)聯動IM,提高情報推送的及時性

(4)也可以和資產系統進行聯動,確定受影響的元件範圍,降低修復漏洞的SLA

我們使用簡單的分詞結合之前使用cpe和cwe等資料作為訓練樣本獲得的資料對漏洞告警資訊進行處理,並且將告警資訊漢化,舉個例子:

# coding: utf-8

import

nltk

import

mtranslate

from

nltk。tag

import

pos_tag_sents

fintels

=

[]

vul_describes

=

json

loads

cve_spider_list

for

vul_describe

in

vul_describes

chn_u

=

mtranslate

translate

vul_describe

“description”

],

“zh-cn”

words

=

nltk

word_tokenize

vul_describe

“description”

])

affect_list

=

mach_learn

cpe_list_sample

())

# 訓練樣本返回的元件名稱規則

version_list

=

mach_learn

cpe_version_sample

())

# 訓練樣本返回的元件版本規則

severity_list

=

mach_learn

severity_sample

())

# 訓練樣本返回的漏洞型別規則

res

=

nltk

tag

pos_tag

words

affect

=

“”

version

=

[]

severity_list

=

[]

for

word

pos

in

res

if

pos

in

affect_list

t_words

=

word

+

“ ”

affect

+=

t_words

elif

pos

in

version_list

version

append

word

elif

pos

in

severity_list

severity_list

append

word

fintel

=

{

“description”

chn_u

“affect”

affect

“version”

version

“reference”

vul_describe

“reference”

],

“cve_id”

vul_describe

“cve_id”

],

“severity”

severity_list

}

fintels

append

fintel

print

fintel

處理過後得到的資訊就變得簡單多了:

NLP從入門到放棄——處理威脅情報

OK,這個時候,我們就可以聯動IM了,因為各家IM都不盡相同,所以這個就看各家的SDK就能解決這個問題,最後推送的效果呢就是這樣:

NLP從入門到放棄——處理威脅情報

這樣,安全運營人員就可以根據你的情報進行響應了。

0x03 小結:

以上的問題其實從操作的角度上來看並不難操作,關鍵是在於NLP技術如何幫助去自動化處理一些威脅情報資訊來方便人去運營,畢竟情報收集很大一定程度上都是根據公開的資訊,有很多情況下都是需要去處理海量的資訊,這個時候自動化識別、NLP、OCR這些技術就能夠提高我們的處理效率,減少因為情報造成的時機延誤。畢竟運營哥哥和姐姐也是很辛苦的,掃描器、監控、IDS這些東西都會告警,都要去響應,這時候你要是再給他來一堆不能響應的情報,他會拿一把40米長的大刀然後讓你先跑39米。

另外打一個小廣告,我和幾個朋友建了個威脅情報技術和運營的交流群,歡迎甲方的安全情報運營人員和乙方的威脅情報分析大佬們加入(現在已經有一些一線網際網路廠商的大佬和top1、2、3威脅情報廠商的資深分析師入住),由於小弟最近有點忙,只要看到了就會同意進群,數量有限。如果看不到二維碼的話,微信搜尋elknot即可,加的時候麻煩備註一下id和所在企業,因為是機器人稽核所以是自動的。

https://

u。wechat。com/MBlOyYc9Mv

lmUqVVxBp3kmc

(二維碼自動識別)