Рандомизация распределения памяти ниже aslr

Обновлено: 21.11.2024

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

Еще один подход к предотвращению эксплойтов заключается в том, чтобы сосредоточиться на методах взлома, которые могут применяться ко многим различным классам уязвимостей безопасности памяти. Эти меры могут иметь более широкое влияние, поскольку они применяются к методам, которые используются в дальнейшем в процессе использования многих уязвимостей. Например, как только злоумышленник получил контроль над указателем инструкции через произвольную уязвимость, ему по своей сути необходимо знать адрес полезного исполняемого кода, чтобы установить его. Именно здесь вступают в действие хорошо известные средства защиты, такие как предотвращение выполнения данных (DEP) и рандомизация размещения адресного пространства (ASLR), которые уже поддерживаются в Windows во многих выпусках. В сочетании эти средства защиты доказали, что они могут очень затруднить использование многих классов уязвимостей безопасности памяти, даже если злоумышленник получил контроль над указателем инструкции.

В последние годы злоумышленникам все чаще приходится приспосабливаться к использованию уязвимостей в приложениях, использующих широкий спектр средств защиты, включая DEP и ASLR. Как объясняется в нашем предыдущем сообщении в блоге, существуют сценарии, в которых можно обойти как DEP, так и ASLR, и неудивительно, что злоумышленники все больше внимания уделяют улучшению своих возможностей для этого. Точно так же злоумышленники проявляют больший интерес к поиску классов уязвимостей, таких как использование после бесплатных выпусков, которые могут предоставить им большую гибкость при попытке разработать эксплойт. В свете этих тенденций мы сосредоточили значительное внимание в Windows 8 и Windows 8.1 на повышении надежности средств смягчения, которые нарушают методы эксплуатации, применимые ко многим классам уязвимостей. В частности, в этом сообщении в блоге будут рассмотрены некоторые заслуживающие внимания улучшения, внесенные в ASLR, такие как устранение предсказуемых сопоставлений адресного пространства, увеличение количества энтропии, существующей в адресном пространстве, и усложнение раскрытия информации об адресном пространстве. где это возможно.

Из соображений совместимости исполняемые образы (DLL/EXE) должны указывать на свое желание быть рандомизированными ASLR с помощью флага /DYNAMICBASE, предоставляемого компоновщиком Visual C++. Если исполняемый образ не был связан с /DYNAMICBASE, ядро ​​Windows попытается загрузить образ по предпочитаемому базовому адресу. Это может привести к надежной загрузке исполняемого файла в предсказуемое место в памяти. Хотя это ограничение ASLR в Windows является преднамеренным, реальные эксплойты для уязвимостей программного обеспечения все больше зависят от исполняемых образов, в которых не включена поддержка ASLR.

Чтобы в целом устранить эту проблему, приложение, работающее в Windows 8 (или Windows 7 с установленным KB 2639308), может включить функцию безопасности, известную как Force ASLR. Когда эта функция включена, все перемещаемые изображения рандомизируются при их загрузке приложением, включая те изображения, которые не были связаны с /DYNAMICBASE. Это предназначено для предотвращения загрузки исполняемых образов в предсказуемое место в памяти. При желании приложение также может запретить загрузку неперемещаемых изображений.

Поскольку функция Force ASLR вызывает рандомизацию исполняемых образов, для которых не включена поддержка ASLR, существует риск возникновения проблемы совместимости. Кроме того, метод, используемый для принудительного перемещения исполняемых образов, которые не были созданы с помощью /DYNAMICBASE, может повлиять на производительность из-за уменьшения общего доступа к страницам. Это связано с тем, что Force ASLR по существу имитирует поведение коллизии базовых адресов и, таким образом, может привести к затратам памяти из-за копирования при записи. Таким образом, функция Force ASLR не включена по умолчанию для приложений, работающих в Windows 8. Вместо этого приложения должны явно включить эту функцию.

Функция Force ASLR включена по умолчанию для важных приложений, таких как Internet Explorer 10+, Microsoft Office 2013 и приложения Магазина Windows.Это означает, что злоумышленник, пытающийся использовать уязвимости, доступные через эти приложения, не сможет полагаться на нерандомизированные исполняемые образы. Например, наше недавнее обновление для системы безопасности, включающее ASLR для HXDS.DLL, не окажет заметного влияния на состояние безопасности приложений, включающих Force ASLR, поскольку эта не-ASLR DLL уже будет рандомизирована. В будущем злоумышленникам, скорее всего, придется полагаться на раскрытие информации об адресном пространстве для конкретной уязвимости при использовании приложений, которые полностью поддерживают ASLR или используют Force ASLR.

