Внедрение обратного вызова локального хранилища потоков (TLS) - это скрытая техника инъекции процесса, которую злоумышленники используют для выполнения вредоносного кода до запуска основной точки входа в программу. Эта техника использует преимущества обратных вызовов TLS, которые представляют собой функции, автоматически выполняемые Windows при создании потока. Внедряя вредоносный код в TLS-обратный вызов процесса, атакующие могут добиться его раннего выполнения, часто до того, как решения безопасности начнут контролировать процесс.
Что такое локальное хранилище потоков?
Локальное хранилище потоков - это сложный механизм программирования, который предоставляет каждому потоку в многопоточном приложении свою собственную область хранения данных. Подумайте об этом, как о предоставлении каждому работнику (потоку) своего личного шкафчика (места для хранения), где они могут хранить свои личные инструменты и материалы, вместо того чтобы делиться всем из общего ящика для инструментов. ОС использует обратные вызовы TLS для инициализации и очистки данных, используемых потоками. Эти обратные вызовы представляют собой функции, которые ОС вызывает при создании или завершении потока.
Когда процесс запускается, операционная система выделяет для него каталог TLS. Этот каталог действует как карта, помогая потокам находить свои личные области хранения. Каждый поток получает свой собственный набор слотов TLS, которые по сути являются индексированными местами хранения. Прелесть этой системы в том, что даже если несколько потоков обращаются к одной и той же глобальной переменной, на самом деле они обращаются к своим собственным частным копиям, хранящимся в соответствующих слотах TLS.
Операционная система Windows реализует TLS с помощью нескольких ключевых структур:
- Блок окружения потока (Thread Environment Block, TEB) содержит указатель на массив TLS потока.
- Массив TLS содержит указатели на фактические блоки данных TLS.
- Каталог TLS PE-файла содержит данные инициализации и адреса обратных вызовов.
Операционная система выполняет обратные вызовы TLS в определенные моменты времени в течение жизненного цикла потока и процесса:
- При запуске процесса (до основной точки входа)
- При создании нового потока
- Когда поток завершается
- Когда процесс завершается
Эта система обратных вызовов обеспечивает правильную инициализацию и очистку ресурсов, специфичных для потоков.
Использование злоумышленниками локального хранилища потоков
Атакующие используют обратные вызовы TLS для внедрения и выполнения вредоносного кода в начале выполнения программы или при создании нового потока. Вот как обычно работает инъекция обратного вызова TLS:
- Выбор целевого приложения: Атакующий выбирает целевое приложение, в которое он хочет внедрить код. Желательно, чтобы это приложение имело обратные вызовы TLS или было модифицировано для их включения.
- Анализ или модификация каталога TLS: Если целевое приложение еще не использует обратные вызовы TLS, атакующий модифицирует PE-файл приложения, чтобы включить в него каталог TLS. Это влечет за собой изменение PE-заголовка и, возможно, добавление новых секций в файл. Если целевое приложение уже использует TLS, атакующий может подключить или заменить существующие обратные вызовы TLS на вредоносные.
- Запись вредоносного обратного вызова: Атакующий пишет вредоносную функцию обратного вызова TLS. Эта функция должна быть предназначена для выполнения любых вредоносных действий по желанию злоумышленника, таких как создание бэкдора или выполнение полезной нагрузки.
- Инжектировать вредоносный обратный вызов: Используя инструмент или эксплойт, атакующий вводит адрес вредоносного обратного вызова в таблицу обратных вызовов TLS целевого приложения. Это может включать прямую модификацию двоичного файла на диске или в памяти, чтобы он указывал на код атакующего, а не на легитимные функции инициализации.
- Выполнение целевого приложения: При выполнении целевого приложения загрузчик Windows обрабатывает PE-файл и выполняет все обратные вызовы TLS до достижения основной точки входа в приложение или при создании нового потока, использующего TLS.
- Выполнение обратного вызова: Когда вредоносный обратный вызов TLS выполняется, он запускает код атакующего в контексте процесса приложения. Эта активация происходит на ранних стадиях запуска программы, часто делая внедренный код одним из первых.
Обратите внимание, что "Пустые процессы" можно использовать для манипулирования обратными вызовами TLS путем выделения и записи в определенные смещения в пространстве памяти процесса.
В феврале 2024 года сообщалось, что Strela Stealer использовал инъекцию обратных вызовов TLS для внедрения ringsbeef.dll. Эта вредоносная DLL предназначена для кражи данных Outlook и Thunderbird со взломанных систем.