gpt4 book ai didi

.net - .NET 中新运算符和委托(delegate)的安全内部结构

转载 作者:行者123 更新时间:2023-12-04 06:31:45 24 4
gpt4 key购买 nike

前段时间,我阅读了有关 C/C++ 的各种安全建议。之后我开始考虑它们是否适用于 .NET 我找到了一些答案,但不是全部,所以这是我的问题。

推荐使用HeapAlloc方法而不是 VirtualAlloc分配内存。我知道 VirtualAlloc 有 2 个潜在问题。首先,在 Windows 8 之前,此函数分配的地址不会通过 ASLR(地址空间布局随机化)进行随机化。其次,VirtualAlloc 允许使用固定基地址分配内存,这也是不建议的,因为这样可以更轻松地编写漏洞利用程序。有关详细信息,另请参阅此 article .

问题是 new 运算符在底层是如何工作的?它使用 HeapAllocVirtualAlloc 还是其他东西?

还建议不要直接使用函数指针,而是在需要时使用 EncodePointer 对它们进行混淆和去混淆处理。/DecodePointer 功能。这是一个类似于 ASRL 的概念。这种技术的目标是使预测指针值和覆盖它变得困难,以便它指向一些恶意代码。我们在 .NET 中有委托(delegate),但我认为 .NET 在某些时候必须使用函数指针。

问题是 .NET 内部使用的函数指针的地址是否被混淆了?

最佳答案

细节相当模糊,我没有花很多时间寻找攻击 .NET 进程的方法 :) 我所知道的是:

  • .NET 程序集启用了/DYNAMICBASE 选项,与 native 程序用来启用 ASLR 的选项相同。
  • .NET 程序集默认启用/HIGHENTROPYVA 选项。 C# 编译器公开/highentropyva 编译器选项来控制它。
  • CLR 使用 VirtualAlloc() 独占分配。它通过随机化 appdomain 的加载程序堆(jitted 代码、静态、类型等)和 GC 堆段的地址来实现自己品牌的 ASLR。程序的每次运行都会发生这种情况。线程堆栈也是随机的,可能是因为之前的选项。
  • 异常过滤器位于表查找中,而不是堆栈上的指针。与/SAFESEH 相同
  • 自 .NET 4.0 以来,.NET 程序(抖动、CLR、CRT)中的 native 代码已打开/GS,检测堆栈粉碎尝试。

没有 EncodePointer() 调用,我怀疑它们能否工作。我从未听说过针对 .NET 程序的成功攻击,用恶意数据感染托管代码是一项相当艰巨的任务。但谁知道呢。这些年来已经有相当多的安全更新,所以有人想出了东西 :)

关于.net - .NET 中新运算符和委托(delegate)的安全内部结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29534196/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com