Распределение виртуальной памяти, выполняемое приложением, может иметь базовый адрес, назначаемый одним из трех способов: восходящий, нисходящий или базовый. Восходящий метод ищет свободную область, начиная с нижней части адресного пространства (например, VirtualAlloc по умолчанию), нисходящий метод ищет, начиная с верхней части адресного пространства (например, VirtualAlloc с MEM_TOP_DOWN), а метод на основе пытается для выделения памяти по указанному базовому адресу (например, VirtualAlloc с явно заданным базовым адресом). На практике большая часть памяти, выделяемой приложением, будет использовать восходящий метод выделения, и приложения редко используют основанный метод для выделения памяти.

До Windows 8 восходящее и нисходящее распределение не рандомизировалось с помощью ASLR. Это означало, что выделения, сделанные с помощью таких функций, как VirtualAlloc и MapViewOfFile, не имели энтропии и поэтому могли быть помещены в предсказуемое место в памяти (за исключением недетерминированного поведения приложения). В то время как некоторые области памяти имели собственную базовую рандомизацию, например кучи, стеки, TEB и PEB, все остальные распределения снизу вверх и сверху вниз не были рандомизированы.

Начиная с Windows 8, базовый адрес всех восходящих и нисходящих распределений явно рандомизирован. Это достигается путем рандомизации адреса, с которого начинаются восходящие и нисходящие распределения для данного процесса. Таким образом, фрагментация в адресном пространстве сводится к минимуму, а также реализуются преимущества рандомизации базового адреса всех распределений памяти, которые не основаны явно.

В целях совместимости приложения должны указывать, что они поддерживают восходящую и нисходящую рандомизацию. Приложение может сделать это, связав свой EXE-файл с /DYNAMICBASE.

Одним из основных различий между 64-разрядными и 32-разрядными приложениями в Windows является размер виртуального адресного пространства, доступного процессу. 64-разрядные приложения, EXE-файл которых связан с флагом /LARGEADDRESSAWARE, получают 8 ТБ в Windows 8 (128 ТБ в Windows 8.1) виртуального адресного пространства, тогда как 32-разрядные приложения по умолчанию получают только 2 ГБ. Ограниченный объем адресного пространства, доступного для 32-разрядных приложений, накладывает практические ограничения на величину энтропии, которую может применять ASLR при рандомизации расположения отображений памяти. Поскольку 64-битные приложения по умолчанию не страдают от этих ограничений, можно значительно увеличить объем энтропии, используемой ASLR. Реализация ASLR в Windows 8 в полной мере использует эту возможность, обеспечивая высокую степень энтропии для 64-разрядных приложений. Предоставление более высоких степеней энтропии может еще больше снизить надежность эксплойтов, написанных злоумышленником, а также снижает вероятность того, что злоумышленник сможет правильно угадать или взломать адрес.

Рандомизация снизу вверх с высокой энтропией

Эта функция вносит 1 ТБ расхождений в адрес, с которого начинается восходящее выделение. Это соответствует 24 битам энтропии или 1 из 16 777 216 шансов правильно угадать начальный адрес. Поскольку кучи, стеки и большинство других областей памяти распределяются снизу вверх, это приводит к тому, что традиционные атаки с распылением адресного пространства становятся непрактичными (например, распыление кучи и JIT). Это связано с тем, что современные системы не имеют достаточного количества доступной памяти для распыления объема, необходимого для достижения даже небольшой степени надежности. Кроме того, исполняемые образы, рандомизированные с помощью функции Force ASLR, получают высокую степень энтропии в результате включения функции восходящей рандомизации с высокой энтропией для приложения. В результате для использования уязвимостей в 64-разрядных приложениях, использующих распыление адресного пространства, сначала потребуется раскрыть адрес хотя бы в одном восходящем распределении, чтобы определить, где могли быть размещены данные относительно этого адреса.

