2016巨集病毒分析及預防報告(1-2月)_Ruby
*原創作者:Leon
筆者對近期的一些主流安全事件中涉及的巨集病毒技術的整理研究。巨集病毒出沒,務必小心!
0×01 概述近期網際網路上湧現了各種各樣的巨集病毒,從年前烏克蘭的BlackEnergy、Direx銀行木馬再到最近各種各樣的勒索軟體肆虐等等。然而詫異的是,這些木馬病毒都是藉助Office巨集完成攻擊的,即傳統的巨集病毒,它是一種寄存在文件或模板的巨集中的計算機病毒。一旦開啟這樣的文件,其中的巨集就會被執行,於是巨集病毒就會被啟用,轉移到計算機上,並駐留在Normal模板上。因此這種早期的病毒貌似近期又死灰復燃了。本文將對近期出現的巨集病毒進行整理分析以及提升防禦巨集病毒的方法。
0×02 誘導使用者方式現在的黑客們最常用的攻擊方式是通過電子郵件進行網路釣魚,例如Direx銀行木馬、Locky勒索軟體等是通過魚叉式網路釣魚的方式擴散開來的,例如下圖的這個郵件誘餌:
通常,這個郵件中的DOC附件文件中包含巨集病毒。我們知道Office文件巨集病毒是一種早期的病毒,可以追溯到2000年,那時候Word和Excel支援自動執行巨集指令。這就意味著病毒或者木馬可以伴隨著文件的開啟而自動執行並且感染系統。隨後微軟禁用了這個特徵,並且當前的Office版本需要使用者一些特別的操作啟用巨集後才能開啟存在文件中的巨集指令。因此黑客們都會使用社工的辦法,讓使用者去啟用巨集從而能看到讓其覺得很有意思的內容。例如BlackEnergy病毒的通過文件內容誘導使用者:
這個文件通過“PraviiSektor”(英文RightSector,烏克蘭民族黨)來誘惑使用者開啟巨集,而該民族黨在2013年11月成立並在該國的政治立場中扮演著很關鍵的角色,因此藉助了該地的動盪局勢來吸引使用者開啟。
0×03 提取巨集為了便於分析現在將其中的一些巨集從Office文件中提取出來,看看這些巨集病毒有什麼異同點。
1.烏克蘭的BlackEnergy巨集病毒:
如圖所示,巨集指令在記憶體中建立一個字串“vba_macro.exe”,然後以這個字串為檔名的檔案被建立,接著通過迴圈將陣列中的資料寫入“vba_macro.exe”。因此Init0()中的資料應該就是payload,而頭兩個位元組”7790”的十六進位制為”4D5A”,即PE檔案的DOS頭標誌。這個檔案最終通過Shell命令被執行,因此vba_macro.exepayload是一個典型的BlackEnergy釋放的檔案。
2.某零售行業巨集病毒樣本:
如圖所示,巨集指令的工作流程包括下面兩個部分:
1、建立名為gvnghjas和lof4檔案;
2、將gvnghjas儲存為gvnghjas.rtf文件檔案;
3、開啟gvnghjas.rtf檔案,rtf檔案釋放並執行lof4.exe檔案。
和BlackEnergy不同的是,巨集先建立rtf檔案,而最終是通過執行rtf檔案將這個打包的EXE釋放至使用者的臨時資料夾中(a.k.a.%TEMP%)並執行。由於RTF檔案可以嵌入Package,因此在其中可以插入任意資料,研究顯示這樣做的目的還可以繞過很多垃圾郵件的過濾系統。
3.Direx銀行木馬巨集病毒:
如圖所示,與1和2中的不同的是,巨集指令從硬編碼的URL下載payload並執行,這是典型的從網路伺服器上下載payload。在不同文件捕獲到的payload使用如下URL:
l armandosofsalem[.]com/l9k7hg4/b4387kfd[.]exel trinity.ad-ventures[.]es/l9k7hg4/b4387kfd[.]exel 188.226.152[.]172/l9k7hg4/b4387kfd[.]exe 4.某勒索軟體巨集病毒樣本:
如上圖所示,這個巨集比較獨特,巨集程式碼相當長,但是被olevba檢測出可疑的命令是“shell”。根據經驗,一個典型的巨集在執行它的shell前,需要向檔案中寫入payload或者是從網上下載payload,但是對程式碼進行分析後,發現也沒有多餘的命令去下載或者向磁碟中寫入檔案。
這就意味著,這個巨集既沒有釋放payload從而通過shell命令去執行,也沒有從網上下載payload。
這個程式碼包含了2034個整型陣列,研究發現這2034個整型(32bit)陣列轉化成8KB的字串,這個字串就是命令來啟動cmd.exe命令,隨後通過迴圈的方式一行一行構建VBScript檔案,最終執行這個VBScript。
0×04病毒行為分析在上面的分析中,我們發現這些巨集要麼在本地釋放執行木馬,要麼在網路上下載木馬,或者是通過不多見的VBScript執行木馬檔案。而這些木馬病毒的表現也是多種多樣的,最直接的就是勒索軟體,例如DMALocker,Locky等。
1.DMALocker今年早些時候出現的一款勒索軟體,目前為止該勒索軟體的影響範圍比較小,但我們還是想提醒您,它仍然存在。
當勒索軟體執行時,軟體移至C:/ProgramData(或者C:/DocumentsandSettings/AllUsers/Dokumenty/),重新命名為fakturax.exe,隨後釋放另一個修改後的備份:ntserver.exe。而faktura.exe在執行完後即被刪除了。不同版本的勒索軟體可能會在該目錄下釋放不同的檔案。
DMAlocker的解密過程是內建的。從該軟體GUI的提示框中可以看到。如果使用者在文字框中鍵入金鑰(32個字串長度)然後點選按鈕,程式就會切換到解密模式(使用提供的金鑰)。
這個惡意軟體包括兩個黑名單而不是一系列的攻擊副檔名,一個是目錄:
另一個是檔案的副檔名:
加密演算法
作者聲稱他使用的是AES和RSA演算法。在程式碼裡這些看起來是怎樣的呢?
檔案被一塊一塊的加密,一個單元是16個位元組(4dwords)。Key是32位長,在加密之前已經做了預處理。這兩個元素—預處理的key和輸入檔案的資料塊—都是被拷貝進一個緩衝區中,這個緩衝區作為加密的中間過程。
下面是一個樣本檔案:square.png被加密函式加密。使用的Key:”11111…”。(拷貝的檔案的資料塊在圖片當中被選中了)
加密之後(輸出標記為灰色):
輸出之後又被拷貝進原始緩衝區中,包括整個檔案。每個加密的檔案都有字首“ABCXYZ11”,一個有趣的值,這個被勒索軟體用來確認加密檔案(這個在新版本中有介紹)。下面我們可以看到dump至磁碟上的樣本檔案:
16個位元組長度的資料塊檔案被AES的ECB模式加密。
2.LOCKY
最近一種比DMALocker更強大的Locky勒索軟體開始出現,Locky以一種分散式的方式,通過Dridex僵屍網路存擴散開來。採用128-bit的AES加密方式並且有一個域名生成演算法(DGA)。而且還能夠加密SQL資料庫,原始碼,比特幣錢包等等。
除了核心的作業系統檔案,Locky可以加密任何其能找到的檔案。下面列出了其能加密的檔案型別:
.m4u.m3u.mid.wma.flv.3g2.mkv.3gp.mp4.mov
.avi.asf.mpeg.vob.mpg.wmv.fla.swf.wav.mp3
.qcow2.vdi.vmdk.vmx.gpg.aes.ARC.PAQ.tar.bz2
.tbk.bak.tar.tgz.gz.7z.rar.zip.djv.djvu.svg
.bmp.png.gif.raw.cgm.jpeg.jpg.tif.tiff.NEF
.psdNaNd.bat.sh.class.jar.java.rb.asp.cs.brd
.sch.dch.dip.pl.vbs.vb.js.h.asm.pas.cpp.c
.php.ldf.mdf.ibd.MYI.MYD.frm.odb.dbf.db.mdb
.sql.SQLITEDB.SQLITE3.asc.lay6.lay.ms11(Securitycopy)
.ms11.sldm.sldx.ppsm.ppsx.ppam.docb.mml.sxm.otg
.odg.uop.potx.potm.pptx.pptm.std.sxd.pot.pps
.sti.sxi.otp.odp.wb2.123.wks.wk1.xltx.xltm
.xlsx.xlsm.xlsb.slk.xlw.xlt.xlm.xlc.dif.stc
.sxc.ots.ods.hwp.602.dotm.dotx.docm.docx.DOT
.3dm.max.3ds.xml.txt.CSV.uot.RTF.pdf.XLS.PPT
.stw.sxw.ott.odt.DOC.pem.p12.csr.crt.keywallet.dat
每個檔案使用微軟Windows的CryptoAPI函式通過128-bit的密碼塊連結模式進行加密。加密後的檔案重新命名為”.locky”的副檔名。
域名生成演算法(DGA)
Locky至少用到一個硬編碼的commandandcontrol(C&;C)IP地址,用來作為加密金鑰交換以及報告感染主機。然而,Locky同時也適用DGA作為commandandcontrol(C&;C)的底部構造。Forcepoint安全實驗室通過逆向反編譯了這個演算法。下面是DGA的C程式碼:
/* Modify the SystemTime to generate domains for a different day */char *LockyDGA(unsigned int seed, SYSTEMTIME SystemTime){int modConst1 = 0xB11924E1;int modConst2 = 0x27100001;int modConst3 = 0x2709A354;int modYear, modMonth, modDay;int modBase = 0, i = 0, genLength = 0;unsigned int x = 0, y = 0, z = 0;unsigned int modFinal = 0;char *domain;char tldchars[29] = "rupweuinytpmusfrdeitbeuknltf"; // Perform some shifts with the constantsmodYear = __ROR4__(modConst1 * (SystemTime.wYear + 0x1BF5), 5);modDay = __ROR4__(modConst1 * (modYear + ((unsigned int)SystemTime.wDay >> 1) + modConst2), 5);modMonth = __ROR4__(modConst1 * (modDay + SystemTime.wMonth + modConst3), 5);modBase = __ROL4__(seed % 6, 21);modFinal = __ROR4__(modConst1 * (modMonth + modBase + modConst2), 5);modFinal += 0x27100001; // Length without TLDgenLength = modFinal % 11 + 5; if (genLength){// Allocate full length including TLD and null terminatordomain = (char *)malloc(modFinal % 11 + 8 + 1); // Generate domain string before TLDdo{x = __ROL4__(modFinal, i);y = __ROR4__(modConst1 * x, 5);z = y + modConst2;modFinal = z;domain[i++] = z % 25 + 97;}while (i < genLength); // Add a '.' before the TLDdomain[i] = '.'; // Generate the TLD from a hard-coded key-string of charactersx = __ROR4__(modConst1 * modFinal, 5);y = (x + modConst2) % ( (sizeof(tldchars) - 1) / 2 ); domain[i + 1] = tldchars[2 * y];domain[i + 2] = tldchars[2 * y + 1];domain[i + 3] = 0; // Null-terminate}return domain;}這個演算法每天生成6個域名,類似下面這種:
2016-02-18:wblejsfob[.]pw,kqlxtqptsmys[.]in,cgavqeodnop[.]it,pvwinlrmwvccuo[.]eu,dltvwp[.]it,uxvvm[.]us
2016-02-19:wblejsfob[.]pw,kqlxtqptsmys[.]in,cgavqeodnop[.]it,pvwinlrmwvccuo[.]eu,dltvwp[.]it,uxvvm[.]us
2016-02-20:nquvsq[.]pm,bgrjlkvxa[.]fr,svkjhguk[.]ru,gitybdjgbxd[.]nl,xxmavhnxts[.]tf,ovdeondpeethj[.]eu
這個C&;C的通訊方式如下:
截止到2.26日,該勒索軟體的一個JS檔案變種可以繞過所有的殺軟,危害很大,因此務必小心。
3.BlackEnergy為了確保在每個系統啟動時執行,釋放檔案在系統啟動資料夾下建立了一個LNK檔案,這個檔案的執行和每個系統的啟動命令一樣:
%APPDATA%/Microsoft/Windows/StartMenu/Programs/Startup/{D0B53124-E232-49FC-9EA9-75FA32C7C6C3}.lnk最後的payload是一個在80埠上連線一個硬編碼的C&;C伺服器,5.149.254.114.簡單的木馬。這個伺服器當前處於未聯通狀態,或者通過IP地址的限制訪問。一旦這個伺服器線上,這個文件通過HTTPPOST請求,傳送基本的惡意指令:
請求是BASE64加密的。其中一些欄位包括:
b_gen=301018stb
b_ver=2.3
os_v=2600
os_type=0
b_id是一個通過計算機的作業系統資訊計算出來的一個獨一無二的機器識別碼,對於每個人來說也是唯一的。這將使得攻擊者可以區別相同網路的不同受感染的主機。b_gen似乎是被攻擊者的ID,類似301018stb。而STB應該是烏克蘭電視臺“STB”,這家電視臺曾在2015年11月公開提及BlackEnergy的受害者。
0×05 防禦從目前來看,藉助Office文件的巨集病毒傳播的趨勢愈演愈烈,尤其是藉助巨集的勒索軟體並沒有消失的跡象,每週都會出現新型的變種。為了保護自己免受威脅,下面的幾點意見作為包括商業人士,資料審查人士等在內的所有人士應該意識到:
備份重要檔案;
不要開啟來歷不明的郵件附件;
除非必要,否則預設不開啟Office的巨集。
對於一些商業系統,網路隔離顯得尤為重要,能夠將商業損失降到最低。
參考資料2、 http://decalage.info/8KB_oneliner#userconsent#
4、 https://blog.malwarebytes.org/news/2016/02/draft-dma-locker-a-new-ransomware-but-no-reason-to-panic/
5、 http://labs.bromium.com/2016/02/03/macro-redux-the-premium-package/
6、 http://www.freebuf.com/news/95449.html
7、 http://www.freebuf.com/articles/network/96011.html
*作者:安全狗團隊(企業賬號),轉載請註明來自FreeBuf黑客與極客(FreeBuf.COM)