引子
人在做,天在看。
勒索軟件,飄蕩在互聯網上越來越濃的一片片烏云,從中爆發出的閃電隨時可能擊中一般的用戶。基于比特幣的匿名支持體系使勒索軟件這個商業模式輕松完成了閉環,各種數字綁票生意開始蓬勃興起,而Locky勒索軟件家族可能是其中最貪婪粗放的一個,漫天撒網以期最大范圍地撈取不義之財。
360天眼實驗室自然會對Locky重點關注并做持續的跟蹤,基于威脅情報中心的數據,以下的熱力圖顯示了從2015年11月以來Locky樣本量的提交情況。可見,2016年3、4月有兩波大規模的行動,剛開初的5月甚至出現了高于4月的提交量。事實上,2016年5月3日的行動可能是史上最大規模的一波攻擊。
而在近兩日,我們捕獲了一批最新的Locky勒索軟件的傳播載體,和大多數的樣本一樣,這批樣本同樣使用Word中的宏代碼下載執行Locky勒索軟件:
1. Word文檔中被插入了惡意的宏代碼
2. 受害用戶打開Word文檔后并允許宏代碼執行
3. 惡意宏使用Microsoft.XMLHTTP對象從指定的URL下載勒索軟件并保存為hendibe.exe
4. 最后調用Shell.Application來執行惡意軟件
值得注意的是,該系列樣本中的宏代碼是大量具有正常功能的宏代碼,而攻擊者將惡意代碼分散插入到正常的宏代碼中,如果不仔細觀察,很難察覺到正常的宏代碼中包含惡意代碼。并且惡意代碼中將需要操作的對象名稱混淆編碼后隱藏在了控件UserForm2.Image1的ControlTipText屬性中,下載URL也通過加密的方式保存,這樣具有比較好的免殺效果,VirusTotal上僅有6家殺軟可以查殺更是證明了這一點!
有意思的是中文版Office以及大部分非西文版Office軟件對該系列樣本天生“免疫”(不會觸發惡意宏代碼),這批樣本的目標應該不是針對中國的,但是量身定制的版本可能已經在路上了,接下來我們對該系列樣本進行一些簡單的分析。
樣本分析
360天眼實驗室此次捕獲到的樣本分別有doc和docm兩種文檔格式,攻擊者以此來保證Office 2003、Office 2007以及更高版本的Office軟件用戶能執行對應的宏代碼,但是所有樣本的內部功能都一致,所以我們使用.docm的惡意文檔作為分析案例。
免殺效果
先附一張VirusTotal的查殺圖,可以看到大部分殺軟對這批樣本都無法正確識別其惡意性:
正常的宏代碼
查看文檔中的宏代碼我們可以發現,宏代碼中基本上都是一些數學公式代碼,并且還有函數說明等相關注釋,看起來都是正常的。如圖:
隱藏在ControlTipText中的數據
不過,有一段代碼引起了我們的注意,代碼顯示從Image1控件的屬性中讀取了某些數據,并進行了一些操作,如圖:
而sOvet_FATSO函數的功能就是Replace:
通過分析這段代碼可以理解到大概的功能是這樣的:
讀取UserForm2.Image1控件的ControlTipText屬性得到一個字符串,然后使用sOvet_FATSO把00替換為e,再把D!替換成M、bri替換成s,最后將字符串以10分隔,使用split生成數組。
提取UserForm2.Image1. ControlTipText中的字符串如下:
D!icrobrioft.XD!LHTTP10)Adodb.britr00aD!10)brih00ll.Application10)Wbricript.brih00ll10)Proc00bribri10)G00T10)T00D!P10)Typ0010)op00n10)writ0010)r00briponbri00Body10)briav00tofil0010)\hendib00.00x00
使用前面的替換方法替換后,字符串變成這樣:
Microsoft.XMLHTTP10)Adodb.streaM10)shell.Application10)Wscript.shell10)Process10)GeT10)TeMP10)Type10)open10)write10)responseBody10)savetofile10)\hendibe.exe
可以看到,字符串中出現了惡意宏中常常使用的一些關鍵對象名和方法名,那么這段看似正常的宏代碼可能就不那么“正常”了。
惡意宏代碼執行流程
通過對宏代碼的進一步分析,我們明白了這是一個通過向正常的宏代碼中插入惡意宏代碼,并將關鍵的string混淆,以及將下載的URL加密存放來躲避殺軟查殺的惡意Word文檔。
惡意宏代碼的執行流程如下:
1. 讀取UserForm2.Image1.ControlTipText中的字符串并替換指定的字符
Microsoft.XMLHTTP10)Adodb.streaM10)shell.Application10)Wscript.shell10)Process10)GeT10)TeMP10)Type10)open10)write10)responseBody10)savetofile10)\hendibe.exe
2. 使用Split將得到的字符串以10分割成數組傳遞給sOvet__57
sOvet__57 = Split(asOvet, "10)")
3. 通過CreateObject等函數引用sOvet__57數組中的各個成員
4. 將加密的URL每個字節除以16進行解密
5. 執行下載流程
a. 使用Microsoft.XMLHTTP下載文件
b. 使用Adodb.streaM的savetofile方法保存寫入到TMP目錄,并命名為hendibe.exe
c. 最后使用Shell.Application來執行下載的EXE
解密URL
樣本以“?”作為分隔,使用Split生成數組,再傳遞給解密函數解密。但是我們在調試過程中發現,樣本的宏代碼中,Split函數最后缺少了閉合符號”,導致樣本執行報錯:
將Split后面的”加上后再解碼出來的URL卻是亂碼:
對于這種情況,剛開始我們認為這應該是攻擊者還在測試樣本的免殺能力,因為正常情況下這樣的代碼是不可能執行起來的,并且即便執行成功,得到的URL也是錯誤的,不可能下載得到惡意軟件。
中文Office天生“免疫”
二進制中提取原始加密數據
正當我們準備結束這次分析,得出該系列樣本是攻擊者進行免殺測試的樣本的結論時,我們順便看了一下樣本二進制中加密的URL數據,居然發現原始二進制中的加密URL數據和Word宏代碼中顯示的數據不一致,而二進制中加密URL的分隔符并不是”?”,而是0xA8:
而Word宏編輯器中顯示的加密的URL數組是這樣的:
Split("1664?856?856?792?28?52?52?840?680?728?888?616?824?728?776?824?600?840?36?552?904?552?824?600?840?792?552?584?616?36?584?776?744?52?96?12?936?648?80?568?760?744?744?776?680", "?)
可以看到,對應的”?”其實是0xA8,而0xA8后面的字節也被Word“吞噬了”,這樣導致顯示出來的數組通過宏代碼中的算法無法解密!
VBA的“BUG”
原來,VBA中使用ANSI編碼,上面的代碼在英文版Office中是沒有問題的,VBA會正確地識別0xA8為分隔符,而在中文Office環境或者其它非西文的Office環境下則會將0xA8后面的字節一并處理。
找到原因后,我們將0xA8替換成可見字符空格0×20,并以0×20作為分隔符,成功解密出了URL:
使用該地址能成功下載回來一個EXE文件,經過簡單分析發現該EXE是勒索軟件Locky家族的樣本。
下載的Locky簡單分析
簡單分析該樣本發現執行流程和大多數的勒索軟件一致,這里就不進行詳細的分析了,樣本大致的行為如下:
1. 樣本執行后反連C&C服務器進行通信
109.73.234.241:80
185.22.67.108:80
2. 讀取用戶機器環境信息,并生成身份ID
3. POST用戶機器信息到C&C服務器
4. 獲取公鑰信息并加密對應文件
5. 釋放vssadmin.exe刪除所有副本文件
vssadmin.exe Delete Shadows /All /Quiet
6. 生成勒索提示文件,更改桌面
結束語
在我們的文章完成時這類樣本的所有下載地址均有效,基于360威脅情報中心監測數據,這類樣本在5月6日第一次被監控捕獲到,后續很可能會迎來一輪的增長
而國內用戶則不能因為此次中文Office天生“免疫”這批攻擊樣本而掉以輕心,可以預見未來勒索形式的惡意軟件會更多的被黑產團隊使用,對付這類攻擊目前依然只能以預防為主:安裝殺毒軟件、定期備份重要文件、打開陌生的郵件附件一定要多加小心。