В целях совместимости эта функция отключена по умолчанию и должна быть включена для каждого приложения отдельно. Это связано с тем, что некоторые 64-разрядные приложения имеют скрытые проблемы с усечением указателя, которые могут проявляться при работе с указателями размером более 4 ГБ (значащие биты устанавливаются после бита 31).64-разрядные приложения, включающие эту функцию, гарантированно получат адреса памяти, превышающие 4 ГБ, при распределении памяти снизу вверх (если не существует недостаточного адресного пространства выше 4 ГБ). 64-разрядные приложения могут включить поддержку этой функции, связав свой EXE-файл с флагом компоновщика /HIGHENTROPYVA, предоставляемым Visual Studio 2012. Этот флаг включен по умолчанию для собственных приложений при сборке с помощью Visual Studio 2012 и более поздних версий.

Рандомизация сверху вниз с высокой энтропией

Эта функция вносит 8 ГБ разницы в адрес, с которого начинается нисходящее распределение. Это соответствует 17 битам энтропии или 1 из 131 072 шансов правильно угадать начальный адрес. 64-разрядные процессы автоматически получают высокую степень энтропии для нисходящих распределений, если включена нисходящая рандомизация (которая контролируется тем, связан ли EXE-файл с /DYNAMICBASE).

Рандомизация изображений с высокой энтропией

До Windows 8 64-битные исполняемые образы получали такое же количество энтропии, которое использовалось при рандомизации 32-битных исполняемых образов (8 бит, или 1 из 256 шансов на правильное угадывание). Величина энтропии, применяемая к 64-битным изображениям, была значительно увеличена в большинстве случаев, начиная с Windows 8:

  • Образы DLL размером более 4 ГБ: 19 бит энтропии (вероятность угадывания — 1 из 524 288)
  • Образы DLL размером менее 4 ГБ: 14 бит энтропии (вероятность угадывания – 1 из 16 384).
  • Образы EXE размером более 4 ГБ: 17 бит энтропии (вероятность угадывания – 1 из 131 072).
  • Образы EXE размером менее 4 ГБ: 8 бит энтропии (вероятность угадывания – 1 из 256).

Причина, по которой существуют различия в энтропии из-за базового адреса изображения, опять же связана с соображениями совместимости. Ядро Windows в настоящее время использует предпочтительный базовый адрес образа в качестве подсказки, чтобы решить, поддерживает ли образ размер более 4 ГБ. Образы, размер которых меньше 4 ГБ, возможно, не были протестированы в сценариях, в которых они перемещаются выше 4 ГБ, и поэтому могут иметь скрытые проблемы с усечением указателя. Таким образом, ядро ​​Windows делает все возможное, чтобы эти образы загружались меньше 4 ГБ. Из-за этих ограничений подавляющее большинство 64-разрядных EXE-файлов и библиотек DLL в Windows 8 и Windows 8.1 имеют размер более 4 ГБ, чтобы обеспечить максимально возможную степень энтропии. 64-разрядные образы, созданные цепочкой инструментов Visual C++, по умолчанию также являются базовыми образами размером более 4 ГБ.

Эффективность ASLR по своей сути зависит от того, не может ли злоумышленник обнаружить расположение объектов в памяти. В некоторых случаях злоумышленник может использовать уязвимость в программе, чтобы раскрыть информацию о структуре адресного пространства процесса. Например, злоумышленник может использовать уязвимость для чтения памяти, к которой он обычно не может получить доступ, и таким образом обнаружить адрес библиотеки DLL в памяти. Хотя механизм раскрытия информации об адресном пространстве обычно зависит от используемого приложения и уязвимости, злоумышленники определили несколько общих подходов. В Windows 8 мы предприняли шаги по устранению и дестабилизации известных векторов раскрытия информации об адресном пространстве, хотя эти изменения никоим образом не решили общую проблему, связанную с раскрытием информации об адресном пространстве.

Указатели изображений удалены из SharedUserData

Windows использует внутреннюю структуру данных, известную как SharedUserData, для эффективной передачи определенных фрагментов информации из ядра всем процессам в системе. По соображениям эффективности и совместимости адрес памяти, по которому находится SharedUserData, является одинаковым для всех процессов в системе и для всех версий Windows, включая Windows 8 (0x7ffe0000). Начиная с пакета обновления 2 (SP2) для Windows XP эта область памяти содержала указатели на системную библиотеку DLL (NTDLL.DLL), которая, среди прочего, использовалась для эффективного вызова системных вызовов. Наличие указателей изображения в известном фиксированном месте в памяти было отмечено как полезное в контексте определенных типов раскрытия информации об адресном пространстве. В Windows 8 (а теперь и в предыдущих версиях с установленным MS13-063) все указатели изображений были удалены из SharedUserData, чтобы смягчить атаки этого типа. Удаление этих указателей эффективно смягчило обход DEP/ASLR, который, как выяснилось позже, затронул версии Windows до Windows 8 (включая LdrHotPatchRoutine ).

