Содержание статьи
Борьба вирусописателей и производителей антивирусов — это борьба технологий: с появлением новых методов защиты сразу же появляются методы противодействия. Поэтому многие вредоносные программы первым делом проверяют, не запущены ли они в виртуальной машине или песочнице. Если вредоносу кажется, что он выполняется не на реальном «железе», то он, скорее всего, завершит работу.
Технику обхода песочниц часто называют термином Sandbox Evasion. Эту технику используют многие кибергруппировки, например PlugX или Cozy Bear (APT29). Так, нашумевшая группировка Anunak (авторы известного трояна Carbanak) использовала встроенное в документ изображение, которое активирует полезную нагрузку, когда пользователь дважды щелкает по нему.
Проще всего понять, как работают механизмы обнаружения виртуальных сред, с использованием возможностей PowerShell и WMI.
Пример построения песочницы
Традиционный враг любого вируса — специально подготовленная виртуальная машина, в которой исследователь запускает образец вредоносного ПО. Иногда вирусные аналитики используют сложные автоматизированные системы для анализа объектов в изолированной среде на потоке с минимальным участием человека. Такого рода ПО или программно-аппаратные комплексы поставляют разные компании, в частности FireEye (Network/Email Security), McAfee (Advanced Threat Defense), Palo Alto (Wildfire), Check Point (SandBlast), Kaspersky (Anti-Targeted Attack Platform), Group-IB, TDS. Также существуют опенсорсные песочницы, например Cuckoo Sandbox.
В России этот сегмент рынка относительно молод и начал активно развиваться примерно в 2016 году. Технологии песочницы, как ты видишь, используют практически все топовые производители средств информационной безопасности.
Начнем с базы и кратко пробежимся по внутреннему устройству виртуальной машины (ВМ). Для начала запомни, что ВМ — это абстракция от физического железа (аппаратной составляющей). Этот тезис понадобится, чтобы понимать, откуда у нас, собственно, возникли некоторые из приемов обнаружения изолированных сред.
Сердце ВМ — это гипервизор. Гипервизор сам по себе в некотором роде минимальная операционная система (микроядро или наноядро). Он предоставляет запущенным под его управлением операционным системам сервис виртуальной машины, то есть виртуализирует или эмулирует реальное (физическое) аппаратное обеспечение. Гипервизор также управляет этими виртуальными машинами, выделяет и освобождает ресурсы для них.
Напомним некоторые особенности виртуальных машин. Во-первых, центральный процессор гипервизора никогда не виртуализируется, а распределяет свои ресурсы между виртуальными машинами. То есть гипервизор не может выделить, например, половинку от ядра для какой-либо ВМ. Во-вторых, аппаратные компоненты при виртуализации фактически представляют собой файлы и не могут обладать физическими характеристиками HDD, такими, например, как износ секторов диска и другие параметры из SMART.
Как правило, виртуальные машины внутри песочниц разворачиваются чистыми (без специализированных средств анализа вредоносных программ внутри ВМ). Весь анализ выполняется гипервизором, в противоположность «ручным» исследовательским лабораториям, где на виртуальную машину уже установлен весь джентельменский набор программ для отслеживания активности вредоноса (OllyDbg, IDA, Wireshark, RegShot, Mon, Ripper, Process Monitor/Explorer и прочие). В этих прогах каждый созданный вирусописателями модуль защиты или проверка на наличие виртуального окружения обходится правкой кода вируса в дизассемблированном виде. Ниже схематически изображен анализ в одной из коммерческих песочниц — данные взяты из патента на продукт. Название мы нарочно оставим за кадром, так как нам интересен не конкретный производитель, а сама идея и подход к решению задачи.
Большинство коммерческих систем динамического анализа объектов построены по схожей схеме. Кратко поясним идею алгоритма.
- Файлы, поступающие на анализ, попадают в очередь на проверку.
- Приложение, отвечающее за безопасность, вместе с анализатором выполняет предварительные операции: сигнатурную, эвристическую и иные проверки. Проверка объекта в ВМ сама по себе очень затратна по времени и ресурсам. В итоге определяется, нужно ли отправлять образец на анализ в песочницу, и конкретные параметры виртуальной машины (включая версию и разрядность ОС), а также метод анализа объекта.
- Объект помещается в ВМ и исполняется. В ВМ нет никакого специализированного ПО — только стандартный набор программ обычного офисного сотрудника типичной компании; также имеется доступ в интернет (выявить сетевую активность вредоноса).
- Все действия исследуемой программы внутри ВМ через гипервизор попадают в анализатор, который должен понять, происходит что-то вредоносное или нет, опираясь на вшитые в него шаблоны поведения.
- Контекст и результаты анализа заносятся в базу данных для хранения, дальнейшего использования и обучения анализатора. Отсюда становится ясной основная фишка автоматизированных систем анализа объектов. Они действуют за областью виртуальной машины — на стороне гипервизора — и анализируют всю поступающую на него информацию. Именно поэтому вредоносной программе нецелесообразно искать специальные инструменты анализа на стороне ВМ, но мы в статье будем это делать, чтобы более широко охватить тему.
На основе каких гипервизоров строятся песочницы? Обычно это Open Source и коммерческие гипервизоры на основе KVM. У того и у другого подхода есть свои плюсы и минусы, которые мы свели в табличку.
Очень часто, чтобы скрыть, что программа работает в виртуальной среде, в гипервизорах с открытым исходным кодом используется метод под названием харденинг. В этом случае часть доступных для определения параметров (например, идентификаторы производителей устройств) пробрасывается в виртуальную машину или заглушается сгенерированными данными.
Исследуя программу в песочнице, эмулируют действия пользователя (движение мыши, запуск приложений, работа в интернет-браузере). Проверяют работу образца с правами администратора, а также сдвигают время, чтобы выявить специфические условия активации вредоносной составляющей (некоторые из них начинают действовать после определенного периода «сна») и логических бомб.
Определение работы в песочнице
Мы написали небольшую программку на Python с использованием PowerShell, оценивающую «реальность» машины, на которой она запущена. В зависимости от условий большинству использованных в программе методов достаточно прав пользователя, однако некоторым для достоверного результата нужны привилегии администратора. Сразу оговоримся, что тесты мы проводили на Windows-платформах — они популярнее всего, и их чаще заражают. Для простоты мы использовали запросы к WMI (Windows Management Instrumentation, инструментарий управления Windows, то есть технология для обращения к объектам в системе). Запросы к WMI для унификации и наглядности мы выполняли с использованием PowerShell.
Исследовав в общей сложности порядка 70 машин, мы выделили ряд методов, позволяющих выявить средства виртуализации. Условно все методы определения работы в виртуальной среде мы разделили на четыре уровня, начиная с простого поиска строковых признаков виртуализации и заканчивая определением физических параметров системы, от которых будет сложно избавиться на виртуальной машине.
Level 1 — поиск характерных строковых идентификаторов
Самое простое, что может сделать программа, запустившись на новой машине, — проверить, что это за компьютер. Если название модели (или производителя некоторых составляющих) содержит virt либо где-то присутствуют ссылки на известных вендоров технологий виртуализации, это уже первый тревожный звоночек.
Параметры производителя и модель компьютера (Manufacturer и Model) легко поддаются правке, поэтому их значения остаются на совести создателей песочниц. Вот как можно отправить запрос к WMI через командную строку:
wmic computersystem get model,manufacturer
А вот так выглядит запрос в PowerShell:
Get-WmiObject Win32_ComputerSystem | Select-Object -Property Model,Manufacturer
В результате обработки запроса мы получим следующий отчет — сравни первые три вывода команды для виртуальных машин с показаниями реальной:
Manufacturer: innotek GmbH Model: VirtualBox
Manufacturer: Parallels Software International Inc. Model: Parallels Virtual Platform
Manufacturer: VMware, Inc. Model: VMware Virtual Platform
Manufacturer: ASUSTeK Computer Inc. Model: K53SV (реальная машина. — Прим. авт.)
В официальной документации к гипервизору может встречаться указание на список доступных для подмены параметров. Так, для гипервизора VirtualBox можно поменять ряд параметров. Перечислим некоторые:
- DmiBIOSVendor (производитель BIOS’a);
- DmiBIOSVersion (его версия);
- DmiBIOSReleaseDate (и его дата релиза);
- DmiSystemVendor (производитель ОС);
- DmiSystemProduct (название ОС);
- DmiSystemVersion (версия ОС);
- DmiSystemSerial (серийный номер установки ОС);
- DmiSystemFamily (семейство ОС);
- Disk SerialNumber (серийник HDD);
- Disk FirmwareRevision (его номер прошивки);
- Disk ModelNumber (модель HDD).
INFO
DMI (Desktop Management Interface) — программный интерфейс (API), позволяющий программному обеспечению собирать данные о характеристиках аппаратуры компьютера.
Для начала можно проверить серийный номер BIOS. Это срабатывает часто, поскольку при создании ВМ никого не волнует тонкая настройка базовой подсистемы ввода-вывода, поэтому, если нам удастся получить правдоподобные сведения, скорее всего, машина реальная. Попробуй набить данную команду в PowerShell или даже PowerShell ISE (кстати, дальше мы развлекаемся только на PowerShell и не понимаем, почему ты еще не вошел в консоль):
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»