目录导航
在上一篇文章中,我们简要回顾了现代防病毒软件的工作原理,并展示了 shellter 实用程序如何在自动模式下工作。该实用程序的结果很有趣,但在实际渗透测试中几乎不适用。显然,需要改变。了解了杀毒软件的原理(行为分析、签名等我们在上一篇文章中讨论过的理论),让我们尝试改进shellter的结果。
准备手动配置shellter
首先,我们使用众所周知的msfvenom自己生成payload。我们生成了一个具有相同功能的payload,reverse-shell。与在自动模式下一样,在我们的服务器所在的103.86.96.23(地址是随机选择的)上打开到端口 443 的连接。我们使用shikata ga nai编码器对 payload 进行编码,重复编码 10 次。另外:exitfunc = thread,这将允许我们的进程在安装程序文件完成时继续工作(如果我们计划保存带有“干净”文件的功能,这是一个强制性选项)。
该文件比未编码的文件稍大,但我们希望某些防病毒软件没有这样的签名。启动 shellter 并选择手动模式。
启动shellter:回答程序问题
shellter 立即开始提问。第一个是:是否应该包含动态线程上下文信息集合?我们回答“不”。否则,此操作将减少可用注入点的数量。仅当您要仔细跟踪大文件时才启用此选项。该选项包括一个额外的过滤阶段。
然后我们指定shellter 必须跟踪的指令数量,以便进入下一阶段。最好在指定数量时留有余量:在任何时候都可以中断跟踪并进行下一阶段的工作。处理器能力很重要,我们专注于它。
我们打开自修改代码的检查:否则,我们可能会遇到无法正常工作的漏洞。当然,shellter 无论如何都会做这样的检查:这个问题涉及检测在刷新执行日志之前将自身修改回原始代码的代码。这样的检查会稍微减慢对入口点的搜索,但不会有什么坏处。如果您确定源文件中缺少此功能,请随时禁用扫描。
是否应该跟踪所有线程?取决于处理能力。我们回答“否”以加快搜索速度。我们指定不实时显示跟踪,因为这也会减慢跟踪过程。
跟踪后过滤和解码器混淆
跟踪后,开始过滤结果的第一阶段。我们开启“隐藏”模式,即我们保存现有的功能,然后指定“自定义 payload ”。当然,它不是反射 DLL。请另外混淆shellter用于解包代码的解码器,并使用我们自己的序列进行编码。我们用任何简单的脚本生成这个序列。粗略的python示例:
import random random.seed() line=" "
for i in range(0,300) : r=random.randrange(4)
if r==0 and line[-1]!="x": line=line+"x"
elif r==1 and line[-1]!="!": line=line+"!"
elif r==2 and line[-1]!="-":
line=line+"+"
elif r==3 and line[-1]!="+": line=line+"-"
期望序列是长且唯一的。需要进行混淆,以防止杀毒软件识别我们之前使用的熟悉的反向 shell 模式(即使它是在创建时编码的,但额外的保证不会受到伤害)。
Shellter 会“思考”并进入 IAT 处理程序阶段。这些是加载编码payload的方法。根据源媒体文件,选择会有所不同。在自动模式下,shellter 随机选择一种可用的方法。我们将选择 LoadLibrary。
在 payload 前添加多态代码。我们使用大约为 payload 大小一半的自动生成的代码。多态代码的长度取决于我们所针对的防病毒软件跟踪代码的程度。
最后一步:完成实施
在第二阶段,Shellter 报告已找到 44 个匹配的入口点。让我们来看看它们。
让我们选择第 32 个。Shellter 完成注入代码并验证我们文件中的代码是否运行。
请注意,由于我们使用的是来自多态代码的插入,因此会检查此插入的第一条指令的可达性,而不是 payload 。让我们以与 Virustotal 上的第一篇文章相同的方式检查我们的文件。情况略有好转。
例如,生成的文件可以嵌入到安装了防病毒软件的系统中:卡巴斯基、迈克菲、Clam AV、赛门铁克。有趣的是,Windows Defender 仍然将该文件识别为木马。最有可能的是,上述防病毒软件大约在嵌入的多态代码中间停止跟踪文件。
结论:如果我们假设在测试系统上(在目标上)使用了跟踪指令的防病毒软件,那么我们会在payload前注入一长段多态代码。
看看Virustotal对沙箱中文件行为的分析。此分析显示了防病毒软件对生成的文件的了解。正如您在屏幕截图中看到的,建立远程连接的尝试清晰可见。
我们如何处理检测到恶意文件的防病毒软件?
将 msfvenom 中的编码迭代增加到三百个,并没有带来积极的结果,它只会使对入口点的搜索变得复杂(payload大小几乎是 9 KB)。我们将在下一篇文章中讨论这个实验和其他绕过防病毒软件的尝试。