Устранены предсказуемые сопоставления фиксированной памяти

Обеспечение того, чтобы все формы распределения памяти имели некоторый базовый уровень энтропии, приводит к устранению того, что в противном случае было бы предсказуемым отображением памяти в адресном пространстве. В некоторых случаях злоумышленник может использовать уязвимость для чтения содержимого произвольных областей памяти.В этих случаях злоумышленник должен иметь возможность предсказать или обнаружить адрес объекта, с которого он хочет прочитать (обычно с помощью динамического распыления). Усовершенствования, внесенные в ASLR в Windows 8, усложнили задачу злоумышленникам, особенно в 64-разрядных системах. В результате любое раскрытие информации об адресном пространстве, основанное на чтении из указанного места в памяти, обычно будет более сложным и менее надежным в Windows 8. Однако следует отметить, что размер 32-разрядного адресного пространства создает практические проблемы. ограничения на влияние этого, особенно в тех случаях, когда злоумышленник может заполнить большую часть адресного пространства желаемым содержимым.

Ограничения доступа к информации об адресном пространстве ядра

Несмотря на то, что в предыдущих разделах были отмечены улучшения, внесенные в ASLR для приложений пользовательского режима, в Windows 8.1 мы также вложили средства в защиту ядра Windows от раскрытия информации об адресном пространстве ядра менее привилегированным процессам пользовательского режима. Большинство этих улучшений сосредоточены на ограничении доступа процессов с низкой целостностью к определенным классам информации о системе и процессах, которые преднамеренно раскрывают информацию об адресном пространстве ядра. Кроме того, некоторые адреса ядра были удалены из кучи общего рабочего стола, и были добавлены ограничения с помощью гипервизора, чтобы ограничить раскрытие адресов ядра с помощью инструкций, которые можно использовать для запроса базовых адресов таблицы дескрипторов GDT/IDT. В результате этих улучшений изолированные приложения, такие как Internet Explorer 11, Microsoft Office 2013 и приложения Магазина Windows, не могут обнаруживать адреса через эти интерфейсы. Это означает, что злоумышленникам будет сложнее использовать локальные уязвимости ядра для выхода из этих песочниц.

Улучшения, внесенные в ASLR в Windows 8 и Windows 8.1, устраняют различные ограничения, которыми злоумышленники пользуются при использовании уязвимостей. Мы ожидаем, что в результате этих улучшений злоумышленники будут по-прежнему все больше полагаться на раскрытие информации об адресном пространстве как средство обхода ASLR. Заставляя злоумышленников полагаться на раскрытие информации, вы добавляете еще один дорогостоящий флажок к условиям, которым злоумышленники должны удовлетворять при использовании уязвимостей безопасности памяти в современных приложениях.

Нас часто спрашивают, чем наш подход к защите движущихся целей (MTD) отличается от ASLR. Хотя концепции могут показаться похожими, в ASLR отсутствует несколько ключевых элементов, которые делают его успешным в противодействии нулевым дням и целенаправленным атакам.

ЗНАЧЕНИЕ ASLR

Случайное распределение адресного пространства (ASLR) — это метод компьютерной безопасности, который включает в себя случайное позиционирование базового адреса исполняемого файла и положения библиотек, кучи и стека в адресном пространстве процесса. Случайное смешивание адресов памяти, выполняемое ASLR, означает, что атака больше не знает, по какому адресу на самом деле находится требуемый код (например, функции или гаджеты ROP). Таким образом, вместо того, чтобы удалять уязвимости из системы, ASLR пытается усложнить использование существующих уязвимостей..

Вот основные недостатки ASLR

  1. Рандомизация на основе времени загрузки

С рандомизацией адресного пространства базовые адреса DLL основаны на рандомизации во время загрузки. Практически это означает, что базовые адреса библиотек будут рандомизированы при следующей перезагрузке. Это ахиллесова пята, которой могут воспользоваться злоумышленники, просто комбинируя уязвимости, такие как раскрытие памяти или атаки методом грубой силы.

  1. Неподдерживаемые исполняемые файлы/библиотеки, низкая энтропия

