Отладчик ядра: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
м превращение в прямую ссылку, чтобы было доступно iwrm, replaced: [http://en.wikipedia.org/wiki/Nu-Mega_Technologies Numega] → Numega
 
(не показана 31 промежуточная версия 18 участников)
Строка 1: Строка 1:
Отладчик ядра--программное обеспечение, работающее на уровне ядра операционной системы и позволяющее отлаживать ядро и его компоненты.
'''Отладчик ядра''' — программное обеспечение, работающее на уровне ядра операционной системы и позволяющее отлаживать ядро и его компоненты.


== Применение ==
== Применение ==
Отладчики ядра находят множество применений. Вот некоторые из них:<br />
Отладчики ядра находят множество применений. Вот некоторые из них:
* Отладка драйверов. Особенно это касается драйверов режима ядра
* Отладка драйверов. Особенно это касается драйверов режима ядра
* Отладка [[Ядро операционной системы|ядра операционной системы]]. Под этим процессом понимается поиск ошибок в функционировании ядра, модификация кода ядра. В случае закрытых систем как например Windows возникает новая задача: документирование структур данных и функций ядра.
* Отладка [[Ядро операционной системы|ядра операционной системы]]. Под этим процессом понимается поиск ошибок в функционировании ядра, модификация кода ядра. В случае закрытых систем как например Windows возникает новая задача: документирование структур данных и функций ядра.
* Устранение и предотвращение [[BSOD]]. Отладчик позволяет увидеть ассемблерный код проблемной программы, например [[Драйвер|драйвера]], и при наличии соответствующих знаний внести в него коррективы для исправления ошибок.
* Устранение и предотвращение [[BSOD]]. Отладчик позволяет увидеть ассемблерный код проблемной программы, например [[драйвер]]а, и при наличии соответствующих знаний внести в него коррективы для исправления ошибок.
* Отладка вредоносного программного кода. Такого рода программы довольно часто активно воздействуют на ядро операционной системы, изменяют поведение системных функций. Чтобы понять логику таких программ требуется контролировать в том числе и поведение ядра.Это объясняется тем, что отладчик [[Архитектура Windows NT|пользовательского режима]] опирается лишь на те API которые предлагает сама операционная система. Сами же эти API являются посредниками по отношению к ядру и в случае если вредоносной программе или любой другой удастся взять под контроль поведение соответствующих функций ядра, то отладчик окажется под контролем такой программы.
* Отладка [[вредоносная программа|вредоносного программного кода]]. Такого рода программы довольно часто активно воздействуют на ядро операционной системы, изменяют поведение системных функций. Чтобы понять логику таких программ требуется контролировать в том числе и поведение ядра. Это объясняется тем, что отладчик [[Архитектура Windows NT|пользовательского режима]] опирается лишь на те API которые предлагает сама операционная система. Сами же эти API являются посредниками по отношению к ядру и в случае если вредоносной программе или любой другой удастся взять под контроль поведение соответствующих функций ядра, то отладчик окажется под контролем такой программы.
*Поиск уязвимостей программного обеспечения и написание [[Эксплойт|эксплойтов]]. Эксплойты опираются на ошибки программы в ходе обработки входных данных что проявляется лишь во время ее работы. Таким образом перед исследователем становится две проблемы:
* Поиск уязвимостей программного обеспечения и написание [[эксплойт]]ов. Эксплойты опираются на ошибки программы в ходе обработки входных данных что проявляется лишь во время её работы. Таким образом перед исследователем становятся две проблемы:
# Найти то место, которое содержит уязвимость
# Найти то место, которое содержит уязвимость
# Написать код, который сможет использовать найденную уязвимость.<br />
# Написать код, который сможет использовать найденную уязвимость.
Так как очень часто программное обеспечение не поставляется с исходными текстами, а лишь в бинарном виде и сами уязвимости имеют машинно-зависимый характер, то эти две проблемы требует специальных инструментов.При статическом исследовании программы такими инструментами как [[дизассемблер]] многие детали поведения программы остаются не узнанными, например те локации памяти куда идет доступ со стороны программы, более трудно установить пути исполнения кода программы.Отладчик позволяет контролировать программу во время выполнения и изучать те изменения, которые в ней происходят на любом этапе выполнения. Возможности отладчика по отображению состояния стека программы, регистров процессора позволяют узнать различную информацию о реакции программы на те или иные события, логику выполнения кода. Это позволяет решить как первую вторую задачу указанную выше.Примером того как это делается может служить 3 глава из книги Хакинг: искусство эксплойта<ref>стр. 135-155 Здесь важно отметить что используется пользовательского режима отладчик [[GDB]], однако сути методов это не меняет. </ref>
Так как очень часто программное обеспечение не поставляется с исходными текстами, а лишь в бинарном виде и сами уязвимости имеют машинно-зависимый характер, то эти две проблемы требует специальных инструментов. При статическом исследовании программы такими инструментами как [[дизассемблер]] многие детали поведения программы остаются не узнанными, например те локации памяти куда идет доступ со стороны программы, более трудно установить пути исполнения кода программы. Отладчик позволяет контролировать программу во время выполнения и изучать те изменения, которые в ней происходят на любом этапе выполнения. Возможности отладчика по отображению состояния стека программы, регистров процессора позволяют узнать различную информацию о реакции программы на те или иные события, логику выполнения кода. Это позволяет решить как первую, так и вторую задачу, указанную выше. Примером того как это делается может служить 3 глава из книги Хакинг: искусство эксплойта<ref>«Хакинг: искусство эксплойта», стр. 135—155 - Здесь используется отладчик пользовательского режима [[GDB]], однако сути методов это не меняет.</ref>


==Основные принципы==
== Основные принципы функционирования ==
Для нормального функционирования отладчика уровня ядра требуется внесение изменений в ядро операционной системы. Довольно часто это решается при помощи внедрения в ядро дополнительных модулей. Фактически отладчик уровня ядра перехватывает глобально системные функции, которые отвечают за:
Для нормального функционирования отладчика уровня ядра требуется внесение изменений в ядро операционной системы. Довольно часто это решается при помощи внедрения в ядро дополнительных модулей. Фактически отладчик уровня ядра [[Перехват (программирование)|перехватывает]] глобально системные функции, которые отвечают за:
*Доступ к памяти
* Доступ к памяти
*Создание/завершение процессов
* Создание/завершение процессов
Так же отладчик ядра контролирует обращение к различным таблицам ядра.Еще один важный момент это управление состоянием процессора, т.к. процессоры поддерживают пошаговую трассировку и точки останова на аппаратном уровне.
Так же отладчик ядра контролирует обращение к различным таблицам ядра. Ещё один важный момент это управление состоянием процессора, так как процессоры поддерживают пошаговую трассировку и точки останова на аппаратном уровне.


==Наиболее известные представители данного класса ПО==
== Наиболее известные представители данного класса ПО ==
*[[softICE]]. [[Проприетарное программное обеспечение|Пропиетарный]] отладчик разработанный фирмой [http://en.wikipedia.org/wiki/Nu-Mega_Technologies Numega] и распространяемый с продуктом DriverStudio. Были сделаны неофициальные сборки softICE различными хакерскими группами. softICE обеспечивал отладку кода на различных версиях Windows и был благодаря своим широким возможностям неофициальным стандартом в кругах,связанных с [[обратная инженерия|обратной инженерией ПО]]. Однако в последствии оказался заброшен. Сейчас он уже практически умер, т.к. не совместим с [[Windows Vista]] и [[Windows 7|7]]<ref>
* [[softICE]]. [[Проприетарное программное обеспечение|Проприетарный]] отладчик разработанный фирмой [[:en:Nu-Mega Technologies|Numega]] и распространяемый с продуктом DriverStudio. Были сделаны неофициальные сборки softICE различными хакерскими группами. softICE обеспечивал отладку кода на различных версиях Windows и был благодаря своим широким возможностям неофициальным стандартом в кругах, связанных с [[обратная инженерия|обратной инженерией ПО]]. Однако впоследствии оказался заброшен. Сейчас он уже используется все меньше и меньше, так как не совместим с [[Windows Vista]] и [[Windows 7|7]]<ref>
Крис Касперски, Ева Рокко Искусство дизассемблирования ISBN 978-5-9775-0082-1</ref> В то же время softICE стал во многом фундаментом идеологии использования таких инструментов.Работает только на Windows платформе
Крис Касперски, Ева Рокко «Искусство дизассемблирования» стр.9</ref> В то же время softICE стал во многом фундаментом идеологии использования таких инструментов. Работает только на Windows платформе
*WinDbg,KD,LiveKD.WinDbg официальный бесплатный отладчик c закрытыми исходными текстами, входящий в состав Debugging Tools for Windows от Microsoft. Он ориентирован на GUI интерфейс.Наборы символов для него позволяют исследовать ядро Windows.KD еще один отладчик от Microsoft, который предназначен для исследования ядра Windows. LiveKD это бесплатный отладчик ядра от [[Sysinternals]], который позволяет отлаживать систему без использования второго компьютера. Более подробно это описано в книге Марка Руссиновича и Дэвида Соломона Внутреннее устройство Windows.<ref> М. Руссинович, Д. Соломон Внутреннее устройство Microsoft Windows: Windows Server 2003, Windows XP, Windows 2000. стр. 29-31(символы отладки,описание отладчиков,пример исследования),стр. 82-83 еще один пример </ref>
* WinDbg, KD, LiveKD. WinDbg официальный бесплатный отладчик c закрытыми исходными текстами, входящий в состав Debugging Tools for Windows от Microsoft. Он ориентирован на GUI интерфейс. Наборы символов для него позволяют исследовать ядро Windows. KD ещё один отладчик от Microsoft, который предназначен для исследования ядра Windows. LiveKD это бесплатный отладчик ядра от [[Sysinternals]], который позволяет отлаживать систему без использования второго компьютера, что требуют два предыдущих отладчика. Более подробно это описано в книге Марка Руссиновича и Дэвида Соломона Внутреннее устройство Windows.<ref>М. Руссинович, Д. Соломон Внутреннее устройство Microsoft Windows: Windows Server 2003, Windows XP, Windows 2000. стр. 29-31(символы отладки, описание отладчиков, пример исследования), стр. 82-83 еще один пример</ref>
*Syser. Наследник softICE разработанный китайскими программистами. Поддерживает интерфейс в стиле SoftICE. Совместим с новыми операционными системами Windows, поддерживает многопроцессорные системы. Платный продукт с закрытым исходным текстом.
* Syser. Наследник softICE, разработанный китайскими программистами. Поддерживает интерфейс в стиле SoftICE. Совместим с новыми операционными системами Windows, поддерживает многопроцессорные системы. Платный продукт с закрытым исходным текстом.
*KDB Отладчик уровня ядра для *Nix от фирмы [[SGI]]. Активируется при помощи наложения патча на ядро<ref>http://oss.sgi.com/projects/kdb/</ref>. OpenSource проект.
* KDB. Отладчик уровня ядра для *nix от фирмы [[SGI]]. Активируется при помощи наложения патча на ядро<ref>{{Cite web |url=http://oss.sgi.com/projects/kdb/ |title=SGI — Developer Central Open Source {{!}} KDB<!-- Заголовок добавлен ботом --> |accessdate=2010-08-15 |archiveurl=https://web.archive.org/web/20101126152715/http://oss.sgi.com/projects/kdb/ |archivedate=2010-11-26 |deadlink=yes }}</ref>. OpenSource проект.
*Linice Еще один OpenSource отладчик ядра для *Nix. Существуют некоторые проблемы совместимости с новыми ядрами Linux
* Linice. Ещё один OpenSource отладчик ядра для *nix. Существуют некоторые проблемы совместимости с новыми ядрами Linux


==Проблемы при применении==
== Проблемы при применении ==
Очень важно что отладчик должен быть совместим с ядром операционной системы, где используется, т.к. отладчик модифицирует основные структуры ядра, которые имеют свойство меняться от версии к версии. Применение некорректной версии отладчика может привести к непредсказуемому поведению системы.
Очень важно что отладчик должен быть совместим с ядром операционной системы, где используется, так как отладчик модифицирует основные структуры ядра, которые имеют свойство меняться от версии к версии. Применение некорректной версии отладчика может привести к непредсказуемому поведению системы.

Иной довольно серьезной проблемой является конфликт между драйверами уровня ядра других приложений и отладчика. Примером может служить невозможность работы программы Daemon Tools при активном отладчике ядра. Некоторые программы отказываются функционировать пр обнаружении или наличия отладчика в системе, или при обнаружении факта отладки.
Иной довольно серьёзной проблемой является конфликт между драйверами уровня ядра других приложений и отладчика. Примером может служить невозможность работы программы Daemon Tools при активном отладчике ядра. Некоторые программы отказываются функционировать, если обнаружат наличие отладчика в системе или попытки их отладки
==Примечания==

<references/>
== См. также ==
==Ссылки==
* [[Отладчик]]
* [[Отладка]]
* [[Ассемблер]]

== Примечания ==
{{примечания}}

== Литература ==
* {{книга
|автор = [[Джон Эриксон]]
|часть =
|заглавие = Хакинг: Искусство эксплойта
|оригинал = [[:en:Hacking: The Art of Exploitation|Hacking: The Art of Exploitation]]
|ссылка = https://archive.org/details/isbn_5932861585
|ответственный =
|издание = 2
|место = {{СПб}}
|издательство = Символ-Плюс
|год = 2010
|том =
|страницы = [https://archive.org/details/isbn_5932861585/page/n135 135]-155
|страниц =
|серия =
|isbn = 978-5-93286-158-5
|тираж =
}}
* {{книга
|автор = М. Руссинович, Д. Соломон
|часть =
|заглавие = Внутреннее устройство Microsoft Windows: Windows Server 2003, Windows XP, Windows 2000
|оригинал =
|ссылка = https://archive.org/details/microsoftwindows2000libg_228
|ответственный =
|издание =
|место = {{М}}
|издательство = Издательство Русская редакция
|год = 2008
|том =
|страницы = [https://archive.org/details/microsoftwindows2000libg_228/page/n50 29]-31; 83-82
|страниц =
|серия =
|isbn = 978-5-469-01174-3
|тираж =
}}
* {{книга
|автор = [[Крис Касперски]], Ева Рокко
|часть =
|заглавие = Искусство дизассемблирования
|оригинал =
|ссылка =
|ответственный =
|издание =
|место = {{СПб}}
|издательство = БХВ-Петербург
|год = 2008
|том =
|страницы = 9
|страниц =
|серия =
|isbn = 978-5-9775-0082-1
|тираж =
}}

== Ссылки ==
* https://web.archive.org/web/20101126152715/http://oss.sgi.com/projects/kdb/


*Джон Эриксон Хакинг:Искусство экплоита.2-е издание-Пер. с англ.-Спб:Символ-Плюс,2010 г. ISBN 978-5-93286-158-5 стр. 135-155
*М. Руссинович, Д. Соломон Внутреннее устройство Microsoft Windows: Windows Server 2003, Windows XP, Windows 2000. Мастер-класс ISBN 978-5-469-01174-3
*http://oss.sgi.com/projects/kdb/
[[Категория:Исследование программ]]
[[Категория:Исследование программ]]
[[Категория:Информационная безопасность]]
[[Категория:Информационная безопасность]]
[[Категория:Системное программирование]]
[[Категория:Системное программирование]]
[[Категория:Системное админстрирование]]
[[Категория:Системное администрирование]]
[[en:Kernel_debugger]]

Текущая версия от 10:38, 13 сентября 2024

Отладчик ядра — программное обеспечение, работающее на уровне ядра операционной системы и позволяющее отлаживать ядро и его компоненты.

Применение

[править | править код]

Отладчики ядра находят множество применений. Вот некоторые из них:

  • Отладка драйверов. Особенно это касается драйверов режима ядра
  • Отладка ядра операционной системы. Под этим процессом понимается поиск ошибок в функционировании ядра, модификация кода ядра. В случае закрытых систем как например Windows возникает новая задача: документирование структур данных и функций ядра.
  • Устранение и предотвращение BSOD. Отладчик позволяет увидеть ассемблерный код проблемной программы, например драйвера, и при наличии соответствующих знаний внести в него коррективы для исправления ошибок.
  • Отладка вредоносного программного кода. Такого рода программы довольно часто активно воздействуют на ядро операционной системы, изменяют поведение системных функций. Чтобы понять логику таких программ требуется контролировать в том числе и поведение ядра. Это объясняется тем, что отладчик пользовательского режима опирается лишь на те API которые предлагает сама операционная система. Сами же эти API являются посредниками по отношению к ядру и в случае если вредоносной программе или любой другой удастся взять под контроль поведение соответствующих функций ядра, то отладчик окажется под контролем такой программы.
  • Поиск уязвимостей программного обеспечения и написание эксплойтов. Эксплойты опираются на ошибки программы в ходе обработки входных данных что проявляется лишь во время её работы. Таким образом перед исследователем становятся две проблемы:
  1. Найти то место, которое содержит уязвимость
  2. Написать код, который сможет использовать найденную уязвимость.

Так как очень часто программное обеспечение не поставляется с исходными текстами, а лишь в бинарном виде и сами уязвимости имеют машинно-зависимый характер, то эти две проблемы требует специальных инструментов. При статическом исследовании программы такими инструментами как дизассемблер многие детали поведения программы остаются не узнанными, например те локации памяти куда идет доступ со стороны программы, более трудно установить пути исполнения кода программы. Отладчик позволяет контролировать программу во время выполнения и изучать те изменения, которые в ней происходят на любом этапе выполнения. Возможности отладчика по отображению состояния стека программы, регистров процессора позволяют узнать различную информацию о реакции программы на те или иные события, логику выполнения кода. Это позволяет решить как первую, так и вторую задачу, указанную выше. Примером того как это делается может служить 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 при активном отладчике ядра. Некоторые программы отказываются функционировать, если обнаружат наличие отладчика в системе или попытки их отладки

Примечания

[править | править код]
  1. «Хакинг: искусство эксплойта», стр. 135—155 - Здесь используется отладчик пользовательского режима GDB, однако сути методов это не меняет.
  2. Крис Касперски, Ева Рокко «Искусство дизассемблирования» стр.9
  3. М. Руссинович, Д. Соломон Внутреннее устройство Microsoft Windows: Windows Server 2003, Windows XP, Windows 2000. стр. 29-31(символы отладки, описание отладчиков, пример исследования), стр. 82-83 еще один пример
  4. SGI — Developer Central Open Source | KDB. Дата обращения: 15 августа 2010. Архивировано из оригинала 26 ноября 2010 года.

Литература

[править | править код]
  • Джон Эриксон. Хакинг: Искусство эксплойта = Hacking: The Art of Exploitation. — 2. — СПб.: Символ-Плюс, 2010. — С. 135-155. — ISBN 978-5-93286-158-5.
  • М. Руссинович, Д. Соломон. Внутреннее устройство Microsoft Windows: Windows Server 2003, Windows XP, Windows 2000. — М.: Издательство Русская редакция, 2008. — С. 29-31; 83-82. — ISBN 978-5-469-01174-3.
  • Крис Касперски, Ева Рокко. Искусство дизассемблирования. — СПб.: БХВ-Петербург, 2008. — С. 9. — ISBN 978-5-9775-0082-1.