『壹』 如何利用Locky勒索軟體漏洞製造「疫苗」
接下來,我們會在不與用戶進行交互的情況下將」疫苗」應用於任何旨在阻止相關功能的細微系統改造中,這些改造是為了阻止因惡意程序的執行而引發的負面影響。顯而易見的是,」疫苗」的使用必須是在受到病毒感染之前。
這種細微的修改可能是一個具體的互斥體和注冊表的創建,或是簡單地系統參數的修正,反正這些都不會給用戶造成任何不便。下面是一個例子,在其執行的初始階段,Locky鎖定了系統語言,但是沒有感染俄語的相關配置:
因此,如果設置系統語言為俄語,那麼該系統就不會被感染,而一般情況下很少有人會更改這個設置。
疫苗#1:Locky注冊表項中的ACL
在檢查系統語言之後,Locky會試圖創建 HKCU\Software\Locky 注冊表;一旦失敗,Locky便會立刻停止。
在Locky之前使用ACL創建此密鑰可以阻止任何人進入,這樣該系統就完成「疫苗」的接種了。
疫苗#2:已完成的注冊表值
之後Locky會檢查HKCU\Software\Locky
密鑰,然後尋找ID(被感染的識別碼)、公共密鑰(從伺服器提取的密鑰,之後會詳細解釋)、支付文本(以指定語言呈現給用戶的文本)和完整的注冊表值。最後的注冊表值會顯示加密過程的最後一步。Locky會進行驗證,如果是完整的注冊表值,那就會標示為1;如果ID值中還是包含正確的系統識別符,那它會停止運行:
標示符生成演算法其實很簡單,在我們的測試中得到這樣的結果:
1、GetWindowsDirectoryA() : C:\WINDOWS
2.(C:\WINDOWS) : \\?\Volume{ b17db400-ae8a-11de-9cee-806d6172696f}
3.md5({b17db400-ae8a-11de-9cee-806d6172696f}) :
4.轉換為大寫ASCII並截取前16位字元: 1D9076E6FD853AB6
創建這兩個注冊表,其中一個是與系統有關的,通過加密阻止Locky:
疫苗#3:損壞的RSA密鑰
在加密文件之前,Locky用下面的數據向C&C發送一個HTTP POST請求:
(gdb) hexmp 0x923770 0x65
88 09 0c da 46 fd 2c de 1d e8 e4 45 89 18 ae 46 |....F.,....E...F|
69 64 3d 31 44 39 30 37 36 45 36 46 44 38 35 33 |id=1D9076E6FD853|
41 42 36 26 61 63 74 3d 67 65 74 6b 65 79 26 61 |AB6&act=getkey&a|
66 66 69 64 3d 33 26 6c 61 6e 67 3d 66 72 26 63 |ffid=3&lang=fr&c|
6f 72 70 3d 30 26 73 65 72 76 3d 30 26 6f 73 3d |orp=0&serv=0&os=|
57 69 6e 64 6f 77 73 2b 58 50 26 73 70 3d 32 26 |Windows+XP&sp=2&|
78 36 34 3d 30 |x64=0
第一行是緩沖區的部分MD5 Hash值。數據會在發送之前進行簡單編碼的:
解碼響應數據是通過這種類似的演算法:
這兩種演算法可以通過幾行Python實現:
def encode(buff):
buff = md5(buff).digest() + buff
out = ""
key = 0xcd43ef19
for index in range(len(buff)):
ebx = ord(buff[index])
ecx = (ror(key, 5) - rol(index, 0x0d)) ^ ebx
out += chr(ecx & 0xff)
edx = (rol(ebx, index & 0x1f) + ror(key, 1)) & 0xffffffff
ecx = (ror(index, 0x17) + 0x53702f68) & 0xffffffff
key = edx ^ ecx
return out
def decode(buff):
out = ""
key = 0xaff49754
for index in range(len(buff)):
eax = (ord(buff[index]) - index - rol(key, 3)) & 0xff
out += chr(eax)
key += ((ror(eax, 0xb) ^ rol(key, 5) ^ index) + 0xb834f2d1) & 0xffffffff
return out
編碼之後的數據如下:
00000000: 3af6 b4e2 83b1 6405 0758 854f b971 a80a :.....d..X.O.q..
00000010: 0602 0000 00a4 0000 5253 4131 0008 0000 ........RSA1....
00000020: 0100 0100 2160 3262 90cb 7be6 9b94 d54a ....!`2b..{....J
00000030: 45e0 b6c3 f624 1ec5 3f28 7d06 c868 ca45 E....$..?(}..h.E
00000040: c374 250f 9ed9 91d3 3bd2 b20f b843 f9a3 .t%.....;....C..
00000050: 1150 5af5 4478 4e90 0af9 1e89 66d2 9860 .PZ.DxN.....f..`
00000060: 4b60 a289 1a16 c258 3754 5be6 7ae3 a75a K`.....X7T[.z..Z
00000070: 0be4 0783 9f18 46e4 80f7 8195 be65 078e ......F......e..
00000080: de62 3793 2fa6 cead d661 e7e4 2b40 c92b .b7./....a..+@.+
00000090: 23c9 4ab3 c3aa b560 2258 849c b9fc b1a7 #.J....`"X......
000000a0: b03f d9b1 e5ee 278c bf75 040b 5f48 9501 .?....'..u.._H..
000000b0: 80f6 0cbf 2bb4 04eb a4b5 7e8d 30ad f4d4 ....+.....~.0...
000000c0: 70ba f8fb ddae 7270 9103 d385 359a 5a91 p.....rp....5.Z.
000000d0: 4995 9996 3620 3a12 168e f113 1753 d18b I...6 :......S..
000000e0: fdac 1eed 25a1 fa5c 0d54 6d9c dcbd 9cb7 ....%..\.Tm.....
000000f0: 4b8e 1228 8b70 be13 2bfd face f91a 8481 K..(.p..+.......
00000100: dc33 185e b181 8b0f ccbd f89d 67d3 afa8 .3.^........g...
00000110: c680 17d8 0100 6438 4eba a7b7 04b1 d00f ......d8N.......
00000120: c4fc 94ba