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

Відладчики ядра знаходять безліч застосувань. Ось деякі з них:

  • Налагодження драйверів. Особливо це стосується драйверів режиму ядра
  • Налагодження ядра операційної системи. Під цим процесом розуміється пошук помилок у функціонуванні ядра, модифікація коду ядра. У разі закритих систем як наприклад 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 при активному отладчике ядра. Деякі програми відмовляються функціонувати, якщо виявлять наявність відладчика в системі або спроби їх налагодження