ClickOnce Hijacking: скрытое выполнение shellcode через подмену неподписанных DLL и Thr... — 28 мая 2026 г. в 09:04:03.806
ClickOnce Hijacking: скрытое выполнение shellcode через подмену неподписанных DLL и Thread Hijacking #ClickOnce #RedTeam #ThreadHijacking #InitialAccess Метод позволяет создать простой загрузчик shellcode, эксплуатируя доверенные ClickOnce-приложения и отсутствие подписи у отдельных сборок (DLL Hijacking + Manifest Manipulation + Thread Hijacking). Суть техники ClickOnce проверяет криптографическую подпись манифестов, при этом не верифицирует сборки на этапе загрузки, если разработчик изначально их не подписал. Атакующий берет легитимное подписанное ClickOnce-приложение (например, ReaderConfiguration.exe от MagTeK), через декомпилятор (тот же dnSpy) находит вызов функции из неподписанной DLL и заменяет эту DLL на свою версию с внедренным вредоносным C# кодом. Чтобы ClickOnce успешно загрузил модифицированный пакет, необходимо обновить хэши и манифесты. После замены DLL пересчитываются SHA-256 хэши измененных файлов, обновляются соответствующие элементы dsig:DigestValue и атрибуты size в манифесте исполняемого файла (.exe.manifest). Подпись полностью вычищается из обоих манифестов (.exe.manifest и .application): удаляются элементы publisherIdentity и Signature, а значение publicKeyToken обнуляется до 0000000000000000. Это сообщает механизму ClickOnce, что проверять подпись больше не нужно. В самой подмененной DLL shellcode хранится как Embedded Resource и зашифрован простым 3-байтовым XOR-ключом (для обхода EDR-движков, которые брутфорсят 1-байтовые ключи). В рантайме происходит расшифровка пейлоада и скрытое разрешение Windows API через кастомный класс (API Hashing) путем парсинга PEB без использования стандартных P/Invoke. Запускается легитимный процесс wmiprvse.exe в состоянии CREATE_SUSPENDED. Выделяется память (VirtualAllocEx с правами RWX), shellcode записывается в память (WriteProcessMemory), выполняется hijacking главного потока (GetThreadContext → перезапись регистра RIP для x64 или EIP для x86 → SetThreadContext), и поток возобновляется вызовом ResumeThread. Пайплайн атаки Сборка вредоносного ClickOnce-пакета (подмена DLL, пересчет хэшей, зачистка элементов подписи в манифестах) Доставка пакета и его установка в пользовательскую директорию (AppData) Загрузка модифицированной DLL легитимным приложением, расшифровка shellcode из ресурсов Инъекция и выполнение shellcode через Thread Hijacking в созданный suspended-процесс wmiprvse.exe Импакт и обнаружение Техника позволяет обойти SmartScreen и AppLocker, так как изначальный запуск производится в контексте легитимного приложения. В ходе тестов она также хорошо себя показала против Cortex и SentinelOne, CrowdStrike был обойден после искусственного увеличения размера файла загрузчика. Bitdefender и Microsoft Defender for Endpoint обнаружили активность, преимущественно на этапе сканирования памяти процесса или при создании жертвенного процесса wmiprvse.exe. Источник @poxek | MAX | Блог | YT | RT | VK

