Отладка ядра Windows

Описание

Во всем программном обеспечении есть ошибки. Когда ошибка в приложении проявляется, она затрагивает только это одно приложение. В то же время ошибка в драйвере режима ядра влияет на всю систему и часто приводит к печально известному синему экрану смерти (BSOD). Цвет этого печально известного экрана мог измениться в последних версиях Windows, но основные причины сбоя остались прежними.

Этот курс предназначен для исследователей в области безопасности, разработчиков программного обеспечения, инженеров службы поддержки, которые должны регулярно анализировать и отлаживать программное обеспечение в режиме ядра Windows. Этот курс создает необходимую основу для эффективной отладки ядра с такими темами, как настройка отладчика, символы отладки, выполнение основных задач отладки, создание сценариев отладчика, получение параметров функций из стека x64, сопоставление ассемблера x64 с конструкциями языка высокого уровня и т. Д. углубляется в различные методы и стратегии, которые могут быть применены для выполнения сортировки, изоляции сбоев, анализа основных причин сбоев и зависаний, вызванных драйверами режима ядра. Кроме того, этот курс затрагивает идентификацию вредоносного поведения в ядре, обычно проявляемого руткитами.

отладки памяти Студенты отвалы, которые охватывают широкий спектр ошибка-проверочных кодов, таких как BAD_POOL_CALLER, IRQL_NOT_LESS_OR_EQUAL, SYSTEM_THREAD_EXCEPTION_NOT_HANDLED, UNEXPECTED_KERNEL_MODE_TRAP, KERNEL_MODE_EXCEPTION_NOT_HANDLED, NO_MORE_IRP_STACK_LOCATIONS, KERNEL_APC_PENDING_DURING_EXIT, ATTEMPTED_SWITCH_FROM_DPC, DRIVER_POWER_STATE_FAILURE, CRITICAL_STRUCTURE_CORRUPTION, ATTEMPTED_EXECUTE_OF_NOEXECUTE_MEMORY и последнее, но не наименьшее значение MANUALLY_INITIATED_CRASH для сценариев зависания системы.

Этот учебный курс посвящен драйверам, связанным с программным обеспечением и безопасностью, и НЕ охватывает вопросы, связанные с драйверами оборудования для устройств PCI, USB, Bluetooth.

Практические лабораторные работы

В практических лабораторных упражнениях студенты работают на большом количестве дампов сбоев и зависаний в режиме ядра, которые были получены в различных версиях Windows, от Windows XP до Windows 10. Каждый дамп памяти включает в себя применение внутренних знаний Windows и уникальный набор методов отладки, начиная с «! анализировать- v «для изоляции модуля, ответственного за сбой или зависание, для определения основной причины проблемы и возможных способов ее устранения.

Предварительные требования

Участники должны хорошо разбираться в ядре Windows. Курс CodeMachine Windows Kernel Internals предоставляет предварительные знания ядра Windows, необходимые для получения максимальной отдачи от этого курса.

Цели обучения

  • Понимание архитектуры и компонентов Windows Отладчик (WinDBG/KD).
  • Уметь использовать команды отладчика ядра для выполнения общих задач отладки..
  • Уметь автоматизировать общие задачи отладки с помощью сценариев отладчика.
  • Уметь отображать ассемблер X64 в конструкции кода языка высокого уровня (C/C ++).
  • Понять соглашение о вызовах, передачу параметров, использование стека в 64-битных системах.
  • Уметь извлекать параметры на основе регистров из стеков вызовов x64 через энергонезависимые регистры .
  • Уметь определять симптомы системного сбоя/нестабильности, выполнять сортировку ошибок и локализовать их.
  • Уметь отлаживать трудно воспроизводимые зависания и сбои .
  • Уметь анализировать и устранять причины проблем вплоть до изменения кода в модулях ядра.
  • Уметь определять код инструментария, который можно добавить в драйверы для помощи определить основную причину.
  • Уметь обнаруживать руткиты режима ядра в системе.

Темы

  • Отладчик Windows
  • Ассемблер X64
  • Стеки вызовов X64
  • Обратный англ. ineering
  • Автоматизация отладчика
  • Анализ аварийного дампа
  • Отладка взаимоблокировок и зависаний
  • Расширенные методы анализа
  • Инструменты отладки

Подробности курса

Отладчик Windows

Цель этого раздела — узнать об отладчике ядра, отладочных символах и использовании отладчика. Он охватывает такие темы, как настройка системы для отладки ядра, разветвления отладки ядра, содержимое файла символов (.PDB), решение проблем, связанных с файлами символов, использование сторонних расширений отладчика, различия между различными типами дампа памяти (полный, ядро, активный, автоматический) и создание дампов памяти процесса и системы вручную.

  • Архитектура отладчика
  • Расширения отладчика
  • Типы команд отладчика
  • Файлы символов
  • Сервер символов
  • Отладка ядра
  • Дампы памяти
  • Создание дампа памяти вручную

Ассемблер x64

Цель этого раздела — узнать о процессоре x64, регистрах, инструкциях и основах чтение и понимание ассемблера x64, необходимого для обратного проектирования. Он охватывает такие темы, как набор инструкций x64, кодирование инструкций x64, абсолютные и относительные смещения, обратный порядок байтов и обратный порядок байтов, расширение знака и нуля, наиболее часто используемые типы инструкций (передача данных, арифметика, логика, поток управления и т. Д.) , флаги условий и условные переходы, прямые и косвенные передачи управления, базовые блоки, графы потоков управления.

  • Аппаратная архитектура
  • Регистры процессора X64
  • Набор команд X64
  • Число представление
  • Типы инструкций
  • Передача потока управления
  • Основные блоки функций
  • Общие шаблоны инструкций

