Pull to refresh

Об обходе антивирусов на практике

Reading time5 min
Views15K
На днях в этом блоге была опубликована ссылка на новость об универсальной методике обхода антивирусов. Впрочем, силами цепочки английских и русских журналистов-копипейстеров суть сообщения искажена в столь несовместимую с разумом и реальностью ересь, что мне — специалисту по (анти)вирусным технологиям — пришлось перечитать текст дважды, прежде чем я поняла, о чем примерно идет речь. Поэтому рекомендуется ознакомиться с источником.

Я не буду комментировать предложенную концепцию — с этой задачей успешно справятся производители антивирусов. Суть в другом: обход антивирусной защиты — не наука о ракетах, требующая концептуального подхода, а вполне обыденное явление. Для иллюстрации этого факта я приведу несколько технических примеров из жизни.

Антивирусы-лузерыПримеры будут извлечены из нашей любимой зверюшки — бота-руткита TDSS, о котором в последнее время много говорят. Что и не удивительно: это один из наиболее распространенных, технически продвинутых и активно развивающихся ботов.

На диаграмме слева отображена статистика по антивирусным защитам, установленным на компьютерах пользователей одновременно с заражением TDSS.


Примечания к диаграмме:
  1. Исходные данные — статистика от пользователей утилиты TDSS Remover за первый квартал 2010 г.
  2. Всего было обработано порядка тысячи зараженных машин
  3. Из них 12% были оснащены известными нам антивирусами
  4. На диаграмме не отображена статистика по антивирусам, которые провалили лечение, но при этом не блокируют и не скрывают свои файлы. Факт блокировки или скрытия файлов попадает в статистику, как значимая для антируткита аномалия.

Несколько слов о зверюшке


Появившись около двух лет назад, бот-руткит TDSS (также известный как Alureon, Tidserv, TDL/TDL2/TDL3+) тихо и незаметно размножился до тревожных цифр.

А именно:
  • Семейство TDSS (здесь — Alureon) занимает третье место по числу зараженных машин в апреле 2010 г.
  • Ботнет TDSS (здесь — Tidserv) входит в TOP10 крупнейших ботнетов в мире, представляя собой популяцию численностью в 1,5 млн. зомби-машин только в US
  • По данным наших собственных изысканий, цифра «1,5 млн.» зараженных машин сильно преуменьшена.

Основополагающий фактор столь стремительной и, вместе с тем, бесшумной победы — ставка на обход антивирусов и передовые технологии. Задача успешно решается с первых дней существования бота и по сей день: по мере того, как антивирусы обновляются — обновляются и технологии их обхода в коде TDSS, неизменно радуя исследователей и «радуя» разработчиков защит оригинальностью нововведений.

Фактически, на протяжении всего времени существования TDSS, он был непрерывно недостижим для всех существующих средств защиты, включая наиболее популярные антивирусы и профессиональные антируткиты. Более того, до недавнего времени бот незаметно развивался под прикрытием собственной эффективности, так как производителям антивирусов было невыгодно предавать огласке угрозу, с которой они не справляются.

За последние полгода ситуация немного улучшилась. Противостояние продолжается, «большие» антивирусы по-прежнему не справляются, зато начали выпускать специализированные утилиты-лечилки (Norman TDSS Cleaner, Kaspersky TDSSKiller).

Обход антивирусов: техническая справка


С точки зрения выживания, перед вредоносной программой стоят две важнейшие задачи:
  1. На этапе инсталляции — обход поведенческой защиты (HIPS, проактивная защита, песочница).
    Методы: использование легитимных системных механизмов, не предусмотренных разработчиками защиты, и «белых списков» защиты; реже — эксплуатация уязвимостей в коде антивируса или операционной системы.
  2. На этапе активного заражения — защита собственного кода от обнаружения и удаления.
    Методы: от запрета антивирусных обновлений и блокировки доступа к файлам, до сокрытия файлов (rootkit-технологии) и их полного отсутствия (об этом — ниже).

Примеры техник обхода защиты


Техники приведены в том порядке, в каком мы находили их в эволюционирующем TDSS. Все описанные приемы уже не столь эффективны, как были на момент их появления.

Пример №1. Системный кеш динамических библиотек

