![](https://habrastorage.org/getpro/habr/upload_files/316/d0f/06e/316d0f06eef6aeff942722ccf2d8afb8.png)
Уязвимости в ОС и программном обеспечении всегда являлись одними из самым мощных векторов тестирования на проникновение. Какими интересными свежими уязвимостями можно пополнить свой арсенал? В статье попробуем разобраться, как работают 3 уязвимости в ОС Windows и MS Office, которые были опубликованы в последние полгода.
Список уязвимостей
С каждым годом, несмотря на улучшение процессов разработки программного обеспечения и введения большого количества систем защит, количество выпускаемых в паблик эксплойтов растет. Поэтому, чтобы не потеряться в этом море ошибок и готовых эксплойтов, выполним несколько шагов.
Шаг первый — определим набор программного обеспечения, который нам был бы интересен. Так как пентест обычно проводится для корпоративных сетей, где особой популярностью пользуется ОС Windows, то логично будет в список включать уязвимости для нее и её компонентов. Итак, в списке следующий софт:
-
Windows 7,8,10
-
Windows Server 2016, 2019
-
Exchange Server
-
Sharepoint Server
-
Пакет приложений MS Office
-
Atlassian Confluence
-
Atlassian Jira
-
git
-
WordPress
-
…
Быстрый поиск через любую поисковую машину находит несколько тысяч уязвимостей, которые были выпущены в public для перечисленных продуктов. Определим небольшой список:
-
CVE-2021-1727 (Windows)
-
CVE-2021-1732 (Windows)
-
CVE-2021-40444 (Office)
CVE-2021-1727
Уязвимость в ОС Windows, согласно находится в Windows Installer сервисе. Успешная эксплуатация может позволить повысить свои привилегии до уровня пользователя System. Иными словами, это полная компрометация ОС. Описание, в чем конкретно заключается уязвимость, не доступно. Среди уязвимых систем — Windows 7, 8, 10 до 2004 билда включительно.
Попробуем найти информацию среди уже готовых эксплойтов. Первая же ссылка нас приводит к вот этому репозиторию. Эксплойт написан на языке программирования C++. В этот раз нам повезло: PoC снабжен исходным кодом, в котором есть даже интересные комментарии. С использованием исходного кода опишем верхнеуровнего алгоритм эксплойта:
-
main
функция почти весь код содержит в цикле, условием которого является успешное чтение ключа реестраSYSTEM\\CurrentControlSet\\Services\\Fax\\ImagePath
. Причем поиск осуществляется следующего значения —%systemroot%\\Temp\\asmae.exe
-
На строке 76 и 77 внутри цикла устанавливается приоритет процесса и потока эксплойта.
SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS); SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);
Это может указывать на то, что эксплойт использует проблему типа Race Condition.
-
Подтверждение пункту 2 можно привести так же использование вот такого цикла для загрузки процессора:
DWORD WINAPI thread(void* args) { do { } while (1); }
-
Основная эксплуатация происходит параллельно следующей команде:
c:\\windows\\system32\\msiexec.exe", L" /fa C:\\Windows\\Temp\\asmae.msi /quiet
Таким образом, перед нами эксплойт, который приводит к Race Condition и, используя эту уязвимость, перезатирает исполняемый файл для сервиса внутри Windows. В данном случае используется сервис «Fax».
В репозитории уже есть 2 файла, которые используются для запуска полезной нагрузки: asmae.msi
и asmae.exe
.
CVE-2021-1732
Уязвимость в Windows Win32k подсистеме. Win32k — самая популярная подсистема для повышения привилегий. Данная уязвимость не стала исключением. Основные проблемы, которые преследуют эту подсистему — рассинхронизация создания и уничтожения объектов, с которыми работают алгоритмы. Практически всегда это элементы пользовательского интерфейса, которые создаются со случайными значениями параметров инициализации.
Публичный эксплойт для этой уязвимости можно также найти в репозитории здесь.
Сам эксплойт использует достаточно простой алгоритм, однако, благодаря введенным в ОС подсистемам защиты, выполнение этого алгоритма может быть достаточно нетривиальной задачей.
Итак, чтобы повысить привилегии для пользователя, эксплойт выполняет следующие этапы:
-
Создание и инициализация фэйковых объектов подсистемы Win32k
-
Использование уязвимости или стандартного механизма ОС для получения маппинга оперативной памяти ядра ОС
-
Поиск primary Token в памяти запущенного процесса
-
Модификация привилегий напрямую или с использованием донорского процесса, как правило это процесс System.exe
Эксплойт с самого начала использует механизм поиска базовых адресов в оперативной памяти. Для этого используется функция HmValidateHandle
. На основании данных от этой функции собирается примитив для чтения памяти:
QWORD MyRead64(QWORD qwDestAddr) { MENUBARINFO pmbi = {}; pmbi.cbSize = sizeof(MENUBARINFO); if (g_bIsInit) { } else { QWORD *pTemp = (QWORD*)LocalAlloc(0x40u, 0x200ui64); memset(pTemp, 0, 0x200); QWORD qwBase = 0x000000400000000; QWORD qwAdd = 0x0000000800000008; for (int i = 0; i < 0x40; i++) { *(pTemp + i) = qwBase + qwAdd*i; } *(QWORD *)ref_g_pMem5 = (QWORD)pTemp; GetMenuBarInfo(g_hWndMax, -3, 1, &pmbi); g_pmbi_rcBar_left = pmbi.rcBar.left; bool g_bIsInit = 1; } *(QWORD *)ref_g_pMem5 = qwDestAddr - g_pmbi_rcBar_left; GetMenuBarInfo(g_hWndMax, -3, 1, &pmbi); return (unsigned int)pmbi.rcBar.left + ((__int64)pmbi.rcBar.top << 32); }
В качестве примитива на запись используется функция SetWindowLongPtrA
. Далее перезатирается токен для выполнения команд с повышенными привелегиями.
CVE-2021-40444
Уязвимость в модуле mshtml, который используется для работы с разметкой в ОС Windows. Наиболее популярной уязвимость стала в совокупности с использованием MS Office пакета приложений. Это, наверное, одна из самых простых узявимостей, которые появлялись за последнее время. Уязвимость достаточно быстро получила большое количество фреймворков для воспроизведения и использования. Например, вот этот репозиторий.
Суть уязвимости заключается в том, что mshtml используется для того, чтобы скачивать из сети шаблоны для работы с Office документами. Причем производятся подобные загрузки автоматически, без какой-либо валидации.
В стандартном сценарии загрузка шаблонов позволяет работать с xml/html файлами, которые могут перемежаться cab архивами. Это обстоятельство и используется для эксплуатации. То есть чтобы стриггерить узявимость, эксплойты из репозитория просто создают подложный файл шаблона и cab файл, который будет выполнять запуск команд на системе с привелегиями пользователя, который открыл документ.
Триггер можно найти здесь.
Выводы
Изучение уязвимостей может помочь более эффективно использовать их при тестировании на проникновение. Без знаний о том, что происходит в результате использования той или иной уязвимости, будет потрачено драгоценное время, которого всегда мало на проведение всех тестов.
Материал подготовлен Александром Колесниковым в рамках курса «Пентест. Практика тестирования на проникновение».
ссылка на оригинал статьи https://habr.com/ru/articles/584312/
Добавить комментарий