Переполнение буфера превращает ваши устройства в удобные цифровые мишени.
30 августа 2024 года исследователь безопасности под ником @hyprdude опубликовал Для просмотра ссылки Войдиили Зарегистрируйся об уязвимости Для просмотра ссылки Войди или Зарегистрируйся обнаруженной в сетевом демоне wappd. Этот демон используется в SDK от MediaTek и драйверах SoftAP для чипсетов, поддерживающих Wi-Fi 6, и часто встречается в таких устройствах, как роутеры Ubiquiti, Xiaomi и Netgear.
Уязвимость представляет собой переполнение буфера, вызванное некорректной обработкой данных, поступающих из сетевых пакетов. Эксплуатация этой ошибки позволяет злоумышленнику выполнять произвольный код на уязвимых устройствах, используя разные методы атаки. В отчёте @hyprdude описаны четыре подхода к эксплуатации этой уязвимости.
<h3> Метод 1. Захват RIP и выполнение ROP </h3> Первый метод эксплуатации основан на простом захвате указателя возврата (RIP) с использованием ROP-цепочки. Этот метод наиболее эффективен на системах, где не применяются современные механизмы защиты, такие как ASLR (рандомизация адресного пространства) и канарейки стека (Stack Canary).
Суть метода заключается в переполнении стека до момента, когда можно перезаписать адрес возврата функции в стеке на адрес, указывающий на полезную нагрузку. В данном случае используется ROP-цепочка, которая вызывает функцию «system()» с заранее подготовленной командой для выполнения на устройстве. Это позволяет злоумышленнику получить полный контроль над устройством. Данный метод является наиболее простым, но уже устарел из-за широкого распространения защитных технологий.
<h3> Метод 2. Произвольная запись через порчу указателя </h3> Второй метод основан на более сложной концепции и требует наличия защитных механизмов, таких как ASLR, канарейки стека и частичная защита RELRO. В этом случае злоумышленник использует возможность переполнения стека для порчи указателей (Pointer Corruption), что позволяет ему контролировать, куда будут записаны данные в памяти.
Используя этот метод, хакер может перезаписать таблицу GOT (Global Offset Table), которая содержит адреса функций, используемых программой. Подменяя адреса в таблице GOT, злоумышленник может перенаправить выполнение программы на свой код, что позволяет ему выполнить произвольные команды на устройстве. Этот метод сложнее в реализации, но значительно эффективнее на защищённых системах.
<h3> Метод 3. Возвращение к перезаписи адреса возврата и использование ROP на системах с полной защитой RELRO </h3> Третий метод ещё более сложен в реализации, поскольку система использует полную защиту RELRO, что делает невозможным изменение таблицы GOT. Здесь злоумышленник использует комбинацию методов: сначала он добивается произвольной записи, а затем создаёт сложную ROP-цепочку, которая позволяет обойти защиту и выполнить нужную команду.
В этой ROP-цепочке используется несколько последовательных команд, которые манипулируют регистрами и стеком, чтобы обойти защитные механизмы системы. В конце выполнения цепочки система вызывает функцию «system()», передавая ей нужную команду. Этот метод особенно сложен в реализации, так как требует глубокого понимания архитектуры и защиты операционной системы.
<h3> Метод 4. Эксплуатация на реальном устройстве с архитектурой ARM64 </h3> Четвёртый метод был разработан специально для эксплуатации уязвимости на реальном устройстве — маршрутизаторе Netgear WAX206 с архитектурой ARM64. Это устройство использует все современные методы защиты, включая ASLR, NX, полную защиту RELRO и канарейки стека. Однако, из-за особенностей архитектуры ARM64 и методов оптимизации кода, злоумышленнику удалось найти способ обхода защиты. Он использует JOP (Jump Oriented Programming) вместо ROP для перенаправления выполнения программы.
Использованный метод включает несколько этапов: сначала злоумышленник получает возможность записывать данные в произвольные места памяти, затем он перезаписывает возвращаемый адрес и другие критические структуры в памяти, чтобы подготовить выполнение команды «system()». Эта техника наглядно демонстрирует, насколько сложной может быть эксплуатация уязвимостей на реальных устройствах, особенно с учётом особенностей архитектуры ARM64.
<h3> Бонус. Использование уязвимости ядра через вызовы IOCTL </h3> В завершение отчёта автор представил ещё один интересный метод, который позволяет использовать эксплойт для атаки на уязвимость в ядре операционной системы. Используя цепочку JOP, злоумышленник может выполнить произвольные вызовы IOCTL, что позволяет получить доступ к критическим функциям ядра и расширить контроль над устройством. Этот метод сложен в реализации, но его использование показывает, насколько мощным может быть один эксплойт, если он нацелен на разные уровни системы.
<h3> Заключение </h3> Этот подробный анализ уязвимости CVE-2024-20017 подчёркивает важность использования многоуровневой защиты в современных системах. Один и тот же баг может быть использован для атаки разными способами, и каждый из этих методов требует глубоких знаний и творческого подхода к разработке эксплойтов.
Данный пример очень хорошо иллюстрирует, что даже простое переполнение буфера может превратиться в серьёзную угрозу для безопасности, если злоумышленник обладает достаточными знаниями и ресурсами для его эксплуатации.
30 августа 2024 года исследователь безопасности под ником @hyprdude опубликовал Для просмотра ссылки Войди
Уязвимость представляет собой переполнение буфера, вызванное некорректной обработкой данных, поступающих из сетевых пакетов. Эксплуатация этой ошибки позволяет злоумышленнику выполнять произвольный код на уязвимых устройствах, используя разные методы атаки. В отчёте @hyprdude описаны четыре подхода к эксплуатации этой уязвимости.
<h3> Метод 1. Захват RIP и выполнение ROP </h3> Первый метод эксплуатации основан на простом захвате указателя возврата (RIP) с использованием ROP-цепочки. Этот метод наиболее эффективен на системах, где не применяются современные механизмы защиты, такие как ASLR (рандомизация адресного пространства) и канарейки стека (Stack Canary).
Суть метода заключается в переполнении стека до момента, когда можно перезаписать адрес возврата функции в стеке на адрес, указывающий на полезную нагрузку. В данном случае используется ROP-цепочка, которая вызывает функцию «system()» с заранее подготовленной командой для выполнения на устройстве. Это позволяет злоумышленнику получить полный контроль над устройством. Данный метод является наиболее простым, но уже устарел из-за широкого распространения защитных технологий.
<h3> Метод 2. Произвольная запись через порчу указателя </h3> Второй метод основан на более сложной концепции и требует наличия защитных механизмов, таких как ASLR, канарейки стека и частичная защита RELRO. В этом случае злоумышленник использует возможность переполнения стека для порчи указателей (Pointer Corruption), что позволяет ему контролировать, куда будут записаны данные в памяти.
Используя этот метод, хакер может перезаписать таблицу GOT (Global Offset Table), которая содержит адреса функций, используемых программой. Подменяя адреса в таблице GOT, злоумышленник может перенаправить выполнение программы на свой код, что позволяет ему выполнить произвольные команды на устройстве. Этот метод сложнее в реализации, но значительно эффективнее на защищённых системах.
<h3> Метод 3. Возвращение к перезаписи адреса возврата и использование ROP на системах с полной защитой RELRO </h3> Третий метод ещё более сложен в реализации, поскольку система использует полную защиту RELRO, что делает невозможным изменение таблицы GOT. Здесь злоумышленник использует комбинацию методов: сначала он добивается произвольной записи, а затем создаёт сложную ROP-цепочку, которая позволяет обойти защиту и выполнить нужную команду.
В этой ROP-цепочке используется несколько последовательных команд, которые манипулируют регистрами и стеком, чтобы обойти защитные механизмы системы. В конце выполнения цепочки система вызывает функцию «system()», передавая ей нужную команду. Этот метод особенно сложен в реализации, так как требует глубокого понимания архитектуры и защиты операционной системы.
<h3> Метод 4. Эксплуатация на реальном устройстве с архитектурой ARM64 </h3> Четвёртый метод был разработан специально для эксплуатации уязвимости на реальном устройстве — маршрутизаторе Netgear WAX206 с архитектурой ARM64. Это устройство использует все современные методы защиты, включая ASLR, NX, полную защиту RELRO и канарейки стека. Однако, из-за особенностей архитектуры ARM64 и методов оптимизации кода, злоумышленнику удалось найти способ обхода защиты. Он использует JOP (Jump Oriented Programming) вместо ROP для перенаправления выполнения программы.
Использованный метод включает несколько этапов: сначала злоумышленник получает возможность записывать данные в произвольные места памяти, затем он перезаписывает возвращаемый адрес и другие критические структуры в памяти, чтобы подготовить выполнение команды «system()». Эта техника наглядно демонстрирует, насколько сложной может быть эксплуатация уязвимостей на реальных устройствах, особенно с учётом особенностей архитектуры ARM64.
<h3> Бонус. Использование уязвимости ядра через вызовы IOCTL </h3> В завершение отчёта автор представил ещё один интересный метод, который позволяет использовать эксплойт для атаки на уязвимость в ядре операционной системы. Используя цепочку JOP, злоумышленник может выполнить произвольные вызовы IOCTL, что позволяет получить доступ к критическим функциям ядра и расширить контроль над устройством. Этот метод сложен в реализации, но его использование показывает, насколько мощным может быть один эксплойт, если он нацелен на разные уровни системы.
<h3> Заключение </h3> Этот подробный анализ уязвимости CVE-2024-20017 подчёркивает важность использования многоуровневой защиты в современных системах. Один и тот же баг может быть использован для атаки разными способами, и каждый из этих методов требует глубоких знаний и творческого подхода к разработке эксплойтов.
Данный пример очень хорошо иллюстрирует, что даже простое переполнение буфера может превратиться в серьёзную угрозу для безопасности, если злоумышленник обладает достаточными знаниями и ресурсами для его эксплуатации.
- Источник новости
- www.securitylab.ru