детектор лжи КРИС КАСПЕРСКИ АКА МЫЩЪХ Спецвыпуск: Хакер, номер #070, стр. 070-060-3 1 МОДИФИЦИРОВАТЬ NTDLL.DLL НА ДИСКЕ, УСТАНОВИВ В НАЧАЛО ФУНКЦИИ NTQUERYSYSTEMINFORMATION КОМАНДУ ПЕРЕХОДА НА СВОЙ ОБРАБОТЧИК (РАСПОЛОЖЕННЫЙ ГДЕ-НИБУДЬ В СВОБОДНОМ МЕСТЕ ВНУТРИ NTDLL.DLL), «ВЫЧИЩАЮЩИЙ» ИЗ ВЫДАВАЕМОЙ ЕЮ ИНФОРМАЦИИ ВСЯКОЕ УПОМИНАНИЕ О СЕБЕ. СПОСОБ ПРОСТОЙ КАК БАРАБАН, НО ГРЯЗНЫЙ И ЛЕГКО ОБНАРУЖИВАЕМЫЙ ПУТЕМ ДИЗАССЕМБЛИРОВАНИЯ NTDLL.DLL ИЛИ СРАВНЕНИЕМ ЕЕ С ОРИГИНАЛОМ. ТАК ЖЕ МАЛВАРИ ПРИДЕТСЯ ПРОТИВОСТОЯТЬ SFC И УСТАНОВКЕ SERVICEPACK'ОВ, НЕКОТОРЫЕ ИЗ КОТОРЫХ ОБНОВЛЯЮТ NTDLL.DLL. 2 МОДИФИЦИРОВАТЬ NTDLL.DLL!NTQUERYSYSTEMINFORMATION В ПАМЯТИ. ПОСКОЛЬКУ NT ПОДДЕРЖИВАЕТ МЕХАНИЗМ COPY-ON-WRITE, АВТОМАТИЧЕСКИ «РАСЩЕПЛЯЮЩИЙ» СТРАНИЦЫ ПАМЯТИ ПРИ ЗАПИСИ, МОДИФИКАЦИЯ NTDLL.DLL ПРИОБРЕТАЕТ ЛОКАЛЬНЫЙ ХАРАКТЕР, ОГРАНИЧЕННЫЙ КОНТЕКСТОМ ПРОЦЕССА-ПИСАТЕЛЯ. ТО ЕСТЬ, ЧТОБЫ ВОЗДЕЙСТВОВАТЬ НА «ДИСПЕТЧЕР ЗАДАЧ», В НЕГО ПРЕЖДЕ НЕОБХОДИМО ВНЕДРИТЬСЯ. ВОТ ОДИН ИЗ ВОЗМОЖНЫХ СЦЕНАРИЕВ. МАЛВАРЬ СОЗДАЕТ СВОЮ DLL И ПРОПИСЫВАЕТ ЕЕ В СЛЕДУЮЩУЮ ВЕТКУ СИСТЕМНОГО РЕЕСТРА: HKLM\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINDOWS\APPINIT_DLLS. В РЕЗУЛЬТАТЕ ЧЕГО ЭТА DLL ПОСЛЕ БУДЕТ ОТОБРАЖАТЬСЯ НА ВСЕ ПРОЦЕССЫ. ДЛЯ БОЛЬШЕЙ СКРЫТНОСТИ МОЖНО МОДИФИЦИРОВАТЬ NTDLL.DLL ТОЛЬКО В КОНТЕКСТЕ ТЕХ ПРОЦЕССОВ, КОТОРЫЕ ИСПОЛЬЗУЮТСЯ ДЛЯ ВЫВОДА СПИСКА ЗАДАЧ (TASKMNG.EXE, FAR.EXE, TLIST.EXE И Т. Д.). В ЭТОМ СЛУЧАЕ, ЗАГЛЯНУВ ОТЛАДЧИКОМ ВНУТРЬ NTQUERYSYSTEMINFORMATION, МЫ НЕ НАЙДЕМ НИКАКИХ СЛЕДОВ МАЛВАРИ. МОЖНО, КОНЕЧНО, ПРОВЕРИТЬ APPINIT_DLLS, НО ЭТО НЕ ЕДИНСТВЕННЫЙ СПОСОБ ВНЕДРЕНИЯ, ТАК ЧТО ЗАДАЧА ВЫЯВЛЕНИЯ МАЛВАРИ РЕЗКО УСЛОЖНЯЕТСЯ. 3 МОДИФИЦИРОВАТЬ ТАБЛИЦУ ИМПОРТА TASKMNG.EXE («ДИСПЕТЧЕР ЗАДАЧ»), PROCLIST.DLL (ПЛАГИН FAR'А, ОТВЕТСТВЕННЫЙ ЗА ВЫВОД СПИСКА ПРОЦЕССОВ), TLIST.EXE НА ДИСКЕ (ИЛИ В ПАМЯТИ), ПОДМЕНИВ ВЫЗОВОВ NTQUERYSYSTEMINFORMATION СВОЕЙ СОБСТВЕННОЙ ФУНКЦИЙ ОБЕРТКОЙ. ТАКОЙ ПЕРЕХВАТ ЛЕГКО ОБНАРУЖИВАЕТСЯ ПУТЕМ СРАВНЕНИЯ ИСПОЛНЯЕМЫХ ФАЙЛОВ С ИХ ОБРАЗОМ ПАМЯТИ, КОТОРЫЙ МОЖЕТ БЫТЬ ПОЛУЧЕН ПУТЕМ СНЯТИЯ ДАМПА УТИЛИТОЙ ТИПА PE TOOLS ИЛИ СТАРЫМ ДОБРЫМ PROCDUMP'ОМ. К ТОМУ ЖЕ МАЛВАРИ ПРИДЕТСЯ ДОПОЛНИТЕЛЬНО ПЕРЕХВАТЫВАТЬ GETPROCADDRESS, ЧТОБЫ ОТСЛЕЖИВАТЬ ДИНАМИЧЕСКУЮ ЗАГРУЗКУ NTDLL.DLL. При наличии прав администратора, малварь может проникнуть в NTOSKRNL.EXE и подменить сервис 97h своим собственным обработчиком. Тогда с прикладного уровня обнаружить зловредный процесс уже не удастся и придется спускаться на уровень ядра (подробно рассмотрено в разделе «восстановление SST»). А вот Soft-Ice не использует NtQuerySystemInformation и для отображения списка процессов самостоятельно разбирает базовые структуры операционной системы, а потому легко выявляет скрытые процессы. Теоретически, малварь может внедриться в soft-ice и перехватить любую из его команд (например, команду «PROC»), действуя по той же схеме, что и IceExt/IceDump (благо, что обе утилиты распространяются в исходных текстах). Но в живой природе такие «монстры» пока что не встречались. Можно надеяться, что IceExt, скрывающий soft-ice от большинства защит, скроет его и от малвари, однако, при этом остается угроза сигнатурного поиска отладчика в памяти. К тому же на хакерских форумах не первый год обсуждается гипотетический алгоритм скрытия, перехватывающий функции переключения контекста и «вытирающий» себя в промежутках между ними. Но реализация такого проекта упирается в непреодолимые практические трудности. Формат процессорных структур непостоянен и меняется от одной версии системы к другой, к тому же с ними взаимодействует множество недокументированных функций, вызываемых в разное время из различных мест. И малварь, пытающаяся замаскироваться, постоянно обрушивает систему в BSOD, чем сразу себя и разоблачает... |