tmpa-2015: multi-platform approach to reverse debugging of virtual machines
TRANSCRIPT
Мультиплатформенный метод обратной отладки виртуальных
машин
П. М. Довгалюк, М. А. Климушенкова,
Д. С. Дмитриев В. А. Макаров
Новгородский государственный университет
Отладка операционных систем
2
Падение системы
Замедление работы
Изменение поведения из-за отладочных методов
Отладка ОС с помощью кода внутри машины
3
Система должна функционировать
Нельзя отладить любой выполняемый код
Загрузочный код
BIOS
Нужно настраивать заранее
Влияет на работу отлаживаемого кода
Отладка ОС через gdbserver в симуляторе
4
Не нужно сохранять дампы, чтобы их анализировать
Можно подключиться в любой момент
Даже при критическом сбое
Даже до загрузки ОС
Отладка без реального оборудования
Отладка прошивки
Отладка моделей оборудования
Работает медленнее из-за виртуализации
Ход работы может измениться из-за остановок
Идея воспроизведения работы системы
5
QEMU
QEMU
Результаты анализа
Фаза записи Фаза воспроизведения ВМ
Реальный мир
Применение детерминированного воспроизведения
6
Нет воздействия на гостевую систему при анализе
Профилирование
Анализ помеченных данных
Отладка
Трассировка
Запись/воспроизведение работы
7
Не нужно перенастраивать окружение
Отладка редко проявляющихся ошибок
Разделение записи и анализа
Можно анализировать сетевые приложения, критичные к временным параметрам
Обратная отладка через gdb
Отладчик не влияет на ход работы гостевого кода
Файл журнала можно переносить между машинами
Воспроизведение ошибочных сценариев
Распараллеливание анализа
Отладка моделей устройств
Детерминированное воспроизведение и обратная отладка
8
Должна работать на всех платформах QEMU
Протестирована для x86, x64, ARM, MIPS
Отладка и анализ всей системы
Ядро и BIOS
Виртуальные устройства
Во время воспроизведения можно переключиться на обычную работу
Воспроизведение в симуляторе
9
ЦП ОЗУ
Диски Таймеры
Виртуальные устройства
Детерминированная часть
TAP
Socket
libusb
Журнал
Winaudio
Видео вывод
Воспроизведение
Запись
Часы
Slirp
Мышь
Клавиатура
Реальный мир
Виртуальный таймер
10
Базовая реализация есть в QEMU
Считает число выполненных инструкций
Интерфейс не зависит от ЦП
Увеличивается в начале каждого блока
Корректно работало не на всех платформах
Виртуальное время гостевой системы привязано к этому таймеру
Замедление виртуальной машины замедляет и ход гостевого времени
Обратная отладка
11
Нужна для изучения того, что уже было
Делаются снимки системы для возврата назад
Ход воспроизведения
“Перемотка” к раннему снимку
Обратная отладка
12
Команды GDB
reverse-continue
reverse-step
reverse-stepi
reverse-next
reverse-nexti
reverse-finish
Обратная отладка
13
int *p = malloc(sizeof(int));
………….
p = NULL;
………….
int a = *p;
Обратная отладка
14
int *p = malloc(sizeof(int));
………….
p = NULL;
………….
int a = *p;
gdb> watch p
gdb> reverse-continue
Обратная отладка
15
int *p = malloc(sizeof(int));
………….
p = NULL;
………….
int a = *p;
gdb> watch p
gdb> reverse-continue
1 2 3 4
Показатели работы записи/воспроизведения
16
Замедление при записи
Замедление при воспроизведении
Размер журнала, байт на 1000 инструкций
i386 (Win) 31% 156%
i386 (Debian) 41% 136% 21.9
ARM (Debian) 32% 191% 17.9
MIPS (Debian) 14% 139% 75.4
Результаты
17
Исправлены ошибки в реализации счетчика инструкций
Найдено несколько ошибок реализации виртуальных процессоров с помощью воспроизведения
Опубликованы патчи
около 6000 LOC
В QEMU 2.5 включено ядро воспроизведения
Без блочных устройств, gdb, сети, USB
Зачем это нужно?
18
Детерминированная отладка виртуальных устройств
ROR r8/r16
Некорректная обработка MMU faults
Моделирование «железа»
Зачем это нужно?
19
Обратная отладка через GDB
пользовательские приложения
драйверы
ядро ОС
BIOS
Зачем это нужно?
20
Сбор данных
трассировка инструкций
обращения к памяти
сетевой трафик
Динамический анализ
помеченные данные
символьное выполнение