來源:http://bbs.ichunqiu.com/thread-10492-1-1.html?from=ch
繞過McAfee系統(tǒng)底層應(yīng)用白名單的絕佳姿勢
原文來自exploit-db.com昔字,由ichunqiu簽約作者prison翻譯發(fā)布
'''
前方高能磷醋,多字預(yù)警,這篇文章扫沼。崇呵。很長很長缤剧。。所以分兩部發(fā)域慷。荒辕。。
本文屬于paper文獻類犹褒,干貨較多抵窒,翻譯水平有限,請多多指教叠骑。
手動鞠躬李皇。
'''
1.摘要
本文介紹了SEC安全顧問實驗室對于驗證在McAfee控制下的應(yīng)用的安全性測試的研究結(jié)果。這個產(chǎn)品的一個例子是進一步為像SCADA的服務(wù)器環(huán)境或像工作站一樣對于系統(tǒng)安全性能有高需求的關(guān)鍵系統(tǒng)進行強化。程序白名單有什么卵用呢掉房?簡單來說就像是澡堂子一樣茧跋,分男女浴室,女浴室當(dāng)然是不準(zhǔn)男生隨便亂進的卓囚。(當(dāng)然了總有能例外的人瘾杭,這也是這篇文章要討論的事),在操作系統(tǒng)上也基本是這個概念哪亿≈嗨福【本段原文沒有,原文解釋略刻板】這應(yīng)該可以防止惡意軟件的執(zhí)行蝇棉,由此來防御更先進的持續(xù)威脅(APT)攻擊讨阻,McAfee應(yīng)用程序控制軟件就是這樣一個例子。它可以安裝在任意一個系統(tǒng)上篡殷,然而钝吮,他的主要功能是對基礎(chǔ)設(shè)施的嚴(yán)格保護,而且他還有一些額外的安全功能贴唇,包括讀寫保護和不同的內(nèi)存保護搀绣。
本次研究的是針對Windows下的McAfee(6.1.3.353版本)弱點缺陷檢查設(shè)計和實現(xiàn)飞袋。已經(jīng)確定了有幾種方法可以繞過McAfee控制的主要特征程序的白名單戳气,由此來執(zhí)行未經(jīng)授權(quán)的代碼。不同的審計過程是現(xiàn)在最常見的攻擊方法巧鸭。在大多數(shù)情況下瓶您,應(yīng)用程序最初的攻擊可以被攔截,但是纲仍,只要應(yīng)用程序改變一點點呀袱,它是有可能繞過保護來感染系統(tǒng)的。這些方案包括各種社會工程學(xué)攻擊和內(nèi)存損耗攻擊郑叠。McAfee攔截程序可以避免內(nèi)存泄漏攻擊(例如緩沖區(qū)溢出)夜赵。事實上,這些保護只針對典型的操縱系統(tǒng)乡革,如利用ASLR和DEP開發(fā)的新系統(tǒng)運行時則沒什么卵用寇僧。因為他們已經(jīng)包括了DEP和ASLP繞過方法。
已經(jīng)確定一些額外的設(shè)計缺陷和弱點可以用于繞過讀寫保護,另外內(nèi)核驅(qū)動程序中存在幾個濫用可以導(dǎo)致系統(tǒng)崩潰的漏洞沸版∴铱基礎(chǔ)設(shè)施的安全對于主要的應(yīng)用程序正常運行是至關(guān)重要的(比如定期去電廠檢查服務(wù)器的發(fā)熱情況)這樣的攻擊基本上可以導(dǎo)致很嚴(yán)重的問題。最后注意视粮,McAfee還附帶一些非常過時的從1999年就可以利用的應(yīng)用程序控制組件细办。
2.引言
“McAfee的應(yīng)用控制軟件提供了對服務(wù)器,企業(yè)臺式機和固定設(shè)備對于未經(jīng)授權(quán)的程序和代碼的攔截提供了一種非常有效的方式蕾殴,這種集中管理的白名單解決方案使用一個動態(tài)信任模型和比較創(chuàng)新的安全特性笑撞,阻止先進的持續(xù)攻擊--而不需要簽名更新或費時費力的列表管理”岛啸。
McAfee是一種通過白名單機制進一步對操作系統(tǒng)強化的應(yīng)用控制程序。這對保護重要的基礎(chǔ)設(shè)施非常有用茴肥≈荡粒基礎(chǔ)設(shè)施可能因為特別的可靠性和可用性和需求不符而不安裝更新。這種要求的例子經(jīng)陈可以在SCADA環(huán)境不更新來避免從一個更新包的缺陷而感染中發(fā)現(xiàn)堕虹。理論上來說應(yīng)用不應(yīng)該阻止白名單上的可執(zhí)行程序,因此可以防止執(zhí)行攻擊者提供的代碼芬首。產(chǎn)品主頁上可以找到以下引用:
“最大限度的減少修補赴捞,同時保護內(nèi)存--給你把部署補丁的時間推遲到常規(guī)補丁周期的時間,留有余地郁稍。此外赦政。它可以防止白名單中的程序被通過被內(nèi)存緩沖區(qū)溢出攻擊Windows32和64位系統(tǒng)”
本文的目的是驗證上文中說過的研究結(jié)果,即如果由McAfee提供應(yīng)用程序的攔耀怜,得有多難才能夠繞過它恢着。
第二節(jié)描述了能夠繞過白名單實現(xiàn)任意代碼執(zhí)行的各種方法。第一個描述了通過技術(shù)獲取所謂的“基本代碼執(zhí)行”财破,這說明一個基本形式的代碼是否具有代碼執(zhí)行的能力掰派。第二部分闡述了一些基本的執(zhí)行代碼可以在繞過白名單時變成完整的代碼執(zhí)行,這也同樣包含了McAfee提供的內(nèi)存安全保護以及攻擊者如何繞過的問題左痢。第三部分闡述的概念是如何做到如何在運行著McAfee的微軟系統(tǒng)上進行繞過UCA(用戶賬戶控制)靡羡。
第三節(jié)用來理解讀寫保護概念和怎樣通過一些簡單的方法來繞過這些保護機制實現(xiàn)任意代碼執(zhí)行,第四節(jié)描述了內(nèi)核驅(qū)動程序以及它們產(chǎn)生的影響俊性,最后一張給出了研究的結(jié)論略步。
3.繞過代碼執(zhí)行保護機制
McAfee應(yīng)用控制主要的安全功能就是攔截未經(jīng)授權(quán)的執(zhí)行代碼。因此定页,第一步是演示如何繞過這個功能趟薄,在下面的討論中,獲取完整的代碼執(zhí)行的總體目標(biāo)主要分為三個部分典徊。
第一步是實現(xiàn)基本的代碼執(zhí)行杭煎,也就是某種非常基本的代碼執(zhí)行宫峦。比如說具有啟動白名單程序中的具體參數(shù)的能力岔帽。第二步是用基本的代碼執(zhí)行完整執(zhí)行代碼,也就是可以構(gòu)成任意代碼執(zhí)行(shellcode)导绷。這一階段是完全繞過McAfee的代碼執(zhí)行保護機制犀勒。
最后但不是必要的一步是繞過用戶賬戶控制(UCA)在管理員賬戶的情況下執(zhí)行代碼執(zhí)行。這只是在如果需要攻擊管理員賬戶的情況下,否則的話另外兩個步驟用普通賬戶就夠了贾费。
3.1基本代碼執(zhí)行
3.1.1濫用未經(jīng)檢查的文件類型:HTA和JS
McAfee主要攔截不在白名單中的類似于.bat,.com,.vbs(有很多這種類型的可執(zhí)行文件類型后綴钦购,凡此種種不一而足)后綴的可執(zhí)行文件,然而另一種非常常見的方法是使用黑名單機制褂萧,在這么一個使用黑名單的情況下很可能會漏掉一些文件類型或文件擴展押桃,因此就無法驗證。
這恰恰是由McAfee來檢測的导犹。在這種特殊情況下不檢查HTML程序(HTA)唱凯,可以隨意浪。從Wscript使用run方法谎痢。Shell對象可以啟動在系統(tǒng)上的其他白名單應(yīng)用以方便后期的攻擊磕昼。惡意的hta文件可以感染到受害者的電子郵件或者是U盤(利用簡單的社會工程學(xué)攻擊),如果受害者打開了文件节猿。代碼開始執(zhí)行票从,并進一步感染系統(tǒng)。
在分析過程中發(fā)現(xiàn)了另一個沒有審核的文件類型滨嘱,不可信的JScript文件執(zhí)行也不驗證峰鄙,因此可以被攻擊者利用。要啟動另外一個程序太雨,可以使用和上文中所說相同的代碼吟榴。最常見的攻擊場景是利用ActiveXObject腳本進行攻擊。FileSystemObject是用來將一個可執(zhí)行文件(病毒)寫到硬盤后躺彬,利用wscript.shell啟動可執(zhí)行文件煤墙。但是梅惯,因為白名單的限制宪拥,所以這個文件不會被執(zhí)行而是會被攔截下來。本章的第二部分討論的技術(shù)就是用來實現(xiàn)完整的代碼執(zhí)行铣减。這個技術(shù)需要具有運行白名單應(yīng)用程序和對一些特定的參數(shù)修改的功能她君。這些都完全可以用JS或者HTA,此外葫哗,惡意軟件在JS/HTA文件中進行操作是完全有可能的缔刹。
當(dāng)然了,其他的一些沒有過濾的文件也同樣有可能存在任意命令執(zhí)行劣针。
3.1.2快捷方式
如果以上的技術(shù)必須以某種方式發(fā)送給受害者的話校镐,可以通過一些不同的渠道來完成。例如通過E-mail捺典,網(wǎng)絡(luò)分享或者通過U盤粘貼上去鸟廓。如果是用U盤的話有一個更好的方法,USB協(xié)議還支持一些其他的設(shè)備,比如USB鍵盤引谜,USB鼠標(biāo)或者是USB集線器牍陌。一個惡意的U盤可以將自己偽裝為一個USB集線器(內(nèi)部協(xié)議偽裝,不是換包裝啊各位T毖省)毒涧,然后將USB鍵盤和它連接起來。然后很快就可以通過它來使用鍵盤發(fā)送特定的按鍵贝室,比如發(fā)送Windows鍵+R鍵可以打開運行對話框(Windows上基本的快捷鍵)契讲。然后就可以通過U盤來。滑频。怀泊。(嘿嘿嘿你懂得,反正就是干壞事辣),不過要實現(xiàn)這么猥瑣的事情還是需要比較高的門檻误趴,因為受害者需要插入U盤來執(zhí)行你的文件霹琼。這種攻擊不能夠直接通過McAfee來預(yù)防。但是在這里提起來是因為這也是一種比較猥瑣的繞過方法凉当。
3.1.3 Pass The Hash(一種攻擊方法名稱枣申,真不是我偷懶QAQ)
另一個比較常見的攻擊場景是:攻擊者已經(jīng)進入了系統(tǒng)的內(nèi)部網(wǎng)絡(luò)。然后使用Pass The Hash的方法進一步攻克其他組件看杭。如果內(nèi)網(wǎng)主機的管理員賬號密碼相同忠藤,那么可以通過pass the hash遠程登錄到任意一臺主機,操作簡單楼雹、威力無窮模孩。然后就可以發(fā)送命令在遠程系統(tǒng)上執(zhí)行辣~\(≧▽≦)/~。Metasploit中包含了對這種攻擊有用的模塊贮缅,當(dāng)然了榨咐,系統(tǒng)中裝了McAfee的可能不吊它。這種骯臟的py交易的內(nèi)幕是:模塊首先將所有命令寫入到一個.bat后綴的可執(zhí)行文件中谴供,然后再執(zhí)行它块茁。因為.bat文件在白名單中是被禁止的,所以這種攻擊也就沒什么卵用了桂肌。即使如此数焊,這在實際的攻擊場景中這只是無謂的抗?fàn)幗K究要被被強行推倒滴。通過修改模塊的一行代碼實現(xiàn)直接調(diào)用所提供的命令崎场。
在下一章我們將會給出一個執(zhí)行惡意命令的完整執(zhí)行代碼佩耳。
3.1.2完整代碼執(zhí)行
典型的用例就是通過所有現(xiàn)有程序的白名單確定正確的操作以此來工具系統(tǒng)的安全,這種方法存在的問題是攻擊者可能在白名單中任意加入程序谭跨。PowerShell和它的可執(zhí)行文件”powershell.exe”被安裝在所有的新系統(tǒng)中就是這樣一個例子干厚。如果系統(tǒng)默認將這種程序列入白名單的話答恶,就可以由攻擊者來執(zhí)行。McAfee應(yīng)用控制檢查的流程是萍诱,如果攻擊者試圖啟動PowerShell腳本(一種以.ps1為后綴的文件)悬嗓,只允許白名單內(nèi)的腳本可執(zhí)行。然而裕坊,道高一尺魔高一丈包竹,這么嚴(yán)密的保護下還是有可能利用powershell.exe.比如通過以下命令來啟動calc.exe是有可能的:
[Bash shell]純文本查看復(fù)制代碼
1
powershell.exe –nop –windows hidden –noni –commandcalc.exe
另一種方法是使用encodedCommand參數(shù),使用此參數(shù)可以啟動復(fù)雜的腳本籍凝。以下是PowerShell腳本編碼的命令:
[Bash shell]純文本查看復(fù)制代碼
1
2
3$cmd = ‘calc.exe’
$bytes = [System.Text.Encoding]::Unicode.GetBytes($cmd)
[Convert]::ToBase64String($bytes)
Base64編碼輸出可以用來從PowerShell調(diào)用calc.exe.下面的是一個編碼命令啟動calc.exe的例子:
[Bash shell]純文本查看復(fù)制代碼
1
powershell.exe -enc YwBhAGwAYwAuAGUAeABlAA==
通過PowerShell啟動已經(jīng)在白名單中的程序不會很強大周瞎,然而,PowerShell會的姿勢多著呢饵蒂。他可以從Windows庫中訪問和調(diào)用一些公開的像CreateThread()或者VIrtualAlloc()之類的函數(shù)声诸。結(jié)合功能分配額外的內(nèi)存在當(dāng)前進程中開啟一個新的進程來存儲shellcode.
上述技術(shù)可用于利用惡意參數(shù)啟動PowerShell(見“代碼執(zhí)行”章),一個技術(shù)是否適合使用取決于具體的攻擊方向退盯,系統(tǒng)配置和實際情況彼乌。
PowerShell是一個默認在白名單中可以被攻擊者濫用的一個例子,這同樣說明白名單中很有可能有其他類似的可以被濫用程序存在渊迁。調(diào)試器是一個例子慰照,因為它們可以在白名單進程開啟的情況下寫shellcode代碼。其他的例子是像Python和Perl一樣的腳本解釋器琉朽,因為它們可以開始執(zhí)行shellcode毒租。在這兩種情況下可以為完成PowerShell指定完整的參數(shù)。Python是使用C的 -c 箱叁,Perl是使用的 -e 參數(shù)去執(zhí)行腳本中指定的參數(shù)墅垮。
請注意(敲黑板d=====( ̄▽ ̄*)b),這是非常有可能滴耕漱,這樣的白名單應(yīng)用的存在可以被攻擊者濫用算色。