我正在VS2010中编写我的程序,构建目标是.NET 4.我相信默认情况下DEP兼容性标志是打开的。这是真的吗?
.NET默认情况下是否与ASLR兼容,默认情况下我的进程是否启用了ASLR,或者我是否必须在运行时请求它?
答案 0 :(得分:14)
是的,自.NET 2.0 SP1以来,标准.NET语言编译器打开了NXCOMPAT标志。
ASLR凭借JIT编译器在.NET程序中基本上是自动的。它将放置JIT编译的机器代码是不可预测的。虽然它可能在完全相同的机器上可重复,具有完全相同的CLR版本号和完全相同的启动代码流以及完全相同的DLL注入到流程中。但是,恶意软件不容易定位。自.NET 3.5 SP1发布以来,ngen-ed .NET程序集支持ASLR。
ASLR对数据的作用要强得多,对抗攻击的反制措施更为重要。重要的是因为绝大多数攻击都是从恶意数据开始的。每次启动程序时,线程堆栈的位置,GC堆和静态数据都会发生变化。你试图调试AVE顺便说一句,真是太痛苦了。
ASLR可防止已知的无法修复的安全漏洞。安全漏洞必须首先存在,在可验证的代码中不常见。