Технологии современных вредоносных программ
Технологии защиты от обнаружения и удаления
Реализация вредоносной программы в виде библиотеки
Методика лечения трудноудаляемых вредоносных программ
Введение
нализ вредоносного программного обеспечения показывает, что его разработчики постепенно начинают применять различные новаторские подходы, помогающие данному программному обеспечению укорениться в системе, защититься от обнаружения и уничтожения, обойти средства проактивной защиты и брандмауэры.
Руткит-технологии (rootkit)
ак отмечалось в прогнозе развития вредоносных программ на 2006 год, руткит-технологии постепенно внедряются во все большее количество вредоносных программ. Можно выделить несколько направлений развития данной технологии:
- маскировка от обнаружения;
- маскировка от уничтожения в случае обнаружения;
- шпионаж за пользователем. В настоящее время популярны два направления слежение за сетевой активностью и использование работающих по руткит-принципу клавиатурных шпионов.
Маскировка и защита от удаления весьма распространены и исторически являются одной из основных областей применения руткитов. Технология шпионажа путем слежения за вызовами функций API известна очень давно, но не получала широкого распространения в троянских и шпионских технологиях. Суть данной методики очень проста вредоносная программа перехватывает ряд функций с помощью руткит-технологии. Перехватчик, как правило, «прозрачен» для вызывающих приложений, поэтому его наличие никак не сказывается на их работоспособности. Данная методика очень опасна. Предположим, что перехвачена функция Windows API HttpSendRequestA, размещенная в библиотеке wininet.dll. Подобный перехват может быть прицельным, например, только для процессов браузера. Прототип данной функции имеет вид:
BOOL HttpSendRequest(
HINTERNET hRequest,
LPCTSTR lpszHeaders,
DWORD dwHeadersLength,
LPVOID lpOptional,
DWORD dwOptionalLength
);
Параметр lpOptional содержит указатель на буфер, в который входят данные, посылаемые после заголовка запроса. В этом буфере, в частности, будет содержаться информация, посылаемая серверу в запросах типа PUT и POST. Нетрудно сделать вывод, что перехват только этой функции позволит руткиту:
- отслеживать все предаваемые таким образом данные;
- вмешиваться в работу функции, блокируя передачу данных или модифицируя их.
Универсальных контрмер против шпиона такого типа не существует его обнаружение возможно при помощи систем детектирования руткитов, а факт внедрения перехватчика может зафиксировать система проактивной защиты. Наличие такой системы у брандмауэра позволит ему заблокировать работу пораженной программы с сетью. Однако подобные системы пока еще весьма несовершенны чаще всего они базируются на перехвате функции KiST, отвечающей за запись в память приложений. При обнаружении факта записи в память доверенного процесса делается вывод, что машинный код этого приложения или применяемых им библиотек модифицирован и экземпляр приложения уже нельзя считать доверенным. Однако такой подход не дает стопроцентной защиты, как могло бы показаться на первый взгляд. Дело в том, что создатели вредоносных программ отлично знают уязвимые места rootkit-технологии, в частности возможность контроля со стороны антивирусов и брандмауэра над записью в память доверенных процессов, и применяют альтернативные методики внедрения вредоносного кода и руткит-перехватчиков. Рассмотрим один из вариантов такой технологии, примененный в ряде опасных троянских программ семейства Trojan-Spy.Win32.Banker. Этот вариант основан на внедрении руткит-перехватчика из драйвера. В этом случае в систему устанавливается драйвер небольшого размера, содержащий машинный код перехватчиков для режима UserMode. Драйвер перехватывает функции ядра, отвечающие за запуск процессов:
Функция ZwCreateProcess (2F) перехвачена (805B3543->F9E57219), перехватчик C:\WINDOWS\system32\iesprt.sys
Функция ZwCreateProcessEx (30) перехвачена (805885D3->F9E57280), перехватчик C:\WINDOWS\system32\iesprt.sys
Обнаружив запуск процесса, драйвер внедряет в него машинный код руткита и перехватывает функцию LdrLoadDll. Это позволяет ему следить за загрузкой других библиотек и в момент загрузки библиотеки wininet.dll произвести перехват ее функции HttpSendRequestA (функции WriteProcessMemory и ZwWriteVirtualMemory при этом не применяются).
Более сложная (и менее заметная) технология вмешательства в работу процессов из режима ядра описана на сайте rootkit.com и сводится к установке функции мониторинга режима ядра при помощи PsSetLoadImageNotifyRoutine. Установленная таким образом функция вызывается системой после каждой загрузки образа исполняемого файла, что делает ее идеальным местом для размещения машинного кода, модифицирующего загруженный модуль. Как и в случае с Trojan-Spy.Win32.Banker, для модификации памяти программы или ее модулей из режима ядра можно обойтись без использования функции ZwWriteVirtualMemory.
Второе направление применения руткит-технологий это троянский антируткит. Это троянская программа, которая в ходе своей работы нейтрализует перехват функций, выполненный компонентами антивирусных программ или брандмауэра. Прототипом для подобных приложений, как правило, является утилита SDT Restore, доступная в виде исходных текстов на языке C. Реализованный в SDT Restore алгоритм позволяет достаточно корректно определять адреса функций ядра, находящиеся в KiST до их перехвата. Это позволяет утилите SDT Restore детектировать перехват функций KiST и восстанавливать адреса в KiST, отключая тем самым перехватчики.
Технологии защиты от обнаружения и удаления
омимо руткит-технологии большое распространение получили следующие методики защиты файлов вредоносной программы:
- метод блокировки доступа к файлу, который известен очень давно и сводится к открытию файла в режиме монопольного доступа или к блокировке файла при помощи функции LockFileEx. В этом случае карантин и удаление файла стандартными способами невозможны;
- метод двух процессов, заключающийся в том, что вредоносная программа создает в памяти два процесса, которые непрерывно контролируют работу друг друга. Остановка одного из процессов приводит к тому, что второй его немедленно перезапускает;
- метод троянского потока, основанный на создании одного или нескольких троянских потоков в системных процессах. Эти потоки выполняют восстановление стертых файлов, восстановление ключей реестра, перезапуск процессов. Классическим примером реализации является AdvWare.BetterInternet. Входящую в его состав троянскую программу nail.exe можно удалить с диска, и через 3-5 секунд она будет восстановлена при помощи троянского потока.
Помимо описанных классических схем все большую популярность получает регистрация вредоносной программы в качестве расширения WinLogon. Зарегистрированная таким образом библиотека загружается в ходе процесса загрузки и остается в памяти в течение всего времени работы системы, что затрудняет ее удаление.
Еще одним любопытным направлением является защита маскируемого процесса антируткитов, реализованная в черве Feebs. Защита эта основана на том, что Feebs маскирует один из запущенных процессов, затем отслеживает открытие маскируемого процесса при помощи функции OpenProcess и завершает любое приложение, попытавшееся сделать подобную операцию. Такие действия весьма логичны стандартные менеджеры процессов не в состоянии обнаружить замаскированный руткитом процесс, а следовательно, не могут его открыть. В то же время, если некое приложение X пытается открыть замаскированный процесс, значит, это или антируткит, или антивирус с функциями антируткита и Feebs пытается с ним бороться. Замаскированный процесс в этом случае выступает в роли приманки для антируткита.
Реализация вредоносной программы в виде библиотеки
еализация вредоносных программ в виде динамических библиотек не является новинкой подобные решения существуют давно, особенно в среде AdWare/SpyWare-программ. Однако в последнее время количество реализованных в виде DLL вредоносных программ быстро растет самым свежим примером может послужить червь Feebs, эпидемия которого случилась в феврале этого года. Размещение вредоносного кода в динамической библиотеке обладает рядом особенностей:
- проверяя компьютер, пользователи и системные администраторы довольно часто ограничиваются анализом списка запущенных процессов. В случае загрузки DLL в один-два системных процесса ее обнаружение может оказаться непростой задачей;
- в системе не предусмотрено штатных средств для просмотра списка библиотек, загруженных в адресное пространство процессов. Это затрудняет подобный анализ, особенно для начинающего пользователя;
- ряд брандмауэров (например, встроенный в Windows XP) не осуществляет контроль за библиотеками, загруженными в адресное пространство доверенных процессов. Следовательно, выполненная в виде DLL вредоносная программа сможет беспрепятственно обмениваться данными с Интернетом из контекста доверенных приложений;
- система блокирует возможность удаления загруженных библиотек, а значит для этого необходимо применить отложенное удаление или удалить ключи реестра, используемые для автозагрузки библиотеки. Однако вредоносный код может существенно усложнить удаление DLL, отслеживая модификацию и восстановление отвечающих за ее загрузку ключей реестра (так, например, поступает Adware.Look2me), маскировать ключи по руткит-принципу (как червь Feebs) и очищать список отложенного удаления;
- для загрузки библиотеки разработчик может использовать достаточно экзотические методы автозапуска, например зарегистрировать DLL в качестве монитора подсистемы печати, расширения Winlogon и проводника, ключей реестра ShellServiceObjectDelayLoad и т.п.
Исходя из вышеперечисленных особенностей, можно порекомендовать как минимум несколько методик диагностики подобного вредоносного ПО:
- в обязательном порядке осуществлять контроль списка библиотек, загруженных в адресное пространство всех приложений. Для этих целей удобно использовать утилиты типа ProcessExplorer от Sysinternals. В случае применения утилиты AVZ можно произвести исследование системы, результаты которого сохраняются в виде протокола в формате HTML, причем из протокола исключаются процессы и DLL, опознанные как безопасные;
- для отслеживания автозапуска необходимы мощные средства, контролирующие множество методик автозагрузки. Одним из безусловных лидеров в данной области является утилита Autoruns от Sysinternals, отслеживающая десятки способов автозапуска;
- в ходе проверки следует обязательно произвести поиск и нейтрализацию руткитов всеми доступными средствами.
Методика лечения трудноудаляемых вредоносных программ
так, предположим, что на компьютере обнаружена трудноудаляемая вредоносная программа. В первую очередь это означает, что остановить ее процессы обычными средствами и удалить файлы не удается. В этом случае можно предпринять несколько стандартных действий:
- Повторить попытку удаления после загрузки системы в защищенном режиме.
- Загрузиться с компакт-диска, на котором установлен ERD Commander или подобная ему оболочка.
- Подключить жесткий диск зараженного компьютера к заведомо чистому и произвести удаление файлов.
Последний метод почти всегда оказывается результативным, но позволяет только удалить файлы (при этом как минимум останутся следы в реестре). Применяя методики 2 и 3, следует учесть, что некоторые современные вредоносные программы рассчитаны на возможность такого удаления и в качестве одной из мер защиты переименовывают свои файлы в ходе каждого завершения работы. В результате пользователь загружается с чистого диска и не обнаруживает файлов вредоносной программы. Единственным способом лечения в данном случае является сигнатурный поиск.
Кроме перечисленных методик и их аналогов, существует принципиально иной подход к борьбе с трудноудаляемыми вредоносными программами, основанный на временном ограничении возможностей запущенных приложений по принципу Sandbox. Методика предполагает, что на время лечения и анализа системы все запущенные процессы делятся на две категории: доверенные и недоверенные. Доверенными считаются процессы антивируса и иных средств, применяемых для анализа и лечения компьютера. Все остальные процессы считаются недоверенными, и для них действует ряд ограничений: блокируется запись в реестр, запрещаются создание на диске исполняемых файлов, запись в память других процессов, установка драйверов, запуск новых процессов и остановка существующих и т.п. Естественно, данный режим приемлем на время лечения системы и должен включаться только в случае необходимости.
Подобная методика реализована в бета-версии KIS 2006 и называется она Advance Disinfection technique. Она основана на том, что перед началом борьбы с трудноудаляемыми вредоносными программами производится временная блокировка запуска процессов и записи в системный реестр всем процессам, кроме KIS. После лечения система автоматически перезагружается. Как показали испытания, данная методика весьма эффективна и полезна для уничтожения ряда SpyWare и программ с руткит-защитой и троянскими потоками в других процессах.
Другой вариант подобной методики реализован в AVZ, начиная с версии 3.15. Экспериментальная версия системы основана на установке драйвера, производящего мониторинг вызовов ряда функций ядра в реальном времени с блокировкой потенциально опасных действий. Одной из основных особенностей этой системы является возможность запуска указанных пользователем программ в качестве доверенных приложений. Это позволяет, например, запустить в таком режиме антивирус DrWeb CureIt, утилиты типа Autoruns от Sysinternals или иное подобное приложение драйвер AVZ будет защищать доверенные процессы, параллельно блокируя попытки противодействия со стороны недоверенных. Для доверенных процессов реализован механизм «наследования доверительных отношений», который состоит в том, что доверенное приложение может запускать другие приложения и они тоже будут считаться доверенными.
Заключение
данной статье описаны некоторые методики, применяемые современными вредоносными программами. Специалистам по защите информации рекомендуется учитывать описанные технологии в ходе разработки или тестирования систем защиты.
Программы, описанные в статье, вы найдете на нашем CD-ROM.