ASLR не поддерживается, если исполняемый файл или библиотеки DLL не поддерживают ASLR. Хотя Windows 8 и Windows 10 пытаются обойти это ограничение (например, включить ASLR в Windows 8), все же существуют исключения, которые во многих случаях делают защиту ASLR неэффективной. Этому ограничению особенно подвержены старые версии Windows и устаревшие программы. Кроме того, ASLR в 32-разрядных системах имеет низкую энтропию, что делает его уязвимым для грубой силы и подобных атак.

Рандомизация адресного пространства направлена ​​на предотвращение надежного достижения атакой целевого адреса памяти. ASLR фокусируется не на перехвате атаки, а на том, чтобы сделать атаку маловероятной. Как только шелл-код переходит по неправильному адресу во время эксплойта (из-за рандомизации памяти), поведение программы становится неопределенным.В результате процесс может получить исключение, аварийно завершить работу, зависнуть или просто продолжить работу с непоследовательным поведением.

  1. ASLR не предупреждает об атаке

ASLR не выдает никаких предупреждений о попытках атаки. Когда уязвимость эксплуатируется и терпит неудачу (из-за рандомизации памяти ASLR), предупреждение или индикация атаки не принимаются. По сути, ASLR не «знает», когда произошла атака..

  1. ASLR не предоставляет информацию об атаке

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

  1. ASLR ежедневно обходит эксплойты

С тех пор, как рандомизация адресного пространства была введена в ОС Windows, ее бесчисленное количество раз обходили реальные эксплойты и атаки. Злоумышленники постоянно разрабатывают новые методы преодоления защиты ASLR. Методы обхода включают использование цепочки ROP в модулях, не поддерживающих ASLR (например, CVE 2013-1347), распыление JIT/NOP (например, CVE-2013-3346), а также раскрытие памяти и другие методы (например, CVE-2015-3346). 1685, CVE-2015-2449, CVE-2013-2556, CVE-2013-0640, CVE-2013-0634).

В Mophisec мы рассматриваем рандомизацию адресного пространства как предшественника многовариантного современного подхода к защите движущихся целей. Morphisec Endpoint Security обеспечивает защиту, преодолевающую все перечисленные выше ограничения. Кроме того, наше решение предлагает полноценную систему управления и может предоставлять обширную криминалистическую информацию, а также интеллектуальную классификацию и снятие отпечатков пальцев атак для действенных указаний по исправлению.

Случайное распределение адресного пространства (ASLR) — это процедура безопасности, используемая в рабочих платформах, впервые реализованная в 2001 году. Текущие формы всех основных рабочих платформ (iOS, Android, Windows, macOS и Linux) включают страховку ASLR. Однако на прошлой неделе был найден еще один способ обхода ASLR. Учитывая обстоятельства, не лучше ли вам побеспокоиться?

Тех, у кого нет основы низкоуровневого программирования, ASLR может сбить с толку. Чтобы его получить, нужно изначально понимать виртуальную память.

Что такое ASLR?

Рандомизация проектирования адресного пространства (ASLR) — это мера страхования памяти для рабочих платформ (ОС), которую привратники используют против атаки переполнения буфера путем рандомизации области, в которой исполняемые файлы платформы размещаются в памяти.

Выполнение многочисленных кибератак, особенно атак нулевого дня, зависит от способности программиста знать или предполагать ситуацию с циклами и емкостью в памяти. ASLR может размещать фокусы адресного пространства в эксцентричных областях. Если злоумышленник попытается воспользоваться ошибочным местонахождением области пространства, целевое приложение выйдет из строя, остановив атаку и потревожив систему.

ASLR был создан проектом Pax как исправление для Linux в 2001 году и был включен в рабочую среду Windows, начиная с Vista в 2007 году. До ASLR области памяти документов и приложений либо были известны, либо не были высечены в камне.< /p>

Добавление ASLR в Vista расширило количество возможных областей локации до 256, а это означает, что агрессоры получили 1 из 256 попыток отследить нужную область для выполнения кода. Apple начала вспоминать ASLR для Mac OS X 10.5 Leopard, а Apple iOS и Google Android начали использовать ASLR в 2011 году.

Что такое виртуальная память?

