1.簡(jiǎn)介
創(chuàng)新互聯(lián)-專(zhuān)業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性?xún)r(jià)比通江網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式通江網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋通江地區(qū)。費(fèi)用合理售后完善,十載實(shí)體公司更值得信賴(lài)。在安全廠商日趨成熟的背景下,編寫(xiě)免殺馬的難度和成本日益增長(zhǎng)。好用新興的開(kāi)源項(xiàng)目在短時(shí)間內(nèi)就被分析并加入特征庫(kù)。筆者調(diào)研了部分開(kāi)源項(xiàng)目,其中也有項(xiàng)目做了類(lèi)似的分析?[1],目前能夠免殺的項(xiàng)目初步統(tǒng)計(jì),其特征一是star數(shù)不過(guò)千,二是發(fā)布時(shí)間不會(huì)很長(zhǎng)。盡管以上開(kāi)源測(cè)試項(xiàng)目已經(jīng)無(wú)法免殺,也有兩種可以發(fā)展的方向,一個(gè)是學(xué)習(xí)其思想,自己實(shí)現(xiàn)并去特征免殺;二是改造原有項(xiàng)目,自己查特征、去特征,經(jīng)過(guò)測(cè)試也能達(dá)到免殺。
免殺方法和思路很多,但據(jù)筆者觀察,目前免殺分為兩大流派。一是二進(jìn)制流,利用匯編配合上C++,調(diào)用系統(tǒng)底層函數(shù)進(jìn)內(nèi)核的方式免殺。殺軟如果直接在用戶(hù)態(tài)檢測(cè)其行為特征會(huì)比較困難。二是新工具新項(xiàng)目、小眾工具流,其主要思想是尋找反病毒廠商未覆蓋的方法和工具,一個(gè)是尋找新的語(yǔ)言工具和項(xiàng)目,跟廠商比速度。另一個(gè)是偏僻語(yǔ)言,用戶(hù)量小,廠商一直并未發(fā)現(xiàn)或者工作重心不在上面。舉個(gè)例子,可以用各種語(yǔ)言二次編譯,配合上一些語(yǔ)言特性如python反序列化達(dá)成免殺。通過(guò)現(xiàn)有工具的組合有效提高復(fù)雜度,在反病毒人員的盲區(qū)里進(jìn)行。兩種各有優(yōu)劣,后續(xù)若有文章會(huì)測(cè)試更多的免殺用例。這里推薦一個(gè)靜態(tài)免殺學(xué)習(xí)項(xiàng)目[2]和52pojie上的免殺項(xiàng)目,利用了大部分后文中提到的免殺技術(shù)[3]。
2.殺毒軟件檢測(cè)方法
以下的內(nèi)容多為前人總結(jié)。因?yàn)樵撇闅⒈举|(zhì)上也是基于特征查殺,顧不單獨(dú)列出。
2.1特征碼檢測(cè)
對(duì)文件或內(nèi)存中存在的特征做檢測(cè),一般的方法是做模糊哈?;蛘邫C(jī)器學(xué)習(xí)跑模型,優(yōu)點(diǎn)是準(zhǔn)確度高,缺點(diǎn)是對(duì)未知木馬缺乏檢測(cè)能力。所以目前依賴(lài)廠商的更新,廠商做的更新及時(shí)能有效提高殺軟的防護(hù)水平。目前一些殺軟對(duì)相似的病毒有一定的檢測(cè)能力,猜測(cè)是基于模糊哈希做的。部分殺軟同樣對(duì)于加殼也有檢測(cè)能力,對(duì)于不同的廠家有不同的策略,有些會(huì)對(duì)文件進(jìn)行標(biāo)記,而某數(shù)字會(huì)直接告警。
2.1.1關(guān)聯(lián)檢測(cè)
檢測(cè)的特征不僅僅是惡意payload的特征,也可能是一組關(guān)聯(lián)的代碼,把一組關(guān)聯(lián)信息作為特征。比如在使用加載器加載shellcode時(shí),需要開(kāi)辟內(nèi)存,將shellcode加載進(jìn)內(nèi)存,最后執(zhí)行內(nèi)存區(qū)域shellcode。這些步驟就被反病毒人員提取出來(lái)作為特征,在調(diào)用了一組開(kāi)辟內(nèi)存的函數(shù)比如virtualAlloc之后對(duì)該內(nèi)存使用virtualProtect來(lái)更改標(biāo)示位為可執(zhí)行并且對(duì)該內(nèi)存進(jìn)行調(diào)用就會(huì)觸發(fā)報(bào)毒。以上只是一個(gè)簡(jiǎn)單的例子,具體情況具體分析,部分廠商對(duì)其進(jìn)行了擴(kuò)展,所以現(xiàn)在使用另外幾個(gè)函數(shù)進(jìn)行調(diào)用也無(wú)法免殺。不過(guò)其本質(zhì)還是黑名單,還存在沒(méi)有被覆蓋到的漏網(wǎng)之魚(yú)。
2.2行為檢測(cè)
行為檢測(cè)通過(guò)hook關(guān)鍵api,以及對(duì)各個(gè)高危的文件、組件做監(jiān)控防止惡意程序?qū)ο到y(tǒng)修改。只要惡意程序?qū)ψ?cè)表、啟動(dòng)項(xiàng)、系統(tǒng)文件等做操作就會(huì)觸發(fā)告警。最后,行為檢測(cè)也被應(yīng)用到了沙箱做為動(dòng)態(tài)檢測(cè),對(duì)于避免沙箱檢測(cè)的辦法有如下幾個(gè):
延時(shí),部分沙箱存在運(yùn)行時(shí)間限制
沙箱檢測(cè),對(duì)諸如硬盤(pán)容量、內(nèi)存、虛擬機(jī)特征做檢測(cè)
部分沙箱會(huì)對(duì)文件重命名,可以檢測(cè)自身文件名是否被更改
2.3小結(jié)
以上是對(duì)殺軟檢測(cè)做的一個(gè)小結(jié),目前學(xué)術(shù)界對(duì)惡意代碼的檢測(cè)集中在機(jī)器學(xué)習(xí)上,已經(jīng)有部分殺軟已經(jīng)應(yīng)用落地了,如微軟。對(duì)殺軟檢測(cè)手法更多的了解有助于我們寫(xiě)免殺馬。
3.繞過(guò)技術(shù)
目前,隨著cs的流行,越來(lái)越多的人使用cs的shellcode,而放棄了自己開(kāi)發(fā)編寫(xiě)的木馬,或者使用改造的msf馬。本篇文章也會(huì)以shellcode加載器作為例子。后續(xù)文章將會(huì)涉及更深入的內(nèi)容。
3.1經(jīng)典技術(shù)
經(jīng)典免殺技術(shù)如下,由于篇幅所限,本篇只含部分免殺技術(shù)。
特征碼修改
花指令免殺
加殼免殺
內(nèi)存免殺
二次編譯
分離免殺
資源修改
白名單免殺
3.2修改特征
一個(gè)加載器存在兩個(gè)明顯的特征,一個(gè)是shellcode和硬編碼字符串。我們需要消除這些特征,比較方便的方案,使用base64等對(duì)上述特征進(jìn)行編碼,最好使用多種編碼手段。對(duì)于shellcode,使用base64并不安全,所以更安全的方案是加密,一個(gè)簡(jiǎn)單的異或加密就能消除shellcode的特征。第二個(gè)是加載器的關(guān)聯(lián)特征也需要消除,對(duì)于代碼中出現(xiàn)連續(xù)調(diào)用的virtualAlloc,virtualProtect進(jìn)行插入花指令,通過(guò)加入無(wú)意義的代碼干擾反病毒引擎。
筆者的一點(diǎn)想法,進(jìn)一步混淆源代碼,在不加殼的情況下稍微增加靜態(tài)分析難度。也有論文提出可以使用ROP來(lái)提高代碼的分析難度,因?yàn)楝F(xiàn)存的代碼分析引擎對(duì)間接跳轉(zhuǎn)和調(diào)用的支持存在瑕疵,復(fù)雜邏輯的代碼更需要人工分析[12]。
3.3內(nèi)存免殺
shellcode直接加載進(jìn)內(nèi)存,避免文件落地,可以繞過(guò)文件掃描。但是針對(duì)內(nèi)存的掃描還需對(duì)shellcode特征做隱藏處理。對(duì)windows來(lái)說(shuō),新下載的文件和從外部來(lái)的文件,都會(huì)被windows打上標(biāo)記,會(huì)被優(yōu)先重點(diǎn)掃描。而無(wú)文件落地可以規(guī)避這一策略。同時(shí)申請(qǐng)內(nèi)存的時(shí)候采用漸進(jìn)式申請(qǐng),申請(qǐng)一塊可讀寫(xiě)內(nèi)存,再在運(yùn)行改為可執(zhí)行。最后,在執(zhí)行時(shí)也要執(zhí)行分離免殺的策略。
3.4修改資源
殺軟在檢測(cè)程序的時(shí)候會(huì)對(duì)諸如文件的描述、版本號(hào)、創(chuàng)建日期作為特征檢測(cè)[7]??捎胷estorator對(duì)目標(biāo)修改資源文件。
3.5隱藏IAT
每調(diào)用一個(gè)系統(tǒng)函數(shù)就會(huì)在導(dǎo)入表中存在,這對(duì)于反病毒人員是個(gè)很好的特征,直接通過(guò)檢測(cè)導(dǎo)入表中有沒(méi)有調(diào)用可疑函數(shù)。這里就需要隱藏我們的導(dǎo)入函數(shù)。一個(gè)比較通用的辦法是直接通過(guò)getProcessAddress函數(shù)獲取所需要函數(shù)的地址。知道地址也就能直接調(diào)用,這樣整個(gè)程序內(nèi)除了getProcessAddress其他函數(shù)都不會(huì)出現(xiàn)在IAT表中。盡管這樣已經(jīng)能繞過(guò)上面的檢測(cè),但還有種更保險(xiǎn)的做法,用匯編從Teb里找到kernel32.dll的地址,再?gòu)钠鋵?dǎo)出表中獲取所需系統(tǒng)函數(shù)。
出自(https://www.52pojie.cn/thread-1360548-1-1.html)
3.6分離免殺
整個(gè)shellcode加載器分為兩個(gè)部分,分離下載shellcode和執(zhí)行。加載器處在stage0階段,其作用除了加載大馬外并無(wú)其他作用。但是直接執(zhí)行大馬會(huì)被檢測(cè)到,所以需要用到分離免殺。
出自(https://www.anquanke.com/post/id/190354)
通常殺軟只檢測(cè)一個(gè)進(jìn)程的行為,所以如果存在兩個(gè)惡意進(jìn)程通過(guò)進(jìn)程間通信就能逃過(guò)檢測(cè)、達(dá)到免殺。
分離免殺的方法多種多樣,既可以用windows的管道[4][6],也可以用socket通信[5]。
3.7二次編譯免殺
像msf或者cs的shellcode在各個(gè)廠商里都盯的比較嚴(yán),對(duì)于這些shellcode已經(jīng)提取好特征只要使用就會(huì)被檢測(cè)出。所以會(huì)使用各種編碼器進(jìn)行免殺。編碼器有很多種,這里僅推薦msf的shikata_ga_nai,是一種多態(tài)編碼器,每次生成的payload都不一樣。
3.7.1其他語(yǔ)言編譯免殺
因?yàn)楦鞣N語(yǔ)言特性不同,對(duì)于不同語(yǔ)言編寫(xiě)的加載器廠商不一定第一時(shí)間跟進(jìn),導(dǎo)致了一段時(shí)間內(nèi)可以繞過(guò)。在2020年初的時(shí)候,使用python作為加載器[11]免殺一陣,現(xiàn)在針對(duì)這類(lèi)加載器逐漸嚴(yán)格,導(dǎo)致直接加載報(bào)毒,需要更多的混淆還改進(jìn)。在2020年5月,奇安信紅隊(duì)出過(guò)一篇文章,利用python反序列化來(lái)加載python加載器[8],目前截止本文測(cè)試2021年1月已經(jīng)無(wú)法使用了,是個(gè)比較好的思路。
3.8系統(tǒng)函數(shù)白名單免殺-uuid方式
Gamma實(shí)驗(yàn)室在2021年2月3號(hào)發(fā)布了一篇微信公眾號(hào)的文章[9],分析了Check Point Research研究的apt攻擊的文章。其中的亮點(diǎn)在內(nèi)存中shellcode的編碼方式和調(diào)用都沒(méi)有使用傳統(tǒng)編碼和調(diào)用的方式,利用了系統(tǒng)函數(shù)的特性,這次的例子是uuid。使用的是系統(tǒng)給UuidFromStringA函數(shù)將payload的uuid數(shù)組轉(zhuǎn)化為shellcode加載進(jìn)內(nèi)存,其特點(diǎn)就是程序中存在大量硬編碼的uuid。另一個(gè),調(diào)用使用的是EnumSystemLocalesA函數(shù),它的第一個(gè)參數(shù)是回調(diào)函數(shù)指針,也就意味著參數(shù)一只要傳入shellcode首地址就會(huì)執(zhí)行惡意命令?,F(xiàn)已被殺,但是這里給出一個(gè)比較重要的思路,還有其他可以利用的Windows系統(tǒng)函數(shù)可以利用。另外現(xiàn)已經(jīng)有項(xiàng)目實(shí)現(xiàn)了使用調(diào)用guid來(lái)進(jìn)行免殺。
3.9某數(shù)字公布的stage uri檢測(cè)
因?yàn)閏s密鑰都是硬編碼的,被逆向出來(lái)后,只要使用stage分階段的方式加載cs,其流量都會(huì)被解密并能檢測(cè)其特征[10]。對(duì)抗的方式,二次打包改密鑰,或更改cs的配置文件使得關(guān)閉stage。同時(shí)使用stageless,也得更換自己的dll,cs的beacon.dll同樣在檢測(cè)列表中。其實(shí)用改造過(guò)的msf馬也不錯(cuò),這也就是上文提到的過(guò)的開(kāi)源項(xiàng)目,目前這個(gè)項(xiàng)目已經(jīng)被某數(shù)字檢測(cè)了,所以需要對(duì)項(xiàng)目進(jìn)行改造。
4.總結(jié)
以上總結(jié)了主流的免殺方式,后文的免殺就是以上技術(shù)的混合使用。本文還未涉及到諸如加殼,dll以及使用powershell免殺等,這些會(huì)在之后的文章中提出。
5.參考文獻(xiàn)
[1]?????https://github.com/TideSec/BypassAntiVirus
[2]?????https://github.com/Rvn0xsy/BadCode
[3]?????https://www.52pojie.cn/thread-1360548-1-1.html
[4]?????https://payloads.online/archivers/2019-11-10/4
[5]?????https://payloads.online/archivers/2019-11-10/5
[6]?????https://www.anquanke.com/post/id/190354
[7]?????https://cloud.tencent.com/developer/article/1512006
[8]?????https://mp.weixin.qq.com/s/gZ28MvCPTQbTAVtQjO7T8w
[9]?????https://mp.weixin.qq.com/s/1DvYNDiZc2iV1pXEn7GZEA
[10]???https://mp.weixin.qq.com/s/fhcTTWV4Ddz4h9KxHVRcnw
[11]???https://www.secpulse.com/archives/151899.html
[12]???https://arxiv.org/pdf/2012.06658.pdf
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