【发布时间】:2011-03-11 12:07:09
【问题描述】:
我在 VS2010 中编写我的程序,构建目标是 .NET 4。我相信DEP 兼容性标志默认是打开的。这是真的吗?
.NET 是否也默认与ASLR 兼容,并且默认情况下我的进程是否启用了 ASLR,还是我必须在运行时请求它?
【问题讨论】:
标签: .net security aslr data-execution-prevention
我在 VS2010 中编写我的程序,构建目标是 .NET 4。我相信DEP 兼容性标志默认是打开的。这是真的吗?
.NET 是否也默认与ASLR 兼容,并且默认情况下我的进程是否启用了 ASLR,还是我必须在运行时请求它?
【问题讨论】:
标签: .net security aslr data-execution-prevention
是的,自 .NET 2.0 SP1 起,标准 .NET 语言编译器打开了 NXCOMPAT 标志。
借助 JIT 编译器,ASLR 在 .NET 程序中基本上是自动的。它将放置 JIT 编译的机器代码的位置是不可预测的。尽管它很可能在具有完全相同的 CLR 修订号和完全相同的启动代码流以及注入进程的完全相同的 DLL 的完全相同的机器上重复。虽然不容易被恶意软件攻击。自 .NET 3.5 SP1 版本以来,ngen-ed .NET 程序集支持 ASLR。
针对数据的 ASLR 功能更强大,是针对攻击的更重要的对策。很重要,因为绝大多数攻击都是从恶意数据开始的。每次启动程序时,线程的堆栈位置、GC 堆和静态数据都会发生变化。顺便说一句,您尝试调试 AVE 可能会很痛苦。
ASLR 可防止已知的无法修补的安全漏洞。安全漏洞必须首先存在,在可验证代码中不常见。
【讨论】: