Карта сайта Хакер в RSS Энциклопедия Хакера PDA версия сайта Почтовые рассылки Хакера    Хакер в Twitter Хакер в ВКонтакте Приложение Хакер для Facebook Хакер на Formspring.me
Журнал Новости Форум Видео Life Xakep Live (блоги)
Bugtrack Статьи Блог Поиск English
Взлом как образ мысли Взлом как образ мысли
Интервью с человеком, который, как оказалось, является не только талантливым пентестером в одной из крупных ИБ-компании, но и хакером-ветераном, который уверенными шагами вышел на свет и прикоснулся к истории российской хак-сцены....
Полный гид по накрутке онлайн-голосований Полный гид по накрутке онлайн-голосований
Конкурсы с голосованием привлекают большое количество посетителей, а трафик, как известно, — это деньги. Особый интерес вызывают конкурсы, где за победу предлагаются лакомые призы....

Новая атака на полностью пропатченное ядро Linux

Bookmark and Share

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

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

Бас Альбертс из Immunity подчеркнул, что эксплоит работал даже тогда, когда разработчики Linux попытались защититься от него, выставив все настройки безопасности на максимальные. По мнению Альбертса, появление эксплоита открывает целый класс весьма серьезных уязвимостей.

Баги кроются сразу в нескольких частях Linux, включая ту из них, которая управляет функциями net/tun. Несмотря на то, что в коде проверка переменной tun на предмет отсутствия NULL-указателей реализована верно, при сборке ядра компилятор убирает ответственные за эту проверку строки в попытке оптимизировать код. Итог: когда переменная указывает на ноль, ядро производит попытку записи в запрещенную область памяти, что приводит к компрометации компьютера, работающего под управлением атакуемой системы.

Наличие бага, получившего название "разыменовывание пустого указателя", подтверждено для версий ядра Linux под номерами 2.6.30 и 2.6.30.1, которые в настоящее время используются лишь в пятой версии Red Hat Enterprise Linux, функционирующей в тестовом окружении. Эксплоит работает только при активированном расширении SELinux, или при наличии установленной программы для обработки аудио под названием PulseAudio.

Сценарий возможного использования эксплоита, если объединить его с эксплоитом для чего-нибудь еще, например – приложения PHP, будет по большей части связан с повышением привилегий пользователя. Сам по себе предложенный Шпенглером эксплоит нельзя запустить удаленно. Впрочем, написание полноценного "боевого" эксплоита, подходящего для 32- и 64-битных версий Linux (включая версию от Red Hat) заняло у Шпенглера около четырех часов. По словам эксперта, опубликовать пример кода он решил после того, как стало ясно, что Линус Торвальдс и другие разработчики ядра Linux не считают данный баг угрозой для безопасности.



Теги: Linux , взлом , эксплоит , ядро





СЛЕДУЮЩИЕ СТАТЬИ
Защити инсайдерские данные просто погуглив
Новая уязвимость в WPS позволяет быстрее угадывать PIN-код маршрутизатора
Массовый дефейс Siemens
Отказ от Java может быть хорошим решением
Хакеры из Anonymous объявили о взломе сети компании Stratfor
Китайские хакеры проникли в Торговую палату США
Произошла утечка данных 6 миллионов пользователей China Software Developer Network
Компания Siemens солгала по поводу серьезных ошибок в промышленных системах
Простой HTML-тег приводит к падению Windows 7
Количество дыр в защите ПО в этом году уменьшилось
ПРЕДЫДУЩИЕ СТАТЬИ
Кибератака на сайты США и Южной Кореи стоила не более 50 000 долларов
Взломан сайт правительства Армении
Индийский хакер одержал победу над ВВС Австралии
Ant-Sec объявляет о новом эксплоите для непропатченной уязвимости в Apache и о своих планах по уничтожению Hackforums.net и Milw0rm.com
Провайдер Eircom выслеживает хакеров, устроивших хаос в его сети
IT-администратор осужден за диверсию в сети работодателя
Крупнейшая кража корпоративных документов Twitter
Хакеры стали действовать как настоящие преступные корпорации
Непропатченная критическая дыра в Firefox
Корейскую DDoS-атаку запустили из Великобритании
ОБСУЖДЕНИЕ СТАТЬИ
Логин:
Пароль:
Если у вас есть форумный логин - вы можете использовать его, иначе анонимный гостевой доступ.

Для оставления комментария вы можете зарегистрироваться по упрощенной процедуре.

Обсуждение этой статьи на forum.xakep.ru
Для отправки сообщения введите код, указанный на картинке
Сообщение

UserГость
20.07.2009 18:56:49
Ответить Ссылка
линукапец
UserГость
20.07.2009 19:53:06
Ответить Ссылка
вернее линукспипец
UserГость
21.07.2009 0:02:58
Ответить Ссылка
Во первых - боян, потом:

>Наличие бага ... подтверждено для версий ядра Linux под номерами 2.6.30 и 2.6.30.1, которые в настоящее время используются лишь в пятой версии Red Hat Enterprise Linux

