从您引用的论文中,额外的共生体都会使代码重写场景复杂化,使理论上禁用它们更加困难;并且可以使共生体相互保护,使它们几乎不可能被禁用。
攻击者需要获得所有入口点的精确图像并一举将其全部禁用,然后 Symbiote 的任何完整性例程才能执行到足以识别威胁(请记住,它们是多任务的 - 攻击者可能不是' t,并且可以想象在短时间内可以使用整个 CPU 功率)。
但是,要做到这一点,攻击者需要按照您的建议进行 - 慢慢复制图像以进行分析。在提议的场景中,这是不可行的,因为执行复制的代码会在执行任何危险操作之前很久就被识别出来。它需要在受害机器上执行,并且该机器是共生的。缓慢复制图像只会让共生体有更多时间来注意复制说明,而快速复制则会引起对复制本身的注意。
我也不是太清楚就如何将两个共生菌可以保护彼此,虽然-在我看来,这将需要一些方法使第二共生体,成为已知的(和信任)到第一,这可能暗示一个可能的攻击向量。但这可能是我的疏忽:我没有深入研究过这篇论文。
这也可以提供一种绕过安全性的可能方法(特别是如果 Symbiote 执行速度不是很快):
SEM 注入过程需要一些特定于目标固件的参数,包括随机选择的控制流截取点和可用内存位置的列表。所有这些参数都是通过对目标二进制文件的简单单遍分析自动计算的
理想情况下,攻击者知道目标系统,并且必须被认为拥有 Symbiote 注入器的副本。因此,他可以事先远程运行相同的单程分析,并得出一个庞大但有限的拦截点列表及其原始内容(攻击者可能从受害操作系统的原始图像中获取)。尽管它可能很大,但它肯定会比整个受害者操作系统映像小得多。
因此,作为第一阶段,他可以设计一种由漏洞利用和代码组成的“去共生”导弹,以将所有这些控制点恢复正常。这样的代码将包含一个长长的内存位置列表(可以使用增量策略轻松压缩)以及要在其中插入的内容。
如果这样的代码要在 Symbiote 检查和下一个检查之间执行,并且如果它没有在Symbiote 执行调用中触发(这可能会导致崩溃),那么目标系统中的所有 Symbiote 都将被渲染为惰性。这可能对 Symbiote 在对其 Manager 的两次连续调用之间可能执行的操作构成了上限——调用必须精简且快速,以便在完全部署之前检测到传入的攻击。
使用论文中的实际数字,Doppelganger 共生体可以使用大约 75K 函数。这可能需要 75k 地址和 75k DWORDs(大概)被解散。35 Mb 空间中的 75k 个地址平均相隔大约 0.5 KB。钩状区域也可能具有降低的可变性——即,它们是非常相似的前导码。在这种情况下,攻击者只需要传输大约 75k 地址增量 - 大约 150 Kb - 并且可能需要相同数量的数据。处理 300 Kb 的信息不会需要很长时间,而 300 Kb 的攻击包虽然笨拙,但并非不合理。
可能,Symbioting 操作还可能在主机操作系统上执行一些多态手术,以增加攻击者“盲恢复”所需的数据。不过,这将要求注入器不与操作系统无关。Manager 可能会在其两个激活点之间选择一个大的无分支代码段,并用另一种紧急激活机制替换它。第一个激活点会将其设置回将执行的原始代码,并且将再次被第二个激活调用的紧急代码替换。如果攻击者移除所有激活点,紧急代码将永远不会被换出,下一个执行周期将激活它,攻击将被阻止。
虽然合适的代码段数量可能相对较少,但攻击者发现自己遇到了一种 Merkle 谜题——他不知道哪个代码段被诱杀,因此他必须处理所有代码段;而且它们很大。这夸大了成功攻击的代码大小要求,使其回到“原始非共生图像的副本”的不可行价值。