Способы инжекта кода в Windows 7/8
Итак, что остается в арсенале малварщика на сегодняшний день? На самом деле ничего принципиально нового в способах инжекта кода в Windows 7/8 нет — все те же самые LoadLibrary, CreateRemoteThread, WriteProcessMemory, RtlCreateUserThread. Методы остались все те же, изменились условия их использования — появились палки в колесах: «защищенные процессы», контроль за сессиями и тому подобное. Самый верный способ — вызов замечательной функции NtCreateThreadEx (справедливости ради надо отметить, что RtlCreateUserThread всего лишь обертка под NtCreateThreadEx). API-функция NtCreateThread оставлена в Vista лишь для совместимости с предыдущими системами. Вызов самой функции не представляет труда: Status = NtCreateThreadEx (& newThreadHandle, GENERIC_ALL, 0, procHandle, (LPTHREAD_START_ROUTINE) startAddress, param, crFlags, 0,0,0, & attrList) где attrList — указатель на структуру PROC_THREAD_ATTRIBUTE_LIST, включающую в себя другую структуру PROC_THREAD_ATTRIBUTE_ENTRY, их описание легко найти в интернете. Код, реализующий инжект с применением NtCreateThreadEx, ты сможешь отыскать в Сети, он без труда гуглится.
Дело в том, что иногда напрямую вызывать функции запуска процесса/потока для старта своего кода необязательно, если вспомнить о системных документированных и, самое главное (!), недокументированных возможностях, связанных с подгрузкой системных DLL в адресное пространство какого-то процесса. Например, из известных документированных можно упомянуть APPInit-dlls(goo.gl/StTMX), когда прописанные в реестре DLL’ки автоматом подгружаются в стартующие процессы.
Но самый большой практический интерес представляют недокументированные возможности системы, использование которых позволяет прозрачно подгружать в стартующие процессы библиотеки. Например, такой трюк был в первых версиях TDL, когда для запуска руткита использовалась прозрачная загрузка расположенной в системной папке DLL, реализующей функции PrinterProvidor.
На самом деле есть еще немало неизвестных и недокументированных возможностей подгружать DLL в процесс. Например, технологии Application Verifier, Shim и Hotpatch. Технология Application Verifier (tinyurl.com/ofnw7xb) загружает DLL до загрузки kernel32.dll (kernelbase.exe) со значениями полей:
- GlobalFlag=0×02000100
- VerifierDebug=0xffffffff
- VerifierDlls=та_самая.dll (которая должна находиться в папке system32).
Вспоминается классная техника, реализованная в рутките TDL4, — элегантный обход UAC и инжект своей DLL, основанные на «автоподнятии» прав процесса, которые запускает explorer.exe и, соответственно, получающих привилегии заинжектить свой код в explorer.exe.
Суть инжекта — подмена cryptbase.dll на свою, которая будет автоматом подгружена explorer.exe. Правда, это будет работать, только если у пользователя есть админские права.
Справедливости ради скажу, что свои недостатки, конечно же, есть и у этих способов, однако само их наличие говорит о том, что рано списывать со счета системные механизмы межпроцессного взаимодействия.
Ну, а если у вас нет желания или возможности разбираться в во всех этих процессах, вы любите лечить людей, а не компьютеры, то вам обязательно надо обратится в компанию «Облачные технологии». Они обеспечат вас разными техническими медицинскими системами, которые смогут облегчить вашу работу и свалить рутину на технику. Функции современных технологий в умелых руках дают возможность хорошо экономить бюджет компании.
Также рекомендую почитать:
Ваш отзыв