На днях в этом блоге была опубликована ссылка на новость об универсальной методике обхода антивирусов. Впрочем, силами цепочки английских и русских журналистов-копипейстеров суть сообщения искажена в столь несовместимую с разумом и реальностью ересь, что мне — специалисту по (анти)вирусным технологиям — пришлось перечитать текст дважды, прежде чем я поняла, о чем примерно идет речь. Поэтому рекомендуется ознакомиться с источником.
Я не буду комментировать предложенную концепцию — с этой задачей успешно справятся производители антивирусов. Суть в другом: обход антивирусной защиты — не наука о ракетах, требующая концептуального подхода, а вполне обыденное явление. Для иллюстрации этого факта я приведу несколько технических примеров из жизни.
Примеры будут извлечены из нашей любимой зверюшки — бота-руткита TDSS, о котором в последнее время много говорят. Что и не удивительно: это один из наиболее распространенных, технически продвинутых и активно развивающихся ботов.
На диаграмме слева отображена статистика по антивирусным защитам, установленным на компьютерах пользователей одновременно с заражением TDSS.
Примечания к диаграмме:
Появившись около двух лет назад, бот-руткит TDSS (также известный как Alureon, Tidserv, TDL/TDL2/TDL3+) тихо и незаметно размножился до тревожных цифр.
А именно:
Основополагающий фактор столь стремительной и, вместе с тем, бесшумной победы — ставка на обход антивирусов и передовые технологии. Задача успешно решается с первых дней существования бота и по сей день: по мере того, как антивирусы обновляются — обновляются и технологии их обхода в коде TDSS, неизменно радуя исследователей и «радуя» разработчиков защит оригинальностью нововведений.
Фактически, на протяжении всего времени существования TDSS, он был непрерывно недостижим для всех существующих средств защиты, включая наиболее популярные антивирусы и профессиональные антируткиты. Более того, до недавнего времени бот незаметно развивался под прикрытием собственной эффективности, так как производителям антивирусов было невыгодно предавать огласке угрозу, с которой они не справляются.
За последние полгода ситуация немного улучшилась. Противостояние продолжается, «большие» антивирусы по-прежнему не справляются, зато начали выпускать специализированные утилиты-лечилки (Norman TDSS Cleaner, Kaspersky TDSSKiller).
С точки зрения выживания, перед вредоносной программой стоят две важнейшие задачи:
Техники приведены в том порядке, в каком мы находили их в эволюционирующем TDSS. Все описанные приемы уже не столь эффективны, как были на момент их появления.
Суть техники: вредоносный код размещается в системном кеше часто используемых библиотек \KnownDLLS, откуда вызывается легитимным системным приложением при использовании им одной из этих библиотек.
Профит: одним выстрелом убиты два зайца: обход поведенческой защиты и обход персонального фаервола. Последнее возможно благодаря тому, что вредоносный код выполняется в контексте системного процесса, «доверенного» по умолчанию.
Псевдо-код:
Суть техники та же, что и в предыдущем примере — пассивное внедрение в системный процесс. Механизм несколько иной: вредоносный код подсовывается сервису диспетчера печати под видом его служебной библиотеки.
Псевдо-код:
Предыдущие примеры иллюстрировали обход поведенческой защиты. Теперь рассмотрим, как TDSS избегает обнаружения и лечения.
Суть подхода: сведение к минимуму изменений, вносимых в систему, + мощная низкоуровневая маскировка оставшихся «хвостов».
Начиная с конца прошлого года, у TDSS фактически нет ни собственных файлов, ни ссылок на него в списках автозапуска. Мощность маскировки «хвостов» обеспечивается тем, что фильтры руткита расположены уровнем ниже всех существующих технологий антируткитов.
В конце апреля бот в очередной раз обновился.
На этот раз, задача обхода защит решена минимальной модификацией техник из уже существующего арсенала. А именно:
Замечу, что именно такая, как в последнем примере, примитивная одношаговая схема обхода защиты встречается на каждом шагу в массовых вредоносных программах. Такое решение не требует ни особой гениальности от разработчика, ни особых уязвимостей от защиты, и характеризуется крайне малым сроком жизни.
Техники же сложные (как в Примере №3) или хитрые (Примеры №1 и 2) больше характерны для хорошо финансируемых целевых руткитов. Открытым остается вопрос, потеряла ли команда TDSS своего лучшего разработчика, или все же изрядную долю финансирования?..
Я не буду комментировать предложенную концепцию — с этой задачей успешно справятся производители антивирусов. Суть в другом: обход антивирусной защиты — не наука о ракетах, требующая концептуального подхода, а вполне обыденное явление. Для иллюстрации этого факта я приведу несколько технических примеров из жизни.
Примеры будут извлечены из нашей любимой зверюшки — бота-руткита TDSS, о котором в последнее время много говорят. Что и не удивительно: это один из наиболее распространенных, технически продвинутых и активно развивающихся ботов.
На диаграмме слева отображена статистика по антивирусным защитам, установленным на компьютерах пользователей одновременно с заражением TDSS.
Примечания к диаграмме:
- Исходные данные — статистика от пользователей утилиты TDSS Remover за первый квартал 2010 г.
- Всего было обработано порядка тысячи зараженных машин
- Из них 12% были оснащены известными нам антивирусами
- На диаграмме не отображена статистика по антивирусам, которые провалили лечение, но при этом не блокируют и не скрывают свои файлы. Факт блокировки или скрытия файлов попадает в статистику, как значимая для антируткита аномалия.
Несколько слов о зверюшке
Появившись около двух лет назад, бот-руткит TDSS (также известный как Alureon, Tidserv, TDL/TDL2/TDL3+) тихо и незаметно размножился до тревожных цифр.
А именно:
- Семейство TDSS (здесь — Alureon) занимает третье место по числу зараженных машин в апреле 2010 г.
- Ботнет TDSS (здесь — Tidserv) входит в TOP10 крупнейших ботнетов в мире, представляя собой популяцию численностью в 1,5 млн. зомби-машин только в US
- По данным наших собственных изысканий, цифра «1,5 млн.» зараженных машин сильно преуменьшена.
Основополагающий фактор столь стремительной и, вместе с тем, бесшумной победы — ставка на обход антивирусов и передовые технологии. Задача успешно решается с первых дней существования бота и по сей день: по мере того, как антивирусы обновляются — обновляются и технологии их обхода в коде TDSS, неизменно радуя исследователей и «радуя» разработчиков защит оригинальностью нововведений.
Фактически, на протяжении всего времени существования TDSS, он был непрерывно недостижим для всех существующих средств защиты, включая наиболее популярные антивирусы и профессиональные антируткиты. Более того, до недавнего времени бот незаметно развивался под прикрытием собственной эффективности, так как производителям антивирусов было невыгодно предавать огласке угрозу, с которой они не справляются.
За последние полгода ситуация немного улучшилась. Противостояние продолжается, «большие» антивирусы по-прежнему не справляются, зато начали выпускать специализированные утилиты-лечилки (Norman TDSS Cleaner, Kaspersky TDSSKiller).
Обход антивирусов: техническая справка
С точки зрения выживания, перед вредоносной программой стоят две важнейшие задачи:
- На этапе инсталляции — обход поведенческой защиты (HIPS, проактивная защита, песочница).
Методы: использование легитимных системных механизмов, не предусмотренных разработчиками защиты, и «белых списков» защиты; реже — эксплуатация уязвимостей в коде антивируса или операционной системы.
- На этапе активного заражения — защита собственного кода от обнаружения и удаления.
Методы: от запрета антивирусных обновлений и блокировки доступа к файлам, до сокрытия файлов (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 фактически нет ни собственных файлов, ни ссылок на него в списках автозапуска. Мощность маскировки «хвостов» обеспечивается тем, что фильтры руткита расположены уровнем ниже всех существующих технологий антируткитов.
- Осуществляется микрозаражение драйвера минипорта диска (atapi.sys для IDE-дисков, iastor.sys для всех остальных). Размер драйвера не меняется, а код инфекции минимален и обеспечивает только подгрузку основного тела руткита.
Профит: автозагрузка вместе с драйвером минипорта. - Код и файл конфигурации руткита хранятся в последних секторах диска, в собственной файловой системе.
Профит: файлы руткита «не существуют» для операционной системы, но остаются доступными для приложений, знающих секретный путь к ним. - Маскировка инфекции системного драйвера и последних секторов диска осуществляется посредством фильтрации данных на уровне минипорта.
Профит: невидимость для всех существующих механизмов защиты (смотри схему).
Пример №4. «Одношаговка»
В конце апреля бот в очередной раз обновился.
version=3.273
builddate=20.4.2010 16:17:53
На этот раз, задача обхода защит решена минимальной модификацией техник из уже существующего арсенала. А именно:
- Файлы atapi.sys/iastor.sys под бдительным наблюдением защиты? — В новой версии заражается случайный драйвер.
- Поведенческие защиты научились замечать вызов функции AddPrintProcessor — он был заменен на вызов схожей функции AddPrintProvidor. (!)
- Некоторые утилиты-лечилки добирались до защищенных областей руткита на диске через интерфейс SCSI Pass Through — в новой версии руткита соответствующие этому механизму IRP фильтруются.
Замечу, что именно такая, как в последнем примере, примитивная одношаговая схема обхода защиты встречается на каждом шагу в массовых вредоносных программах. Такое решение не требует ни особой гениальности от разработчика, ни особых уязвимостей от защиты, и характеризуется крайне малым сроком жизни.
Техники же сложные (как в Примере №3) или хитрые (Примеры №1 и 2) больше характерны для хорошо финансируемых целевых руткитов. Открытым остается вопрос, потеряла ли команда TDSS своего лучшего разработчика, или все же изрядную долю финансирования?..