溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何利用PNG像素隱藏PE代碼分析PNG Dropper新樣本

發(fā)布時(shí)間:2021-11-11 15:29:33 來(lái)源:億速云 閱讀:158 作者:柒染 欄目:編程語(yǔ)言

本篇文章給大家分享的是有關(guān)如何利用PNG像素隱藏PE代碼分析PNG Dropper新樣本,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

我們將跟大家介紹Turla組織研發(fā)和使用的PNG Dropper惡意軟件。在2017年8月份,沉寂已久的PNG Dropper重返人們的視野,而且當(dāng)時(shí)它主要用來(lái)傳播Snake,但近期研究人員又檢測(cè)到了攜帶新型Payload的PNG Dropper樣本,NCC Group的研究人員也將這個(gè)樣本命名為了RegRunnerSvc。

PNG Dropper

Carbon Black的研究團(tuán)隊(duì)此前已經(jīng)對(duì)PNG Dropper組件進(jìn)行了非常詳細(xì)的分析【分析報(bào)告】,但我們還是簡(jiǎn)單回顧一下它的工作機(jī)制吧!

如何利用PNG像素隱藏PE代碼分析PNG Dropper新樣本

Dropper的目的是為了加載和運(yùn)行一個(gè)隱藏在多個(gè)PNG文件中的PE文件。上圖顯示的是Dropper的資源數(shù)據(jù),我們可以看到有多個(gè)代碼數(shù)據(jù)資源入口標(biāo)記有“PNG”的字樣。其中每一個(gè)資源都是一個(gè)有效的PNG文件,不過(guò)打開(kāi)之后你看到的只是部分彩色像素:

如何利用PNG像素隱藏PE代碼分析PNG Dropper新樣本

PNG使用了微軟的GDI+庫(kù)進(jìn)行加載,下圖中我們可以看到,代碼會(huì)調(diào)用LockBits來(lái)從PNG文件中讀取像素?cái)?shù)據(jù)。像素?cái)?shù)據(jù)的每一個(gè)字節(jié)都代表了每一個(gè)像素的RGB值。對(duì)每一個(gè)RGB值進(jìn)行編碼之后我們就能得到PE文件的字節(jié)數(shù)據(jù)了。

如何利用PNG像素隱藏PE代碼分析PNG Dropper新樣本

每一個(gè)PNG資源都會(huì)被枚舉,像素?cái)?shù)據(jù)也都會(huì)被提取出來(lái),最終會(huì)進(jìn)行拼接,而最后生成的完整PE文件會(huì)存儲(chǔ)在內(nèi)存中。接下來(lái),Dropper需要手動(dòng)加載PE文,然后執(zhí)行PE文件的入口函數(shù):

如何利用PNG像素隱藏PE代碼分析PNG Dropper新樣本

RegRunnerSvc

PNG Dropper會(huì)利用其PNG資源解碼并運(yùn)行RegRunnerSvc,而RegRunnerSvc的目的就是從注冊(cè)表中提取加密Payload,并將其加載進(jìn)內(nèi)存,然后運(yùn)行。下圖顯示的是RegRunnerSvc的入口點(diǎn),這里我們可以看到,代碼調(diào)用了StartServiceCtrlDispatcher,目標(biāo)服務(wù)名稱為WerFaultSvc(還負(fù)責(zé)實(shí)現(xiàn)惡意軟件的持久感染),很明顯攻擊者是想讓惡意服務(wù)偽裝成合法的Windows錯(cuò)誤報(bào)告服務(wù)。

如何利用PNG像素隱藏PE代碼分析PNG Dropper新樣本

服務(wù)設(shè)置函數(shù)執(zhí)行后,就需要找出注冊(cè)表中的目標(biāo)數(shù)據(jù)了。一般來(lái)說(shuō),注冊(cè)表路徑會(huì)保存在代碼里的一個(gè)字符串中,但是PNG Dropper卻不是,因?yàn)樗鼤?huì)使用RegEnumKeyExA和RegEnumValueA函數(shù)來(lái)枚舉注冊(cè)表鍵-值。

如何利用PNG像素隱藏PE代碼分析PNG Dropper新樣本

注冊(cè)表中的數(shù)據(jù)包含加密Payload以及解密所需的數(shù)據(jù)。雖然其中不包含解密密鑰,但是它包含了用于生成解密密鑰所需的信息,而其中的部分?jǐn)?shù)據(jù)使用了微軟的CNG庫(kù)函數(shù)(NCrypt*)來(lái)進(jìn)行加密。第一階段的Dropper將生成解密密鑰并存儲(chǔ)在系統(tǒng)默認(rèn)密鑰存儲(chǔ)器中,這里使用的是“MicrosoftSoftware Key Storage Provider”。如果第一階段的Dropper運(yùn)行不成功,那么密鑰將無(wú)法生成和存儲(chǔ),因此解密函數(shù)將會(huì)退出。下面給出的是解密數(shù)據(jù)的二進(jìn)制數(shù)據(jù)結(jié)構(gòu):

如何利用PNG像素隱藏PE代碼分析PNG Dropper新樣本