Виртуальная память — это метод памяти, используемый руководителями со многими преимуществами, но в основном он был создан для упрощения программирования. Представьте, что у вас есть Google Chrome, Microsoft Word и несколько разных проектов, открытых на ПК с 4 ГБ ОЗУ. В целом проекты на этом ПК используют значительно больше 4 ГБ ОЗУ. В любом случае не каждый из проектов будет постоянно динамическим или будет нуждаться в синхронном доступе к этой оперативной памяти.

Рабочая среда выделяет части памяти программам, называемым страницами. В случае, если оперативной памяти недостаточно для хранения каждой из страниц на двойнике, страницы, которые в наименьшей степени могут потребоваться, помещаются на более медленный (но более вместительный) жесткий диск. Когда удалённые страницы потребуются, они будут переключаться между пространствами с менее важными страницами в ОЗУ. Это взаимодействие называется пейджингом и заимствует свое имя в документе pagefile.sys в Windows.

Виртуальная память упрощает для проектов работу с памятью и, кроме того, делает их более безопасными. Проектам не нужно беспокоиться о том, где разные проекты хранят информацию или сколько осталось оперативной памяти. Они могут просто запросить у рабочего фреймворка дополнительную память (или вернуть неиспользуемую память) по мере необходимости. Все, что видит программа, — это отдельный смежный кусок адресов памяти для ее элитного использования, называемый виртуальными адресами. Программе не разрешается просматривать память другой программы.

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

Влияние ASLR на виртуальную память

Выбор расширения возможностей ASLR позволяет найти компромисс между повышенной безопасностью и уменьшением количества доступных 24-, 31- и 64-разрядных частных резервных копий. При использовании 24- и 31-разрядной виртуальной емкости размер доступного частного хранилища будет уменьшен до 63 страниц и до 255 страниц по отдельности. Упомянутый размер локали задачи в любом случае должен быть выполнен из уменьшенной частной области, чтобы задача была запущена. Занятия, размер которых не может быть выполнен, вызовут ABEND 822. В случае, если указанный размер района задачи будет выполнен, пока еще возможно, что уменьшенный размер частного складирования не позволит завершить работу, что приведет к ABEND 878.

Один из подходов к решению, не будет ли профессия иметь возможность работать в рамках обязательного размера 24- или 31-битного частного хранилища, которое произойдет с включенным ASLR, — это указать больший стимул для границы CSA в parmlib. Расширение диапазонов 24- и 31-разрядных CSA на 1 М успешно уменьшает объемы 24- и 31 разрядных частных накоплений на 1 М, что является более заметным, чем самое резкое сокращение, которое произошло бы при ASLR.

Основные недостатки ASLR

  • Рандомизация зависит от времени загрузки

С рандомизацией адресного пространства базовые расположения библиотек DLL зависят от рандомизации во время загрузки. По сути, это означает, что базовые расположения библиотек будут рандомизированы при следующей перезагрузке. Это ахиллесова пята, которой могут воспользоваться нападающие, в основном путем объединения слабостей, таких как разглашение воспоминаний или атаки с помощью животной силы.

  • Неподдерживаемые исполняемые файлы/библиотеки, низкая энтропия

ASLR не поддерживается, если исполняемый файл или библиотеки DLL не поддерживают ASLR. Несмотря на то, что Windows 8 и Windows 10 пытаются преодолеть это ограничение (например, Power ASLR в Windows 8), все еще существуют исключения, которые во многих случаях делают гарантию ASLR неэффективной. К этому ограничению особенно склонны более устоявшиеся версии Windows и программы наследования. Кроме того, ASLR на 32-разрядных фреймворках имеет низкую энтропию, что делает его беззащитным перед животной силой и сравнительными атаками.

Рандомизация адресного пространства предназначена для того, чтобы злоумышленник не смог надежно добраться до целевого адреса памяти. ASLR сосредотачивается не на том, чтобы поймать нападение, а на том, чтобы сделать нападение маловероятным. Как только шелл-код перескакивает в какое-то неприемлемое место во время попытки (из-за рандомизации памяти), поведение программы становится неопределенным. Цикл может получить исключение, аварийно завершиться, заглохнуть или просто продолжаться с конфликтным поведением впоследствии.

  • ‍ASLR не предупреждает о нападении.

ASLR не подает никаких сигналов тревоги о попытках нападения. В момент, когда уязвимость используется в своих интересах и терпит неудачу (из-за рандомизации памяти ASLR), не выдается никаких признаков готовности или нападения. По сути, ASLR не «знает», когда произошло нападение.

  • ASLR не предоставляет данных о нападении

