[Информационная безопасность, Тестирование IT-систем, Разработка под Windows] Как работают эксплойты по повышению привилегий в ОС Windows
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Для будущих студентов курса "Пентест. Практика тестирования на проникновение" подготовили авторскую статью от нашего эксперта - Александра Колесникова.
Также приглашаем записаться на открытый вебинар по теме "Windows ad: сбор информации, эскалация привилегий. Эксплойты и уязвимости последних 5 лет."
Тема получения безграничного доступа к системе очень интересна в контексте тестирования на проникновение. Получить доступ к системе и запустить команду — сегодня это только половина победы. Вторая половина достигается только в тот момент, когда удается обойти подсистемы песочниц и ограничений, которые есть в операционной системе.Эта статья расскажет о некоторых особенностях эксплойтов для повышения привилегий в операционной системе Windows.Privileges in WindowsДля понимания, как работает эскалаций привилегий, необходимо разобраться с разграничением доступа в операционной системе Windows. Описание системы разграничения доступа можно найти на официальном сайте. Согласно документации, разграничение доступа в ОС Windows строится на следующих понятиях:
- Пользователи
- Группы
У каждого из перечисленных объектов есть свой индивидуальный идентификатор SID. Вообще, этот идентификатор используется для обозначения любого объекта, с которым работает операционная система, и для него требуется контроль доступа, но нас интересует в первую очередь использование этого идентификатора в контексте пользователей, групп и их прав. Идентификатор используется для того, чтобы создать для пользователя токен доступа. Данный токен содержит информацию о том, какие права имеет пользователь и группы, в которые он входит. Токен будет использоваться для подтверждения или запрета действий над объектами операционной системы, называемыми “Securable Objects”. Токены доступа бывают:
- Primary token — токен, которым наделяет пользователь процесс, когда запускает приложение.
- Impersonation token — токен, который может работать от имени любого пользователя операционной системы. Также может применяться для клиент-серверного взаимодействия или для запуска потока процесса с другими привилегиями.
Отсюда становится ясно, что основная цель любой эскалации привилегий — это получение токена доступа, который создается привилегированными пользователями. В общем случае, в ОС Windows это стандартные пользователи, которые называются: “Administrator” и “System”. Именно их токены открывают двери к любой информации, которая есть в операционной системе.Из официальной документации токен состоит из отдельных объектов:
Структура достаточно сложная и просто так скопировать или модифицировать ее не получится из-за того, что токен хранится в защищенном от модификации месте (как сказано в документации). Выясним, где она находится. Для этого запустим операционную систему Windows в отладочном режиме и исследуем все структуры, которые используются для работы процесса. Если обратиться снова к официальной документации, то начинать стоит со структуры EPROCESS. Получается, что информация о токене процесса хранится в ядре и поэтому в документации это помечено как область, которую нельзя изменить. Теоретически это действительно так: обычные приложения, которые работают в 3-м кольце, не могут модифицировать то, что хранится в 0-м. Но если модифицировать из ядра структуру внутри ядра, то здесь нет никаких ограничений и противоречий. Обратимся к отладчику:
Жирным цветом выделен адрес структуры EPROCESS, чтобы изучить её более подробно вызовем команду отладчика:
Похоже, что и искать долго не придется, токен находится буквально сразу. В 64-битных операционных системах ссылка на него находится по смещению 0x208. Чтобы ее прочитать нужно маскировать адрес:
Это адрес, который необходимо маскировать полностью, кроме последнего байта:
Над адресом токена нужно вызвать одноименную команду и мы можем убедиться, что действительно, как указано в документации, токен содержит информацию, которая была заявлена:
Из рисунка видно, что все привилегии, которые содержит токен, располагаются в виде битовой маски и имеют названия, которые начинаются с префикса “Se”. Именно эти поля нам и нужно модифицировать, чтобы операционная система позволяла процессу читать что угодно в операционной системе. Определившись с целью, время поговорить об атаках на набор привилегий, уязвимостях и экспортах к ним.LPE или что делать с токеномИзменение привилегий в токене может быть весьма тривиальной задачей несмотря на то, что эти самые привилегии очень сложно структурированы. Основной атакой, которую применяют для эскалации привилегий - перезапись ссылки на токен, которая содержится в структуре EPROCESS. Иными словами токен не изменяется, меняется адрес, где лежит токен. Обычно этот адрес выбирается из системного процесса, который постоянно может присутствовать в операционной системе. Результатом такой операции становится процесс или отдельный поток, который может делать в ОС всё, что угодно. Ниже приведем пример кода, который позволяет произвести кражу токена:
[BITS 64]
start:
mov rdx, [gs:188h] ;get _ETHREAD указатель из KPCR
mov r8, [rdx+70h] ;_EPROCESS
mov r9, [r8+188h] ;ActiveProcessLinks начало списка
mov rcx, [r9] ;найти первый процесс в списке
find_system_proc:
mov rdx, [rcx-8] ;смещение от ActiveProcessLinks до UniqueProcessId
cmp rdx, 4 ;System процесс
jz found_it
mov rcx, [rcx] ;переходим по _LIST_ENTRY Flink указателю
cmp rcx, r9
jnz find_system_proc
found_it:
mov rax, [rcx+80h] ;смещение ActiveProcessLinks до токена
and al, 0f0h ;очищаем 4 бита _EX_FAST_REF структуры
mov [r8+208h], rax ;заменить токен текущего процесса системным
ret
Приведенный выше код позволяет скопировать токен для текущего процесса из системного процесса с идентификатором 4. Стоит отметить, что код должен быть запущен в контексте ядра операционной системы. Это означает, что он либо должен быть выполнен драйвером, либо шелкодом, который будет загружаться в память через уязвимость операционной системы.Уязвимости и эксплойтыОперационная система Windows, как и любая другая сложная система, насчитывает миллионы строк кода. И, как в любом большом проекте, его размер не позволяет исключать ошибки и недочеты. На картинке ниже представлена статистика найденных в ОС уязвимостей последних 5 лет. В нее включены уязвимости для повышения привилегий:
Данные об уязвимостях взяты отсюда. Статистика показывает, что уязвимостей достаточно, чтобы можно было найти себе необходимую для повышения привилегий. Для исследования будем использовать готовые эксплойты. Попробуем восстановить последовательность действий, которые проводятся для достижения цели - эскалации привилегий. Список уязвимостей будет следующим:
- CVE-2015-2546
- CVE-2016-3309
- CVE-2017-0101
- CVE-2018-8120
- CVE-2019-1458
- CVE-2020-0796
CVE-2015-2546Уязвимость в Win32k модуле операционной системы, повреждение памяти. Фрагмент эксплойта, который отвечает за изменение токена процесса:
Кажется, это тот самый код, который был представлен выше. В нем видоизменен подход к поиску токена, но основная идея та же — получить ссылку на токен из процесса с PID=4(System.exe).CVE-2016-3309Уязвимость в Win32k, снова проблема с повреждением памяти, взглянем на кусок кода, который используется для замены токена:
В этом случае автор использовал язык программирования C, так же была изменена часть поиска адреса токена, но снова методика замены токена — перезапись адреса из системного процесса.CVE-017-0101Уязвимость в user32 GDI объектах и снова повреждение памяти. Код замены токена:
Код скопирован из эксплойта 2016 года, похоже, что на этот период примитивы для проведения эскалаций привилегий еще пока что не митигировались в Windows.CVE-2018-8120Уязвимость в Win32k компоненте, в этот раз неверно обрабатывается nullpointer, код для замены токена:
Автор эксплойтов явно не спешит использовать что-то другое или хотя бы новое. Снова код, который ищет System.exe и использует его токен.CVE-2019-1458Уязвимость в Win32k, повреждение памяти, код замены токена:
Вот и первые изменения, автор больше не мог использовать код, который его выручал на протяжении 3х лет. Теперь токен заменяется через примитивы, которые использовались для эксплуатации уязвимостей в Windows 10 — метод Bitmap. По механике он делает тоже самое, но достигается это за счет использования объектов подсистемы Win32k. CVE-2020-0796Уязвимость в драйвере, который обрабатывает SMBv3 запросы. Проблема таилась в переполнении целочисленного типа, который отвечал за количество выделяемой памяти в ядре. Код замены токена:
Случай с этой уязвимостью — особенный. В первую очередь потому, что замена и перезапись токена осуществляется за 1 проход при получении неверно сформатированного запроса по SMBv3, поэтому в исходнике не происходит никаких дополнительных вычислений и действий по отношению к токену System.exe и процесса пользователя.Вместо заключенияПри тестировании на проникновение часто возникает необходимость использовать тот или иной публичный эксплойт на эскалацию привилегий. При этом не всегда можно найти подробное описание эксплойта и привести его в работоспособное состояние. Надеюсь, эта статья помогла вам увидеть шаблоны, которые применяются для написания эксплойтов, и теперь разбираться в них станет чуточку легче. К тому же, как показывает описание выше, способов на повышение привилегий не так много, а именно один — изменение ссылки на токен процесса. Все остальное это просто модификации способа как ссылку можно перезаписать.
Узнать подробнее о курсе "Пентест. Практика тестирования на проникновение".
Записаться на открытый вебинар по теме "Windows ad: сбор информации, эскалация привилегий. Эксплойты и уязвимости последних 5 лет."
===========
Источник:
habr.com
===========
Похожие новости:
- [Виртуализация, Софт] Windows 10 ARM работает на Mac с M1 быстрее, чем на Surface Pro X
- [Информационная безопасность, DIY или Сделай сам] Энтузиаст смог незаметно передать данные, меняя скорости Ethernet
- [Информационная безопасность, Криптовалюты] Производитель компьютеров Advantech пострадал от вируса-вымогателя. Хакеры требуют выкуп в биткоинах
- [Спам и антиспам, Информационная безопасность, Разработка веб-сайтов, Системное администрирование, Серверное администрирование] Переход с reCAPTCHA на hCaptcha (перевод)
- [Информационная безопасность, Исследования и прогнозы в IT] Исследование атак со стороны профессиональных кибергруппировок: смотрим статистику техник и тактик
- [Информационная безопасность] Security Week 49: взлом Tesla через Bluetooth
- [Информационная безопасность, Реверс-инжиниринг] CTF-соревнования 2020 для «белых хакеров». Старт регистрации участников
- [Информационная безопасность, Python, Программирование, Машинное обучение, Искусственный интеллект] Deep Anomaly Detection
- [Информационная безопасность] (не) Безопасный дайджест: сливы COVID-пациентов и незваный гость на министерской встрече в Zoom
- [Java] Как Spring Data Jdbc соединяет таблицы
Теги для поиска: #_informatsionnaja_bezopasnost (Информационная безопасность), #_testirovanie_itsistem (Тестирование IT-систем), #_razrabotka_pod_windows (Разработка под Windows), #_pentest, #_testirovanie_na_proniknovenie (тестирование на проникновение), #_windows, #_blog_kompanii_otus._onlajnobrazovanie (
Блог компании OTUS. Онлайн-образование
), #_informatsionnaja_bezopasnost (
Информационная безопасность
), #_testirovanie_itsistem (
Тестирование IT-систем
), #_razrabotka_pod_windows (
Разработка под Windows
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 26-Ноя 00:02
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Для будущих студентов курса "Пентест. Практика тестирования на проникновение" подготовили авторскую статью от нашего эксперта - Александра Колесникова.
Также приглашаем записаться на открытый вебинар по теме "Windows ad: сбор информации, эскалация привилегий. Эксплойты и уязвимости последних 5 лет." Тема получения безграничного доступа к системе очень интересна в контексте тестирования на проникновение. Получить доступ к системе и запустить команду — сегодня это только половина победы. Вторая половина достигается только в тот момент, когда удается обойти подсистемы песочниц и ограничений, которые есть в операционной системе.Эта статья расскажет о некоторых особенностях эксплойтов для повышения привилегий в операционной системе Windows.Privileges in WindowsДля понимания, как работает эскалаций привилегий, необходимо разобраться с разграничением доступа в операционной системе Windows. Описание системы разграничения доступа можно найти на официальном сайте. Согласно документации, разграничение доступа в ОС Windows строится на следующих понятиях:
Структура достаточно сложная и просто так скопировать или модифицировать ее не получится из-за того, что токен хранится в защищенном от модификации месте (как сказано в документации). Выясним, где она находится. Для этого запустим операционную систему Windows в отладочном режиме и исследуем все структуры, которые используются для работы процесса. Если обратиться снова к официальной документации, то начинать стоит со структуры EPROCESS. Получается, что информация о токене процесса хранится в ядре и поэтому в документации это помечено как область, которую нельзя изменить. Теоретически это действительно так: обычные приложения, которые работают в 3-м кольце, не могут модифицировать то, что хранится в 0-м. Но если модифицировать из ядра структуру внутри ядра, то здесь нет никаких ограничений и противоречий. Обратимся к отладчику: Жирным цветом выделен адрес структуры EPROCESS, чтобы изучить её более подробно вызовем команду отладчика: Похоже, что и искать долго не придется, токен находится буквально сразу. В 64-битных операционных системах ссылка на него находится по смещению 0x208. Чтобы ее прочитать нужно маскировать адрес: Это адрес, который необходимо маскировать полностью, кроме последнего байта: Над адресом токена нужно вызвать одноименную команду и мы можем убедиться, что действительно, как указано в документации, токен содержит информацию, которая была заявлена: Из рисунка видно, что все привилегии, которые содержит токен, располагаются в виде битовой маски и имеют названия, которые начинаются с префикса “Se”. Именно эти поля нам и нужно модифицировать, чтобы операционная система позволяла процессу читать что угодно в операционной системе. Определившись с целью, время поговорить об атаках на набор привилегий, уязвимостях и экспортах к ним.LPE или что делать с токеномИзменение привилегий в токене может быть весьма тривиальной задачей несмотря на то, что эти самые привилегии очень сложно структурированы. Основной атакой, которую применяют для эскалации привилегий - перезапись ссылки на токен, которая содержится в структуре EPROCESS. Иными словами токен не изменяется, меняется адрес, где лежит токен. Обычно этот адрес выбирается из системного процесса, который постоянно может присутствовать в операционной системе. Результатом такой операции становится процесс или отдельный поток, который может делать в ОС всё, что угодно. Ниже приведем пример кода, который позволяет произвести кражу токена: [BITS 64]
start: mov rdx, [gs:188h] ;get _ETHREAD указатель из KPCR mov r8, [rdx+70h] ;_EPROCESS mov r9, [r8+188h] ;ActiveProcessLinks начало списка mov rcx, [r9] ;найти первый процесс в списке find_system_proc: mov rdx, [rcx-8] ;смещение от ActiveProcessLinks до UniqueProcessId cmp rdx, 4 ;System процесс jz found_it mov rcx, [rcx] ;переходим по _LIST_ENTRY Flink указателю cmp rcx, r9 jnz find_system_proc found_it: mov rax, [rcx+80h] ;смещение ActiveProcessLinks до токена and al, 0f0h ;очищаем 4 бита _EX_FAST_REF структуры mov [r8+208h], rax ;заменить токен текущего процесса системным ret Данные об уязвимостях взяты отсюда. Статистика показывает, что уязвимостей достаточно, чтобы можно было найти себе необходимую для повышения привилегий. Для исследования будем использовать готовые эксплойты. Попробуем восстановить последовательность действий, которые проводятся для достижения цели - эскалации привилегий. Список уязвимостей будет следующим:
Кажется, это тот самый код, который был представлен выше. В нем видоизменен подход к поиску токена, но основная идея та же — получить ссылку на токен из процесса с PID=4(System.exe).CVE-2016-3309Уязвимость в Win32k, снова проблема с повреждением памяти, взглянем на кусок кода, который используется для замены токена: В этом случае автор использовал язык программирования C, так же была изменена часть поиска адреса токена, но снова методика замены токена — перезапись адреса из системного процесса.CVE-017-0101Уязвимость в user32 GDI объектах и снова повреждение памяти. Код замены токена: Код скопирован из эксплойта 2016 года, похоже, что на этот период примитивы для проведения эскалаций привилегий еще пока что не митигировались в Windows.CVE-2018-8120Уязвимость в Win32k компоненте, в этот раз неверно обрабатывается nullpointer, код для замены токена: Автор эксплойтов явно не спешит использовать что-то другое или хотя бы новое. Снова код, который ищет System.exe и использует его токен.CVE-2019-1458Уязвимость в Win32k, повреждение памяти, код замены токена: Вот и первые изменения, автор больше не мог использовать код, который его выручал на протяжении 3х лет. Теперь токен заменяется через примитивы, которые использовались для эксплуатации уязвимостей в Windows 10 — метод Bitmap. По механике он делает тоже самое, но достигается это за счет использования объектов подсистемы Win32k. CVE-2020-0796Уязвимость в драйвере, который обрабатывает SMBv3 запросы. Проблема таилась в переполнении целочисленного типа, который отвечал за количество выделяемой памяти в ядре. Код замены токена: Случай с этой уязвимостью — особенный. В первую очередь потому, что замена и перезапись токена осуществляется за 1 проход при получении неверно сформатированного запроса по SMBv3, поэтому в исходнике не происходит никаких дополнительных вычислений и действий по отношению к токену System.exe и процесса пользователя.Вместо заключенияПри тестировании на проникновение часто возникает необходимость использовать тот или иной публичный эксплойт на эскалацию привилегий. При этом не всегда можно найти подробное описание эксплойта и привести его в работоспособное состояние. Надеюсь, эта статья помогла вам увидеть шаблоны, которые применяются для написания эксплойтов, и теперь разбираться в них станет чуточку легче. К тому же, как показывает описание выше, способов на повышение привилегий не так много, а именно один — изменение ссылки на токен процесса. Все остальное это просто модификации способа как ссылку можно перезаписать. Узнать подробнее о курсе "Пентест. Практика тестирования на проникновение".
Записаться на открытый вебинар по теме "Windows ad: сбор информации, эскалация привилегий. Эксплойты и уязвимости последних 5 лет." =========== Источник: habr.com =========== Похожие новости:
Блог компании OTUS. Онлайн-образование ), #_informatsionnaja_bezopasnost ( Информационная безопасность ), #_testirovanie_itsistem ( Тестирование IT-систем ), #_razrabotka_pod_windows ( Разработка под Windows ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 26-Ноя 00:02
Часовой пояс: UTC + 5