В
последнее время, одним из основных направлений развития вредоносных
программ стало применение в них всевозможных способов защиты от
обнаружения антивирусными средствами — так называемые руткит (rootkit) —
технологии. Такие программы часто или не обнаруживаются антивирусами
или не удаляются ими. В этой статье я попытаюсь описать более или менее
универсальную методику обнаружения и удаления вредоносного программного
обеспечения из зараженной системы. Сначала пару слов, о признаках
современного качественного вируса. Он работает в режиме ядра (kernel
mode) и имеет неограниченные возможности по перехвату и модификации
системных функций. Другими словами — вирус имеет возможность скрыть от
пользователя (и антивируса) свои файлы, ключи реестра, сетевые
соединения, — все, что может быть признаком его наличия в зараженной
системе.
Он может обойти любой брандмауэр, системы обнаружения вторжения и
анализаторы протоколов. И, кроме всего прочего, он может работать и в
безопасном режиме загрузки Windows. Иными словами, современную
вредоносную программу очень непросто обнаружить и обезвредить. Развитие
антивирусов тоже не стоит на месте, — они научились находить и
обезвреживать руткитов, но рано или поздно, найдется модификация вируса,
которая какое-то время будет «не по зубам» любому антивирусу. Для
примера я взял вирус, ссылку на который получил в спам-письме,
следующего содержания:
Здравствуйте.
Нас заинтересовала ваша кандидатура, однако предлагаем вам заполнить
наш фирменный бланк резюме и отправить его по адресу [email protected]
Ответ не гарантируется, однако если Ваше резюме нас заинтересует, мы
позвоним Вам в течение нескольких дней. Не забудьте
указать телефон, а также позицию, на которую Вы претендуете. Желательно
также указать пожелания по окладу.
Наш фирменный бланк вы можете скачать по нижеуказанной ссылке.
http://verano-konwektor.pl/resume.exe
Анализ заголовков письма показал, что оно было
отправлено с компьютера в Бразилии через сервер, находящийся в США. А
фирменный бланк предлагается скачать с сервера в Польше. И это с
русскоязычным-то содержанием.
Ясное дело, что никакого фирменного бланка вы не увидите,
и скорее всего, получите троянскую программу на свой компьютер.
Скачиваю файл resume.exe. Размер — 159744 байта. Пока не запускаю.
Копирую файл на другие компьютеры, где установлены
различные антивирусы — просто для очередной проверки их эффективности.
Результаты не ахти — антивирус Avast 4.8 Home Edition деликатно
промолчал. Подсунул его Symantec’у — та же реакция. Сработал только AVG
7.5 Free Edition. Похоже, этот антивирус, в самом деле, не зря
набирает популярность.
Название вируса на тот момент мне ничего не говорило, и
искать его описание я не стал, чтобы не сбиваться на проторенный кем-то
путь. Одно ясно — это довольно «свежий» троянец.
Короче, у меня имеется образец неплохой вредоносной программы, как раз — то, что нужно.
Все эксперименты выполняю на виртуальной машине с
операционной системой Windows XP. Учетная запись с правами
администратора, поскольку, чаще всего вирусы успешно внедряются в
систему только, если пользователь является локальным администратором.
Запускаю. Через какое-то время зараженный файл исчез, похоже, вирус начал свое черное дело.
Поведение системы внешне не изменилось. Очевидно, нужна
перезагрузка. На всякий случай, запрещаю в брандмауэре соединения по
протоколу TCP. Оставляю разрешенными только исходящие соединения по
UDP:53 (DNS) — надо же оставить вирусу хоть какую-то возможность
проявить свою активность. Как правило, после внедрения, вирус должен
связаться с хозяином или с заданным сервером в интернете, признаком
чего будут DNS-запросы. Хотя, опять же, в свете сказанного выше, умный
вирус может их замаскировать, кроме того, он может и обойти брандмауэр.
Забегая вперед, скажу, что в данном конкретном случае этого не
произошло, но для надежного анализа сетевой активности весь трафик
зараженной машины лучше пустить через другую, незараженную, где можно
быть уверенным, что правила брандмауэра выполняются, а анализатор
трафика (я пользовался Wireshark’ом) выдает то, что есть на самом деле.
Перезагружаюсь. Внешне ничего не изменилось, кроме того,
что невозможно выйти в интернет, поскольку я сам отключил такую
возможность. Ни в путях автозапуска, ни в службах, ни в системных
каталогах не появилось ничего нового. Просмотр системного журнала дает
только одну наводку — системе не удалось запустить таинственную службу
grande48. Такой службы у меня быть не могло, да и по времени это событие
совпало с моментом внедрения. Что еще наводит на мысль об успешном
внедрении — так это отсутствие в реестре записи о службе grande48 и
отсутствие второго сообщения в журнале системы об ошибке запуска службы
после перезагрузки. Это, скорее всего, некоторая недоработка
вирусописателей. Хотя и несущественная, ведь большинство пользователей
журнал событий не просматривают, да и на момент возникновения подозрения
на заражение эта запись в журнале уже может и отсутствовать.
Определяем наличие вируса в системе.
1. Наверняка должен быть «левый» трафик. Определить
можно с помощью анализаторов протокола. Я использовал Wireshark. Сразу
после загрузки первым запускаю его. Все правильно, есть наличие группы
DNS-запросов (как потом оказалось — один раз за 5 минут) на определение
IP-адресов узлов ysiqiyp.com, irgfqfyu.com, updpqpqr.com и т.п.
Вообще-то все ОС Windows любят выходить в сеть, когда надо и не надо,
антивирусы могут обновлять свои базы, поэтому определить принадлежность
трафика именно вирусу довольно затруднительно. Обычно требуется
пропустить трафик через незараженную машину и серьезно проанализировать
его содержимое. Но это отдельная тема. В принципе, косвенным признаком
ненормальности сетевой активности системы могут быть значительные
значения счетчиков трафика провайдера, в условиях простоя системы,
счетчики из свойств VPN-соединения и т.п.
2. Попробуем использовать программы для поиска
руткитов. Сейчас таких программ уже немало и их несложно найти в сети.
Мне больше всего нравится простая и быстрая утилита RootkitRevealer (Скачать, 231кб) Марка Руссиновича. Можно скачать отсюда:(Скачать, 231кб) Инсталляция не требуется. Разархивируем и запускаем. Жмем «Scan». После непродолжительного сканирования видим результаты:
Кстати, даже не вникая в содержания строк, можно сразу
заметить, что имеются очень «свежие» по времени создания/модификации
записи или файлы (колонка «Timestamp»). Нас в первую очередь должны заинтересовать файлы с описанием (колонка «Description») — «Hidden from Windows API». Два из них — grande48.sys и Yoy46.sys
— это как раз то, что мы ищем. Это и есть прописавшийся под видом
драйверов искомый руткит или его часть, обеспечивающая скрытность .
Наличие в списке остальных было для меня сюрпризом. Ведь это нормальные
драйверы Windows XP, при чем размеры их совпадали с размерами
аналогичных драйверов на незараженной машине. Кроме того, вирус скрывал
их наличие только в папке \system32, а их копии в \system32\dllcache остались видимыми.
Напомню, что в Windows XP применяется специальный механизм защиты системных файлов, называемый Windows File Protection (WFP).
Задача WFP — автоматическое восстановление важных системных файлов при
их удалении или замене устаревшими или неподписанными копиями. Все
системные файлы Windows XP имеют цифровую подпись и перечислены в
специальной базе данных, используемой WFP. Для хранения копий файлов
используется папка \system32\dllcache и, отчасти, \Windows\driver cache.
При удалении или замене одного из системных файлов, WFP автоматически
копирует «правильную» его копию из папки \dllcache. Если указанный файл
отсутствует в папке \dllcache , то Windows XP просит вставить в привод
компакт-дисков установочный компакт-диск Windows XP. Попробуйте
удалить vga.sys из \system32, и система тут же его восстановит,
используя копию из dllcache. А ситуация, когда, при работающей системе
восстановления файлов, файл драйвера есть в \dllcache и его не видно в
\system32 — это тоже дополнительный признак наличия руткита в системе.
Зачем нужно было скрывать файлы нормальных драйверов, осталось
загадкой.
Удаляем вирус из системы.
Осталось выполнить самое важное действие — удалить
вирус. Самый простой и надежный способ — загрузиться в другой,
незараженной операционной системе и запретить старт драйверов руткита.
Воспользуемся стандартной консолью восстановления Windows. Берем
установочный диск Windows XP и загружаемся с него. На первом экране
выбираем 2-й пункт меню — жмем R.
Выбираем систему (если их несколько):
Вводим пароль администратора.
Список драйверов и служб можно просмотреть с помощью команды listsvc:
В самом деле, в списке присутствует Yoy46,
правда отсутствует grande48, что говорит о том, что файл драйвера
grande48.sys скрытно присутствует в системе, но не загружается:
Консоль восстановления позволяет запрещать или разрешать запуск драйверов и служб с помощью команд disable и enable. Запрещаем старт Yoy46 командой:
disable Yoy46
Водим команду EXIT и система уходит на перезагрузку.
После перезагрузки драйвер руткита не будет загружен, что позволит легко
удалить его файлы и очистить реестр от его записей. Можно проделать
это вручную, а можно использовать какой-нибудь антивирус. Наиболее
эффективным, с моей точки зрения, будет бесплатный сканер на основе
всем известного антивируса Dr.Web Игоря Данилова. Скачать можно отсюда —
http://freedrweb.ru
Там же можно скачать «Dr.Web LiveCD» — образ диска,
который позволяет восстановить работоспособность системы, пораженной
действиями вирусов, на рабочих станциях и серверах под управлением
Windows\Unix, скопировать важную информацию на сменные носители либо
другой компьютер, если действия вредоносных программ сделали
невозможным загрузку компьютера. Dr.Web LiveCD поможет не только
очистить компьютер от инфицированных и подозрительных файлов, но и
попытается вылечить зараженные объекты. Записываете образ на CD,
загружаетесь и руководствуетесь простым и понятным меню.
Антивирусный сканер, кстати, можно запустить и при
заугрузке с использованием Winternals ERD Commander. Используйте режим
выборочной проверки, выбрав для нее системный диск. Сканер поможет вам
найти файлы вируса, и вам останется лишь удалить связанные с ним
записи из реестра.
Поскольку вирусы научились прописываться на запуск в
безопасном режиме загрузки, не мешает проверить ветку реестра:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot
Разделы:
Minimal — список драйверов и служб запускаемых в безопасном режиме (Safe Mode)
Network — то же, но с поддержкой сети.
Добавлю, что существует новый класс rootkit, представителем которого является BackDoor.MaosBoot,
появившийся в конце 2007г. Эта троянская программа прописывает себя в
загрузочный сектор жесткого диска и обеспечивает скрытую установку
своего драйвера в памяти. Сам Rootkit-драйвер напрямую записан в
последние секторы физического диска, минуя файловую систему, чем и
скрывает свое присутствие на диске. В общем-то, принцип не новый, лет
десять назад вредоносные программы подобным образом маскировались на
резервных дорожках дискет и жестких дисков, однако оказался очень
эффективным, поскольку большинство антивирусов с задачей удаления
BackDoor.MaosBoot до сих пор не справляются. Упоминаемый выше RootkitRevealer
загрузочный сектор не проверяет, а секторы в конце диска для него
никак не связаны с файловой системой и , естественно, такой руткит он
не обнаружит. Правда, Dr.Web (а, следовательно, и Cureit) с BackDoor.MaosBoot вполне справляется.
Если у вас возникли сомнения относительно какого-либо
файла, то можно воспользоваться бесплатной онлайновой антивирусной
службой virustotal.com.
Через специальную форму на главной странице сайта закачиваете
подозрительный файл и ждете результатов. Сервисом virustotal
используются консольные версии множества антивирусов для проверки
вашего подозреваемого файла. Результаты выводятся на экран. Если файл
является вредоносным, то с большой долей вероятности, вы сможете это
определить. В какой-то степени сервис можно использовать для выбора
«лучшего антивируса».
Здесь
ссылка на одну из веток форума сайта virusinfo.info, где пользователи
выкладывают ссылки на различные ресурсы посвященные антивирусной
защите, в т.ч. и онлайн — проверок компьютера, браузера, файлов…
Иногда, в результате некорректных действий вируса
(или антивируса) система вообще перестает загружаться. Приведу
характерный пример. Вредоносные программы пытаются внедриться в
систему, используя различные, в том числе, довольно необычные способы.
В процессе начальной загрузки, еще до регистрации пользователя,
запускается «Диспетчер сеансов» (\SystemRoot\System32\smss.exe) ,
задача которого — запустить высокоуровневые подсистемы и сервисы
(службы) операционной системы. На этом этапе запускаются процессы CSRSS
(Client Server Runtime Process), WINLOGON (Windows Logon), LSASS (LSA
shell), и оставшиеся службы с параметром Start=2 из раздела реестра
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
Информация, предназначенная для диспетчера сеансов, находится в ключе реестра
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager
Одним из способов внедрения в систему, является подмена dll-файла для CSRSS. Если вы посмотрите содержимое записи
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems
то найдете значения
ServerDll=basesrv, ServerDll=winsrv. Библиотеки
basesrv.dll и winsrv.dll — это «правильные» файлы системы, загружаемые
службой CSRSS на обычной (незараженной) системе. Эту запись в реестре
можно подправить на запись, обеспечивающую загрузку, например, вместо
basesrv.dll, вредоносной basepvllk32.dll:
ServerDll=basepvllk32 (или какую либо другую dll, отличную от basesrv и winsrv)
Что обеспечит, при следующей перезагрузке, получение управления
вредоносной программе. Если же ваш антивирус обнаружит и удалит
внедренную basepvllk32, оставив нетронутой запись в реестре, то
загрузка системы завершится «синим экраном смерти» (BSOD) с ошибкой
STOP c000135 и сообщением о невозможности загрузить basepvllk32.
Поправить ситуацию можно так:
— загрузится в консоль восстановления (или в любой другой системе), и
скопировать файл basesrv.dll из папки C:\WINDOWS\system32 в ту же
папку под именем basepvllk32.dll. После чего система загрузится и можно
будет вручную подправить запись в реестре.
— загрузиться с использованием Winternals ERD Commander и исправить запись в реестре на ServerDll=basesrv. Или выполнить откат системы с использованием точки восстановления.
Еще один характерный пример. Вредоносная программ
регистрируется как отладчик процесса explorer.exe, создавая в реестре
запись типа:
HKM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\explorer.exe
«Debugger»=»C:\Program Files\Microsoft Common\wuauclt.exe»
Удаление wuauclt.exe антивирусом без удаления записи в реестре приводит к
невозможности запуска explorer.exe. В результате вы получаете пустой
рабочий стол, без каких-либо кнопок и ярлыков. Выйти из положения можно
используя комбинацию клавиш CTRL-ALT-DEL. Выбираете «Диспетчер задач» —
«Новая задача» — «Обзор» — находите и запускаете редактор реестра
regedit.exe. Затем удаляете ключ
HKM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\explorer.exe
и перезагружаетесь.
В случае, когда вы точно знаете время заражения
системы, откат на точку восстановления до этого события, является
довольно надежным способом избавления от заразы. Иногда есть смысл
выполнять не полный откат, а частичный, с восстановлением файла реестра
SYSTEM, как это описано в статье «Проблемы с загрузкой ОС» раздела
«Windows»