- Отладчик ядра
- Содержание
- Применение
- Основные принципы функционирования
- Наиболее известные представители данного класса ПО
- Проблемы при применении
- Отладчик ядра
- Содержание
- Применение
- Основные принципы функционирования
- Наиболее известные представители данного класса ПО
- Проблемы при применении
- Отладчик Windows (WinDbg) Windows Debugger (WinDbg)
- MinnowBoard Max (МИКРОТЕСТОВ) MinnowBoard Max (MBM)
- Настройка сетевого подключения Setup network connection
- Raspberry Pi 2 или 3 (RPi2 или RPi3) Raspberry Pi 2 or 3 (RPi2 or RPi3)
- Настройка последовательного подключения Setup serial connection
- Драгонбоард (DB) DragonBoard (DB)
- Настройка USB-подключения Setup USB connection
- Настройка последовательного подключения Setup serial connection
Отладчик ядра
Отладчик ядра — программное обеспечение, работающее на уровне ядра операционной системы и позволяющее отлаживать ядро и его компоненты.
Содержание
Применение
Отладчики ядра находят множество применений. Вот некоторые из них:
- Отладка драйверов. Особенно это касается драйверов режима ядра
- Отладка ядра операционной системы. Под этим процессом понимается поиск ошибок в функционировании ядра, модификация кода ядра. В случае закрытых систем как например Windows возникает новая задача: документирование структур данных и функций ядра.
- Устранение и предотвращение BSOD. Отладчик позволяет увидеть ассемблерный код проблемной программы, например драйвера, и при наличии соответствующих знаний внести в него коррективы для исправления ошибок.
- Отладка вредоносного программного кода. Такого рода программы довольно часто активно воздействуют на ядро операционной системы, изменяют поведение системных функций. Чтобы понять логику таких программ требуется контролировать в том числе и поведение ядра. Это объясняется тем, что отладчик пользовательского режима опирается лишь на те API которые предлагает сама операционная система. Сами же эти API являются посредниками по отношению к ядру и в случае если вредоносной программе или любой другой удастся взять под контроль поведение соответствующих функций ядра, то отладчик окажется под контролем такой программы.
- Поиск уязвимостей программного обеспечения и написание эксплойтов. Эксплойты опираются на ошибки программы в ходе обработки входных данных что проявляется лишь во время её работы. Таким образом перед исследователем становится две проблемы:
- Найти то место, которое содержит уязвимость
- Написать код, который сможет использовать найденную уязвимость.
Так как очень часто программное обеспечение не поставляется с исходными текстами, а лишь в бинарном виде и сами уязвимости имеют машинно-зависимый характер, то эти две проблемы требует специальных инструментов. При статическом исследовании программы такими инструментами как дизассемблер многие детали поведения программы остаются не узнанными, например те локации памяти куда идет доступ со стороны программы, более трудно установить пути исполнения кода программы. Отладчик позволяет контролировать программу во время выполнения и изучать те изменения, которые в ней происходят на любом этапе выполнения. Возможности отладчика по отображению состояния стека программы, регистров процессора позволяют узнать различную информацию о реакции программы на те или иные события, логику выполнения кода. Это позволяет решить как первую, так и вторую задачу, указанную выше. Примером того как это делается может служить 3 глава из книги Хакинг: искусство эксплойта [1]
Основные принципы функционирования
Для нормального функционирования отладчика уровня ядра требуется внесение изменений в ядро операционной системы. Довольно часто это решается при помощи внедрения в ядро дополнительных модулей. Фактически отладчик уровня ядра перехватывает глобально системные функции, которые отвечают за:
- Доступ к памяти
- Создание/завершение процессов
Так же отладчик ядра контролирует обращение к различным таблицам ядра. Ещё один важный момент это управление состоянием процессора, так как процессоры поддерживают пошаговую трассировку и точки останова на аппаратном уровне.
Наиболее известные представители данного класса ПО
- softICE. Проприетарный отладчик разработанный фирмой Numega и распространяемый с продуктом DriverStudio. Были сделаны неофициальные сборки softICE различными хакерскими группами. softICE обеспечивал отладку кода на различных версиях Windows и был благодаря своим широким возможностям неофициальным стандартом в кругах, связанных с обратной инженерией ПО. Однако впоследствии оказался заброшен. Сейчас он уже используется все меньше и меньше, так как не совместим с Windows Vista и 7[2] В то же время softICE стал во многом фундаментом идеологии использования таких инструментов. Работает только на Windows платформе
- WinDbg, KD, LiveKD. WinDbg официальный бесплатный отладчик c закрытыми исходными текстами, входящий в состав Debugging Tools for Windows от Microsoft. Он ориентирован на GUI интерфейс. Наборы символов для него позволяют исследовать ядро Windows. KD ещё один отладчик от Microsoft, который предназначен для исследования ядра Windows. LiveKD это бесплатный отладчик ядра от Sysinternals, который позволяет отлаживать систему без использования второго компьютера, что требуют два предыдущих отладчика. Более подробно это описано в книге Марка Руссиновича и Дэвида Соломона Внутреннее устройство Windows. [3]
- Syser. Наследник softICE, разработанный китайскими программистами. Поддерживает интерфейс в стиле SoftICE. Совместим с новыми операционными системами Windows, поддерживает многопроцессорные системы. Платный продукт с закрытым исходным текстом.
- KDB. Отладчик уровня ядра для *nix от фирмы SGI. Активируется при помощи наложения патча на ядро [4] . OpenSource проект.
- Linice. Ещё один OpenSource отладчик ядра для *nix. Существуют некоторые проблемы совместимости с новыми ядрами Linux
Проблемы при применении
Очень важно что отладчик должен быть совместим с ядром операционной системы, где используется, так как отладчик модифицирует основные структуры ядра, которые имеют свойство меняться от версии к версии. Применение некорректной версии отладчика может привести к непредсказуемому поведению системы.
Иной довольно серьёзной проблемой является конфликт между драйверами уровня ядра других приложений и отладчика. Примером может служить невозможность работы программы Daemon Tools при активном отладчике ядра. Некоторые программы отказываются функционировать, если обнаружат наличие отладчика в системе или попытки их отладки
Отладчик ядра
Отладчик ядра — программное обеспечение, работающее на уровне ядра операционной системы и позволяющее отлаживать ядро и его компоненты.
Содержание
Применение
Отладчики ядра находят множество применений. Вот некоторые из них:
- Отладка драйверов. Особенно это касается драйверов режима ядра
- Отладка ядра операционной системы. Под этим процессом понимается поиск ошибок в функционировании ядра, модификация кода ядра. В случае закрытых систем как например Windows возникает новая задача: документирование структур данных и функций ядра.
- Устранение и предотвращение BSOD. Отладчик позволяет увидеть ассемблерный код проблемной программы, например драйвера, и при наличии соответствующих знаний внести в него коррективы для исправления ошибок.
- Отладка вредоносного программного кода. Такого рода программы довольно часто активно воздействуют на ядро операционной системы, изменяют поведение системных функций. Чтобы понять логику таких программ требуется контролировать в том числе и поведение ядра. Это объясняется тем, что отладчик пользовательского режима опирается лишь на те API которые предлагает сама операционная система. Сами же эти API являются посредниками по отношению к ядру и в случае если вредоносной программе или любой другой удастся взять под контроль поведение соответствующих функций ядра, то отладчик окажется под контролем такой программы.
- Поиск уязвимостей программного обеспечения и написание эксплойтов. Эксплойты опираются на ошибки программы в ходе обработки входных данных что проявляется лишь во время её работы. Таким образом перед исследователем становятся две проблемы:
- Найти то место, которое содержит уязвимость
- Написать код, который сможет использовать найденную уязвимость.
Так как очень часто программное обеспечение не поставляется с исходными текстами, а лишь в бинарном виде и сами уязвимости имеют машинно-зависимый характер, то эти две проблемы требует специальных инструментов. При статическом исследовании программы такими инструментами как дизассемблер многие детали поведения программы остаются не узнанными, например те локации памяти куда идет доступ со стороны программы, более трудно установить пути исполнения кода программы. Отладчик позволяет контролировать программу во время выполнения и изучать те изменения, которые в ней происходят на любом этапе выполнения. Возможности отладчика по отображению состояния стека программы, регистров процессора позволяют узнать различную информацию о реакции программы на те или иные события, логику выполнения кода. Это позволяет решить как первую, так и вторую задачу, указанную выше. Примером того как это делается может служить 3 глава из книги Хакинг: искусство эксплойта [1]
Основные принципы функционирования
Для нормального функционирования отладчика уровня ядра требуется внесение изменений в ядро операционной системы. Довольно часто это решается при помощи внедрения в ядро дополнительных модулей. Фактически отладчик уровня ядра перехватывает глобально системные функции, которые отвечают за:
- Доступ к памяти
- Создание/завершение процессов
Так же отладчик ядра контролирует обращение к различным таблицам ядра. Ещё один важный момент это управление состоянием процессора, так как процессоры поддерживают пошаговую трассировку и точки останова на аппаратном уровне.
Наиболее известные представители данного класса ПО
- softICE. Проприетарный отладчик разработанный фирмой Numega и распространяемый с продуктом DriverStudio. Были сделаны неофициальные сборки softICE различными хакерскими группами. softICE обеспечивал отладку кода на различных версиях Windows и был благодаря своим широким возможностям неофициальным стандартом в кругах, связанных с обратной инженерией ПО. Однако впоследствии оказался заброшен. Сейчас он уже используется все меньше и меньше, так как не совместим с Windows Vista и 7[2] В то же время softICE стал во многом фундаментом идеологии использования таких инструментов. Работает только на Windows платформе
- WinDbg, KD, LiveKD. WinDbg официальный бесплатный отладчик c закрытыми исходными текстами, входящий в состав Debugging Tools for Windows от Microsoft. Он ориентирован на GUI интерфейс. Наборы символов для него позволяют исследовать ядро Windows. KD ещё один отладчик от Microsoft, который предназначен для исследования ядра Windows. LiveKD это бесплатный отладчик ядра от Sysinternals, который позволяет отлаживать систему без использования второго компьютера, что требуют два предыдущих отладчика. Более подробно это описано в книге Марка Руссиновича и Дэвида Соломона Внутреннее устройство Windows. [3]
- Syser. Наследник softICE, разработанный китайскими программистами. Поддерживает интерфейс в стиле SoftICE. Совместим с новыми операционными системами Windows, поддерживает многопроцессорные системы. Платный продукт с закрытым исходным текстом.
- KDB. Отладчик уровня ядра для *nix от фирмы SGI. Активируется при помощи наложения патча на ядро [4] . OpenSource проект.
- Linice. Ещё один OpenSource отладчик ядра для *nix. Существуют некоторые проблемы совместимости с новыми ядрами Linux
Проблемы при применении
Очень важно что отладчик должен быть совместим с ядром операционной системы, где используется, так как отладчик модифицирует основные структуры ядра, которые имеют свойство меняться от версии к версии. Применение некорректной версии отладчика может привести к непредсказуемому поведению системы.
Иной довольно серьёзной проблемой является конфликт между драйверами уровня ядра других приложений и отладчика. Примером может служить невозможность работы программы Daemon Tools при активном отладчике ядра. Некоторые программы отказываются функционировать, если обнаружат наличие отладчика в системе или попытки их отладки
Отладчик Windows (WinDbg) Windows Debugger (WinDbg)
Отладка устройства Windows 10 IoT базовая с помощью мощного отладчика Windows, WinDbg. Debug your Windows 10 IoT Core device using the powerful Windows debugger, WinDbg.
В следующих разделах описывается, как успешно подключиться с WinDbg к устройству Windows 10 IoT базовая для отладки. The following sections describe how to successfully connect with WinDbg to a Windows 10 IoT Core device for debugging purposes. Сюда входит описание необходимых параметров программного обеспечения на устройстве, а также физические подключения оборудования. This includes a description of the necessary software settings on the device as well as the physical hardware connections.
WinDbg — очень мощный отладчик, с которым знакомы большинство разработчиков Windows. WinDbg is a very powerful debugger that most Windows developers are familiar with. Однако если вы только приступите к работе и хотите узнать больше о WinDbg, перейдите по следующим ссылкам: However, if you are just getting started and would like to learn more about WinDbg, please visit the following links:
MinnowBoard Max (МИКРОТЕСТОВ) MinnowBoard Max (MBM)
Вы можете подключить WinDbg к устройству MinnowBoard Max с помощью сетевого подключения. You can connect WinDbg to the MinnowBoard Max device using a network connection.
Настройка сетевого подключения Setup network connection
Чтобы включить отладку ядра с помощью WinDbg по сети, убедитесь, что: In order to enable kernel debugging with WinDbg over a network, ensure that:
Кабель Ethernet подключен к сети MinnowBoard Max Device. An Ethernet cable is connected to MinnowBoard Max device to your network
MinnowBoard Max Device имеет допустимый IP-адрес в вашей сети. The MinnowBoard Max device has a valid IP address in your network
Активное подключение к устройству MinnowBoard Max с помощью PowerShell An active connection to the MinnowBoard Max device via PowerShell
Используя активное подключение PowerShell, выполните следующие команды в параметре MinnowBoard Max, чтобы включить отладку по сети. Using the active PowerShell connection, execute the following commands on the MinnowBoard Max to enable debugging over the network.
bcdedit -dbgsettings net hostip: port:
Эта команда включает отладку по сети. This command enables debugging over the network. Кроме того, он указывает IP-адрес компьютера, на котором будет выполняться WinDbg (DEV_PC_IP_ADDRESS), номер сетевого порта, используемого для подключения (PORT_NUM), и уникальный ключ, который будет использоваться для различения нескольких подключений (ключ). Additionally, it specifies the IP address of the PC where WinDbg will be running (DEV_PC_IP_ADDRESS), the network port number to use for the connection (PORT_NUM), and a unique key to be used to differentiate multiple connections (KEY)
Для PORT_NUM и ключа можно использовать следующие значения в качестве примеров: 50045 и 1.2.3.4 соответственно, хотя вы можете изменить их по своему усмотрению. For PORT_NUM and KEY, you can use the following values as examples: 50045 and 1.2.3.4 respectively, although you are free to change them as you see fit
bcdedit -debug on
- Эта команда включает отладку на устройстве This command turns on debugging on the device
На компьютере разработчика запустите WinDbg с PORT_NUM и КЛЮЧЕВЫМи значениями, приведенными в предыдущих шагах, как показано ниже. «c:\Program Files (x86)\Debugging Tools for Windows (x86)\windbg.exe» -k net:port=
,key= On the developer PC, start WinDbg with the PORT_NUM and the KEY values provided in the previous steps as follows: «c:\Program Files (x86)\Debugging Tools for Windows (x86)\windbg.exe» -k net:port=
Если вы установили любой из установленных комплектов Windows, вы можете найти WinDbg в разделе C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\WinDbg.exe If you have any of the Windows kits installed, you may find WinDbg under C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\WinDbg.exe
- Перезагрузка устройства Иоткоре для повторного подключения к отладчику Reboot the IoTCore device to reconnect to the debugger
Raspberry Pi 2 или 3 (RPi2 или RPi3) Raspberry Pi 2 or 3 (RPi2 or RPi3)
Вы можете подключить WinDbg к Raspberry Pi 2 или 3 с помощью последовательного подключения. You can connect WinDbg to the Raspberry Pi 2 or 3 using a serial connection.
Настройка последовательного подключения Setup serial connection
Чтобы включить отладку ядра с помощью WinDbg через последовательное подключение, убедитесь, что: In order to enable kernel debugging with WinDbg over a serial connection, ensure that:
У вас есть отладочный кабель, такой как последовательный кабель от USB до TTL от Adafruit или фтди. You have a debug cable such as the USB-to-TTL Serial Cable from Adafruit or FTDI.
Кабель Ethernet или активный WiFi, соединяющий устройство Raspberry Pi 2 или 3 с вашей сетью (для IP-подключений, таких как SSH или PowerShell). An Ethernet cable or active WiFi connecting your Raspberry Pi 2 or 3 device to your network (for IP connections like SSH or PowerShell)
Устройство Raspberry Pi 2 или 3 имеет допустимый IP-адрес в сети The Raspberry Pi 2 or 3 device has a valid IP address in your network
Активное подключение к устройству Raspberry Pi 2 или 3 с помощью PowerShell или SSH An active connection to the Raspberry Pi 2 or 3 device via PowerShell or SSH
UART0 будет использоваться на устройстве Raspberry Pi 2 или 3 для подключения отладки ядра. UART0 will be used on the Raspberry Pi 2 or 3 device for the kernel debugging connection. Ниже показаны сопоставления ПИН-кода для Raspberry Pi 2 или 3, а также последовательных кабелей: The following shows the pin mappings for the Raspberry Pi 2 or 3 as well as the serial cables:
Основная идея для создания правильных последовательных подключений заключается в том, что хотя одно устройство использует его для передачи данных, другое устройство использует RX для получения данных. The basic idea for making the correct serial connections is to remember that while one device uses its TX to transmit data, the other device uses its RX to receive the data. Ниже перечислены рекомендуемые подключения. Recommended connections are listed below:
Соединение ЕФИЕСП больше не создается. The EFIESP junction is no longer created. Его необходимо подключить самостоятельно. для получения идентификатора GUID можно использовать команду mountvol. You’ll have to mount it yourself,you can use mountvol command to get the GUID. mkdir C:\EFIESP mountvol C:\EFIESP \?\Volume
Используя активное подключение PowerShell, выполните следующие команды на устройстве Raspberry Pi 2 или 3, чтобы включить отладку по последовательному подключению. Using the active PowerShell connection, execute the following commands on the Raspberry Pi 2 or 3 device to enable debugging over the serial connection.
bcdedit /store c:\EFIESP\EFI\Microsoft\Boot\BCD -dbgsettings serial
- Приведенная выше команда включает последовательное подключение для отладки. The above command enables the serial connection for debugging
- Скорость передачи для Raspberry Pi 2 или 3 жестко запрограммирована на 921600, поэтому вам не нужно указывать его. The baud-rate for the Raspberry Pi 2 or 3 is hard-coded to 921600, so you don’t have to specify it
bcdedit /store c:\EFIESP\EFI\Microsoft\Boot\BCD -debug on
- Эта команда включает отладку на устройстве This command turns on debugging on the device
На компьютере разработчика получите порт номера порта COM, назначенный в системе для кабеля USB – TTL. On the developer PC, get the COM port number PORT assigned in the system for the USB-to-TTL cable. Он будет доступен в Device Manager в разделе «порты (COM & LPT)». This will be available in Device Manager under «Ports (COM & LPT)».
«C:\Program Files (x86)\Debugging Tools for Windows (x86)\windbg.exe» -k com:port=
- Запуск WinDbg с номером порта Start WinDbg with the PORT number
Если вы установили любой из установленных комплектов Windows, вы можете найти WinDbg в разделе C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\WinDbg.exe If you have any of the Windows kits installed, you may find WinDbg under C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\WinDbg.exe
- Перезагрузка устройства Иоткоре для повторного подключения к отладчику Reboot the IoTCore device to reconnect to the debugger
Драгонбоард (DB) DragonBoard (DB)
Вы можете подключить WinDbg к Драгонбоард с помощью последовательного или USB-подключения. You can connect WinDbg to the DragonBoard using a serial or USB connection.
Используя активное подключение PowerShell или SSH к Драгонбоард, выполните следующие команды, чтобы включить отладку. Using the active PowerShell or SSH connection to your DragonBoard, execute the following commands to enable debugging.
- bcdedit /store c:\EFIESP\EFI\Microsoft\Boot\BCD /debug
ON - Включает отладчик Enables the debugger
Настройка USB-подключения Setup USB connection
По умолчанию параметры отладчика USB настраиваются в тестовых образах. By default the USB debugger settings are configured in the test images.
Когда отладчик ядра USB включен, порты USB на устройстве Драгонбоард могут не работать (например, клавиатура, USB-порт Ethernet может не работать). Once USB kernel debugger is on, USB ports on the DragonBoard device might not work (i.e. keyboard, usb ethernet might not work).
Настройка последовательного подключения Setup serial connection
bcdedit /store c:\EFIESP\EFI\Microsoft\Boot\BCD /dbgsettings Serial debugport:1 baudrate:115200
- Настраивает последовательный порт Configures the serial port
Перезагрузка устройства Иоткоре для повторного подключения к отладчику Reboot the IoTCore device to reconnect to the debugger