劉 岳,張海峰,張 良,楊秉杰,邊 帥
(國家互聯(lián)網(wǎng)應(yīng)急中心河南分中心,河南 鄭州 450000)
在日常開展的網(wǎng)絡(luò)安全測試工作中,網(wǎng)絡(luò)安全工作人員經(jīng)常接觸到來自各個渠道、自行編寫或同行分享的測試工具代碼。因為工具代碼使用在某些方面存在效率瓶頸,影響了日常工作開展的質(zhì)量和效率。其中包括:
(1)在實際使用POC進(jìn)行測試的時候,代碼的編寫者一般有自有習(xí)慣,不太明確應(yīng)當(dāng)傳入怎樣的參數(shù),各參數(shù)采取怎樣的格式。因為通常不會附帶詳細(xì)的文檔說明,往往需要進(jìn)行很多嘗試,降低了效率。
(2)在實際使用POC進(jìn)行測試的時候,對于該P(yáng)OC將達(dá)到怎樣的效果不明確,不知道返回的結(jié)果會采取怎樣的格式,且返回的信息不夠詳細(xì)。
(3)由于各個POC的輸入、輸出情況不明確,不同的POC之間無法進(jìn)行互操作,如很難將不同POC連接使用來完成測試目標(biāo),難以自動使一個POC的輸出成為另一個POC的輸入,無法實現(xiàn)自動化測試。
(4)多個工作人員一起進(jìn)行滲透測試協(xié)作時常有較多不便,一名測試人員測試得到的結(jié)果必須詳細(xì)向另一名測試人員描述,如已經(jīng)在目標(biāo)主機(jī)上上傳腳本,但所上傳目錄沒有執(zhí)行權(quán)限,需要另一名測試人員進(jìn)行提權(quán)或者移動腳本至其他目錄。測試人員無法系統(tǒng)化描述其測試的中間結(jié)果,只能使用低效的口頭描述方式。
網(wǎng)絡(luò)安全滲透測試工作由于以上的一些效率瓶頸,事實上還處在手動進(jìn)行、各自為戰(zhàn)的工作協(xié)作狀態(tài),已完成的測試工作只能通過語言描述,效率較低。本文擬提出一種基于STIX信息交互的滲透測試協(xié)作方案,可有效提高滲透測試工作的標(biāo)準(zhǔn)化、規(guī)范化程度,并可一定程度上實現(xiàn)自動化測試。
結(jié)構(gòu)化威脅信息表達(dá)式(Structured Threat Information eXxpression, STIX)是結(jié)構(gòu)化信息標(biāo)準(zhǔn)促進(jìn)組織(Organization for the Advancement of Structured Information Standards,OASIS)的網(wǎng)絡(luò)威脅情報技術(shù)委員會(Cyber Threat Intelligence Technical Committee,CTITC)通過的用于機(jī)器可讀威脅情報(Machine-Readable Threat Intelligence,MRTI)的實時信息共享的委員會規(guī)范。
STIX 2.0是個概念性數(shù)據(jù)模型,用于描述攻擊指標(biāo)(IOC),凸顯網(wǎng)絡(luò)攻擊序列中可影響技術(shù)棧的其他各種元素。包括攻擊者所用戰(zhàn)術(shù)、技術(shù)和規(guī)程(TTP),威脅執(zhí)行者的潛在動機(jī)和意圖、惡意軟件屬性,受害目標(biāo)確定的各種特征以及其他元素。
STIX 2.0的主體架構(gòu)是一個由節(jié)點和邊組成的圖,“節(jié)點”是Domain Objects(SDOs),“邊”是Relationship Objects(SROs)。SDO描述了網(wǎng)絡(luò)安全攻擊情報的方方面面,包括Campaign、Identity、Indicator、Malware、Intrusion Set、Vulnerability等。SROs描述了SDO之間的關(guān)系,包括Relationship、Sighting。
一種SDO類別Observed Data提供了對各種可以被觀察到的對象的結(jié)構(gòu)化描述,其中包括了大部分IOC指標(biāo)中所涉及的數(shù)據(jù)類型,如域名、IP地址、目錄、文件、進(jìn)程、注冊表項、證書等。每一種類型的Observed Object都擁有一定數(shù)量的基本屬性和擴(kuò)展屬性(extensions)。
STIX具有高度的可擴(kuò)展性,如Observed Data可以進(jìn)行基于對象(Custom Observable Objects)、基于擴(kuò)展(Custom Object Extensions)和基于屬性(Custom Object Properties)的定制。
STIX 2.0將網(wǎng)絡(luò)攻擊情報和IOC用SDO及SRO進(jìn)行系統(tǒng)性的描述,然后通過標(biāo)準(zhǔn)格式使用XML或者JSON承載,生成文件在公司和組織之間完成網(wǎng)絡(luò)安全威脅信息交互的功能。
本文提出的基于STIX信息交互的滲透測試協(xié)作方案,可以有效解決上述工作中的效率瓶頸問題,旨在建立一個高效普適的滲透測試協(xié)作系統(tǒng),該系統(tǒng)如圖1所示,由中央控制單元以及與中央控制單元相接口的滲透測試人員和自動化測試軟件組成。中央控制單元與測試人員和測試軟件都通過基于STIX的滲透測試描述文檔進(jìn)行交互,即中央控制單元向測試人員和測試軟件都可以發(fā)送“測試任務(wù)書”,也可以從后者獲取“測試結(jié)果報告”,“測試任務(wù)書”和“測試結(jié)果報告”都是基于STIX的XML文檔(在本文中稱為PEN_STIX文檔),測試人員之間和測試軟件之間可通過中央控制單元進(jìn)行交互。此方案中將測試人員和測試軟件作為同等的測試單元,每個測試單元所完成的工作都通過基于PEN_STIX文檔記錄,具有某方面特長的滲透測試人員可以獲取適合他的“測試任務(wù)書”完成某個測試環(huán)節(jié),實現(xiàn)滲透測試工作的流水線化作業(yè),提升測試效率。
圖1
為完成流水線化作業(yè),必須解決測試單元的信息交互問題。信息交互的場景可能發(fā)生在以下的幾種情況:
(1)所編寫的針對某一類漏洞的測試工具,對此工具提供必要的信息進(jìn)行調(diào)用,調(diào)用者可能是測試人員或者其他測試軟件,因此發(fā)生人對軟件或者軟件對軟件的信息交互。
(2)所編寫的針對某一類漏洞的測試工具,執(zhí)行完成后得到的結(jié)果,需要供外界使用,使用者可能為測試人員或者其他測試軟件,因此發(fā)生軟件對人或者軟件對軟件的信息交互。
(3)不同的測試人員進(jìn)行測試協(xié)作,可能是某種形式的眾測,測試進(jìn)行到某一步驟的中間信息可能需要互相交流,此時發(fā)生人與人之間的信息交互。
(4)實現(xiàn)某種形式的測試平臺時,可能會由平臺調(diào)用眾多不同的滲透測試代碼,因此平臺需要將目標(biāo)主機(jī)信息傳送到測試代碼,此時發(fā)生軟件與軟件的信息交互。
眾多信息交互場景需要一種系統(tǒng)性的描述測試信息的方式,可以消除歧義,也可以消除安全人員隨手寫下測試腳本的隨意性。
STIX本身即是一種標(biāo)準(zhǔn)化傳輸威脅信息的方式,其定義的類別Observed Data可以用來傳輸各種滲透測試中所需要使用的數(shù)據(jù),但是標(biāo)準(zhǔn)中定義的類型和屬性有限,必須使用其支持的擴(kuò)展定制功能進(jìn)行擴(kuò)展,以滿足實際滲透測試的需求。
方案繼續(xù)利用Directory、Domain Name、File、IPv4 Address、IPv6 Address、MAC Address、Email Address、Email Message、Network Traffic(包含HTTP、ICMP、TCP等多個擴(kuò)展,表示網(wǎng)絡(luò)請求、網(wǎng)絡(luò)訪問情況等)、Process、Software、User Account、URL、Registry、Certificate等。
為更加適合滲透測試需要進(jìn)行一些定制。如增加Network Service表示目標(biāo)服務(wù)器上存在的網(wǎng)絡(luò)服務(wù)如SSH、FTP等。在User Account中增加SSH等服務(wù)相應(yīng)的extension。增加Database表示主流數(shù)據(jù)庫系統(tǒng)。IPv4 Address中增加Port屬性,并增加兩種Observed Object:IPv4 Range和IPv4 CIDR,分別表示普通的IP地址段和CIDR形式的IP地址段等。具體情況如表1所示。
表1 添加定制
如下代碼段為給某次測試的輸入信息,包括目標(biāo)主機(jī)IP及主機(jī)上運(yùn)行服務(wù)的信息。
[
{
"type":"observed-data",
"id":"observed-data--b67d30ff-02ac-498a-92f9-32f845f448cf",
"created_by_ref":"identity--f431f809-377b-45e0-aa1c-6a4751cae5ff",
"created":"2018-10-29T15:58:16.000Z",
"modified":"2018-10-29T15:58:16.000Z",
"objects":{
"0":{
"type":" ipv4-range",
"value":"198.51.100.15-198.51.100.23",
"port":"8080",
"description":"待測試主機(jī)IP地址"
}
"1":{
"type":"Network Service",
"value":"Weblogic",
"port":"8080",
"description":"待測試主機(jī)運(yùn)行服務(wù)信息"
}
}
}
]
如下代碼段為測試的輸出信息,如在服務(wù)器某路徑上傳腳本及檢測到服務(wù)器上運(yùn)行FTP服務(wù)等。
[
{
"type":"observed-data",
"id":"observed-data--b67d30ff-02ac-498a-92f9-32f845f448cf",
"created_by_ref":"identity--f431f809-377b-45e0-aa1c-6a4751cae5ff",
"created":"2018-10-29T16:10:16.000Z",
"modified":"2018-10-29T16:10:16.000Z",
"objects":{
"0":{
"type":" ipv4 address",
"value":"198.51.100.19",
"port":"8080",
"description":"測試輸出相關(guān)IP地址"
}
"1":{
"type":"URL",
"value":"http://198.51.100.19:8080/bea_wls_internal/abc.jsp",
"description":"上傳后門腳本"
}
"2":{
"type":"Network Service",
"value":"FTP",
"port":"4400",
"ip_ref":"0",
"description":"目標(biāo)主機(jī)存在FTP服務(wù)"
}
"3":{
"type":"file",
"hashes":{
"SHA-256":"35a01331e9ad96f751278b891 b6ea09699806faedfa237d40513d92ad1b7128f"
},
"extensions":{
"script-ext":{
"type":"jsp",
"url_ref":"1",
"path":"/var/aaa/bbb/abc.jsp"
"description":"后門腳本物理路徑"
}
}
}
}
}
]
如上示例的輸入信息可用于測試人員之間的信息交流,亦可輸入測試IOC,由測試IOC選取必需的目標(biāo)參數(shù)進(jìn)行測試。而輸出的信息可作為中間信息傳遞給其他測試人員,亦可傳入另外的測試腳本。
Github上有python-stix和java-stix等STIX規(guī)范的實現(xiàn),對代碼加以修改,添加對定制對象和屬性的支持,即可實現(xiàn)PEN_STIX文檔的生成和讀取;將代碼封裝成為庫函數(shù)import_module和export_module。import_module負(fù)責(zé)解讀PEN_STIX文檔,解析為輸入?yún)?shù)集合;export_module負(fù)責(zé)生成PEN_STIX文檔,將測試工作完成所得結(jié)果元數(shù)據(jù)表達(dá)為PEN_STIX文檔。具體可分為測試代碼和測試人員兩種情況:
(1)對測試代碼情況,為使測試代碼可以使用STIX方式獲取傳入數(shù)據(jù),需在測試代碼入口處使用import_module,解析傳入的PEN_STIX文檔,即獲得了此測試任務(wù)的全部輸入?yún)?shù),且這些輸入?yún)?shù)全部是標(biāo)準(zhǔn)格式。測試代碼選取其需要的參數(shù)進(jìn)行測試工作,得到結(jié)果后,在程序的出口處使用export_module,將結(jié)果記錄在PEN_STIX文檔,供下一步測試使用。
(2)對測試人員情況,測試人員可自行讀取PEN_STIX文檔,或者使用import_module編寫簡單的讀取工具,來獲取此測試任務(wù)的全部輸入?yún)?shù),并使用這些參數(shù)進(jìn)行測試。在測試完成后,測試人員可以使用export_module編寫簡單的生成工具,將自己在測試中所發(fā)現(xiàn)的或者完成的工作記錄為PEN_STIX文檔,供下一步測試使用。
中央控制單元按照測試項目的工作規(guī)劃使用import_module和export_module將測試任務(wù)表達(dá)為PEN_STIX文檔,根據(jù)任務(wù)特征將文檔分別發(fā)往測試軟件和測試人員,測試人員反饋的PEN_STIX文檔如包含了新發(fā)現(xiàn)的服務(wù)器或系統(tǒng)應(yīng)用,即可根據(jù)這些特征將PEN_STIX文檔派發(fā)給相應(yīng)的測試軟件。如果某個測試人員沒有得到最終結(jié)果而只是中間結(jié)果,即可將反饋的PEN_STIX文檔派發(fā)給其他測試人員和測試軟件。如此循環(huán),可高效協(xié)作完成測試任務(wù)。
本文提出了一個基于STIX信息交互的滲透測試協(xié)作方案,該方案利用STIX威脅情報標(biāo)準(zhǔn)交換格式,添加適合滲透測試工作場景的定制對象和屬性等,制定了一種進(jìn)行滲透測試工作時的完善、高效、準(zhǔn)確的信息交換方式,利用該方式既便于滲透測試人員對測試工具的使用,便于測試POC使用其他測試工具產(chǎn)生的測試結(jié)果,也便于測試人員之間的信息交互,可有效提高滲透測試工作的效率。