亚洲日本免费-啊轻点灬太粗太长了三男一女-麻豆av电影在线观看-日韩一级片毛片|www.grbbt.com

GandCrab勒索病毒分析報(bào)告

前言

呼,歷時(shí)4天半,終于完成了對(duì)GandCrab病毒的分析,這個(gè)病毒是在52破解ScareCrowL前輩的帖子上參考借鑒而來,漫漫病毒分析之路,任重且道遠(yuǎn),還好,我們擁有巨人的肩膀,讓我們看的更遠(yuǎn)更多。

首先講一下,為什么分析這個(gè)病毒,在四葉草公司實(shí)習(xí),幾天下來,有點(diǎn)厭倦分析病毒這件事了,哇,想到以后還要干好多年,心態(tài)炸了。公司峰哥給我了兩個(gè)樣本,說現(xiàn)在流行勒索和挖礦病毒,客戶也中過,叫我去試試分析。然后就有了這篇病毒分析報(bào)告。頓時(shí),分析出來有不一樣的收獲,這是傳統(tǒng)病毒不一樣的。

一月份,GandCrab勒索軟件首次亮相,這是一種著名的惡意軟件,分布在黑暗網(wǎng)絡(luò)上,可能源于俄羅斯,主要針對(duì)斯堪的納維亞和英語國家。……(碼字太麻煩了,這里有一份關(guān)于GandCrab簡(jiǎn)介,了解一下:http://baijiahao.baidu.com/s?id=1599794170709869995&wfr=spider&for=pc

二:樣本信息

三:行為分析

這個(gè)樣本的主要作用就是從資源段中檢索數(shù)據(jù),然后把其加載到內(nèi)存,經(jīng)過解密,然后調(diào)用解密好的shellcode。

shellcode主要是調(diào)用LoadLibrary和GetProcAddress。獲取所需要函數(shù)的地址,以便后期的生成新的病毒文件

重新開辟內(nèi)存空間,解密新的PE文件,并把它映射入內(nèi)存,復(fù)制文件頭和各個(gè)區(qū)表。

修復(fù)IAT,這樣就形成了新的病毒文件,命名為PE1.exe

PE1.exe采用dll反射注入技術(shù),利用ReflectiveLoader要完成的任務(wù)是對(duì)自身的裝載(這一切都是在內(nèi)存中發(fā)生)

調(diào)用dll文件的入口點(diǎn)

核心程序的行為

  1. 獲取系統(tǒng)的DNS網(wǎng)域,本地用戶名,鍵盤區(qū)域,CPU架構(gòu),CPU信息,磁盤驅(qū)動(dòng)器
  2. 連接病毒服務(wù)器
  3. 判斷病毒進(jìn)程在系統(tǒng)中是否互斥,如果存在多個(gè)相同病毒進(jìn)程,終止進(jìn)程。
  4. 檢查殺毒軟件驅(qū)動(dòng),如果沒有,則復(fù)制自身,修改注冊(cè)表自啟動(dòng)
  5. 尋找并終止指定的進(jìn)程,因?yàn)檫@些進(jìn)程可能會(huì)影響到對(duì)文件的加密
  6. 利用機(jī)器數(shù)據(jù)生成加密贖金ID
  7. 啟用微軟加密服務(wù)
  8. 對(duì)磁盤文件除了必要文件必要路徑下進(jìn)行加密
  9. 檢查進(jìn)程安全令牌
  10. 刪除卷影副本,避免管理員利用副本進(jìn)行恢復(fù)。
  11. 執(zhí)行指定的shell操作。

四:樣本分析

原始樣本(hmieuy.exe)

通讀代碼,發(fā)現(xiàn)EnumResourceNamesA API函數(shù),函數(shù)目的是枚舉指定的二進(jìn)制資源,我們可以猜測(cè)程序功能是,枚舉資源文件,然后映射如內(nèi)存,經(jīng)過解密,形成shellcode,然后執(zhí)行shellcode。

