Большинство людей не рассматривают средства антивирусной защиты как источник дополнительной угрозы. Антивирусы воспринимаются как доверенные приложения, которые за счет некоторых потерь производительности способны обеспечить защиту информационной системы от самых разных атак. В результате антивирус часто оказывается единственным средством защиты конечных пользователей, а связка из нескольких антивирусов — основным решением для безопасности предприятия.
Но, как и любые сложные программы, антивирусы подвержены уязвимостям. При этом процессы антивирусных продуктов, как правило, являются доверенными и выполняются в привилегированном режиме, с высокими правами доступа. Это делает антивирусы интересной мишенью для злоумышленников, поскольку их эксплуатация может приводить к компрометации всей системы.
В последние годы наблюдается рост интереса к уязвимостям защитного ПО вообще и антивирусов в частности. Об этом говорит рост числа эксплойтов, опубликованных на exploit-db и подобных ресурсах. На графике выше показано количество найденных уязвимостей в известных антивирусных продуктах за каждый год в течение последних 15 лет.
В начале нулевых годов материалы об уязвимостях в средствах антивирусной защиты появлялись крайне редко, а за прошедший год было опубликовано больше полусотни эксплойтов, большая часть которых основана на критически опасных уязвимостях антивирусов и связана с обходом аутентификации, повышением привилегий и удаленным выполнением кода. В частности, в 2015 году найдены уязвимости в продуктах ESET, Avast, BitDefender, Symantec, Kaspersky Lab, FireEye, Malwarebytes.
Помимо независимых исследователей, с 2014 года к поиску уязвимостей в средствах защиты подключилась команда Google Project Zero. Они нашли значительную часть опубликованных за прошедший год уязвимостей в антивирусах. Закономерно, что правительственные организации тоже проявляют интерес к данной теме: мы уже рассказывали об исследованиях российских антивирусов, которые проводятся западными спецслужбами.
Сложно делать точные прогнозы о том, как будет развиваться далее эта тенденция, но некоторые предположения можно сделать на основании эксплойтов, опубликованных в первом квартале 2016 года. Их краткие описания представлены ниже.
Атаки с использованием уязвимых антивирусов
TrendMicro
11 января 2016 года исследователь Tavis Ormandy из команды Google Security Research обнаружил критически опасную уязвимость антивируса TrendMicro, приводящую к удаленному выполнению кода.
При установке антивируса по умолчанию устанавливается компонент Password Manager, который прописывается установщиком в автозагрузку. Этот модуль написан на JavaScript с использованием node.js. Он открывает множество RPC-портов для обработки API-запросов по HTTP. Уязвимость была найдена в API-функции openUrlInDefaultBrowser, которая вызывает ShellExecute() без проверки передаваемых аргументов, тем самым допуская выполнение произвольного кода.
x = new XMLHttpRequest()
x.open("GET", "https://localhost:49155/api/
openUrlInDefaultBrowser?url=c:/windows/system32/calc.exe true);
try { x.send(); } catch (e) {};
Патч выпустили через неделю после обращения.
exploit-db.com/exploits/39218
McAfee Application Control
12 января специалисты из австрийской компании SEC Consult опубликовали отчет об успешном обходе защиты McAfee Application Control. Это приложение запрещает запуск приложений, не определенных в белом списке, и предназначено прежде всего для защиты критически важных инфраструктур. Рассматривалась версия 6.1.3.353 под Windows. Были найдены способы запуска неавторизованных приложений в обход защиты, методы запуска произвольного кода, методы обхода программного DEP, реализованного в McAfee Application Control, обхода UAC при включенной защите продукта McAfee, обход защиты от записи в белый список. В довершение были найдены уязвимости драйвера swin1.sys, приводящие к сбою системы.
exploit-db.com/docs/39228.pdf
QuickHeal
19 февраля исследователь Fitzl Csaba написал proof-of-concept, эксплуатирующий уязвимость в популярном индийском антивирусе QuickHeal 16.00. Драйвер webssx.sys оказался подвержен CVE-2015-8285, эксплуатация которой приводит к повышению привилегий либо вызывает BSOD. Драйвер создается без флага
FILE\_DEVICE\_SECURE\_OPEN
, что позволяет любому пользователю взаимодействовать с этим драйвером в обход ACL. Исследователь нашел IOCTL-код и нужный размер передаваемого драйверу буфера, приводящие к вызову уязвимой функции. Из-за недостаточной проверки получаемых данных из входного буфера возникало целочисленное переполнение аргумента, передаваемого функции memcpy.exploit-db.com/exploits/39475
Comodo
29 февраля хакер Greg Linares нашел уязвимость в модуле GeekBuddy антивируса Comodo, приводящую к локальному повышению привилегий. Модуль GeekBuddy при выполнении запускает несколько процессов, один из которых пытается подгрузить библиотеку shfolder.dll. Поскольку вместо абсолютного пути в файле, запускаемом GeekBuddy, жестко задано только имя библиотеки — возможна подмена dll. Если поместить вредоносную shfolder.dll в C:\ProgramData\Comodo\lps4\temp\ и запустить обновление клиента или дождаться, пока оно запустится автоматически, пользователь может повысить привилегии до уровня SYSTEM и полностью компрометировать систему.
exploit-db.com/exploits/39508
Avast
4 марта Google Security Research продолжила публиковать уязвимости антивируса Avast. На этот раз была закрыта ошибка, связанная с повреждением памяти при парсинге цифровых сертификатов. Tavis Ormandy создал исполняемый PE-файл, при сканировании которого Avast «падал» с ошибкой. По словам исследователя, ошибка связана с повреждением памяти при парсинге цифровой подписи файла.
exploit-db.com/exploits/39530
McAfee VirusScan
7 марта Maurizio Agazzini опубликовал материал об очередной уязвимости в продуктах McAfee. Исследователь написал эксплойт, позволяющий обходить ограничения безопасности антивируса McAfee VirusScan Enterprise 8.8. Используя найденную уязвимость, пользователь с правами локального администратора мог в обход ограничений безопасности отключить антивирус — не зная его пароля.
Уязвимость была исправлена патчем от 25 февраля, хотя первые обращения автора эксплойта в McAfee датируются осенью 2014 года.
exploit-db.com/exploits/39531
Avira
16 марта критически опасная уязвимость обнаружена в антивирусе Avira. Ожидается, что антивирус должен уметь гарантированно обрабатывать PE-файлы. Тем не менее при тестировании антивируса Avira в режиме сканирования PE-файлов была обнаружена уязвимость типа heap underflow. Ошибка воспроизводилась при парсинге заголовков таблицы секций. Если заголовок секции имел слишком большой RVA, Avira сохраняла вычисленное смещение в буфер на куче и записывала в него данные, контролируемые атакующим (данные из
section->PointerToRawData
в исходном файле). Уязвимость приводила к RCE с привилегиями NT\_AUTHORITY\SYSTEM
. Патч выпущен 18 марта.exploit-db.com/exploits/39600
И снова Comodo
19 марта опубликован отчет о критически опасной уязвимости в антивирусе Comodo. Этот продукт включает в себя x86-эмулятор, используемый для автоматической распаковки и мониторинга обфусцированных исполняемых файлов. Предполагается, что эмулятор исполняет вредоносный код безопасно в течение небольшого промежутка времени, тем самым давая сэмплу распаковаться или выявить какой-нибудь интересный для детектирования поведенческий признак.
Помимо проблем, связанных с повреждением памяти, при работе эмулятора было обнаружено, что аргументы некоторых опасных эмулируемых API-вызовов передаются в реальные API-функции во время сканирования. Несколько оберток просто извлекают аргументы из эмулируемого адресного пространства и передают их напрямую в системные вызовы, при этом выполняясь с привилегиями
NT\_AUTHORITY\SYSTEM
. Результаты вызовов затем возвращаются в эмулятор и выполнение кода продолжается.Это позволяет осуществлять различные сценарии атак. Например, читать, удалять, перечислять и использовать криптографические ключи, взаимодействовать со смарт-картами и другими устройствами. Это возможно, поскольку аргументы CryptoAPI-функций передаются эмулятором напрямую реальным API. Другим примером угрозы стало чтение любых ключей реестра при использовании обертки над
RegQueryValueEx
, аргументы которой передаются реальной API напрямую.Этот вектор атаки весьма показателен, поскольку атакующий может вызвать выполнение вредоносного кода в эмуляторе — просто послав жертве электронное письмо или направив ее по ссылке на зараженный сайт. Патч, исправляющий уязвимость, был выпущен 22 марта.
exploit-db.com/exploits/39599
14 марта 2016 обнаружена критически опасная ошибка в антивирусном движке Comodo. Исполнение произвольного кода было возможно при распаковке антивирусом вредоносных файлов, защищенных протектором PackMan. Packman — малоизвестный паковщик с открытым исходным кодом, Comodo распаковывает его в ходе сканирования.
При обработке файлов, сжатых этим паковщиком с определенными опциями, параметры сжатия считываются напрямую из входного файла без валидации. При помощи фаззинга было выявлено, что в функции
CAEPACKManUnpack::DoUnpack\_With\_NormalPack
можно передать указатель pksDeCodeBuffer.ptr
по произвольному адресу, что позволяет атакующему освободить функцией free() произвольный адрес. Уязвимость позволяет злоумышленнику выполнять код с привилегиями NT\_AUTHORITY\SYSTEM
. Патч вышел 22 марта.exploit-db.com/exploits/39601
Что делать
Несмотря на уязвимости антивирусов, совсем отказаться от них затруднительно. В тех случаях, когда требуется анализировать большие объемы файлов, антивирусные движки справляются с работой быстрее альтернативных решений (например, «песочниц»). Это достигается за счет развитого статического анализа.
На наш взгляд, при построении эффективной системы защиты на основе антивирусных решений должны достигаться и точность детектирования, и минимизация рисков, привносимых самим средством защиты. Вот некоторые перспективные направления для решения этой задачи:
— Точность и оперативность обнаружения повышаются при помощи сканирования несколькими антивирусными движками различных производителей. Такую возможность дают некоторые онлайновые сервисы (например, Virustotal.com) – однако в этом случае требуется загружать свои файлы на сторонний ресурс, то есть возникает риск утечки конфиденциальных данных к «третьим лицам». Логично было бы организовать такое сканирование на локальном сервере, без лишних обращений к сторонним приложениям.
— Риски безопасности можно снизить, если исследовать подозрительные файлы в изолированной безопасной среде. При этом надо понимать, что современное вредоносное ПО уже умеет анализировать окружение и обходить некоторые «песочницы», либо не проявлять себя в них. Поэтому необходимо использовать «ловушки», которые максимально похожи на рабочую систему, где можно долго и незаметно наблюдать за поведением зловреда.
— Даже обнаружив вредоносное ПО, антивирус не может выявить все объекты, которые подверглись зловредному воздействию в прошлом, до обнаружения. Поэтому желательно, чтобы защитная система давала возможность ретроспективного анализа.
Эти и другие технологии мы применяем сейчас в разработке системы PT MultiScanner.