Стеки вызовов x64

Цель этого раздела — узнать, как стеки работают в 64-битных системах и как использовать знание 64-битной структуры стека для извлечения информации из стека. Он охватывает такие темы, как соглашение о вызовах x64, компоненты фрейма стека x64, канарейки стека, локальные переменные и параметры, пространство для наведения параметров, интерпретация стека вызовов x64, отображаемого отладчиком, получение параметров на основе регистров из стека и флаги компилятора, влияющие на стек. генерация кадров.

  • Вызовы функций и стеки
  • Стеки вызовов и фреймы стека
  • Соглашение о вызовах
  • Указатель стека
  • Энергонезависимые регистры
  • Пролог и эпилог функции
  • Интерпретация стеков вызовов
  • Получение параметров функции

Обратный инжиниринг

Цель этого раздела — научиться отображать ассемблер x64 конструкторам кода на языке высокого уровня (C/C ++). Он охватывает такие темы, как использование регистров ЦП, определение доступа к параметрам функции, локальным переменным, глобальным переменным, полям структур, элементам массива, узлам списка и т. Д., Определение условий ветвления, выполнение обратного отслеживания на основе состояния регистра и памяти, определение необходимого преобразования кода. для оптимизации компилятора.

  • Использование регистра
  • Типы переменных
  • Глобальные переменные
  • Локальные переменные и параметры
  • Структура структуры
  • Массивы
  • Оптимизация компилятора
  • Анализ потока управления

Автоматизация отладчика

Цель этого раздела — узнать о поддержке сценариев отладчика и о том, как использовать ее для автоматизации общей отладки. и аналитические задачи. Он охватывает такие темы, как надлежащее использование оценщиков выражений MASM и C ++, конвейеры команд отладчика, правила разработки и выполнения сценариев отладчика, использование псевдорегистров и псевдонимов для уменьшения сложности сценария, форматирование вывода отладчика и другие методы автоматизации.

  • Анализаторы выражений
  • Псевдо-регистры
  • Разыменование памяти
  • Итераторы
  • Макросы
  • Скрипты отладчика
  • Токены потока управления
  • Псевдонимы
  • Сравнение строк

Анализ аварийного дампа

Цель этого раздела — узнать, почему и как возникают ошибки. происходят проверки, выявление ошибок и изоляция ошибок. В нем рассматриваются такие темы, как условия, приводящие к проверке ошибок системы, распространенные причины сбоев создания дампа, интерпретация информации из автоматического анализа отладчиков, использование информации проверки ошибок для определения соответствующего контекста регистра, выполнение проверки работоспособности регистров, получение состояния системы с использованием расширений отладчика для выявлять аномалии во время выполнения, сортировать ошибки и изолировать неисправные модули.

  • Проверка ошибок системы
  • Создание аварийного дампа
  • Типы проверки ошибок
  • Автоматически анализ
  • Идентификация модуля
  • Переключение контекста
  • Отказы оборудования
  • Изучение состояния системы

Отладка взаимоблокировок и зависаний

Цель этого раздела — узнать об отладке и анализе зависаний системы и проблем с производительностью. Он охватывает такие темы, как типы зависаний, ожидаемые блокировки, доступные в режиме ядра (мьютексы, быстрые мьютексы, ERESOURCES, push-блокировки), спин-блокировки (эксклюзивные спин-блокировки, средство чтения и записи), причины взаимоблокировок, обнаружение взаимоблокировок, анализ зависимостей. , отладка заблокированных переходов между состояниями питания, выявление остановок на пути к хранилищу, отслеживание ожидающих запросов ввода-вывода, выявление чрезмерного потребления системных ресурсов и поиск виновных.

  • Причины зависаний
  • Классические взаимоблокировки
  • Тупиковые ситуации со спин-блокировками
  • Тупиковые ситуации анализ
  • сбой состояния питания драйвера
  • задержки запросов ввода/вывода
  • исчерпание ресурсов

Методы расширенного анализа

Цель этого раздела — изучить методы глубокого анализа, которые можно использовать для устранения проблем, связанных с конкретными ошибками в модулях ядра. В нем рассматриваются такие темы, как распознавание шаблонов стека, определение рабочего процесса отладки, отладка недопустимого доступа к памяти при различных IRQL, распространенные причины повреждения пула, выявление шаблонов повреждения, отладка двойных ошибок, отладка взаимодействия нескольких драйверов, поиск артефактов руткитов режима ядра.

  • Стратегии отладки
  • Шаблоны стека
  • Недействительный доступ к памяти
  • Повреждение пула
  • Повреждение структуры
  • Повреждение и переполнение стека
  • Rootkit IoCs

Инструменты отладки

Цель этого раздела — узнать об инструментах отладки в реальном времени, которые можно использовать для сбора информации, которая может помочь при отладке сбоев и зависаний. В нем рассматриваются такие темы, как использование средства проверки драйверов для включения проверки драйверов во время выполнения, анализ проверок ошибок средства проверки драйверов, отладка проблем, вызванных неправильной очисткой ресурсов, добавление настраиваемых инструментов к драйверам, сбор оперативной сортировки и полные дампы памяти..

  • Средство проверки драйверов
  • Специальное отслеживание пула и пула
  • Отслеживание выгруженного модуля
  • Захват стека времени выполнения
  • Gflags
  • Отслеживание ссылок на объекты
  • LiveKD и KDbgCtrl
Оцените статью
techsly.ru
Добавить комментарий