修改內(nèi)存保護(hù)設(shè)置,映射文件到內(nèi)存,然后解密shellcode并且執(zhí)行shellcode。


這是第一層保護(hù)

shellcode(內(nèi)存中dump而來)

利用PEB,獲取Kernel32.dll的基地址。

獲取LoadLibrary和GetProcAddress的地址,以便在函數(shù)中調(diào)用其他函數(shù)。這個(gè)是使用shellcode最先做的兩件事情。

再次申請(qǐng)空間,加載解密后續(xù)的病毒代碼,首先加載文件頭,然后遍歷節(jié)區(qū),

修改IAT

PE1.exe(內(nèi)存中dump而來)

觀察tmain函數(shù),發(fā)現(xiàn)函數(shù)流程就是經(jīng)過三個(gè)驗(yàn)證,最后執(zhí)行sub_11A8.而這個(gè)函數(shù)是反射式dll注入的主要的函數(shù)。

調(diào)用了函數(shù)sub_獲取的機(jī)器信息和dll導(dǎo)出函數(shù)ReflectiveLoader


修改內(nèi)存保護(hù)設(shè)置

調(diào)用函數(shù)ReflectiveLoader,反射式dll注入自身[這是病毒保護(hù)自我的重點(diǎn),了解反射式dll注入的流程]

1.需要獲取被加載到內(nèi)存dll的基地址,連自己在內(nèi)存的哪里都不知道,還玩的屁啊

2.利用模塊和函數(shù)的Hash來獲取主要函數(shù)的地址。

3.分配內(nèi)存區(qū)域,存放dll代碼(之前應(yīng)該已經(jīng)注入好了)

4.修復(fù),獲取IAT

5.修復(fù)重定位表

6.得到OEP,跳轉(zhuǎn)到dll文件的OEP地址。

PE2.dll (內(nèi)存中dump而來)

整體分析

病毒發(fā)作的前期:

病毒發(fā)作的中期:

病毒發(fā)作的晚期:

模塊1:收集機(jī)器信息,鏈接url讀取文件,生成互斥體

調(diào)用GetInforAndOpenUrl(10007580)獲取系統(tǒng)信息,檢測(cè)進(jìn)程中是否存在指定給的殺毒軟件,然后連接指定的url讀取文件

  • 系統(tǒng)的DNS網(wǎng)域,
  • 本地用戶名,
  • 鍵盤區(qū)域,但是病毒并不感染俄羅斯用戶

  • CPU架構(gòu),
  • CPU信息,
  • 磁盤驅(qū)動(dòng)器

  • 檢測(cè)進(jìn)程中是否存在指定給的殺毒軟件

  • 連接到指定的URL,并且讀取文件

  • 打開Http請(qǐng)求,讀取網(wǎng)絡(luò)文件至緩沖區(qū)

  • 以自身的硬件信息,生成ranson-id,并由此創(chuàng)建互斥體。

模塊2:檢測(cè)殺軟驅(qū)動(dòng)

檢查是否有卡巴斯基和諾頓等殺軟的驅(qū)動(dòng),先檢查是否存在卡巴斯基的驅(qū)動(dòng),如果存在,XXX,如果不存在,在檢查其他殺軟的驅(qū)動(dòng),如果都不存在,那就將自身復(fù)制,同時(shí)寫入注冊(cè)表自啟動(dòng)項(xiàng)。

將病毒釋放到系統(tǒng)目錄下。

將釋放的文件寫入注冊(cè)表Runonce中,以實(shí)現(xiàn)病毒的自啟。

模塊3:關(guān)閉相關(guān)進(jìn)程

由于在進(jìn)程文件加密的時(shí)候,不允許進(jìn)程占用,所以需要終止某些特定的進(jìn)程。

模塊4:利用機(jī)器數(shù)據(jù)生成RansomID

