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

Захват нулевого кольца

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

Хакер, номер #079, стр. 079-104-1


Покоряем ring0 в Linux

Нулевое кольцо дает полную власть над процессором, позволяя делать с ним все, что угодно. На этом уровне исполняется код операционной системы, загружаемые модули ядра и прочие низкроуровневые компоненты. Считается, что Linux надежно оберегает нулевое кольцо от хакерского вторжения, но это не так. За последние годы обнаружено множество дыр, некоторые из которых остаются незалатанными до сих пор.

[Введение]

Что можно сделать с прикладного уровня? Выполнить непривилегированную команду процессора, обратиться к пользовательской ячейке памяти, дернуть системным вызовом. Запись в порты ввода/вывода, перепрограммирование BIOS, маскировка процессов и сетевых соединений возможны только с уровня ядра. Все хакеры стремятся в этот священный Грааль, но не все его находят. Много дорог ведет туда, поэтому я расскажу только о самых интересных из них.

[Относительно честные способы взлома]

С правами root'а проникнуть в ядро не проблема. Можно, например, написать свой LKM (Loadable Kernel Module – загружаемый модуль ядра) и загрузить его командой insmod. LKM-модули пишутся очень просто (это не Windows-драйвера!). Примеры готовых модулей можно найти в статье "Поиграем с туксом в прятки", там же рассказывается, как их замаскировать от взора бдительного администратора.

Другой вариант. Ядро монтирует два псевдоустройства: /dev/mem (физическая память до виртуальной трансляции) и /dev/kmem (физическая память после виртуальной трансляции). Из-под root'а мы можем манипулировать с кодом и данными ядра.

Весь вопрос в том, как этого самого root'а заполучить. Легальным образом этого нельзя сделать никак! Linux обладает целым комплексом мер безопасности (только охранников в бронежилетах и машин с мигалками не хватает), однако, в системе защиты имеется множество дыр, делающих ее похожей на дуршлаг. Вот этими дырами мы и воспользуемся.

[Дырка в голубом зубе]

Крошечный чип Bluetooth использует навороченный протокол связи, поддержка которого проходит довольно болезненно. Практически ни одному коллективу разработчиков не удалось предотвратить появление новых дыр, в которые и слон пролезет, но если не слон, то червь — точно. Не стала исключением и Linux. В апреле 2005 года появилось сообщение о дыре, а следом за этим был написан Kernel Bluetooth Local Root Exploit, работающий на ядрах 2.6.4-52, 2.6.11 и некоторых других.

Ошибка разработчиков состояла в том, что эти редиски разместили структуры сокета Голубого Зуба в пользовательской области памяти, тем самым открыв полный доступ к модификации всех полей. Одним из таких полей оказался указатель на код, вызываемый с уровня ядра. При нормальном развитии событий он указывает на библиотеку поддержки Голубого Зуба, но нам ничего не стоит перенаправить его на shell-код!

Ключевой фрагмент эксплоита, дающего права root'а из-под юзера, приведен ниже. Оригинальный исходный текст лежит на home.paf.net/qobaiashi/ong_bak.c, а здесь копия: www.securiteam.com/exploits/5KP0F0AFFO.html.

Ключевой фрагмент эксплоита, дающий root'а из-под юзера

Содержание  Вперед на стр. 079-104-2