В современном мире кибербезопасности поиск и использование уязвимостей остаются одними из самых значимых задач для исследователей. Среди наиболее сложных и ценных достижений - создание 0-click эксплойтов, которые позволяют взломать систему без какого-либо взаимодействия с пользователем. Такой вид атаки, практически незаметный и максимально эффективный, является настоящей вершиной мастерства в сфере уязвимостей. Недавно был представлен проект Eternal-Tux, ставший уникальным примером создания 0-click удалённого выполнения кода (RCE) в ядре Linux через недостатки компонента KSMBD - Kernel SMB3 Daemon. KSMBD - это сервер SMB3, работающий в пространстве ядра Linux.
Его цель - обеспечить высокий уровень производительности и интеграции протокола SMB (протокол обмена файлами и ресурсами Microsoft). Пока что он редко применяется на производственных системах, однако благодаря своей сетевой доступности и интенсивному развитию становится лакомым кусочком для исследователей возможностей взлома ядра Linux. Проект Eternal-Tux основан на изучении нескольких известных уязвимостей и их объединении в единую цепочку, которая даёт возможность неавторизованного или минимум аутентифицированного удалённого доступа к системе с привилегиями ядра. Исторический контекст разработки KSMBD демонстрирует, что появление уязвимостей в ядре, особенно в сетевых компонентах, не редкость. За последние несколько лет было выявлено множество багов, от отказа в обслуживании (DoS) до полностью удалённого выполнения кода без участия пользователя.
Исследователи Guillaume Teissier и Quentin Minster продемонстрировали такую 0-click уязвимость в конце 2022 года, подарив миру ценный пример, но в проекте Eternal-Tux была предпринята попытка повторить и расширить этот опыт. Ключевым в исследовании является выбор объекта атаки и необходимых примитивов эксплуатации. Прежде всего, внимание уделяется версии ядра Linux 6.1.45 - устаревшей на два года, но при этом со стандартными защитами памяти, включая SMAP, SMEP, KPTI и KASLR.
Компоненты ядра, особенно связанные с выделением памяти, теперь имеют высокую степень защиты, что заметно усложняет разработку эксплойтов. Тем не менее, в KSMBD удалось обнаружить полезные для эксплуатации баги. Первая критическая уязвимость, на которой базируется эксплойт, связана с буферным переполнением в функции ksmbd_decode_ntlmssp_auth_blob(). Ошибка происходит из-за отсутствия корректной проверки длины ключа сессии в процессе обработки NTLM-аутентификации. Злоумышленник получает возможность спровоцировать SLUB-переполнение - контроль над переполнением выделенной памяти ядра, что почти всегда является мощным оружием в руках хакеров.
Технически атака задействует возможность отправить специально подготовленный пакет NTLM аутентификации по протоколу SMB2_SESSION_SETUP, включающий заведомо неверный параметр длины ключа сессии (sess_key_len). Корректность этой переменной не была должным образом проверена, что и привело к возможности записи за пределы выделенного буфера. Для практической реализации атаки был использован популярный фреймворк Impacket, в котором было достаточно модифицировать один метод для инъекции "зловредного" ключа. Однако переполнение памяти - это лишь часть задачи. Для успешного проведения эксплойта необходим ещё один элемент - утечка данных из ядра, которая позволяет точно определить состояние памяти после переполнения, обойти защиту KASLR (рандомизация адресного пространства ядра) и выстроить надёжный цепочную атаку.
В Eternal-Tux таким вектором служит уязвимость, классифицированная как CVE-2023-4130, связанная с неверной проверкой длины буфера в функции smb2_set_ea(). Этот баг позволяет злоумышленнику, обладающему правами на запись в разделяемый каталог SMB, создавать специальные расширенные атрибуты (EA) файлов с некорректными параметрами размеров, что приводит к чтению и записи за пределы выделенной памяти. В результате можно получить возможность медленного вывода содержимого смежных областей памяти ядра через обычные запросы информации по файлу. Такая утечка, хоть и ограниченная по размеру и диапазону, открывает путь к получению важных указателей и данных, необходимых для построения реального RCE-эксплойта. Соединение этих двух багов - контроль SLUB-переполнения и способность извлекать информацию из ядра - и сформировало основу исследовательской работы Eternal-Tux.
Автор смог с успехом реализовать "аутентифицированный 0-click" эксплойт, который, хотя требует наличия учётных данных, фактически не предусматривает взаимодействие жертвы помимо присоединения к SMB-серверу. Разработка и отладка такого эксплойта потребовала глубокого понимания внутренностей KSMBD. Особое внимание было уделено структурам данных ksmbd_conn и ksmbd_session, выделяемым из квартир памяти kmalloc-1024 и kmalloc-512 соответственно. Благодаря изучению особенностей работы SLUB-аллокатора и поведения TCP-стека внутри ядра получилось создать стратегию распределения объектов памяти для максимальной надёжности эксплуатации с учётом системных защиты и рандомизации. Для усложнения задачи исследователь учёл активную работу кэш-пулов kmalloc-512 и kmalloc-1к, а также их конкурирующее использование потоками ядра.
Это потребовало внедрения механизма распознавания и повторного выделения контейнеров соединений для целенаправленного управления состоянием памяти, что повысило стабильность эксплуатации выше 95% случаев. Обилие шумовых аллокаций потребовало исключительной точности в выборе сессий и процедур. Особо примечателен переход от переполнения памяти в составе kmalloc-512 к произвольной записи в kmalloc-1к через арбитрарное освобождение памяти (arbitrary free). Именно в этом заключается искусство эксплуатации в современных условиях жестких защит системы. Нарушение согласованности и контроль критических указателей в структуре ksmbd_session позволили переписать указатель local_nls, перенаправив его на подложенный объект с фальшивой таблицей виртуальных функций (vtable).
Такой подход был ключом к последующей реализации ROP-цепочки, которая позволила выполнить код в контексте ядра. Финальным шагом стало построение цепочки ROP, использующей тщательно подобранные гаджеты ядра, такие как pop rdi, pop rsi, pop rdx и другие, а также вызов call_usermodehelper. Благодаря этому в системе был запущен обратный шелл с правами ядра, открывая полный контроль над взломанной машиной. В ходе атаки ядро переводилось в состояние бесконечного сна, что минимизирует риск аварий и обеспечивает устойчивое выполнение вредоносного кода. Несмотря на успешность, автор отмечает, что по-прежнему остаются некоторые ограничения.
Основные из них связаны с нестабильностью на многоядерных системах из-за особенностей работы пер-CPU кэшей памяти и необходимости поддерживать множество объектов сессий живыми на протяжении всего процесса атаки. К тому же, некоторые команды могут вызвать сбой системы, что осложняет постэксплуатационные операции. Тем не менее, работа представляет собой значительный шаг в области исследований эксплуатаций ядра Linux, демонстрируя сложные техники и глубокое понимание системных механик. Вклад разработчика и поддержка со стороны исследовательских групп, таких как Crusaders of Rust и MATCHA в MIT CSAIL, подчёркивают важность и перспективность направлений изучения системной безопасности на уровне ядра. Eternal-Tux уже вдохновил многих специалистов и начинающих исследователей двигаться дальше в поисках новых эксплойтов и уязвимостей.
Таким образом, разработка 0-click RCE эксплойта для KSMBD демонстрирует текущую ситуацию в исследовании безопасности Linux-ядер и сетевых сервисов. От хорошо известного протокола SMB до сложных механизмов аллокации памяти - каждый элемент становится частью всё более изощрённых атак. Для системных администраторов и специалистов по безопасности это сигнал не только об угрозах, но и о необходимости тщательного контроля используемых сервисов и своевременного обновления систем. Для максимально надежной защиты рекомендуется избегать использования KSMBD на продуктивных системах, особенно с открытым доступом и неограниченными правами на запись. Также важна регулярная проверка систем на наличие опубликованных CVE и применения патчей.
В то время как исследования, подобные Eternal-Tux, улучшают понимание уязвимостей, они одновременно предоставляют хакерам инструменты и знания, которые могут быть использованы в атаках. Именно поэтому усилия по своевременному обновлению и аудитам систем остаются ключевыми элементами кибербезопасности. Eternal-Tux напоминает нам о том, что информационная безопасность - не статичное состояние, а непрерывный процесс поиска и устранения новых дыр в сложных и взаимосвязанных системах. И, возможно, именно такие проекты со временем приведут к появлению более безопасных и устойчивых операционных систем, защищённых от самых изощрённых атак будущего. .