网络主机定位与代码注入攻击防护技术
在网络安全领域,准确识别恶意主机位置以及有效防范代码注入攻击是至关重要的任务。下面将分别介绍相关技术的实验结果、面临的攻击与不足,以及一种新的代码注入攻击防护方法。
网络主机定位实验
在首次测试中,选取了一组已知主机(目标),计算它们的网络坐标,并评估将这些网络坐标映射回 IP 地址的方法的有效性。具体操作是对八个不同的主机应用该技术,使用不同的参数 p(候选集中 C 类网络必须出现的比例,才能在结果中报告)。p 值越大,报告的网络越少(即结果集更紧凑),但也更有可能错过主机的真实位置。所有实验均在 n = 10、d = 2 和阈值 = 10 的条件下进行。
| Target | p | Intersection Found |
|---|---|---|
| 128.111.4.0 | 100% | 2 ✓ |
| 128.111.4.0 | 50% | 75 ✓ |
| 128.111.4.0 | 30% | 75 ✓ |
| 128.111.4.0 | 10% | 75 ✓ |
| 159.149.153.0 | 100% | 0 |
| 159.149.153.0 | 50% | 2 |
| 159.149.153.0 | 30% | 31 ✓ |
| 159.149.153.0 | 10% | 31 ✓ |
| 114.108.44.0 | 100% | 0 |
| 114.108.44.0 | 50% | 6 |
| 114.108.44.0 | 30% | 54 ✓ |
| 114.108.44.0 | 10% | 77 ✓ |
| 99.54.140.0 | 100% | 0 |
| 99.54.140.0 | 50% | 0 |
| 99.54.140.0 | 30% | 0 |
| 99.54.140.0 | 10% | 1 |
| 85.17.143.0 | 100% | 1 |
| 85.17.143.0 | 50% | 48 ✓ |
| 85.17.143.0 | 30% | 48 ✓ |
| 85.17.143.0 | 10% | 82 ✓ |
| 114.108.82.0 | 100% | 0 |
| 114.108.82.0 | 50% | 6 |
| 114.108.82.0 | 30% | 71 ✓ |
| 114.108.82.0 | 10% | 71 ✓ |
| 59.136.176.0 | 100% | 0 |
| 59.136.176.0 | 50% | 149 ✓ |
| 59.136.176.0 | 30% | 196 ✓ |
| 59.136.176.0 | 10% | 222 ✓ |
| 93.160.107.1 | 100% | 0 |
| 93.160.107.1 | 50% | 2 |
| 93.160.107.1 | 30% | 10 |
| 93.160.107.1 | 10% | 115 ✓ |
从表中可以看出,p = 30 似乎在检测和精度之间提供了一个很好的折衷。在 8 个案例中的 6 个中,检测到了网络的真实位置,并且潜在的 C 类网络数量通常少于 100 个。值得注意的是,在寻找目标子网 99.54.140.0/24 时,除了 p = 10% 的情况外,未能找到任何非空交集。经调查发现,对该子网附近节点的网络坐标了解甚少,导致最接近节点集的元素与目标的平均距离为 30,而在其他成功案例中,平均距离在 0.5 到 8 之间。因此,了解目标附近主机的网络坐标是确定目标可能所属节点集的先决条件。
还对初始节点数 n、距离 d 和阈值 t 进行了不同参数设置的测试:
- 当使用 d = 3 而不是 d = 2 时,结果相似,但精度开始下降,结果集增大。
- 改变初始近节点数 n 并没有显著改善结果。
- 最有趣的参数是阈值。使用小于 10 的阈值可以显著减小交集的大小。例如,当阈值 = 2 时,可以将交集修剪为两个节点,甚至一个节点,并且仍然能找到目标。但由于在实际的母舰(控制服务器)情况下需要考虑噪声,所以采用了更保守的方法(阈值 = 10)。
此外,还研究了结果交集中的子网由多少个不同的自治系统(AS)覆盖。令人鼓舞的是,在大多数实验中,交集中包含的所有子网都属于同一个 AS。这有助于更精确地识别母舰,因为一旦发现母舰所属的 AS,就可以与相应的 ISP 或机构合作,分析网络流量或在 AS 网络中进行扫描,以更精确地检测母舰。
为了证明该方法在真实僵尸网络中的有效性,对当时活跃的 Waledac 僵尸网络进行了分析:
1. 将与该僵尸网络相关的四个快速流量域名输入到 MISHIMA 中,识别出 335 个作为其母舰代理的主机。
2. 计算它们的网络坐标并运行 IP 检测算法,得到母舰可能位于的 48 个 C 类子网。
3. 为了确认结果,设置了一个蜜罐 Windows XP 机器,并使用从僵尸网络主机直接获取的最新恶意软件样本进行感染。通过这种方式,成功渗透到僵尸网络中并发现了母舰的 IP 地址,证实实际母舰位于找到的 48 个网络之一。需要强调的是,母舰 IP 地址的知识仅用于验证结果,而不是用于确定母舰可能所在的集合。
网络主机定位面临的攻击与不足
有知识的攻击者可能会尝试通过以下几种方式阻止正确识别母舰的位置:
1.
HTTP 响应延迟
:快速流量代理可能会人为延迟所需的 HTTP 响应,从而使坐标计算无效。如果延迟是静态值,坐标将代表一个与实际坐标相距很远的点;如果延迟是随机的,只能计算出母舰可能所在的大致区域。在测量过程中,未发现这种行为。
2.
代理拒绝连接
:由于严重依赖对每个信标的大量探测,无法处理识别这种行为并停止代理连接的代理。例如,从同一 IP 地址在几分钟内对某个域名的请求,可能只会在前几次请求时返回恶意网页。缓解这种攻击的最可能方法是将探测速度调整到适当的速度。
3.
网络拓扑混淆
:一些网络拓扑会混淆测量并使计算的坐标无效。如果代理被设置为在多个母舰之间进行负载均衡,很可能会计算出不正确或至少不一致的坐标。目前假设只有一个母舰,如果不是这种情况,探测相关的往返时间(RTT)将相互冲突,结果可能类似于在探测中插入随机人工延迟的情况。虽然有可能识别和聚类 RTT 以识别那些针对不同母舰的 RTT,但未发现进行负载均衡的结果。
代码注入攻击防护新方法
攻击者的主要目标之一是控制被攻击的计算机,这可以通过代码注入攻击来实现。攻击者利用应用程序中的漏洞,将应用程序的控制流转移到其注入到应用程序内存空间的二进制代码(shellcode)上。最基本的代码注入攻击是基于栈的缓冲区溢出,它会覆盖返回地址,此外还有更高级的攻击技术,如基于堆的缓冲区溢出、间接指针覆盖等。所有这些攻击最终都会覆盖代码指针,即包含处理器在程序执行期间将跳转的地址的内存位置。
根据 NIST 的国家漏洞数据库,9.86% 的报告漏洞是缓冲区溢出,仅次于 SQL 注入攻击(16.54%)和 XSS(14.37%)。尽管缓冲区溢出占所有攻击的比例不到 10%,但它们占高严重等级漏洞的 17%。代码注入攻击往往备受关注,许多大型软件公司都曾受到影响,如苹果的 iPhone、谷歌的 Chrome 浏览器和微软的 Internet Explorer 等。这表明即使目前广泛部署了对策,代码注入攻击仍然是一个非常重要的威胁。
为了应对代码注入攻击,提出了一种新的方法——代码指针掩码(Code Pointer Masking,CPM)。CPM 非常高效,提供的保护与现有高效对策部分重叠,但也具有互补性。通过有效地掩码代码指针,CPM 限制了代码指针可以指向的地址范围。通过设置这些约束,使攻击者永远无法使代码指针指向注入的代码,从而防止攻击者接管计算机。
CPM 的主要贡献包括:
- 描述了一种针对 C 代码的新型代码注入攻击对策的设计。
- 报告了针对 ARM 架构的原型实现,该实现实现了完整的对策。还存在针对 Intel x86 架构的第二个原型,但由于篇幅限制且仍不完整,未在本文中报告。不过,这表明该概念可以移植到不同的处理器架构。
- 通过 SPEC CPU 基准测试表明,该对策仅带来几个百分点的开销,并且与现有的大型应用程序兼容,这些应用程序几乎涵盖了 C 标准的所有方面。
- 对该对策提供的安全保证进行了评估,表明提供的保护与现有对策互补。
代码注入攻击防护的背景知识
代码注入攻击已经存在了数十年,为了阻止它们,已经开发了许多对策,但只有少数对策得到了广泛部署,因为它们能够在仅付出较小(或无)性能成本的情况下提高攻击者的攻击难度。以下是一些常见的对策:
1.
栈金丝雀(Stack Canaries)
:通过在栈上的返回地址之前引入一个秘密随机值(金丝雀)来抵御基于栈的缓冲区溢出。当攻击者用基于栈的缓冲区溢出覆盖返回地址时,也必须覆盖位于缓冲区和返回地址之间的金丝雀。当函数退出时,会检查金丝雀是否被更改,如果更改则杀死应用程序。ProPolice 是栈金丝雀对策最流行的变体,它会重新排列函数在栈上的局部变量,以确保缓冲区尽可能靠近金丝雀。然而,即使是 ProPolice 仍然容易受到信息泄漏、格式字符串漏洞或任何不针对栈的攻击(例如,基于堆的缓冲区溢出)的影响,并且并非为每个函数都生成金丝雀,这可能导致漏洞。
2.
地址空间布局随机化(Address Space Layout Randomization,ASLR)
:随机化重要结构(如栈、堆和库)的基地址,使攻击者更难在内存中找到其注入的 shellcode。即使攻击者成功覆盖了代码指针,他们也不知道该指向哪里。ASLR 在不增加性能成本的情况下提高了安全门槛。然而,有不同的方法可以绕过它提供的保护。ASLR 容易受到信息泄漏的影响,特别是缓冲区越读和格式字符串漏洞。在 32 位架构上,随机化的程度不够大,使攻击者能够正确猜测地址。新的攻击还使用了一种称为堆喷洒的技术,攻击者通过在堆中填充大量的 shellcode 副本,然后跳转到堆上的某个位置,由于大部分内存都被他们的 shellcode 填充,因此跳转很有可能落在他们的 shellcode 地址上。
3.
不可执行内存(Non-executable memory)
:大多数现代 CPU 都支持不可执行内存,允许应用程序将内存页面标记为不可执行。即使攻击者可以将 shellcode 注入应用程序并跳转到它,处理器也会拒绝执行。使用此对策没有性能开销,并且大大提高了安全门槛。然而,一些处理器仍然没有此功能,即使硬件中存在该功能,操作系统也并不总是默认开启。Linux 支持不可执行内存,但许多发行版不使用它,或者仅对某些内存区域使用它。不使用它的一个原因是它会破坏期望栈或堆可执行的应用程序。即使使用不可执行内存的应用程序也容易受到攻击。攻击者可以注入一个精心设计的假栈,当应用程序开始展开栈时,它将展开假栈而不是原始调用栈,从而允许攻击者将处理器引导到库或程序代码中的任意函数,并选择传递给这些函数的参数。这种类型的攻击称为返回至 libc 攻击(return-into-libc attack),相关的攻击称为面向返回的编程(return-oriented programming)。
综上所述,网络主机定位技术在实际应用中面临着一些挑战,但通过合理的参数设置和对网络坐标的有效利用,可以在一定程度上提高定位的准确性。而代码注入攻击防护方面,新的 CPM 方法为应对代码注入攻击提供了一种新的思路和解决方案,与现有对策相结合,可以更好地保护计算机系统的安全。
代码指针掩码(CPM)的设计与实现
CPM 的设计思路
CPM 的核心思想是通过对代码指针进行掩码操作,限制其可指向的地址范围,从而防止攻击者将代码指针指向注入的恶意代码。具体来说,在程序运行过程中,对代码指针进行特殊处理,设置合适的约束条件,使得攻击者无法通过修改代码指针来控制程序的执行流程。
CPM 的实现步骤
- 识别代码指针 :在编译阶段,对 C 代码进行分析,识别出所有的代码指针。这可以通过对代码的语法和语义分析来实现,标记出那些包含程序跳转地址的内存位置。
- 设置掩码规则 :根据程序的正常执行逻辑和安全需求,确定合适的掩码规则。这些规则将决定代码指针可以指向的合法地址范围,确保攻击者无法将其指向注入的恶意代码。
- 插入掩码操作 :在编译后的代码中插入掩码操作,对代码指针进行实时的掩码处理。当代码指针被使用时,首先应用掩码规则,确保其指向的地址在合法范围内。
CPM 在不同架构上的实现情况
- ARM 架构 :已经实现了完整的 CPM 原型。该原型在 ARM 架构的 C 编译器中进行了集成,通过对代码的修改和优化,实现了对代码指针的有效掩码。
- Intel x86 架构 :存在一个不完整的原型。虽然由于篇幅限制未详细报告,但它表明 CPM 的概念可以移植到不同的处理器架构上,为更广泛的应用提供了可能。
CPM 的性能与安全评估
性能评估
通过 SPEC CPU 基准测试对 CPM 的性能进行了评估。结果显示,CPM 仅带来了几个百分点的开销,这意味着在实际应用中,它对程序的运行性能影响较小。同时,CPM 与现有的大型应用程序兼容,这些应用程序几乎涵盖了 C 标准的所有方面,说明它可以在不影响现有软件功能的前提下提供安全保护。
安全评估
CPM 提供的安全保护与现有对策互补。与栈金丝雀、ASLR 和不可执行内存等传统对策相比,CPM 不依赖于秘密值,能够抵御一些现有对策无法解决的攻击。例如,它可以防止攻击者通过修改代码指针来绕过传统的保护机制,从而更有效地保护计算机系统免受代码注入攻击。
CPM 的优势与局限性
优势
- 高效性 :CPM 对程序性能的影响较小,仅带来几个百分点的开销,能够在保证系统性能的前提下提供安全保护。
- 兼容性 :与现有的大型应用程序兼容,不需要对现有软件进行大规模的修改,便于在实际环境中部署。
- 互补性 :提供的安全保护与现有对策互补,能够抵御一些现有对策无法解决的攻击,增强了系统的整体安全性。
局限性
- 架构依赖 :虽然已经证明 CPM 可以移植到不同的处理器架构上,但在某些特定架构上的实现可能需要更多的优化和调整。
- 未知攻击的挑战 :随着攻击技术的不断发展,可能会出现新的攻击方式来绕过 CPM 的保护。因此,需要持续关注安全领域的动态,及时对 CPM 进行改进和完善。
总结与展望
总结
网络主机定位技术在识别僵尸网络的母舰位置方面具有重要作用,但面临着攻击者的多种干扰和挑战。通过合理设置参数和利用网络坐标信息,可以提高定位的准确性。同时,代码注入攻击是计算机系统面临的严重威胁,现有的对策虽然在一定程度上提供了保护,但仍存在不足。CPM 作为一种新的代码注入攻击防护方法,具有高效、兼容和互补等优势,为保护计算机系统的安全提供了新的解决方案。
展望
未来,可以进一步研究和优化 CPM 的实现,提高其在不同架构上的性能和安全性。同时,可以将 CPM 与其他安全技术相结合,形成更强大的安全防护体系。在网络主机定位方面,可以探索更有效的方法来应对攻击者的干扰,提高定位的精度和可靠性。此外,随着网络安全形势的不断变化,需要持续关注新的攻击技术和安全威胁,及时调整和完善相应的防护措施。
以下是一个 mermaid 流程图,展示了 CPM 的基本工作流程:
graph TD;
A[识别代码指针] --> B[设置掩码规则];
B --> C[插入掩码操作];
C --> D[程序运行];
D --> E{代码指针使用};
E -- 是 --> F[应用掩码规则];
F --> G[检查地址合法性];
G -- 合法 --> H[正常执行];
G -- 不合法 --> I[阻止执行];
E -- 否 --> D;
通过以上的分析和介绍,我们可以看到网络主机定位和代码注入攻击防护是网络安全领域中非常重要的两个方面。CPM 作为一种新的防护方法,为解决代码注入攻击问题提供了新的思路和途径,具有广阔的应用前景。同时,我们也需要不断探索和创新,以应对日益复杂的网络安全挑战。
超级会员免费看
2万+

被折叠的 条评论
为什么被折叠?



