Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #48, НОЯБРЬ 2004 г.

Антиантивирус

Абанов Георгий aka Zero Ice

Спецвыпуск: Хакер, номер #048, стр. 048-044-1


(zeroice@yandex.ru)

Как бороться с лечебным софтом

Еще Чарльз Дарвин писал о естественном отборе. Однако, с тех пор как ученый на своем могучем корабле «Бигль» бороздил мировой океан, прошло много времени, появились компьютеры, на них завелась разная живность, и живность эта… да, тоже начала бороться за выживание, которое приводит к эволюции вида :).

Поведение каждой вредоносной программы строго индивидуально, и с каждой новой разработкой наблюдать за выкрутасами программистов становится все интересней и интересней. Редко можно встретить одинаковый набор методов борьбы с антивирусами и сокрытия своего присутствия на компьютере пользователя.

Самым простым и действенным методом выживания является прямое убийство притивника. Трудно найти современного червя, который не держал бы у себя длиннющий список имен запускаемых файлов самых распространенных антивирусов и фаерволов. Как только вредоносная программа прячется от пользователя из списка “Диспетчера задач” или любой другой аналогичной программы путем установки глобального хука (обычно WH_GETMESSAGE) и перехвата функций, ответственных за получения списка запущенных процессов, или (что в последнее время встречается чаще) прикрепляясь к какому-нибудь процессу в виде плагина (99% регистрируются как Browser Helper Object или Extension к (Internet) Explorer), начинается серьезная игра. Первым шагом вредоносной программы становится определение противника. В старые времена можно было просто получить список процессов и устранить авера. Но времена те ушли, и теперь антивирусы часто предстают нашему взыскательному взгляду в виде NT-служб или драйверов.

Да, задумка хороша, и создатели защит надеются на неприкосновенность своих детищ. Не будем им мешать, а лучше посмотрим, что тут можно придумать. В идеале надо каким-то образом получить права на доступ в святая святых и только потом разворачивать полномасштабные действия. Но плох тот юзер, который не мечтает стать админом ;). Никто (ладно, есть исключения :)) не сидит под гостем у себя дома, да и на работе тоже мало кто извращается подобным образом. Так что считай доступ к службам и дровам у шпиона уже есть, а если нет – даунлоад и применение эксплоита решат эту маленькую неприятность. Получить список служб и драйверов можно через функцию EnumServicesStatus. Возвращаемый результат зависит от использованного флага, отвечающего за тип службы. Чтобы получить информацию о сервисах, надо использовать флаг SERVICE_WIN32. В буфер будет помещена информация о сервисах, как работающих в своем процессе, так и делящих свое адресное пространство с другими службами (дело в том, что один исполняемый файл может содержать несколько параллельно работающих служб). Также интересно посмотреть и на загруженные драйвера - SERVICE_DRIVER, многие фаерволы реализуются в виде драйверов-фильтров TCP/IP. Помимо флагов EnumServicesStatus принимает в качестве параметров описатель на управление службами (его возвращает OpenSCManager) и указатель на буфер. Получив информацию о службе и ее handle, вредоносное творение может делать с антивирусом или фаерволом что угодно (простой пример работы со службами на Delphi смотри на CD к этому номеру). Проблема SetServiceStatus решена! Можно остановить или приостановить охранную деятельность и заняться уже “полезной” работой. Если же служба вообще ненавистна, то DeleteService решит эту проблему. Все! Больше преград нет, а пользователь, скорее всего, даже и не заметит, что он остался один на один с неизведанным врагом. Особо продвинутые вредоносные творения могут поместить свою иконку в трее, имитируя убитую программу, и создать процесс с именем жертвы.

Содержание  Вперед на стр. 048-044-2