Я пишу свою программу в VS2010, и целью сборки является.NET 4. Я полагаю, что флаг совместимости DEP идет по умолчанию. Это верно?
.NET также совместима по умолчанию с ASLR, и ASLR включен по умолчанию для моего процесса, или я должен запросить это во времени выполнения?
Да, флаг NXCOMPAT включается стандартными компиляторами языка .NET начиная с .NET 2.0 SP1.
ASLR по сути является автоматической в программах .NET благодаря компилятору JIT. Куда он поместит скомпилированный JIT машинный код - непредсказуемо. Хотя это, скорее всего, будет повторяться на точно такой же машине с точно таким же номером ревизии CLR, точно таким же потоком кода запуска и точно такими же DLL, внедряемыми в процесс. Тем не менее, для вредоносных программ это не так просто. Сборки ngen-ed .NET поддерживают ASLR с момента выпуска .NET 3.5 SP1.
Гораздо более мощной является ASLR для данных, более важная мера противодействия атакам. Важной потому, что подавляющее большинство атак начинается с вредоносных данных. Каждый раз, когда вы запускаете свою программу, расположение стека потока, кучи GC и статических данных меняется. Это может быть довольно болезненно, если вы пытаетесь отладить AVE btw.
ASLR защищает от известных неисправимых недостатков безопасности. Недостаток безопасности должен сначала существовать, причем в проверяемом коде.