產(chǎn)生了支付贖金的贖金ID,這個(gè)是由的pc_group和機(jī)器識(shí)別碼生成的,

同時(shí)為了受害者方便交付贖金,提供了安裝洋蔥瀏覽器的教程,臥槽真的貼心。

模塊5:?jiǎn)⒂梦④浀腃SP加密服務(wù)

利用CryptAcquireContextW創(chuàng)建CSP密碼容器句柄

利用 CryptGenKey產(chǎn)生隨機(jī)秘鑰

生成密鑰有兩種方式,CryptGenKey(生成隨機(jī)密鑰)和CryptImportKey(導(dǎo)入密鑰),病毒使用了CryptGenKey方式。另:Microsoft Base Cryptographic Provider v1.0:密鑰長(zhǎng)度為512位。Microsoft Enhanced Cryptographic Provider v1.0:密鑰長(zhǎng)度為1024位

加密

銷毀容器

模塊6:發(fā)送Base加密后的公秘鑰

產(chǎn)生特征的編碼字符

將RSA生成的秘鑰和公鑰利用CryptBinaryToStringA函數(shù)Base64加密,以便后期網(wǎng)路傳輸。

檢索系統(tǒng)信息,然后再進(jìn)行Base64編碼。

將獲取的機(jī)器信息的Base64編碼連接到秘鑰的后面

讀取之前釋放到Hacky目錄下的病毒,可以是利用后續(xù)的函數(shù)進(jìn)行父子進(jìn)程共享該段數(shù)據(jù)。

建立管道通信,解析域名,判斷網(wǎng)絡(luò)連接是否正常

模塊7:建立管道通信

首先將三個(gè)域名傳入。

  • malwarehunterteam.bit
  • politiaromana.bit
  • gdcb.bit

創(chuàng)建管道連接,管道的作用是實(shí)現(xiàn)進(jìn)程之間的消息交互

利用管道的通信機(jī)制,創(chuàng)建一個(gè)子進(jìn)程,命令行參數(shù)是nslookup %s ns1.virmach.ru,目的是解析之前穿入的三個(gè)域名。讀取文件,判斷是否聯(lián)網(wǎng),如果沒有聯(lián)網(wǎng),readfile的buf存在error信息,程序進(jìn)程死循環(huán)

管道輸入的一般新步驟:

修補(bǔ)可執(zhí)行文件,我們將一些關(guān)鍵A24FF4等跳轉(zhuǎn)jmp或者nop掉即可實(shí)現(xiàn)。

模塊8:文件加密部分

病毒首先需要獲取機(jī)器的磁盤驅(qū)動(dòng)器。除了CD-ROM其他的驅(qū)動(dòng)器都被感染,對(duì)于搜索到的每個(gè)驅(qū)動(dòng)器,釋放一個(gè)線程,進(jìn)行加密。加快加密的速度。

病毒不會(huì)感染特殊目錄和特殊格式的文件

然后在驅(qū)動(dòng)器中遍歷,如果是文檔則遞歸調(diào)用原函數(shù),負(fù)責(zé)調(diào)用加密函數(shù)。

管道通信

模塊9:安全令牌檢測(cè)

檢測(cè)進(jìn)程的安全令牌

模塊10:刪除卷影副本

利用shellExecute函數(shù)執(zhí)行cmd,參數(shù)是/c vssadmin delete shadows /all /quiet,刪除卷影副本,目的是不讓管理員恢復(fù)數(shù)據(jù)。

五:技術(shù)總結(jié)

GandCrab病毒主要采用到的技術(shù)有,shellcode藏匿,利用shellcode的短小的特點(diǎn),觸發(fā)shellcode到內(nèi)存,減少了被殺毒軟件查殺的風(fēng)險(xiǎn)。經(jīng)過第一層加密后,病毒釋放了一個(gè)惡意代碼文件(PE1.exe),該文件采用的是反射式dll注入技術(shù),該技術(shù)不想傳統(tǒng)的dll注入需要在文件系統(tǒng)中產(chǎn)生文件,所要執(zhí)行的dll全在內(nèi)存中,這是第二層保護(hù)手段。經(jīng)過兩次dump后,可以得到本次病毒的主體文件,建立了管道,實(shí)現(xiàn)子進(jìn)程和父進(jìn)程之間的通信。

