20
Мультиплатформенный метод обратной отладки виртуальных машин П. М. Довгалюк, М. А. Климушенкова, Д. С. Дмитриев В. А. Макаров Новгородский государственный университет

TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines

Embed Size (px)

Citation preview

Page 1: TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines

Мультиплатформенный метод обратной отладки виртуальных

машин

П. М. Довгалюк, М. А. Климушенкова,

Д. С. Дмитриев В. А. Макаров

Новгородский государственный университет

Page 2: TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines

Отладка операционных систем

2

Падение системы

Замедление работы

Изменение поведения из-за отладочных методов

Page 3: TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines

Отладка ОС с помощью кода внутри машины

3

Система должна функционировать

Нельзя отладить любой выполняемый код

Загрузочный код

BIOS

Нужно настраивать заранее

Влияет на работу отлаживаемого кода

Page 4: TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines

Отладка ОС через gdbserver в симуляторе

4

Не нужно сохранять дампы, чтобы их анализировать

Можно подключиться в любой момент

Даже при критическом сбое

Даже до загрузки ОС

Отладка без реального оборудования

Отладка прошивки

Отладка моделей оборудования

Работает медленнее из-за виртуализации

Ход работы может измениться из-за остановок

Page 5: TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines

Идея воспроизведения работы системы

5

QEMU

QEMU

Результаты анализа

Фаза записи Фаза воспроизведения ВМ

Реальный мир

Page 6: TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines

Применение детерминированного воспроизведения

6

Нет воздействия на гостевую систему при анализе

Профилирование

Анализ помеченных данных

Отладка

Трассировка

Page 7: TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines

Запись/воспроизведение работы

7

Не нужно перенастраивать окружение

Отладка редко проявляющихся ошибок

Разделение записи и анализа

Можно анализировать сетевые приложения, критичные к временным параметрам

Обратная отладка через gdb

Отладчик не влияет на ход работы гостевого кода

Файл журнала можно переносить между машинами

Воспроизведение ошибочных сценариев

Распараллеливание анализа

Отладка моделей устройств

Page 8: TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines

Детерминированное воспроизведение и обратная отладка

8

Должна работать на всех платформах QEMU

Протестирована для x86, x64, ARM, MIPS

Отладка и анализ всей системы

Ядро и BIOS

Виртуальные устройства

Во время воспроизведения можно переключиться на обычную работу

Page 9: TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines

Воспроизведение в симуляторе

9

ЦП ОЗУ

Диски Таймеры

Виртуальные устройства

Детерминированная часть

TAP

Socket

libusb

Журнал

Winaudio

Видео вывод

Воспроизведение

Запись

Часы

Slirp

Мышь

Клавиатура

Реальный мир

Page 10: TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines

Виртуальный таймер

10

Базовая реализация есть в QEMU

Считает число выполненных инструкций

Интерфейс не зависит от ЦП

Увеличивается в начале каждого блока

Корректно работало не на всех платформах

Виртуальное время гостевой системы привязано к этому таймеру

Замедление виртуальной машины замедляет и ход гостевого времени

Page 11: TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines

Обратная отладка

11

Нужна для изучения того, что уже было

Делаются снимки системы для возврата назад

Ход воспроизведения

“Перемотка” к раннему снимку

Page 12: TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines

Обратная отладка

12

Команды GDB

reverse-continue

reverse-step

reverse-stepi

reverse-next

reverse-nexti

reverse-finish

Page 13: TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines

Обратная отладка

13

int *p = malloc(sizeof(int));

………….

p = NULL;

………….

int a = *p;

Page 14: TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines

Обратная отладка

14

int *p = malloc(sizeof(int));

………….

p = NULL;

………….

int a = *p;

gdb> watch p

gdb> reverse-continue

Page 15: TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines

Обратная отладка

15

int *p = malloc(sizeof(int));

………….

p = NULL;

………….

int a = *p;

gdb> watch p

gdb> reverse-continue

1 2 3 4

Page 16: TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines

Показатели работы записи/воспроизведения

16

Замедление при записи

Замедление при воспроизведении

Размер журнала, байт на 1000 инструкций

i386 (Win) 31% 156%

i386 (Debian) 41% 136% 21.9

ARM (Debian) 32% 191% 17.9

MIPS (Debian) 14% 139% 75.4

Page 17: TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines

Результаты

17

Исправлены ошибки в реализации счетчика инструкций

Найдено несколько ошибок реализации виртуальных процессоров с помощью воспроизведения

Опубликованы патчи

около 6000 LOC

В QEMU 2.5 включено ядро воспроизведения

Без блочных устройств, gdb, сети, USB

Page 18: TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines

Зачем это нужно?

18

Детерминированная отладка виртуальных устройств

ROR r8/r16

Некорректная обработка MMU faults

Моделирование «железа»

Page 19: TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines

Зачем это нужно?

19

Обратная отладка через GDB

пользовательские приложения

драйверы

ядро ОС

BIOS

Page 20: TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines

Зачем это нужно?

20

Сбор данных

трассировка инструкций

обращения к памяти

сетевой трафик

Динамический анализ

помеченные данные

символьное выполнение