>Эксплоит работает только при активированном расширении SELinux, или при наличии установленной программы для обработки аудио под названием PulseAudio

В чем вообще проблема? Обычная ситуация для Линукса, есть уязвимость работающая на определеннвх версиях ядра (или патченных ядрах) при совпадении еще целой серии условий.
Тут прикольно другое, что в самом исходном коде ошибки нет, а после компиляции в бинарнике - есть :) Вот это действительно засада :)))
UserАнон
21.07.2009 0:16:16
Ответить Ссылка

quote:

ORIGINAL: Guest

Тут прикольно другое, что в самом исходном коде ошибки нет, а после компиляции в бинарнике - есть :) Вот это действительно засада :)))


Там есть разыменование указателя, а только потом его проверка. Не претендую на истину в последней инстанции, но если ты мне объяснишь, почему ты не считаешь это ошибкой, буду благодарен.
UserГость
21.07.2009 0:06:25
Ответить Ссылка
Вот те и флаги оптимизации...
UserГость
21.07.2009 0:11:02
Ответить Ссылка
Специфика этой уязвимости состоит в том, что уязвимость отсутствует в исходном коде, но присутствует в бинарном. Как такое возможно? Давайте рассмотрим это на примере. Все начинается с того, что происходит инициализация указателя sk:

struct sock *sk = tun->sk;

Этот код не вызывает ошибок даже если tun == NULL, и не является сам по себе уязвимостью.
Несколькими строками ниже происходит проверка инициализации указателя tun:

if (!tun)
return POLLERR;

Казалось бы, теперь все правильно. Злодей не пройдет.
Но! При сборке кода компилятор полагает, что указатель tun уже корректно инициализирован и, оптимизируя код, выкидывает проверку факта инициализации (приведенный выше оператор if). Таким образом, ничто не мешает злоумышленнику заставить ядро обращаться по нулевому адресу. Имеем классическую null pointer dereference vulnerability.

//Забавненько...
UserГость
21.07.2009 1:39:43
Ответить Ссылка
а так пофиксить: -fno-delete-null-pointer-checks
нэ???
UserГость
21.07.2009 1:53:17
Ответить Ссылка
особенно мне понравилось...
"и 64-битных версий Linux (включая версию от Red Hat)"...

Я в шоке... Linux 64 битной никогда не станет...
UserГость
21.07.2009 1:55:28
Ответить Ссылка
Где вы видели 64 битное Linux ядро...
Линус Торвальдс последнее ядро 32 битное...
UserГость
21.07.2009 2:41:47
Ответить Ссылка
>Там есть разыменование указателя, а только потом его проверка. Не претендую на истину в последней инстанции, но если ты мне объяснишь, почему ты не считаешь это ошибкой

Я не ахти спец, но как бы в _Ring0_ из-за этого не происходит нарушения защиты, просто MMU вызывает исключение CPU при обращении к незамапленному региону адресного пространства. Как-то так :) , поэтому проверка а принципе может быть и после.
UserГость
21.07.2009 3:20:45
Ответить Ссылка
Это обычный программерский выпендрёж. Ведь можно было сначала проверить, а потом разыменовывать, что мешало??? Вконце концов исправлением таких кривых рук мог бы и компиллер заняться при виде что разыменовывают "не проверенный" указатель, вставить проверку принудительно.
Да, и то что tun->x не приводит к исключению если tun 0, вызывает мягко говоря недоумение. Кому спасибо за это сказать? Удивительно, но если tun будет указывать чёрти-куда, то вероятно проблема возникнет. В итоге мораль для любого кодера, если указатель не указывает куда нужно, он не валиден, даже если null ибо так же указывает не туда куда нужно.
UserГость
21.07.2009 14:46:39
Ответить Ссылка
> Там есть разыменование указателя, а только потом его проверка. Не претендую на истину в последней инстанции, но если ты мне объяснишь, почему ты не считаешь это ошибкой, буду благодарен.

Формально, нету там разыменования указателя - только целочисленная арифметика. При выполнении операции
struct sock *sk = tun->sk;
в переменную sk помещается значение адреса, хранящегося в tun, + сдвиг sk в соответствующей структуре. Причем, если компилятор работает с оптимизацией, он не будет обращаться по адресу tun->sk (т.е. разыменовывать указатель) в целях ускорения работы. Такие приёмы по "разыменованию" нулевых указателей очень часто используются в ядре в целях оптимизации. Типичный пример - макрос container_of.
UserГость
22.07.2009 1:32:30
Ответить Ссылка
Есть там взятие значения по нулевому указателю. В sk помещается значение памяти, находящееся по адресу [tun + OFFSET_SK]. В принципе, оптимизатор может исключить операцию присваивания... Но в любом случае, доступ по указателю до его проверки - ошибка программиста.




Keywords: zPOSTz zHACKz, zNEWSz, zINTERNETz, zYANDEXz z48890z
Для Авторов: edit Lock delete Lock



    Rambler's Top100