安全路透社
当前位置:安全路透社 > 安全客 > 正文

【木马分析】利用微软签名文件加载的Graftor变种分析

http://p1.qhimg.com/t0109d6b636446a82af.jpg

前言

DLL劫持如今已不是一项新技术,但这并不影响这项技术的有效性。当一个经过微软签名的普通PE文件被设置为Windows的每日计划任务时,包括IT人士在内的大多数人通常会认为这不过是微软为保证操作系统正常运行而设置的计划任务之一而已,然而这种感觉并非总是正确的。

Cylance最近观察到了Graftor家族的一个变种,该变种利用微软SrcTool.exe工具进行恶意活动。SrcTools是微软签名的一款工具,容易受到路径加载顺序拦截形式的DLL劫持攻击。它在运行时动态加载了DbgHelp.dll这个文件(DbgHelp.dll在各个版本的Windows中都存在),当恶意DLL使用了与DbgHelp.dll相同的文件名,且设置了相同的导出函数时,只要放置在合适的DLL搜索目录中,就可被SrcTools优先加载。

该恶意软件外在表现与木马一致,仅仅是实现了SrcTool所需要使用的基本函数,劫持这些函数,并将SrcTool的初始化指令替换为自己的恶意代码,以试图对抗在静态及动态层面上对它分析。

两个DbgHelp.dll的比较分析

原始DbgHelp.dll与恶意DbgHelp.dll的不同首先表现在两者大小的不同。标准Windows 7 SP1系统上DbgHelp.dll的大小超过800KB,而恶意DLL的大小仅仅为23到24KB(如图1所示)。

http://p2.qhimg.com/t019c7799613301d91d.png

图1. 正常Dbghelp.dll(左图)与恶意DbgHelp.dll(右图)的大小对比

原始DLL要满足很多程序的调用需求,因此导出函数数量众多,恶意DLL只使用了部分导出函数。原始DLL包含206个导出函数,与此同时,恶意DLL仅有22个导出函数,且使用了一个原始DLL中不存在的导出函数名“DLLMain(x,x,x)”(如图2红色高亮部分所示)。这足以说明恶意DLL目的并不在于实现原始DLL的所有功能。

http://p4.qhimg.com/t013aedc80ee1802aa8.png

图2.正常DLL(左图)与恶意DLL(右图)导出函数的对比

恶意DLL的导出函数名可以作为指纹索引,引导我们发现该恶意DLL所劫持攻击的目标。SrcTool.exe所使用的函数正是恶意Dbghelp.dll所导出的那些函数名(如图3所示),因此这个恶意DLL的目的就是当系统在搜索SrcTool依赖库时,覆盖掉最基本的那些函数。通过下文的分析,我们可以得知,SrcTool仅有的作用是被恶意DLL当成一个中间跳板,它本身的代码根本没得到机会运行。

http://p9.qhimg.com/t01d72a62a74693368d.png

图3.SrcTool.exe所导入的Dbghelp.dll的函数(左图)

与恶意Dbghelp.dll所导出的函数对比(右图)

恶意代码调用

所有DLL劫持的目的都是获得代码执行机会,有各种各样的方法能达到这个目的。本文分析的这款恶意软件采用了一种相当粗暴直接的办法,就是直接覆盖加载进程的入口点。对比两份DLL文件入口点函数,可以看出两者在代码流程上的一个重大不同。如图4所示,恶意DLL代码在返回调用函数前,调用了另一个函数,这个函数内部相当复杂,但最终的结果就是调用图2中高亮的DllMain函数。

http://p0.qhimg.com/t01971f436592d02a25.png

图4.恶意DLL(左图)与正常DLL(右图)入口点对比

DllMain函数首先判断fwdReason的值,若等于1则将堆栈变量设为MaliciousFunction的偏移量,随后调用OverwriteEntryPoint(如图5所示)。OverwriteEntryPoint开启一个子线程,查找载入进程的入口点,并用JMP(0xE9)指令将其覆盖到栈上传递的恶意函数地址(如图6所示)。经过这一系列动作,当系统调用Srctool并完成相关依赖项加载后,恶意函数就会被运行。

http://p3.qhimg.com/t013b341536cb74dc31.png

图5. 恶意DLL的DllMain函数

http://p2.qhimg.com/t013d6279ca0a5560d4.png

图6. 恶意DLL的OverwriteEntryPoint函数

MaliciousFunction代码分析

对MaliciousFunction进行分析后得知,该函数试图获取控制台窗口的句柄(假设Srctool运行时该控制台存在),最小化控制台窗口以隐藏其恶意行为,随后该函数将某局部变量作为文件名加以硬编码(如图7所示)。恶意软件作者将该值逐一字节赋值的原因是想进一步对代码加以混淆。