Суть техники: вредоносный код размещается в системном кеше часто используемых библиотек \KnownDLLS, откуда вызывается легитимным системным приложением при использовании им одной из этих библиотек.

Профит: одним выстрелом убиты два зайца: обход поведенческой защиты и обход персонального фаервола. Последнее возможно благодаря тому, что вредоносный код выполняется в контексте системного процесса, «доверенного» по умолчанию.

Псевдо-код:

// 1. размещаем вредоносный код в кеше часто используемых библиотек
NtCreateSection(”\knowndlls\dll.dll”)
// 2. обеспечиваем переход на этот код из легитимной библиотеки,
// пока что - в ее копии на диске
CopyFile(”msi.dll”, "patched_msi.dll")
WriteFile("patched_msi.dll", <прыжок в dll.dll>)
// 3. подменяем эту библиотеку в кеше
NtOpenSection(”\knowndlls\msi.dll”)
NtMakeTemporaryObject(...) // секция стала временной, и теперь может быть...
CloseHandle(...) // удалена
NtCreateSection(”patched_msi.dll”)
// 4. вызов системного сервиса, который исполнит код msi.dll => dll.dll
StartService (”Windows Installer (msiexec.exe)”)


Пример №2. Диспетчер печати

Суть техники та же, что и в предыдущем примере — пассивное внедрение в системный процесс. Механизм несколько иной: вредоносный код подсовывается сервису диспетчера печати под видом его служебной библиотеки.

Псевдо-код:

//1. копируем вредоносный код в служебную директорию диспетчера печати
GetPrintProcessorDirectory(...)
GetTempFileName(...)
CopyFile(<self>,<tempname>)
// 2. сервис диспетчера печати должен быть запущен
StartService("spooler")
// 3. передаем ему вредоносный код
AddPrintProcessor(<tempname>)


Пример №3. Заражение легитимного драйвера

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

Суть подхода: сведение к минимуму изменений, вносимых в систему, + мощная низкоуровневая маскировка оставшихся «хвостов».

Начиная с конца прошлого года, у TDSS фактически нет ни собственных файлов, ни ссылок на него в списках автозапуска. Мощность маскировки «хвостов» обеспечивается тем, что фильтры руткита расположены уровнем ниже всех существующих технологий антируткитов.

  1. Осуществляется микрозаражение драйвера минипорта диска (atapi.sys для IDE-дисков, iastor.sys для всех остальных). Размер драйвера не меняется, а код инфекции минимален и обеспечивает только подгрузку основного тела руткита.
    Профит: автозагрузка вместе с драйвером минипорта.
  2. Код и файл конфигурации руткита хранятся в последних секторах диска, в собственной файловой системе.
    Профит: файлы руткита «не существуют» для операционной системы, но остаются доступными для приложений, знающих секретный путь к ним.
  3. Маскировка инфекции системного драйвера и последних секторов диска осуществляется посредством фильтрации данных на уровне минипорта.
    Профит: невидимость для всех существующих механизмов защиты (смотри схему).

Пример №4. «Одношаговка»

В конце апреля бот в очередной раз обновился.

version=3.273
builddate=20.4.2010 16:17:53


На этот раз, задача обхода защит решена минимальной модификацией техник из уже существующего арсенала. А именно:
  1. Файлы atapi.sys/iastor.sys под бдительным наблюдением защиты? — В новой версии заражается случайный драйвер.
  2. Поведенческие защиты научились замечать вызов функции AddPrintProcessor — он был заменен на вызов схожей функции AddPrintProvidor. (!)
  3. Некоторые утилиты-лечилки добирались до защищенных областей руткита на диске через интерфейс SCSI Pass Through — в новой версии руткита соответствующие этому механизму IRP фильтруются.

Замечу, что именно такая, как в последнем примере, примитивная одношаговая схема обхода защиты встречается на каждом шагу в массовых вредоносных программах. Такое решение не требует ни особой гениальности от разработчика, ни особых уязвимостей от защиты, и характеризуется крайне малым сроком жизни.

Техники же сложные (как в Примере №3) или хитрые (Примеры №1 и 2) больше характерны для хорошо финансируемых целевых руткитов. Открытым остается вопрос, потеряла ли команда TDSS своего лучшего разработчика, или все же изрядную долю финансирования?..
Tags:
Hubs:
Total votes 149: ↑144 and ↓5+139
Comments127

Articles