Header解密成功后,我們就可以進(jìn)行第二階段的解密操作了。主Payload使用了AES算法進(jìn)行加密。首先,代碼會(huì)將一段注冊(cè)表數(shù)據(jù)傳遞給BCryptGenerateSymmetricKey函數(shù),此時(shí)AES解密密鑰便創(chuàng)建成功了。密鑰生成之后,解密屬性便設(shè)置成功,Payload即可解密成功。接下來(lái),代碼會(huì)對(duì)解密后的Payload進(jìn)行檢測(cè),以確保PE文件的有效性。如果檢測(cè)通過(guò),文件將會(huì)被加載,入口點(diǎn)將會(huì)被調(diào)用。

如何利用PNG像素隱藏PE代碼分析PNG Dropper新樣本

總結(jié)

在這篇文章中,我們對(duì)Turla組織所使用的新型PNG Dropper進(jìn)行了分析。該組織目前也在配合RegRunnerSvc這個(gè)新組件來(lái)實(shí)施攻擊,RegRunnerSvc可以從注冊(cè)表中提取和加密PE文件,并對(duì)其進(jìn)行解密和運(yùn)行。目測(cè),該組織是從無(wú)文件型惡意軟件那里得到的靈感,比如說(shuō)Poweliks和Kovter,而他們的目標(biāo)就是為了在代碼文件內(nèi)盡可能地不留下攻擊證據(jù)。

除此之外,我們還開(kāi)發(fā)出了一款專門從PNG Dropper中提取Payload的工具,并且將其開(kāi)源,感興趣的同學(xué)可以下載學(xué)習(xí):【下載地址】。

Yara規(guī)則

rule turla_png_dropper {    meta:        author = "Ben Humphrey"        description = "Detects the PNGDropper used by the Turla group"       sha256 ="6ed939f59476fd31dc4d99e96136e928fbd88aec0d9c59846092c0e93a3c0e27"     strings:        $api0 = "GdiplusStartup"        $api1 = "GdipAlloc"        $api2 ="GdipCreateBitmapFromStreamICM"        $api3 = "GdipBitmapLockBits"        $api4 = "GdipGetImageWidth"        $api5 = "GdipGetImageHeight"        $api6 = "GdiplusShutdown"         $code32 = {            8B 46 3C               // mov     eax, [esi+3Ch]            B9 0B 01 00 00         // mov     ecx, 10Bh            66 39 4C 30 18         // cmp     [eax+esi+18h], cx            8B 44 30 28            // mov     eax, [eax+esi+28h]            6A 00                  // push    0            B9 AF BE AD DE         // mov     ecx, 0DEADBEAFh            51                     // push    ecx            51                     // push    ecx            03 C6                  // add     eax, esi            56                     // push    esi            FF D0                  // call eax        }         $code64 = {           48 63 43 3C            // movsxdrax, dword ptr [rbx+3Ch]            B9 0B 01 00 00         // mov ecx, 10Bh            BA AF BE AD DE         // mov edx, 0DEADBEAFh            66 39 4C 18 18         // cmp [rax+rbx+18h], cx            8B 44 18 28            // mov eax, [rax+rbx+28h]            45 33 C9               // xor r9d, r9d            44 8B C2               // mov r8d, edx            48 8B CB               // mov rcx, rbx            48 03 C3               // add rax, rbx            FF D0                  // call rax        }     condition:        (uint16(0) == 0x5A4D anduint16(uint32(0x3c)) == 0x4550) and        all of ($api*) and        1 of ($code*)}
rule turla_png_reg_enum_payload {      meta:                author = "BenHumphrey"                description = "Payloadthat has most recently been dropped by theTurlaPNG Dropper"               shas256 ="fea27eb2e939e930c8617dcf64366d1649988f30555f6ee9cd09fe54e4bc22b3"       strings:          $crypt00 = "Microsoft SoftwareKey Storage Provider" wide          $crypt01 ="ChainingModeCBC" wide          $crypt02 = "AES" wide       condition:          (uint16(0) == 0x5A4D anduint16(uint32(0x3c)) == 0x4550) and          pe.imports("advapi32.dll","StartServiceCtrlDispatcherA") and          pe.imports("advapi32.dll","RegEnumValueA") and          pe.imports("advapi32.dll","RegEnumKeyExA") and          pe.imports("ncrypt.dll","NCryptOpenStorageProvider") and          pe.imports("ncrypt.dll","NCryptEnumKeys") and          pe.imports("ncrypt.dll","NCryptOpenKey") and          pe.imports("ncrypt.dll","NCryptDecrypt") and          pe.imports("ncrypt.dll","BCryptGenerateSymmetricKey") and          pe.imports("ncrypt.dll","BCryptGetProperty") and          pe.imports("ncrypt.dll","BCryptDecrypt") and          pe.imports("ncrypt.dll","BCryptEncrypt") and          all of them}

入侵威脅指標(biāo)

樣本分析:

1、6ed939f59476fd31dc4d99e96136e928fbd88aec0d9c59846092c0e93a3c0e27(PNG Dropper)2、fea27eb2e939e930c8617dcf64366d1649988f30555f6ee9cd09fe54e4bc22b3(從PNG dropper中獲取到的Payload)

服務(wù):

1、WerFaultSvc

以上就是如何利用PNG像素隱藏PE代碼分析PNG Dropper新樣本,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

png
AI