tmpa-2015: multi-platform approach to reverse debugging of virtual machines

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

Upload: iosif-itkin

Post on 17-Feb-2017

1.658 views

Category:

Science


0 download

TRANSCRIPT

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

Сбор данных

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

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

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

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

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

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