以Volodya惡意組織為例談一談如何通過查找惡意開發(fā)者的線索來尋找漏洞(上)
在過去的幾個月中,checkpoint公司的漏洞和惡意軟件研究團(tuán)隊共同專注于對惡意軟件內(nèi)部的漏洞利用,尤其是漏洞利用開發(fā)者本身的研究。本文會從一個事件響應(yīng)示例開始,構(gòu)建一個最全面的Windows開發(fā)者分析,本文研究人員將這些黑客統(tǒng)稱為“Volodya”或“BuggiCorp”。有研究人員發(fā)現(xiàn)黑客Volodya是零日漏洞最多產(chǎn)的供應(yīng)商之一,Volodya也被稱為BuggiCorp??ò退够?015年以來一直在跟蹤Volodya,他是一個多產(chǎn)的開發(fā)者和零日漏洞賣家。Volodya是“volo”的縮寫,這個昵稱經(jīng)常出現(xiàn)在他的開發(fā)一些惡意軟件中,根據(jù)追蹤分析,他很有可能是烏克蘭人。
另外Volodya似乎是CVE-2019-0859漏洞的開發(fā)者,這個漏洞被網(wǎng)絡(luò)犯罪集團(tuán)用于金融盜竊。Volodya開發(fā)的另一個漏洞CVE-2016-7255,曾被著名的俄羅斯APT組織FancyBear(也稱為APT28、PawnStorm、Sednit、Sofacy或Strontium)使用。卡巴斯基的研究人員表示,黑客還與中低端網(wǎng)絡(luò)犯罪組織合作,這些組織一直在購買和使用零日漏洞。除了零日漏洞之外,Volodya還在開發(fā)針對修復(fù)程序的漏洞。
到目前為止,研究人員設(shè)法跟蹤了他們Windows內(nèi)核本地特權(quán)升級(LPE)漏洞中的10多個(!),其中許多漏洞在開發(fā)時為零天。
事件響應(yīng)示例
本文會從一個事件響應(yīng)示例開始,在分析針對研究人員的一個客戶的復(fù)雜攻擊時,研究人員注意到該惡意軟件執(zhí)行了一個很小的64位可執(zhí)行文件。該示例包含不尋常的調(diào)試字符串,這些調(diào)試字符串指向試圖利用受害者計算機(jī)上的漏洞嘗試。更重要的是,該示例具有一個剩余的PDB路徑,該路徑明確地聲明并刪除了此二進(jìn)制文件的目標(biāo):...\cve-2019-0859\x64\Release\CmdTest.pdb。由于CVE-2019-0859實現(xiàn)缺少任何在線資源,我這意味著研究人員看到的不是一個公開可用的PoC,而是一個真實的開發(fā)工具,這激發(fā)了研究人員深入研究的興趣。
CVE-2019-0859是一個CreateWindowEx函數(shù)中的UAF(Use-After-Free)漏洞。成功利用此漏洞的攻擊者可以在內(nèi)核模式下運行任意代碼。然后攻擊者可以安裝程序;查看,更改或刪除數(shù)據(jù);或創(chuàng)建具有完全用戶權(quán)限的新帳戶。要利用此漏洞,攻擊者首先必須登錄系統(tǒng)。然后,攻擊者可以運行可以利用此漏洞并控制受影響系統(tǒng)的特制應(yīng)用程序。
對這個漏洞進(jìn)行逆向工程非常簡單,二進(jìn)制文件很小,并且還能找到調(diào)試消息。它利用CreateWindowEx中的UAF漏洞來獲取對父進(jìn)程的提升特權(quán)。研究人員很快做出了一個有趣的觀察:看來該漏洞利用程序和惡意軟件本身的開發(fā)者不是同一個人編寫的。代碼質(zhì)量、缺乏混淆、PDB和時間戳都表明了這一結(jié)論。
在Cutter中可以看到對CreateWindowEx的調(diào)用
惡意軟件開發(fā)者的套路
研究人員傾向于將特定惡意軟件家族背后的開發(fā)者視為一個完整的整體,這樣就可以想象每個組件都是由其中一個人、一個團(tuán)隊或一個小組編寫的。事實上,高級一點的惡意軟件,都涉及具有不同技能的不同人員。特別是由國家組織開發(fā)的黑客軟件可能涉及不同的團(tuán)體和分支機(jī)構(gòu)的數(shù)百甚至數(shù)千名員工。組織中的每個人員都有特定的角色,并經(jīng)過特殊的技術(shù)培訓(xùn)和多年的專業(yè)知識積累。在這樣的組織中,編寫通用組件的工作量在專業(yè)團(tuán)隊之間分解,由不同的團(tuán)隊負(fù)責(zé)初始訪問,收集敏感數(shù)據(jù),橫向傳播等。
旨在將漏洞利用模塊嵌入其惡意軟件中的運營對象不能僅依靠惡意軟件開發(fā)者,找到漏洞并可靠地利用漏洞,最有可能由專門從事特定角色的特定團(tuán)隊或個人完成。就其本身而言,惡意軟件開發(fā)者并不在乎它在后臺如何工作,他們只想集成此模塊并完成它即可。
為了實現(xiàn)這種分工,兩個團(tuán)隊需要就某種API達(dá)成一致,該API將成為不同組件之間的橋梁。這種集成API并不是國家所開發(fā)的黑客軟件所獨有的,而是自由市場中常見的特性。無論它涉及地下論壇,漏洞利用經(jīng)紀(jì)人,還是網(wǎng)絡(luò)公司,它們都向客戶提供有關(guān)如何將漏洞利用方法集成到其惡意軟件中的說明。
從本質(zhì)上講,這一整合點是研究人員在研究中要重點關(guān)注的關(guān)鍵方面。假設(shè)攻擊開發(fā)者是獨立工作的,并且只將他們的代碼/二進(jìn)制模塊傳播給惡意軟件開發(fā)者,研究人員決定對他們進(jìn)行改變。通過分析嵌入在惡意軟件示例中的漏洞,研究人員可以了解更多關(guān)于漏洞開發(fā)者的信息,希望通過研究他們的編碼習(xí)慣和在他們的開發(fā)過程中留下的其他內(nèi)容作為線索來識別他們。
識別開發(fā)者的線索
研究人員沒有關(guān)注整個惡意軟件并尋找惡意軟件家族或攻擊者的新示例,而是想提供另一種視角,并決定將重點放在由開發(fā)人員編寫的這些函數(shù)上,從事件響應(yīng)示例中獲得這個小的64位二進(jìn)制文件看起來是一個有不錯的開始。
該二進(jìn)制文件除了利用CVE-2019-0859之外沒有任何作用,并且不基于公開共享的源代碼或POC。它是研究人員進(jìn)行線索識別的一個很好的選擇,因為可執(zhí)行文件是從其他人編寫的代碼中提煉出來的,而不是漏洞開發(fā)者。此外,可執(zhí)行文件與惡意軟件(一種臭名昭著的犯罪軟件)的主二進(jìn)制文件是分開的,這讓研究人員相信這個漏洞不是惡意軟件開發(fā)者自己開發(fā)的。根據(jù)這個線索,研究人員開始尋找同一開發(fā)者開發(fā)的更多惡意軟件。
研究人員首先從已有的二進(jìn)制文件中收集簡單的工件:字符串、內(nèi)部文件名、時間戳和PDB路徑。第一個結(jié)果立即出現(xiàn)——一個與64位示例完全匹配的32位可執(zhí)行文件。具體來說,正如它們的時間戳和嵌入的PDB路徑所示,它們是同時從相同的源代碼編譯在一起的?,F(xiàn)在研究人員有了這兩個示例,就能夠確定研究人員應(yīng)該尋找什么線索了。
為了確定這個漏洞的開發(fā)者,研究人員將注意以下的線索:
1. 二進(jìn)制文件中的獨特工件:
- 硬編碼值(加密常數(shù),“垃圾”值,例如0x11223344);
- 數(shù)據(jù)表(通常是特定于版本的配置);
- 字符串(GDI對象名稱:“MyWindow”,“MyClass_56”,“findme1”等);
- PDB路徑;
2. 代碼段
(1) 獨特的函數(shù)實現(xiàn):
- Syscall包裝器;
- 內(nèi)聯(lián)組裝;
- 專有加密函數(shù)/實現(xiàn);
(2) 技術(shù)和習(xí)慣:
- 首選的泄漏技術(shù)(HMValidateHandle,gSharedInfo等);
- 首選提升技術(shù)(令牌替換是如何執(zhí)行的?);
- 堆噴涂技術(shù)(使用AcceleratorTables?Windows?Bitmaps?)
(3) 框架
漏洞利用的進(jìn)程:
- 選項#1:幾乎沒有分支的主要開發(fā)進(jìn)程;
- 選項#2:針對不同版本的操作系統(tǒng)的多重扭曲和旋鈕;
(4) 代碼的結(jié)構(gòu)及其中的函數(shù):
- 模塊化:函數(shù)分離;
- 結(jié)構(gòu):分離出刪除階段(初始化,配置,噴涂,令牌交換等);
- 全局變量:哪些信息存儲在全局變量中?(操作系統(tǒng)版本?操作系統(tǒng)版本枚舉?只是特定的字段偏移量?)
(5) 特定于版本的配置:
- 字段偏移量:哪些字段特別重要?
- 首選系統(tǒng)調(diào)用:首選系統(tǒng)調(diào)用集
(6) 提供給客戶的API
研究人員將尋找與利用漏洞相關(guān)的工件集
考慮到這些屬性,研究人員回顧了研究人員擁有的兩個示例,并標(biāo)記了一些研究人員認(rèn)為獨特的工件。即使研究人員只有兩個小的二進(jìn)制文件(本質(zhì)上是相同的),研究人員仍然能夠創(chuàng)建搜尋規(guī)則來查找該開發(fā)者編寫的更多示例。令研究人員驚訝的是,研究人員能夠找到比想象中更多的開發(fā)線索。
順著這個邏輯,一個接一個最后總共發(fā)現(xiàn)了幾十個示例,并且每個示例都改進(jìn)了研究人員的搜索規(guī)則和方法。通過對示例的仔細(xì)分析,研究人員能夠了解哪些示例利用了哪個CVE,并以此為基礎(chǔ)創(chuàng)建了時間表,以了解該漏洞是在暴露之前寫為零日漏洞,一日漏洞還是基于修復(fù)程序擴(kuò)散和類似技術(shù)實現(xiàn)的。
到目前為止,僅基于研究人員的線索識別技術(shù),而沒有進(jìn)一步的情報,可以將10多個CVE來自于同一個漏洞利用開發(fā)者。后來,公開報道披露了研究人員的目標(biāo)漏洞利用銷售者的名稱:Volodya(又名Volodimir),以前稱為BuggiCorp。似乎研究人員并不是唯一追蹤此漏洞利用者的人,因為卡巴斯基多次報告了有關(guān)他們的一些相關(guān)信息。此外,ESET在其VB2019關(guān)于Buhtrap的演講中還提到了Volodya的一些重要線索。
根據(jù)卡巴斯基的說法,Volodya最初以其“BuggiCorp”綽號被人所熟知,當(dāng)時他們在臭名昭著的Exploit[.]in網(wǎng)絡(luò)犯罪論壇上宣傳了Windows零日漏洞的待售廣告,起價為95000美元。多年來,價格上漲,他們的某些WindowsLPE零日漏洞利用軟件的售價高達(dá)20萬美元。正如卡巴斯基報告中所發(fā)表的,后來得到研究人員的確認(rèn),Volodya將漏洞利用軟件賣給了犯罪軟件和APT團(tuán)體。
漏洞分類
盡管研究人員的一些最初的搜索規(guī)則需要進(jìn)行一些微調(diào),甚至我們收到的即時結(jié)果也是相當(dāng)令人吃驚的。經(jīng)過進(jìn)一步的搜索方法改正后,研究人員又設(shè)法找到了許多示例,所有示例都是Windows中的本地特權(quán)升級(LPE)漏洞。在這些示例中,研究人員能夠確定攻擊者所利用的以下CVE列表。
另外,在對漏洞進(jìn)行分類的過程中,研究人員選擇了一種保守的方法來判斷一個給定的漏洞是在零日漏洞還是一日漏洞。如果其他安全供應(yīng)商認(rèn)為只是野外利用,那么它就是零日漏洞。如果研究人員找到足夠的證據(jù),證明研究人員的一個樣本確實是在野外傳播的利用,就像一個供應(yīng)商在他們的報告中描述的那樣,那么研究人員也標(biāo)記它,除此之外都標(biāo)記為一日漏洞。
下一篇文章我們來具體講講具體的漏洞。