2010-07-03 3 views
4

Я пишу свою программу в VS2010, а цель сборки - .NET 4. Я считаю, что флаг совместимости DEP включен по умолчанию. Это правда?Как включить DEP или ASLR для моего приложения .NET?

Является ли .NET совместимым по умолчанию с ASLR, и ASLR включен по умолчанию для моего процесса или мне нужно запросить его во время выполнения?

ответ

12

Да, флаг 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 защищает от известных неполадок безопасности. Прежде всего, недостаток безопасности должен существовать, что редко встречается в проверяемом коде.

+0

Под «ngen-ed», вы имеете в виду компиляцию в x86/x64 вместо «Any CPU»? –

+2

Нет, я имею в виду инструмент ngen.exe. http://msdn.microsoft.com/en-us/library/6t9t5wcf%28VS.90%29.aspx –

+0

ngen поддерживает ASLR в 3.5 SP1 и предположительно также (?) 4.0: http://msdn.microsoft.com/ en-us/magazine/dd569747.aspx # id0400023 –