Научные данные о нападениях, злоупотреблениях и шелл-коде имеют решающее значение для любой подлинной криминологической экспертизы. Воспользовавшись преимуществами циклов, дампов памяти и стеков вызовов, можно использовать для распознавания, уникальной метки и метки. ASLR не может предоставить эти данные, так как не может сказать, произошло ли нападение или что-то в этом роде, учитывая, что оно было остановлено.

  • ASLR sidesteps последовательно использует преимущества

С тех пор как рандомизация адресного пространства была представлена ​​в ОС Windows, во многих случаях ее избегали с помощью реальных усилий и нападений. Злоумышленники постоянно внедряют новые процедуры для преодоления защиты ASLR. Обходные процедуры включают использование цепочки ROP в модулях, отличных от ASLR (например, CVE 2013-1347), JIT/NOP-всплеск (например, CVE-2013-3346), а также недостатки разглашения памяти и другие стратегии (например, CVE-2015-1685). , CVE-2015-2449, CVE-2013-2556, CVE-2013-0640, CVE-2013-0634).

В 2016 году ученые из Университета штата Нью-Йорк в Бингемтоне и Калифорнийского университета в Риверсайде представили документ, посвященный переходу через ASLR: атакующие предикторы ветвей для обхода ASLR. В документе подробно описывается подход к атаке на целевой буфер ветвления (BTB). BTB важен для процессора, который повышает скорость провозглашения, предвидя результат. Используя метод создателей, можно определить области известных отраслевых направлений в работающем проекте. Упомянутая атака была совершена на компьютере с Linux и процессором Intel Haswell (впервые поставленным в 2013 году), но почти наверняка может быть применена к любой передовой рабочей платформе и процессору.

Учитывая все обстоятельства, вы не должны сдаваться. В документе предложено несколько способов, которыми инженеры по оборудованию и рабочей среде могут уменьшить эту опасность. Более современные, мелкозернистые методы ASLR потребуют от агрессора больших усилий, а расширение меры энтропии (случайности) может сделать атаку «Прыжок» неосуществимой. По всей вероятности, более современные рабочие фреймворки и процессоры будут невосприимчивы к этой атаке.

  • ‍Запрет отдельных пространств местоположений из ASLR

После включения ASLR вы можете использовать одобрение SAF, чтобы исключить выбранные адресные пространства из ASLR. Для этого предоставьте полномочия SAF READ активу IARRSM.EXEMPT.ASLR.jobname в классе FACILITY, чтобы полностью исключить работу, или активу IARRSM.EXEMPT.ASLR24.jobname, чтобы исключить работу только из 24-разрядной ASLR. Сопутствующая модель показывает расположение заказов для полного освобождения задачи от ASLR:

Переклассифицировать FACILITY IARRSM.EXEMPT.ASLR.jobname UACC(READ)

НАСТРОЙКИ RACLIST(FACILITY) REFRESH

Некоторые адресные пространства фреймворка, такие как MASTER, которые устанавливаются досрочно во время взаимодействия IPL, не рандомизируются. Высокое виртуальное накопление не может быть рандомизировано в адресных пространствах с листьями инстатации, которые получают высокое виртуальное накопление. Шаги занятия, которые приобретают большие виртуальные запасы и распределяют их по предприятию, не входящему в дерево задач программы этого рабочего шага, ограничивают возможности платформы для настройки рандомизации для следующего шага положения, если полученная мощность сохраняется на всех рабочих шагах.

Стремление обойти ASLR

Независимо от своих преимуществ, попытки обойти ASLR являются нормальными и, похоже, делятся на несколько классов:

  • Использование сброса адресов.
  • Доступ к информации, сравнительной с конкретными местоположениями.
  • Использование недостатков выполнения, которые позволяют агрессорам фигурировать, имеет тенденцию к тому, когда энтропия низкая или когда выполнение ASLR нарушено.
  • Использование побочных каналов активности оборудования.

Заключение

ASLR имеет исключительную ценность, особенно когда он работает на 64-битных платформах и выполняется надлежащим образом. Хотя это и не защищает от попыток обхода, это делает злоупотребление слабостями фреймворка значительно более проблематичным. Вот ссылка, которая может предоставить более подробную информацию об эффективности Full-ASLR в 64-разрядной версии Linux, а вот документ об одной работе по обходу ASLR с использованием индикаторов ветвления.

