Рандомизация памяти как улучшение безопасности приложений?

Я недавно натолкнулся на статью Microsoft, которая рекламировала новые "защитные улучшения" Windows 7. Конкретно:

  • Рандомизация расположения адресного пространства (ASLR)
  • Рандомизация "кучи"
  • Рандомизация стека

Статья продолжила, что "... часть этой обороноспособности находится в базовой операционной системе, и компилятор Microsoft Visual C++ предлагает другим", но не объяснил, как эти стратегии на самом деле увеличат безопасность.

Кто-либо знает почему повышение безопасности системы рандомизации памяти, если вообще? Другие платформы и компиляторы используют подобные стратегии?

6
задан Paul Sasik 21 April 2010 в 19:30
поделиться

3 ответа

Это повышает безопасность, затрудняя прогнозирование того, где что-то будет в памяти. Довольно много эксплойтов переполнения буфера работают, помещая (например) адрес известной подпрограммы в стек, а затем возвращаясь к нему. Это гораздо труднее сделать, не зная адреса соответствующей процедуры.

Насколько мне известно, OpenBSD была первой, кто сделал это, по крайней мере, среди достаточно известных операционных систем для ПК.

9
ответ дан 9 December 2019 в 22:31
поделиться

Путем рандомизации стека вы совершаете атаки переполнения ванильного буфера, такие как Алеф Один разбить стопку ради забавы невозможно. Причина в том, что атака основана на размещении небольшого количества исполняемого кода, называемого шеллкодом , в предсказуемое место в памяти. Фрейм стека функций поврежден, а его адрес возврата перезаписан значением, выбранным злоумышленником. Когда поврежденная функция возвращает, поток выполнения переходит к шеллкоду злоумышленника. Традиционно этот адрес памяти настолько предсказуем, что он будет одинаковым на всех машинах, на которых работает одна и та же версия программного обеспечения.

Несмотря на расширенную защиту памяти, реализованную в Windows 7, удаленное выполнение кода все еще возможно. Недавно на CanSecWest машина под управлением Windows 7 и IE 8 была взломана в считанные секунды. Вот техническое описание современной атаки с повреждением памяти, использующей висящий указатель в сочетании с переполнением кучи.

0
ответ дан 9 December 2019 в 22:31
поделиться

Это значительно усложняет атаки типа на libc (или возврат в буфер данных, предоставленный пользователем в случае последних двух). И да, он доступен в Linux, BSD и Mac OS. Как и следовало ожидать, детали зависят от ОС. См. Википедию для введения .

2
ответ дан 9 December 2019 в 22:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: