Платформа ИСП РАН для анализа программ построена на базе открытого эмулятора QEMU, который используется при необходимости кроссплатформенной разработки. Поддерживает механизмы обратной отладки и интроспекции, а также режим полносистемной эмуляции для отладки низкоуровневого ПО. Разработана в Отделе компиляторных технологий ИСП РАН.

Особенности и преимущества

QEMU поддерживает более 10 архитектур процессоров (i386 и Intel 64, ARM и Thumb, MIPS, PowerPC и др.). Реализует отладку по удаленному GDB-протоколу и совместим с IDA Pro, GDB и средами разработки. В режиме полносистемной эмуляции подходит для отладки низкоуровневого ПО – такого, как загрузчик и ОС.

Исходный код QEMU систематически проверяется двумя статическими анализаторами (Coverity и Svace), что делает анализ потенциально вредоносного ПО в эмуляторе более безопасным.

Эмулятор с поддержкой обратной отладки и интроспекции доступен на GitHub: https://github.com/ispras/swat, как и набор инструментов автоматизации: https://github.com/ispras/qdt, https://github.com/ispras/i3s.

Платформа ИСП РАН на основе QEMU – это:

  • Запись и воспроизведение работы виртуальной машины:
  • При каждом воспроизведении виртуальная машина ведёт себя одинаково и точно так же, как при записи. Все воздействия извне зафиксированы и повторяются самим эмулятором, что упрощает отладку ошибок, связанных с параллельной работой приложения (состояние гонки, взаимные блокировки);
  • На базе воспроизведения реализована GDB-совместимая обратная отладка, которая заключается в откате к предыдущим снимкам состояния виртуальной машины и поиске предпоследнего срабатывания точки останова или предыдущей инструкции;
  • Записывается минимум информации, что позволяет вести длительную запись, необходимую для отладки редко повторяющихся ошибок;
  • Низкое относительное замедление, вносимое записью, позволяет контролировать ПО, требующее взаимодействия с удалённой системой в режиме реального времени.
  • Получение высокоуровневой информации о работе гостевой ОС (интроспекция ВМ) без внесения каких-либо изменений в ядро ОС или установки программ мониторинга:
  • Возможность получить последовательность совершаемых системных вызовов, обращений к именованным функциям в динамических библиотеках, список работающих процессов, список открытых файлов и загруженных в память модулей;
  • Поддержка любого образа виртуальной машины на основе Linux, в том числе  образов встраиваемого ПО различных устройств;
  • Отладка с помощью встроенного в эмулятор сервера WinDbg, что позволяет отображать информацию о гостевом ПО в терминах абстракций ядра Windows. При этом не требуется включение отладочного режима работы гостевой ОС.
  • Ускорение разработки расширений для QEMU:
  • Сокращение времени на подготовку средств динамического анализа для образцов кода, требующих специализированной аппаратуры;
  • Автоматизированное добавление процессорных архитектур с использованием генератора декодеров машинных команд и С-подобного языка описания семантики инструкций;
  • Система автоматического первичного тестирования виртуальной машины. Для работы системы требуются только утилиты GNU Binutils и компилятор языка С;
  • Автоматизированная разработка моделей устройств;
  • Генерация виртуальной машины (в форме исходного кода модуля QEMU) как из существующих, так и из новых устройств по описанию на языке Python с использованием графического интерфейса пользователя со схематичным изображением машины;
  • API для автоматизации процесса отладки на языке Python по протоколу GDB RSP: отладка гостевого кода, кода эмулятора и обоих одновременно.
  • Удобство практического использования:
  • Свободное расширение возможностей QEMU благодаря открытому исходному коду и собственным инструментам ускоренной разработки ИСП РАН;
  • Анализ бинарного кода без внедрения программ в гостевую систему;
  • Модульная структура механизма интроспекции с возможностью расширения за счёт новых плагинов;
  • Удобное API для самостоятельной разработки плагинов интроспекции;
  • Возможность адаптации под конкретные нужды пользователя;
  • Поддержка актуальных версий QEMU с новой периферией и процессорными ядрами.

Для кого предназначена платформа ИСП РАН на основе QEMU?

  • Разработчики загрузчиков, драйверов, ОС и другого системного ПО.
  • DevOps-команды (воспроизводимость ошибок, кросс-разработка, масштабирование тестирования в облачной среде).
  • Аналитики потенциально вредоносного ПО.
  • Специалисты по сертификации ПО.

Поддерживаемые гостевые среды

Эмулируемые платформы: i386, x86-64, ARM, MIPS, PowerPC и другие.

Гостевые системы, поддерживаемые интроспекцией: Windows XP (x86), Windows 10
(x86-64) и Linux 2.x-4.x на платформах x86, x86-64, ARM, AArch64.

Опыт внедрения

Реализованный механизм воспроизведения принят мировым сообществом разработчиков QEMU и включен в версию 3.1.

Схема работы