http://p5.qhimg.com/t012f3b6643dc01634b.png

图7. ADS中数据的混淆与执行

硬编码的文件名使用了一种备用数据流(ADS,alternate data stream)的命名法,这种方法通常是操作系统处理核心文件I/O例程的常用办法,这是一个很好的隐藏技术。备用数据流的文件与正常文件相比没有任何区别,除非刻意去寻找,否则用户或管理员永远不会注意到这种ADS文件。

一旦函数从流中读取到数据,它会对字节进行反混淆(如图8所示),最终在堆上分配内存并从该数据执行相应代码。因为许多安全工具会自动检查ADS文件并扫描所找到的内容,因此数据的混淆是必要的。所使用的混淆方法会舍弃任何文件类型以及字符串检查。恶意代码最终以ExitProcess的调用作为结束,没涉及到SrcTool的功能,因此SrcTool的作用仅仅是被当作恶意代码的掩护载体。

http://p5.qhimg.com/t012c2aa25abfd60fa7.png

图8. ADS中数据的混淆与执行

结论

虽然Dbghelp.dll明显是恶意的,但如果没有具备几个关键的环境条件,没有SrcTool以及ADS文件中的有效载荷,这个DLL并不能进行恶意活动。对SrcTool的使用似乎只是存粹的载体伪装,以便设为计划任务运行或在启动时运行。作为一个签名的可执行文件,这种行为并不引起大多数用户或者IT人士的关注。

因为缺乏ADS文件中有效载荷,我们无法确定这个恶意软件的最终目的,但我们仍然可以得出结论,就是这种非常优秀的持久化机制可以方便恶意软件隐蔽自身行为。

防御措施

不幸的是,DLL劫持跟多的是可执行文件本身在实现逻辑上的缺陷,因此用户端的防御措施并不是特别有效。唯一的防御措施是确保SafeDllSearchMode选项被正确配置启用,通常情况下,所有支持的Windows版本上都默认启用了该功能。此外,相对于默认的DLL搜索顺序而言,软件开发者可采用绝对路径搜索的方式以减少受到DLL劫持的风险。

ADS文件中的随机数据虽然可能是某些恶意活动的外在表现,但因为ADS文件被操作系统作为NT文件系统的核心功能以各种方式加以利用,因此ADS文件的存在并不能作为恶意软件存在的判断依据。

攻击指示器(IOCs,Indicators of Compromise)

SHA-256哈希值

