Всем доброго времени! Интересуют способы получения всех загруженных драйверов в системе (на подобии Device Tree) не использующие ZwQuerySystemInformation. У Г.Хоглунда описывается некое недокументированное поле в структуре DRIVER_OBJECT по смещению 0х14 содержащий MODULE_ENTRY,загруженных драйверов...
Угумс, даже если очень сильно постараться, например, вбить в гугл DriverObject + 0x14, то даже код можно найти для перечисления, например из FU_Rootkit Код (Text): DWORD FindPsLoadedModuleList (IN PDRIVER_OBJECT DriverObject) { PMODULE_ENTRY pm_current; if (DriverObject == NULL) return 0; pm_current = *((PMODULE_ENTRY*)((DWORD)DriverObject + 0x14)); if (pm_current == NULL) return 0; return (DWORD) pm_current; /* gul_PsLoadedModuleList = pm_current; while ((PMODULE_ENTRY)pm_current->le_mod.Flink != gul_PsLoadedModuleList) { //DbgPrint("Module at 0x%x unk1 0x%x path.length 0x%x name.length 0x%x\n", pm_current, pm_current->unk1, pm_current->driver_Path.Length, pm_current->driver_Name.Length); // This works on Windows XP SP1 and Windows 2003. if ((pm_current->unk1 == 0x00000000) && (pm_current->driver_Path.Length == 0)) { return (DWORD) pm_current; } pm_current = (MODULE_ENTRY*)pm_current->le_mod.Flink; } return 0; */ }
Ставь нотификатор на загрузку исполнямых образов, там и ядерные модули увидишь. Но это только после перезагрузки будет работать. И опять же, совсем левые модули так не поймаешь.
Такие встречаются, тем не менее. Отлавливать их можно либо через аппаратную виртуализацию, но это сложно, либо через перехват планировщика, например, с последующей раскруткой стека, т.е. анализа откуда пришёл вызов. Смотрим, если вызов пришёл из области памяти, которая не принадлежит ни одному из загруженных модулей, то явно имеем дело с руткитом. Хотя и это не панацея, ведь вызов может придти и из легального, но заражённого драйвера. В общем, поразмышлять есть над чем.
Ну некоторые просто через уязвимость мамять себя в ядро и сидят там. Нвйти тоже бывает порой очень непросто. Область может принадлежать загруженному модулю и даже сверка с образом на диске не спасет. Пичалька.
Сорри за оффтоп, навела на вопрос меня эта тема =) А вот просто из любопытства, наверняка же многие имеют постоянный доступ к свежей малвари, насколько распространены штуки уровня тдл4? Может я пропустил и появилось что-то более технологичное, ну т.е. концептуально, а не на уровне мелких усовершенствований, но тока не концепт, а в диком виде? Ну и вообще код использующий какие-нибудь нетривиальные техники скрытия, он вообще "вживую" есть?