Шокирующая статистика: 80 % успешных кибератак основаны на использовании уязвимостей, приводящих к повреждению памяти. Эта категория атак включает в себя переполнение буфера, разрушение стека и атаки с возвратно-ориентированным программированием (ROP). Все это различные подходы, направленные на повреждение областей выделенной памяти приложения путем принудительной записи данных или кода хакера в неожиданные области памяти за пределами запланированной области действия программы.

Плохая новость заключается в том, что если вы подвергнетесь одной из таких атак, это может привести к сбою приложения, но также может дать злоумышленнику полный контроль над вашей системой. Затем они могут украсть данные или внедрить и запустить свой собственный код, пока вы совершенно не подозреваете о взломе. Хорошая новость заключается в том, что со временем были разработаны различные контрмеры, которые можно использовать в качестве первой линии обороны.

ASLR спешит на помощь?

Рандомизация размещения адресного пространства (ASLR) — яркий пример этих методов. Он работает, смешивая места размещения основных элементов программы в структуре памяти. Это достигается за счет случайного назначения смещения для всех ключевых позиций адреса базовой памяти для исполняемых файлов, стека, кучи и разделяемых библиотек. Поскольку это рандомизированное смещение изначально неизвестно потенциальным хакерам, это затрудняет проведение атаки. Им нужно определить значение смещения, прежде чем они смогут начать работу.

FreeBSD была первой основной ОС, поддерживающей ASLR в 2003 году, за ней последовали Linux в 2005 году и Windows в 2007 году. Сегодня практически любая крупная ОС, которую вы выберете, будет иметь встроенную зрелую реализацию ASLR, готовую к использованию.Лучше всего то, что дополнительная плата не взимается.

Пока все хорошо. Если бы это был конец истории, мы все были бы в безопасности и спокойно спали бы по ночам.

К сожалению, это не так. ASLR существует уже почти 20 лет. У хакеров достаточно времени, чтобы обойти это. Взлом или обход ASLR — это просто первое, что нужно сделать каждому хакеру при разработке современной атаки с повреждением памяти.

Вот лишь некоторые из основных недостатков ASLR:

  1. Смещение памяти, назначенное ASLR, остается неизменным до перезагрузки системы или перезапуска процессов. Это означает, что у плохого актера обычно достаточно времени, чтобы понять это. И как только магическое число обнаружено, оно работает для всего. Это связано с тем, что все библиотеки и функции имеют одинаковое смещение от стандартных адресов памяти.
  2. Если какая-либо программа или процесс настроены на автоматический перезапуск после сбоя, они могут легко стать целью атаки грубой силы, когда могут быть предприняты многочисленные попытки проб и ошибок угадать смещение.
  3. Некоторыми аппаратными функциями, предназначенными для повышения производительности, также можно манипулировать, чтобы обойти ASLR. Например, буфер целевого ветвления (BTB), встроенный в ЦП, может быть использован для создания утечек памяти по сторонним каналам. BTB предназначены для улучшения функциональности предиктивного выполнения, но было продемонстрировано, что они выявляют смещение ALSR примерно за 60 миллисекунд.
  4. В одном из своих предыдущих блогов я показал, как можно легко использовать цепочки и гаджеты ROP для выявления смещения ASLR.

Как улучшить защиту ASLR

Я считаю, что ALSR — полезная первая линия защиты от атак с повреждением памяти, особенно если у вас нет ничего лучше. Но он не идеален, и в современных условиях уже недостаточно хорош.

Вот почему мы разработали технологию Polymorphing, чтобы вывести вашу кибербезопасность на новый уровень, не влияя на производительность или функциональность.

Он работает, пропуская исходный код через расширенный полиморфный компилятор, чтобы рандомизировать низкоуровневый машинный код для всей операционной системы. Это означает, что все адреса внутри каждого исполняемого файла, библиотеки и функции уникальны; наборы инструкций для всех библиотек или исполняемых файлов зашифрованы; вам предоставляется полное единственное в своем роде сопоставление ресурсов. Более того, всю вашу среду Linux можно повторно шифровать каждые 24 часа.

Вывод? Полиморфинг для Linux — это лучший способ улучшить ASLR и оставить в прошлом уязвимости, связанные с повреждением памяти.

Если вам нужна более подробная информация, ознакомьтесь с техническим документом здесь.

Читайте также: