360安全衛士 · 2016/06/22 14:53
你永遠叫不醒一個裝睡的人。但,快遞小哥可以!
雖說是一句戲言,但確實多少反映出了快遞在大家心中的重要性。如果你收到一個帶有快遞公司發來的電子郵件通知,你會不會也希望快點開啟看看是不是哪個朋友給你寄了什麼東西等著你去取呢?最近我們就收到了這樣的一個帶有“快遞單號”的電子郵件附件。唯一有些水土不服的就是——在中國用FedEx的確實並不很多……大寫的PITY……
0x00 木馬起始——FedEx_ID_00645987.doc.js
這個所謂的doc文件,其實是一個javascript指令碼,而指令碼的內容……好亂……
經過簡單的解密和格式整理,給大家呈現了一個比較漂亮的指令碼格式如下:
指令碼主要功能就是迴圈下載並執行木馬。指令碼中供提供了5個域名供下載(域名作用為備份,如果前面的域名可以下載,則不再嘗試後面的域名):
指令碼通過給URL傳遞不同引數的方式,獲取不同的檔案(返回狀態碼200且返回內容大於1000位元組即判斷為下載成功)。
最終木馬獲取如下檔案(p.s. 根據後續實測,這五個檔案仍在服務端不定期更新,本文僅描述文章撰寫時下載到的樣本行為):
如上表所示,指令碼下載到本地的5個檔案實際上被分成了3組:a1.exe和a2.exe各自獨立執行;a.exe、php4ts.dll和a.php則同為一組。必須三個檔案同時存在,指令碼才會執行該木馬,而且還會再執行完第三組之後打掃一下戰場——刪除掉木馬檔案並且修改登錄檔值用於關聯被加密的檔案:
根據VT的掃描結果來看,54家全球主流殺軟中有12款產品可以檢出該木馬:
0x01 PHP木馬分析
其實這個木馬最先引起我們興趣的是後面下載的這三個一組的檔案。之所以引起我們的興趣,是因為根據我們的記錄:a.exe和php4ts.dll其實都是人畜無害的合法程式。實際上,a.exe是PHP Thread Safe CGI(PHP執行緒安全通用網管介面),而php4ts.dll則是這個介面程式執行所必須匯入的一個動態庫檔案:
把話說的通俗點,這兩個程式其實就是一個php指令碼的直譯器。他們被下載下來的唯一目的——就是讓a.php可以執行。所以就讓我們看看這個a.php吧:
程式碼邏輯並不複雜,指令碼會遍歷C盤到Z盤的所有碟符下的檔案,並跳過含有以下字串的目錄:
- \winnt
- \boot
- \system
- \windows
- \tmp
- \temp
- \program
- \appdata
- \application
- \roaming
- \msoffice
- \temporary
- \cache
- recycle
查詢以下這些副檔名的檔案:
#!shell
zip|rar|r00|r01|r02|r03|7z|tar|gz|gzip|arc|arj|bz|bz2|bza|bzip|bzip2|ice|xls|xlsx|doc|docx|pdf|djvu|fb2|rtf|ppt|pptx|pps|sxi|odm|odt|mpp|ssh|pub|gpg|pgp|kdb|kdbx|als|aup|cpr|npr|cpp|bas|asm|cs|php|pas|class|py|pl|h|vb|vcproj|vbproj|java|bak|backup|mdb|accdb|mdf|odb|wdb|csv|tsv|sql|psd|eps|cdr|cpt|indd|dwg|ai|svg|max|skp|scad|cad|3ds|blend|lwo|lws|mb|slddrw|sldasm|sldprt|u3d|jpg|jpeg|tiff|tif|raw|avi|mpg|mp4|m4v|mpeg|mpe|wmf|wmv|veg|mov|3gp|flv|mkv|vob|rm|mp3|wav|asf|wma|m3u|midi|ogg|mid|vdi|vmdk|vhd|dsk|img|iso
複製程式碼
開啟每一個符合副檔名要求的檔案,讀取前1024位元組並和金鑰做迴圈異或加密。加密完成後再將修改後的檔案加上一個.crypted副檔名——萬事大吉。
只是讓我們很疑惑的是——雖然php這世界上最好的語言(好吧,這只是個梗),但木馬作者是如何用php在這麼一段並不算長的程式碼中實現不對稱加密的敲詐者程式碼的?
細讀程式碼之後恍然大悟——並沒有實現……這段程式碼的加密方式採用了對稱加密演算法,準確的說是迴圈異或加密。更加“人道主義”的是——這個php的加密程式碼其實是“兩用”的,只要修改指令碼中的一個引數,整個指令碼立刻成為了解密指令碼。可以直接將加密的文件解密回去:
所以說世界已經這麼亂了,不對稱加密的敲詐者滿天飛的今天,對稱加密敲詐者能不能就不要來添亂了?
當然,也並不是說這個指令碼就人畜無害了——對稱加密沒有金鑰想解開依然很麻煩,雖然我們這裡拿到金鑰了,但上面已經說了:木馬作者再服務端依然持續更新著木馬的內容,並且木馬執行後會自刪除,所以說雖然是對稱加密,但依然有可能因為找不到加密時的金鑰導致依然很難解開檔案(難,但並非無解)……
但這都不是重點,重點是木馬在加密完檔案之後給出的敲詐資訊:
相對於那些動輒兩三個比特幣的敲詐者木馬來說,0.40290個比特幣雖然有零有整的程度令人髮指,但確實也算是價錢厚道了。但你所謂的“RSA-1024”是什麼鬼?明明就是個簡單的迴圈異或加密好麼!不要假裝自己是高大上的不對稱加密好麼!WTF……
0x02 POWERSHELL木馬分析
然後我們再來說說兩個獨立執行的powershell木馬。雖然a1.exe與a2.exe是各自獨立執行的,但因為他們的行為基本相同,所以我們這裡合併為一個來做統一說明。
樣本首先會執行注入功能:
之後對執行緒做恢復以便執行注入後的程式碼:
完成後,惡意程式碼會檢測機器環境——對不知處powershell的系統安裝微軟的KB968930補丁(補丁相關說明:www.microsoft.com/en-us/downl…),新增對powershell的支援:
在確保使用者環境可以執行powershell之後,註冊一個檔案關聯,在檔案開啟的shell command中執行一段指令碼:
這是一段短小精悍的指令碼,但系統會根據這段短小的指令碼的指令,再次訪問登錄檔去執行登錄檔中的另一段惡意程式碼:
通過這種方式,惡意程式將惡意程式碼全部儲存在登錄檔中,而落地檔案只是用於觸發惡意程式碼的執行,本身並沒有惡意程式碼。落在本地的檔案根本沒有惡意程式碼,這樣就更容易繞開安全軟體的掃描檢測。
我們匯出含有惡意的程式碼的登錄檔內容,如下:
雖然已經是落在登錄檔中,但顯然木馬作者還是不放心——依然是用了多次的加密來掩蓋這段程式碼的行為意圖。經解密,我們得到的最終執行程式碼正是一段powershell程式碼:
顯然,雖然已經解密到最終一步,但中間的變數“$sc32”依然讓人看著有些不知所云……但看到ps1程式碼的最後,發現其實這已經是最終程式碼了。最終就是將$sc32的內容全部載入帶記憶體中執行:
我們把資料dump出來,發現程式碼會從遠端下載檔案到本地執行,並且還會判斷一下檔案是否是有效的可執行程式——典型的下載者木馬:
0x03 非PE漸成趨勢
隨著安全軟體的普及,木馬病毒與安全軟體的對抗也逐漸變成了“近身肉搏戰”,大家都在鑽細節,都想在對方忽略的某個小點上做單點突破——這樣一來,各種指令碼甚至連指令碼都不算的資料檔案就顯現除了相對於傳統PE格式木馬更多的優勢。
這次出現的敲詐者木馬就是典型的例子——一個javascript指令碼木馬釋放出了一個php指令碼木馬和兩個powershell指令碼木馬。而powershell木馬甚至都沒有落成ps1指令碼而是直接在登錄檔中儲存,php木馬有落地的php檔案,但php指令碼既然能實現對稱加密的敲詐者木馬,更高一級的不對稱加密敲詐者木馬真的還會遠麼?
當然,並不是說非PE就可以為所欲為了,既然是近身肉搏,安全軟體的響應自然也不會處於下風——兵來將擋水來土掩,我們已經做好了戰鬥準備。