‘壹’ 如何利用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