病毒樣本連結:https://pan.baidu.com/s/1lh1klQ8Faa6s1kD5aS_kSg 密碼:2lqn
1.樣本概況
1.1 樣本資訊
病毒名稱:Office2003宏病毒
病毒MD5: 52E3DDB2349A26BB2F6AE66880A6130C
病毒哈希:A86DC1842355E6999DE100B85B85A7C1589E4BBC
病毒crc32:7D21F812
1.2 測試環境及工具
測試環境:Windows7
測試工具:火絨劍,Ollydbg,IDA,Windbg,PEiD
1.3 分析目标
整體思路:先用火絨劍等工具分析一個這個病毒的大緻行為,為後面具體分析設定大概的方向。這個病毒利用漏洞,釋放出來一個hkcmd.exe的程式,然後運作這個hkcmd.exe檔案,并且釋放出一個正常的rtf檔案,并且打開這個正常的rtf檔案,僞裝成正常的檔案。通過運作hkcmd.exe釋放出一個datac1en.dll的檔案,然後修改注冊系統的網絡服務,并把該網絡服務的路徑修改為釋放出的datac1en.dll的路徑,這樣每次啟動系統就會去加載這個dll,以此來掩蓋自己。這個datac1en.dll其實是一個後門檔案。這個後門程式通過連接配接指定伺服器來擷取指令,然後執行。
2.具體行為分析
1,首先,我們先把這個病毒拖入,https://www.virustotal.com/這個網站,看看他利用的是什麼漏洞,發現其利用的是CVE編号為:CVE-2012-0158,根據這一線索,我們先找到溢出點,分析利用這個溢出漏洞都做了什麼風騷的操作
2,接下來把這個病毒拖入到火絨劍裡面看看,發現word在加載這個doc檔案的時候,釋放了一個hkcmd.exe檔案
注冊了一個動态服務庫
3,之後,我們先用OD附加WinWord.exe,之後在word中打開病毒樣本,因為之前我們分析的是這個病毒會釋放出一個PE檔案,那我們可以在一些有關于檔案的敏感API上下斷點,比如WriteFile等,在WriteFile這個函數斷下來之後
我們看一下Buffer(0xDE1000A)裡面的内容是不是和之前分析的釋放出的hkcmd.exe檔案一樣
經過對比無誤,說明這段代碼是進行釋放惡意PE檔案的操作,繼續往下跟,發現函數的調用都是以EDI為基址進行的
4,我們看看EDI裡面的值,發現了各種API
5,根據以往編寫shellcode的經驗,我們先把此處的所有資料進行反彙編,果然發現一些存在某種問題或陰謀
6,在異或的地方下硬體執行斷點,斷下來之後觀察周圍的資料,有一段滑闆指令,滑闆指令上方的指令這時候我們就不能單單的認為他是opcode了,還可以将其分析為一個位址,0x27583c30,這是一個jump esp指令的位址,那麼,0x121614就是shellcode開始的地方,也就是溢出點。
7,因為OD無法記錄程式運作的時候eip的值,我們用Windbg調試一波,根據之前的網上搜集到的資訊我們得到,出問題的是子產品MSCOMCTL.OCX,我們在此子產品上下一個載入的斷點
8,當加載這個子產品之後,再下一個WriteFile的API斷點,因為之前我們分析的棧溢出的點在0x121614,是以在下API斷點之後,我們記錄一下對0x121614這個位址上進行資料寫入的時候eip的值,如下:
9,得到了溢出點的指令的位址,在位址0x275c87cb上,我們用OD調一下看看,此處ecx的值過大
10,進行完此次字元串拷貝之後,堆棧中的傳回位址被換成0x27583c30,即jump esp的位址,此處就是溢出的地方
11,我們在jump esp上下斷點,就可以進入到shellcode中分析溢出代碼:先是對shellcode進行解密:
12,建立了一個檔案,名字和路徑如下,是FileName ="C:\Users\15PB-W~1\AppData\Local\Temp\hkcmd.exe"
13,之後向這個檔案中寫入資料,貌似寫入的是PE檔案
14,之後運作這個PE檔案
15,之後申請了一段記憶體空間,申請到的記憶體空間的位址是:0x3160000
16,往申請的空間中寫入資料
17,修改申請的空間中的資料
18,之後又申請了一段記憶體空間,申請的記憶體位址為31c0000
19,之後建立了一個檔案,檔案名字為,和我們的病毒樣本的名字一樣
FileName ="C:\Users\15PB-W~1\AppData\Local\Temp\doc_sample.doc"
20,之後向建立的檔案裡面寫入資料,寫入的資料為RTF格式的。
21,之後運作建立的這個word文檔
22,然後結束本程序
總結:在這段shellcode中,釋放出來一個PE檔案,名字為hkcmd.exe,路徑為目前病毒所在的路徑,然後以隐藏的方式啟動hkcmd.exe,并且釋放出一個RTF格式的word文檔,word文檔的名字和病毒的名字一樣,運作起這個word之後,關閉病毒樣本,是以主要惡意動作應該都在hkcmd.exe中執行,我們下一步分析hkcmd.exe
3.分析釋放出來的PE檔案
1,首先,在目前路徑下建立一個dll檔案
FileName ="C:\Users\15pb-win7\Desktop\datac1en.dll"
2,之後向這個dll中寫入資料
3,之後,拷貝剛才在桌面生成的dll到NewFileName= "C:\Windows\system32\datac1en.dll"
4,之後删除桌面生成的dll
5,之後修改dll的生成時間
6,建立系統資料庫,僞裝成netcvsc服務啟動(這個要保證病毒第一次在主控端上運作,不然會進行判斷,跳過這些敏感動作,可以在系統資料庫裡面删除鍵值,并删除dll檔案,然後重新運作病毒,可以複現)
7,系統資料庫中的資訊成了這樣的了
到此,釋放出來的exe檔案已經分析完畢,我們看他釋放出來的dll檔案都有什麼舉動。
4.DLL分析
接下來我們來分析dll檔案,這個我們主要用IDA分析
1. 首先用PEid掃描,發現并沒有加殼混淆,這對于我們分析來說是非常好的消息,拖入 IDA中,F5一下,可以直接看到源碼。
2. 這個關鍵函數裡面又有許多函數,其中大部分都是加載dll,擷取函數位址,然後解密 拼接字元串等操作。隻有一個函數非常重要,接下來我們再詳談。
3. 擷取系統資訊,判斷系統
4. 接下來,就是一個最重要的函數了,也就是所謂的後門!!!該函數先加載了Wininet.dll,然後擷取了相應的函數位址。
5,然後解析url連結,連接配接伺服器,下載下傳伺服器的檔案資訊。并且判斷是否執行相應指令, 如果沒有相應指令,就睡眠,繼續等待伺服器資訊,如果有,就跳出,讀取相應指令。
6,然後根據上面讀取到的資訊,判斷操作的類型
(1).Commond==0x64,修改标志位
(2).Commond==3,建立線程一,線程一應該為把本地檔案發送到伺服器
(3).Commond==4,建立線程二,并從伺服器擷取檔案然後寫入本地
(4).Commond==5,建立線程三,建立批處理檔案和msacm16.dll檔案,加密 檔案,并發送到伺服器
(5).Commond==4,結束指定線程
(6).Commond==5,運作伺服器指令
(7).Commond==9,周遊檔案,擷取檔案大小、檔案屬性等等。
(7).加密資料,并發送資料到指定伺服器
5.漏洞形成原因
這個漏洞是由于MSCOMCTL.OCX在解析資料的時候将資料拷貝到棧中,但是由于對資料的判斷錯誤,導緻漏洞的發生,造成棧溢出漏洞,不法分子可以建構惡意的rtf格式檔案,利用該漏洞發起攻擊。