Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #80, АВГУСТ 2005 г.

Штурм ядра Linux

Крис Касперски ака мыщъх

Хакер, номер #080, стр. 080-106-2


Ядро будет лежать в директории /boot под именем vmlinuz. В действительности, это еще не ядро, а только символическая ссылка на него. Само же ядро лежит рядом под именем vmlinuz.x.y.z, где xyz – версия ядра. Мы покажем, как распотрошить ядра 2.4.27 и 2.6.7, входящие в мой любимый дистрибутив Knoppix 3.7. Остальные ядра исследуются аналогичным образом, только смещения, естественно, будут другими.

Кроме самого двоичного файла нам также потребуются его исходные тексты, с которыми в случае чего мы будем сверяться. Если они не входят в дистрибутив (а большинство популярных дистрибутивов занимают всего один CD и распространяются без исходных текстов), их можно скачать с www.kernel.org/pub/linux/kernel/. Нам придется принять от 25 до 45 Mb и освободить на жестком диске, по крайней мере, 150 – 300 Mb для распаковки архива. Все ядра поставляются в упакованном виде в двух форматах — стандартном gzip'е и более продвинутом bzip2, который жмет на 25% плотнее, что уменьшает размер ядра чуть ли не на 10 Mb, а для модемного соединения это очень ощутимая величина.

Что касается дизассемблера, то лучше, чем IDA Pro ты вряд ли что-то найдешь. До недавнего времени IDA Pro работала только под MS-DOS, OS/2, Windows, но теперь она перенесена и на Linux, что не может не радовать. Обладателям более древних версий можно посоветовать скопировать ядро на дискету и дизассемблировать его под Windows или воспользоваться эмулятором Wine — IDA Pro замечательно работает и под ним. Кстати говоря, на Linux перенесена только консольная версия, которая лишена всех графических вкусностей, например, диаграмм.

Если нет денег на IDA Pro, можно попробовать HT-editor – бесплатный hex-редактор и дизассемблер в одном флаконе. Он автоматически восстанавливает перекрестные ссылки, трассирует поток управления, поддерживает символьные имена и комментарии. Грубо говоря, это усеченная IDA Pro в миниатюре. Исходные тексты последней версии можно скачать с hte.sf.net. Они успешно компилируются под Linux, FreeBSD, OpenBSD и, конечно же, Win32. Но если тебе лень компилировать, можно скачать уже готовый бинарный файл, правда, далеко не первой свежести.

[внутри ядра]

Наступает волнующий миг: файл vmlinuz загружается в дизассемблер! Начинается самой интересное: IDA Pro не может опознать формат и загружает его как бинарный, а это уже нехорошо. Ядро имеет сложную структуру, состоящую из нескольких последовательно отрабатываемых один за другим загрузчиков, а основная часть ядра упакована. Как разобраться со всем этим хозяйством? Задача-минимум: распотрошить ядро на модули, определив базовый адрес загрузки и разрядность каждого из них. Кто-то может сказать, а в чем, собственно, проблема? Ведь у нас есть исходные тексты! Что ж, исходные тексты это, конечно, хорошо, но вот вопрос — какой файл какой части ядра соответствует? Так что без хорошего путеводителя здесь никуда!

Назад на стр. 080-106-1  Содержание  Вперед на стр. 080-106-3