shellcode

需要細(xì)細(xì)的看,參考自:https://zhuanlan.zhihu.com/p/28788521

反射式dll注入

傳統(tǒng)的dll注入,是在文件系統(tǒng)中存放一個(gè)dll模塊,然后進(jìn)程利用LoadLibrary和CreateRemoteThread這兩個(gè)API函數(shù)裝載模塊到內(nèi)存空間,實(shí)現(xiàn)注入。而殺軟在布置Hook的時(shí)候,重點(diǎn)鉤取的就是這兩種API函數(shù)。

反射式dll注入不需要dll文件落地,減少被查殺的風(fēng)險(xiǎn)。首先將需要注入的dll寫入進(jìn)程內(nèi)存,然后為該dll添加一個(gè)導(dǎo)出函數(shù),利用這個(gè)導(dǎo)出函數(shù)讓其自動(dòng)的裝載dll。

主要有兩個(gè)方向的問題:第一個(gè)如何將dll寫入內(nèi)存(注射器的實(shí)現(xiàn)),第二個(gè)如果調(diào)用自身(ReflectiveLoader的實(shí)現(xiàn))

參考自:http://www.freebuf.com/articles/system/151161.html

注射器的實(shí)現(xiàn)

  • 1.將待注入DLL讀入自身內(nèi)存(利用解密磁盤上加密的文件、網(wǎng)絡(luò)傳輸?shù)确绞奖苊馕募涞?
  • 2.利用VirtualAlloc和WriteProcessMemory在目標(biāo)進(jìn)程中寫入待注入的DLL文件
  • 3.利用CreateRemoteThread等函數(shù)啟動(dòng)位于目標(biāo)進(jìn)程中的ReflectiveLoader

ReflectiveLoader的實(shí)現(xiàn)

  • 1.定位DLL文件在內(nèi)存中的基址
  • 2.獲取所需的系統(tǒng)API
  • 3.分配一片用來裝載DLL的空間
  • 4.復(fù)制PE文件頭和各個(gè)節(jié)
  • 5.處理DLL的引入表,修復(fù)重定位表
  • 6.調(diào)用DLL入口點(diǎn)

管道通信

管道是一種用于在進(jìn)程間共享數(shù)據(jù)的機(jī)制,其實(shí)質(zhì)是一段共享內(nèi)存,病毒利用了管道進(jìn)行父子進(jìn)程的通信,這樣子進(jìn)程就可以直接影響父進(jìn)程內(nèi)存。為實(shí)現(xiàn)父子進(jìn)程間通信,需要對(duì)子進(jìn)程的管道進(jìn)行重定向:創(chuàng)建子進(jìn)程函數(shù) CreateProcess中有一個(gè)參數(shù)STARUIINFO,默認(rèn)情況下子進(jìn)程的輸入輸出管道是標(biāo)準(zhǔn)輸入輸出流,可以通過下面的方法實(shí)現(xiàn)管道重定向:

STARTUPINFO si; si.hStdInput = hPipeInputRead; //輸入由標(biāo)準(zhǔn)輸入 -> 從管道中讀取 si.hStdOutput = hPipeOutputWrite; //輸出由標(biāo)準(zhǔn)輸出 -> 輸出到管道

摘錄自https://www.52pojie.cn/forum.php?mod=viewthread&tid=712552&extra=page%3D1%26filter%3Dtypeid%26typeid%3D62

上一篇:2018國家網(wǎng)安周17日啟幕 密織“網(wǎng)絡(luò)安全網(wǎng)”

下一篇:如何防御Node.js中不安全的重定向