【发布时间】:2015-06-14 13:33:27
【问题描述】:
前段时间,我阅读了有关 C/C++ 的各种安全建议。之后,我开始考虑它们是否适用于 .NET,我找到了一些答案,但不是全部,所以这是我的问题。
建议使用HeapAlloc 方法而不是VirtualAlloc 来分配内存。我知道 VirtualAlloc 存在 2 个潜在问题。首先,在 Windows 8 之前,此函数分配的地址不会被 ASLR(地址空间布局随机化)随机化。其次,VirtualAlloc 允许使用固定基址分配内存,这也是不建议的,因为这样可以更轻松地编写漏洞利用程序。有关详细信息,另请参阅article。
问题是 new 操作符是如何工作的?它是使用 HeapAlloc、VirtualAlloc 还是别的什么?
还建议不要直接使用函数指针,而是在需要时使用EncodePointer/DecodePointer functions 对它们进行混淆和去混淆。这是一个类似于 ASRL 的概念。这种技术的目标是使预测指针值变得困难并覆盖它,以便它指向一些恶意代码。我们在 .NET 中有委托,但我认为在 .NET 内部必须在某些时候使用函数指针。
问题是 .NET 内部使用的函数指针的地址是否被混淆了?
【问题讨论】:
标签: .net security .net-internals