病毒概述
WannaCry勒索病毒是在2017年肆虐全球的勒索之王,其利用了高危漏洞“永恆之藍”,作爲一個無冕之王,WannaCry經常會被面試官問到是否分析過,所以乘着冠狀病毒肆虐的這段時間我也來對其進行分析分析,增長一點經驗
樣本信息
- 我所使用的分析樣本信息如下:
文件: C:\vir\wcry.exe
大小: 3514368 bytes
文件版本:6.1.7601.17514 (win7sp1_rtm.101119-1850)
修改時間: 2017年5月13日, 2:21:23
MD5: 84C82835A5D21BBCF75A61706D8AB549
SHA1: 5FF465AFAABCBF0150D1A3AB2C2E74F3A4426467
CRC32: 4022FCAA
- 病毒分析環境:
分析環境:win7 32虛擬機
分析工具:OllyDbg、IDA Pro、Hash、PEID、010Editor、火絨劍、PcHunter等
- 使用PEiD查殼,病毒爲VC++ 6.0編寫,無殼
病毒行爲分析
靜態分析
靜態分析主要是通過查看樣本導入表中的敏感函數,資源等進行病毒行爲的預先分析
使用LoadPE進行分析
發現有對文件操作的函數,當然勒索病毒肯定是要對文件加密
對資源進行操作,猜測會釋放資源,如圖片、加解密文件、一些進程文件等
時間轉換函數,剛好可以對應病毒的時間功能
對註冊表進行各種操作的函數,病毒必備
資源查看
這部分資源PK開頭,可以初步判斷爲zip格式壓縮文件,可以提取文件以作分析
上圖就是提取出的資源,這些資源會被用於後續病毒的操作
動態分析
開啓火絨劍監控,然後運行病毒樣本,待病毒樣本運行的差不多之後,分析監控到的日誌,主要觀察如下的幾部分行爲:
- 進程操作:查看病毒相關的進程
- 註冊表操作:查看是否有註冊表設置、創建等操作
- 文件操作:查看是否有文件的創建、修改、刪除等操作
- 網絡操作:查看有無網絡通信等操作
- 行爲監控:查看病毒行爲
可視行爲
- 運行病毒,在樣本所在目錄下創建瞭如下的一些文件,具體每個是什麼作用,之後進行分析:
不過大致可以看出msg目錄中是語言包資源
- 運行後彈出一個名爲Wana Decrypt0r 2.0的勒索界面,同時替換了桌面背景,在桌面新建了一部分文件:
進程查看
- 使用火絨劍和Process Explorer進行進程查看,發現病毒進程會定時創建這麼幾種進程:
如上述圖可知,病毒創建了這麼幾個進程:taskdl.exe
、@[email protected]
、taskse.exe
和一個不在進程樹中但路徑爲病毒路徑的進程taskhsvc.exe
,另外通過火絨劍過濾到的信息來看,病毒還創建了一個cmd.exe
進程
過濾進程進行查看,可以看到很多的進程創建、打開進程、
註冊表操作
火絨劍進行過濾分析,查看對於註冊表創建和設置的所有項
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-1yMZukVn-1582536970282)(E:\病毒漏洞分析\病毒分析報告\永恆之藍WannaCry分析報告\WannaCry勒索病毒分析.assets\1582376983497.png)]
病毒樣本程序在SOFTWARE中添加了一個新的鍵並把當前的病毒樣本路徑設置上去
釋放後的病毒程序@[email protected]進行了和IE瀏覽器相關的一些鍵值的修改
文件操作
通過分析病毒顯示的信息可以看出其對於一些重要文件做了加密操作,具體加密算法和解密的分析待會再做
然後通過火絨劍過濾分析,可以查看到如下的一些結果:
- 首先在每個目錄下創建了兩個文件
@[email protected]
和@[email protected]
,其中一個爲病毒程序,一個爲提示信息(告訴怎麼解密和付錢)
- 在病毒樣本所在目錄下生成了一堆文件,也就是前面研究過的資源文件,並啓動其中的一部分程序,如
taskdl.exe
、taskse.exe
、u.wnry
等
網絡監控
查看網絡監控,發現病毒會對兩個端口進行監聽,同時進行了一部分網絡的鏈接操作,初步判斷是進行局域網內的一些ip地址進行蠕蟲攻擊
詳細分析
接下來使用OD和IDA對病毒進行詳細的分析,徹底剖析其行爲
wcry.exe樣本程序分析
通過IDA找到WinMain函數地址,同時在OD中找到WinMain函數,接下來進行正式分析:
WinMain函數
首先是WinMain函數,分析如下:
在WinMain函數中完成了對病毒的準備工作,是WannaCry勒索病毒的大致主體代碼,下面將一些重要的函數的細節分析貼出來:
SetRegedit
首先進行了註冊表操作,病毒在\HKEY_LOCAL_MACHINE\SOFTWARE\
下創建了一個註冊表項WanaCrypt@,並將當前程序所在目錄的路徑添加到這個項下
FreeResourceFile
函數用來在當前目錄下釋放所有的資源,資源中的文件在之前已經見到過
WriteFileCwnry
函數向文件c.wncry
中寫入了比特幣賬戶信息,具體分析如下:
這裏的比特幣賬戶信息剛好會出現在勒索軟件界面上的支付賬戶框中,會被用於支付比特幣
StartCommand
函數用來運行cmd命令,在上述代碼中進行了兩次命令行操作:
- 使用了命令
attrib +h .
進行了目錄隱藏,但是在我的電腦上似乎沒起到隱藏的作用,後面分析發現在這句命令後面多了一個.
,所以隱藏失敗了 - 使用命令
icacls . /grant Everyone:F /T /C /Q
來給系統添加一個叫Everyone的用戶,且給與這個用戶所有的權限
GetApi
函數對於一些需要的API地址進行了獲取
CInitSection
函數初始化了兩個臨界區對象
KeyImportAndMemAlloc
函數用於導入RSA的私鑰,用於後面的解密文件,同時申請了兩塊大小爲0x100000的內存空間
DecryptFile
函數大致內容如下:
實現的功能是對釋放出的t.wnry
文件進行解密,解密後的文件其實是一個PE結構的文件,在OD中運行函數執行完畢後查看eax中的內存空間中存儲的內容如下:
可以看出這是一個PE格式的文件,將其提取出來(提取0x10000字節,OD使用Ctrl+Shift+X複製,010使用Ctrl+Shift+V粘貼)使用010保存爲exe文件然後使用PEiD查看,發現解密後其實是一個dll文件,並且從後面的分析中可以知道這個模塊中進行了病毒的一些重要操作,可以說是病毒的核心模塊,後面需要具體分析
GetFunAddr
此函數解析了之前解密後的PE數據,從導出表中找到了函數TaskStart
的地址,這個地址就用於之後的調用,可以認爲它是t_wnry.dll
的一個接口,通過這個函數就開始運行病毒的主要功能
FF,t_70)
t_wnry.dll模塊分析
這個模塊是病毒做壞事的核心部分,主要進行了包括加密文件、顯示勒索冊程序、蠕蟲傳播等一些列操作
首先開始是TaskStart
函數,使用IDA加載t_wnry.dll
模塊進行分析,從Export導出表中找到TaskStart
函數進入分析
TaskStart
![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20200224174420336.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM1MTU2NTk2,size_16,color_FFFF
下面詳細敘述一些沒被IDA分析出來的一些重要函數:
CanCreateMutex
創建一個指定名稱的互斥體,用來判斷是否多開
一些前面分析過的基礎函數
- ReadFileCwnry:
函數用來讀取c.wnry
文件中的內容,這裏面存儲的是密鑰,這個函數前面分析過
2. CheckKey:
函數用來檢查讀取到的密鑰
- GetApi:
函數用來讀取一些需要的API
CreateMutexAndCheck
函數打開前面創建的互斥體,不能打開就新建一個新的互斥體
CheckFileExist
函數用來檢查00000000.dky
是否存在,第一次沒有釋放,所以是不存在的
CreateKeyFile
幾個回調函數分析
ProcCreateResFile
函數用於創建一個00000000.res
文件,並向其中寫入數據,寫入的數據是一串大小爲0x8個字節的隨機數和大小爲0小字節的時間數據
ProcCheckDkyFile
函數用來一直檢測00000000.dky
文件是否存在
ProcCheckNewDisc
函數用來檢測是否有新的磁盤產生,若有就對其文件進行加密操作,加密函數稍後進行分析
ProcRunTaskdl
以隱藏的方式運行taskdl.exe
程序,這個程序被每個三秒啓動一次,絕對有特殊作用,待會進行分析
ProcRunExeAndSetRegedit
函數用來運行兩個程序taskse.exe
和@[email protected]
,運行程序函數較爲簡單不再分析,同時也設置了一個註冊表啓動項
SetExeRunRegedit
通過命令行的形式設置註冊表啓動項,命令行格式爲:
'reg add %s /v "%s" /t REG_SZ /d "\"%s\"" /f'
加密算法分析
老實說這個加密函數的分析是在是折磨人,東西多而且複雜,在這裏參考了部分其它大佬的分析過程,萬望勿怪。
函數太多,以下只詳細貼一些比較重要的函數分析。
EncodeFirst
首先就是EncodeFirst函數分析,這是總體加密過程的入口函數,也可以稱爲是第一層函數,函數進入後是一串特別特別長的代碼,具體多複雜就像圖示一樣:
函數具體分析如下:
MakeKeyFile
函數在內部進行判斷@[email protected]
文件是否存在,不存在就創建並拷貝u.wnry
中的內容到其中,同時也會創建一個@[email protected]
快捷方式,這個程序和快捷方式就是桌面上的那個,他就是勒索程序的主界面
CreateReadMe
函數創建了@[email protected]
提示文件,文件中具體內容如下所示:
主要就是提醒用戶,你被加密了,你該交錢了,不交錢沒得搞哦
EncodeSecond
加密函數的第二層,經過分析發現內部實現了對桌面和文檔中的文件進行加密,然後有查找了其他用戶,也對其中的文件進行了加密操作
EncodeThread
加密函數第三層,進行了申請空間和一系列初始化操作,然後調用加密函數第四層進行了加密的開始
EncodeFourth
函數內部進行了遞歸遍歷,在遍歷的過程中分析文件後綴是否爲需要的,是的話就進行加密操作