02FBC1019C1C5BB7A424D473F6507D69201B15DF50FB99599EFD7FE3C54B5DA8
14ADEBC453CB40142DA98CD562A08ED66ECE45DD1D77F4340972C391FBEE6C59
2AF9C1CD31091E04D56AB64A1E08B84C6964B675D76FC0A591C28470A63469F4
2B42203DE5E328D6064401F3E1D6546BA05925D76D8EAB4FC4B2B1CD2A69562B
2D6B2D1A1FF61DC6127F5BC1A2CE284CC48F6B3768B307A237F91014CA0AF327
31547B1FD319F9EA29029AD5AD832B3C5FBDF32B8C85AA326F3DF02F993F2F2D
31FF6C377CEDF8E2F284B93E05BF747E68DA19EE8784D0AB99B28E1CA7B9B12F
3ADEA819A24300DF8DAB9D416F1717D21B1AD7608EF54FE497E7303CE79EF11F
3CE90A26BE7509EB69BEFDD3F24DA2821914151506392FEB2C7600B33CF0C1C7
3FA6EB80D93F05FEE54646B0BD6EB96920A82D66B687079697A0589C304AE2B6
450A8BFC15F4535AD088538B1A6A0EB0918A6C414DBE2957E982BDC67C45F2EA
471C78BD59AA9C1F0B972587C42F96E36F8C324BB758C68398ACAE40295AEB58
4E05CBD540D875DC4355FF535750DEF9992F1A346FB4617BD210E9BD88EB4A51
509C12031C15AD53B6D940060B286E9BFDA9B2FAEE4CC2B2B3D0E17E619AD76D
53E5CF1D96F9775696F3B00D5ACBDB46FA9304B437DF07A5FA6A0BAD85A61E86
55E653BF7EB4B0A6D746D0E4ADC71A798AA45241D08E9658C2A870FE6CF955B1
5AF409489C14A8D5CE83CD7EA0C9D5B24E1CA4F2122E16A1225A7E69211E9FB4
5D2BBE85FC476488E5D5CD5FF969A9670E0A8114817C35075D5C4098CB80C376
60FBDAE2F9DC8294D5628B656A5999AEB9EE6198781CB3F2450B9D50294400AB
66DAD7C7831C79040D04A4E5F8749D5763B994F9A3FAA085583E84E613BB4FFC
69BFD92E888EEDA8912ABB573424A50AB4E964F9C0630B618A247CCC75F20A35
6AE915C365579FAAA5695DB6050BA8D40B10D86A6BE86964CE87EDAF6EA03154
73ADD65DB1F824EC696C7756F1BF0014F52A00361876487070189BD4994729F0
747EE7DD649C07693AF284741BD1AB7870C433BCBF13C6B3EB2CE88A6E1DFD93
7F1C6B4E4D15B67DD8CA8F68EC14E00613656F9BB428B7F85CB328CC32B1A4DC
820FB00A650E13F6765645D7DCFACF13BA73853ACF260F5A20220CA780C48D39
876D83C3B1A5A2BCA55176A6BC739213AD0B6039A0ECB03613A05ECDA0CE5914
8772C2BC70174A81E9DA222B7D3ADDC1124B1589495EF67CF2727F2B518CAACF
92FE8C00F8BD98A858B4AC6DAE69FC4D0AEDBF7F0DE703DF02EC95461175C463
947E673CBF5157FC17CD81B650A8BCCD3F598589F3D55F416616CF58F4F9087E
955D09A47A5EF81024BAF4FF1F456FCF5C2F7AE73335D9EDE4E5294AF25F403D
99D3ACAE2779EE5C42B68DBF35A851529F00C191E8694D6910E050722E4E0318
9D83C8625E81F5454396184ACFC536AF29B33838D0327A0BE8E6805631911CE0
A2B62168B6365592FAEB56171A3DFE08691AF5BEBC7585F2D67B997591DD2422
A55C036CDF0D35B54A0E921B9BAC3FF2B34BF0BAC21B1CB6E44C9A63C6C32F91
A5EB757AAABDB4FE2F9C65014F4901AE5C14893B8D39B43FD4D37610C120ACE8
A61FA48DE7682C975FFD46E4A2DC16BC244DBF286049D9C082966373740EE395
A7D50571B7764C66CF7FF7E2D039E82A2C1C5B1D78400AEC1037820956A915DF
A876198B78E9662F6AE69206BD36DD2C78031D976BBF2BB88FF9D307B76DE068
A90C1F2245D5631D5804B87D4C5F36C085B90137E1263F4BA22D6D0D67C5EAD4
B58924EC4A76B807CEE08AFE7948C812163038ADC6C5D4221AFAEDBE9BAB096A
B7A294E3BEE5BCF4730F31F0ECB8639255BFFE0A1474F4334E155C2BD35BC27F
BAA7895FFEE85B15B96DFFCD2B7CB99CD4A75EEC3A6DF4A355B80EE38893F5FD
BD756F9A0631C1770A3B1CCC6A75848E6C3A4849AA7F379ECDC019AD8F3BD1CC
BDE84338A10B9CD160E0ADA5660552F925F4C07B1DFC53A59FAC0CB60EFD26BF
BFE2C9344E81A422CC9FB592475E942CD4DF673B33D0538566D914982008FD88
C4FD83B9C7818F5C2F620701A7E460C16A9C09A424B133A9B42477F127A095A3
C7E7D5925DDA7BE16CC1491192BA408F783DFED86F1A2CE67F74863C39EE4853
CB3794EC3B53993C505C371E7DC1C4468FECC9C5D67F60355C1B0E408AE35F6E
CC14C1B87E8F064AE5535E0A3D43650EB0DA04D67D9B948B143E67D673BB51D9
D3B4EBD893F6288BDB85F6EAF0FAF2C547C9A055BE5D684D91F621BC4DB50380
DD3C9C034324816B1A481EDF412FC8F80C4972503226CC4B60A1B105D2529F21
DFD4918D8E8ECC00E43D1A4FA962ADB8C0FA8D8EA0D984AB842EEC52647508ED
E22FE9DF7CDF9DFFDDA7F771B4C3C6F979BC1407D84C1D55FC765C3807FCB14A
E350698FD4074C40D696AA6FCFBCFD71423445802BA56A922DC2972E6F21173B
E4667D623BBC441927A6AEFD195A95D91DC95E08B5484703E9E47CDCC73A9219
E8CE5E24DBD934AA04490033C9FA8E25B7941766C0CFD51ABB79ECC013811251
ED4C64AAEB1328870677395C0B8C315CEB931B5C18BD7871ADE8AE1249F8B77F
F27E7C2AEFB5D193CCC5B89CE5CA3B7B9BDC4C9ED25EEAAEB1191712F069F0F4
F90362494020D12A2B3173DA6EBB86773F9318C712C15DCA9602465AE27B9371
FE5B96AA6E96C73BB785982BE3CA845177809BE0FE0180B567ABBD677E7BA711

