Отладчик ядра

Поделись знанием:
Перейти к: навигация, поиск

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





Применение

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

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

Так как очень часто программное обеспечение не поставляется с исходными текстами, а лишь в бинарном виде и сами уязвимости имеют машинно-зависимый характер, то эти две проблемы требует специальных инструментов. При статическом исследовании программы такими инструментами как дизассемблер многие детали поведения программы остаются не узнанными, например те локации памяти куда идет доступ со стороны программы, более трудно установить пути исполнения кода программы. Отладчик позволяет контролировать программу во время выполнения и изучать те изменения, которые в ней происходят на любом этапе выполнения. Возможности отладчика по отображению состояния стека программы, регистров процессора позволяют узнать различную информацию о реакции программы на те или иные события, логику выполнения кода. Это позволяет решить как первую, так и вторую задачу, указанную выше. Примером того как это делается может служить 3 глава из книги Хакинг: искусство эксплойта[1]

Основные принципы функционирования

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

  • Доступ к памяти
  • Создание/завершение процессов

Так же отладчик ядра контролирует обращение к различным таблицам ядра. Ещё один важный момент это управление состоянием процессора, так как процессоры поддерживают пошаговую трассировку и точки останова на аппаратном уровне.

Наиболее известные представители данного класса ПО

  • softICE. Проприетарный отладчик разработанный фирмой [en.wikipedia.org/wiki/Nu-Mega_Technologies 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. [oss.sgi.com/projects/kdb/ SGI — Developer Central Open Source | KDB]

Литература

Ссылки

  • oss.sgi.com/projects/kdb/

Отрывок, характеризующий Отладчик ядра

– Enlevez moi ca, [Уберите это,] – сказал офицер, указывая на бревна и трупы; и французы, добив раненых, перебросили трупы вниз за ограду. Кто были эти люди, никто не знал. «Enlevez moi ca», – сказано только про них, и их выбросили и прибрали потом, чтобы они не воняли. Один Тьер посвятил их памяти несколько красноречивых строк: «Ces miserables avaient envahi la citadelle sacree, s'etaient empares des fusils de l'arsenal, et tiraient (ces miserables) sur les Francais. On en sabra quelques'uns et on purgea le Kremlin de leur presence. [Эти несчастные наполнили священную крепость, овладели ружьями арсенала и стреляли во французов. Некоторых из них порубили саблями, и очистили Кремль от их присутствия.]
Мюрату было доложено, что путь расчищен. Французы вошли в ворота и стали размещаться лагерем на Сенатской площади. Солдаты выкидывали стулья из окон сената на площадь и раскладывали огни.
Другие отряды проходили через Кремль и размещались по Маросейке, Лубянке, Покровке. Третьи размещались по Вздвиженке, Знаменке, Никольской, Тверской. Везде, не находя хозяев, французы размещались не как в городе на квартирах, а как в лагере, который расположен в городе.
Хотя и оборванные, голодные, измученные и уменьшенные до 1/3 части своей прежней численности, французские солдаты вступили в Москву еще в стройном порядке. Это было измученное, истощенное, но еще боевое и грозное войско. Но это было войско только до той минуты, пока солдаты этого войска не разошлись по квартирам. Как только люди полков стали расходиться по пустым и богатым домам, так навсегда уничтожалось войско и образовались не жители и не солдаты, а что то среднее, называемое мародерами. Когда, через пять недель, те же самые люди вышли из Москвы, они уже не составляли более войска. Это была толпа мародеров, из которых каждый вез или нес с собой кучу вещей, которые ему казались ценны и нужны. Цель каждого из этих людей при выходе из Москвы не состояла, как прежде, в том, чтобы завоевать, а только в том, чтобы удержать приобретенное. Подобно той обезьяне, которая, запустив руку в узкое горло кувшина и захватив горсть орехов, не разжимает кулака, чтобы не потерять схваченного, и этим губит себя, французы, при выходе из Москвы, очевидно, должны были погибнуть вследствие того, что они тащили с собой награбленное, но бросить это награбленное им было так же невозможно, как невозможно обезьяне разжать горсть с орехами. Через десять минут после вступления каждого французского полка в какой нибудь квартал Москвы, не оставалось ни одного солдата и офицера. В окнах домов видны были люди в шинелях и штиблетах, смеясь прохаживающиеся по комнатам; в погребах, в подвалах такие же люди хозяйничали с провизией; на дворах такие же люди отпирали или отбивали ворота сараев и конюшен; в кухнях раскладывали огни, с засученными руками пекли, месили и варили, пугали, смешили и ласкали женщин и детей. И этих людей везде, и по лавкам и по домам, было много; но войска уже не было.
В тот же день приказ за приказом отдавались французскими начальниками о том, чтобы запретить войскам расходиться по городу, строго запретить насилия жителей и мародерство, о том, чтобы нынче же вечером сделать общую перекличку; но, несмотря ни на какие меры. люди, прежде составлявшие войско, расплывались по богатому, обильному удобствами и запасами, пустому городу. Как голодное стадо идет в куче по голому полю, но тотчас же неудержимо разбредается, как только нападает на богатые пастбища, так же неудержимо разбредалось и войско по богатому городу.
Жителей в Москве не было, и солдаты, как вода в песок, всачивались в нее и неудержимой звездой расплывались во все стороны от Кремля, в который они вошли прежде всего. Солдаты кавалеристы, входя в оставленный со всем добром купеческий дом и находя стойла не только для своих лошадей, но и лишние, все таки шли рядом занимать другой дом, который им казался лучше. Многие занимали несколько домов, надписывая мелом, кем он занят, и спорили и даже дрались с другими командами. Не успев поместиться еще, солдаты бежали на улицу осматривать город и, по слуху о том, что все брошено, стремились туда, где можно было забрать даром ценные вещи. Начальники ходили останавливать солдат и сами вовлекались невольно в те же действия. В Каретном ряду оставались лавки с экипажами, и генералы толпились там, выбирая себе коляски и кареты. Остававшиеся жители приглашали к себе начальников, надеясь тем обеспечиться от грабежа. Богатств было пропасть, и конца им не видно было; везде, кругом того места, которое заняли французы, были еще неизведанные, незанятые места, в которых, как казалось французам, было еще больше богатств. И Москва все дальше и дальше всасывала их в себя. Точно, как вследствие того, что нальется вода на сухую землю, исчезает вода и сухая земля; точно так же вследствие того, что голодное войско вошло в обильный, пустой город, уничтожилось войско, и уничтожился обильный город; и сделалась грязь, сделались пожары и мародерство.

Французы приписывали пожар Москвы au patriotisme feroce de Rastopchine [дикому патриотизму Растопчина]; русские – изуверству французов. В сущности же, причин пожара Москвы в том смысле, чтобы отнести пожар этот на ответственность одного или несколько лиц, таких причин не было и не могло быть. Москва сгорела вследствие того, что она была поставлена в такие условия, при которых всякий деревянный город должен сгореть, независимо от того, имеются ли или не имеются в городе сто тридцать плохих пожарных труб. Москва должна была сгореть вследствие того, что из нее выехали жители, и так же неизбежно, как должна загореться куча стружек, на которую в продолжение нескольких дней будут сыпаться искры огня. Деревянный город, в котором при жителях владельцах домов и при полиции бывают летом почти каждый день пожары, не может не сгореть, когда в нем нет жителей, а живут войска, курящие трубки, раскладывающие костры на Сенатской площади из сенатских стульев и варящие себе есть два раза в день. Стоит в мирное время войскам расположиться на квартирах по деревням в известной местности, и количество пожаров в этой местности тотчас увеличивается. В какой же степени должна увеличиться вероятность пожаров в пустом деревянном городе, в котором расположится чужое войско? Le patriotisme feroce de Rastopchine и изуверство французов тут ни в чем не виноваты. Москва загорелась от трубок, от кухонь, от костров, от неряшливости неприятельских солдат, жителей – не хозяев домов. Ежели и были поджоги (что весьма сомнительно, потому что поджигать никому не было никакой причины, а, во всяком случае, хлопотливо и опасно), то поджоги нельзя принять за причину, так как без поджогов было бы то же самое.
Как ни лестно было французам обвинять зверство Растопчина и русским обвинять злодея Бонапарта или потом влагать героический факел в руки своего народа, нельзя не видеть, что такой непосредственной причины пожара не могло быть, потому что Москва должна была сгореть, как должна сгореть каждая деревня, фабрика, всякий дом, из которого выйдут хозяева и в который пустят хозяйничать и варить себе кашу чужих людей. Москва сожжена жителями, это правда; но не теми жителями, которые оставались в ней, а теми, которые выехали из нее. Москва, занятая неприятелем, не осталась цела, как Берлин, Вена и другие города, только вследствие того, что жители ее не подносили хлеба соли и ключей французам, а выехали из нее.