文件名

qmQquY:FSHxIzZPu53gRHmbxVpqc
QJYtZO:wCVUH5xFhQ7L8r
iTcbnj:Gibb9Y9KKuwvlV8AYjvCPjCvC23A
t0LDyy:Om4q3n0Y2UPQJS
CfXehY:yHhV6Umvim2oVV6GvW7dBcVwV8Yz
g9pznO:q6rtdx7KvtfYQ8jnGbbgsReje6WN
duqVdl:1T0KdhsgPyoJ0YmDTf
Ett4fk:fRKTiowtfthpTOma23i5jGls1
DsbIAy:j72z5bk0xeAKApATOZCxUvYbb
yPk3bD:SUfDRlI5AT1ZhMaRhB82ZrjC
SbwPZI:bgJqayyiGS8CMZU5wNiGP53u8tLh
hzYZqE:3stZ6hwUYYfsQU
GATazM:mVR8LbxqZK8
46If2c:SHo5ujOfk
1UxBZ0:6qg2CrT1mysZQYaxIe
cPAyKU:o2CSWOTnStUNfXcew52cAidTcP
evLAEp:UxrqTeoxS7NXVvjIaUO5
6auL84:3R9m6zdnOGmn2gwCRymnpqCRiqGArWq
it0H8N:bErumpDkfy
YijER1:oXeGwCme0s
2O7AnX:TgVdArb
CKHPX1:fPfSGwLWDpfGXAaSakFY2CnAxe3S
RqGh8V:sJDjNmh5mqjVWPwttn9EZ5xs3M
znsZzb:nSOcEwhS3
AVOxiq:xYO6YxlnGXRCFKCN4KXW9FDOhUuhY1
4eAdXu:cNbIS649mjGUJ
MXXua7:NPZhR9q9fJ
54jrcv:nhUYkKdtx5f1fbtEvK4SbDvxjzH0j2
x0fgzd:TreEvLuss7RaKon
tQnYEz:nESdg4T1ytZj5fVVvygmjn
5U8HPW:lIUEf9wuYIgnQwtyeQh
SHa4OE:ZlUAkVEmKO
q4OBw9:6uUat37t
W8VkwP:xZ0OGjLGBYD7rsbNAxrSBp5lXPM
frVV4j:aDV5BEnlnZ16YPvEjH8H4vPwNb956MC
3brH7X:J9hGIYnGul8Mayj
48g10c:zDbLju6OTP5Uh9fEqN3vkg
Wkg8i8:gnUCkJhXLXnO765jlpFu0yiem
0SIDDy:ZzlBgOAm08Z5UT2uz5kRbt9VGhwgtoNe
4hdVCq:OuR75ogoDV
DQmiZP:H4t1rfGSWPbRJo
EyvB7C:lUJUeODp5F4ThaA6NWt
AAaWxW:PF2xTyyCZJKZQw74kZgUn
hH18UT:e2ChiKKBfT4A
nPXhf3:wmOt8ItIlmjNI6fmGbgzKw
0H7cgO:b90CHGl6L0FLe6EcqNTt1sYdC
pQrfsY:qo77f8ZdGjof9G0mnvYn
Lpf2Bw:dX5C5zmZ7lHvAasq1adk6lJsf
5I6rwI:zVXuAhKz1Hb
InA4KS:10v05t9TVG8AXGWss
u8Pu1Q:52SGgJDVF2H
AUndFX:Z5oNzEHJedrOuFj7jbFh
nEn6fk:u5FELEogUb0fqnHYLQZOITlFsM
SU5jzH:gZoErLYyp6SPboG0RCx942QeZX
TFJmBo:WkaTSvo0C
ifZmRA:4qA5KBVhTohQNMmer1m
RDG2Xs:3OxZHUcWlooLLbVKv
YpZWy7:qP04TQLIgdAbGGt
Tj0t2b:C5vTIuAaA5oNHj9kv2zwMn
p8EK7F:Rl69
5XMaVZ:7bhV


原文链接:https://blog.cylance.com/graftor-variant-leveraging-signed-microsoft-executable

未经允许不得转载:安全路透社 » 【木马分析】利用微软签名文件加载的Graftor变种分析

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册