LINUX.ORG.RU

Локальное повышение привилегий в ядрах Linux

 , ,


0

0

Если точнее, затрагивает все ядра 2.4 и 2.6, восходя аж к 2001 году. Связано с тем, что ряд функций ядра, наподобие sock_sendpage, не занимается проверкой полученного указателя на NULL, полагаясь на то, что соответствующие указатели будут корректно проинициализированы в обертках - таких как sock_no_sendpage. Однако в случае с sock_sendpage ошибка в макросе SOCKOPS_WRAP все же может привести к передаче в функцию нулевого указателя. Что и приводит к возможности внедрения кода, выполняющегося с правами ядра - достаточно положить его в нулевую страницу памяти. Патч уже доступен.

Замечу, что сама возможность подобного лихого обращения с нулевыми указателями в современной ОС вызывает некоторое недоумение - к примеру, в архитектуре Win32/64 подобные плюхи принципиально невозможны по причине блокировке любого доступа к адресам с 0x0 по 0xFFFF (0xFFF в случае Win'9x).

Взято с bugtraq.ru

>>> Подробности



Проверено: Dimez ()

Re: Локальное повышение привилегий в ядрах Linux

Скорее всего дело было крайне обычным: что-то в попыхах на коленке сделано (с расчетов на причесывание кода в будущем), да потом позабыто.

alex-w ★★★★★ ()

Re: Локальное повышение привилегий в ядрах Linux

>в архитектуре Win32/64 подобные плюхи принципиально невозможны

зато там возможны тысячи других, более веселых плюх.

nu11 ★★★★★ ()

Re: Локальное повышение привилегий в ядрах Linux

эпично

z0D5e8n7x_2 ()

Re: Локальное повышение привилегий в ядрах Linux

вроде как уже обсуждалось

Jeepston ★★★ ()

Re: Локальное повышение привилегий в ядрах Linux

Вот поэтому решение микроядра выглядит предпочтительней. Другое дело, что все разработки в этом направлении находятся в зачаточном состоянии, пожалуй только minix 3 ожил, после того как Таненбаум получил грант...

rtfm ()

Re: Локальное повышение привилегий в ядрах Linux

ох неты!!1 в какую версию войдет патч?

Osmos ★★ ()

Re: Локальное повышение привилегий в ядрах Linux

Эксплоит выдал "segmentation error" :D

A_Hariton ()

Re: Локальное повышение привилегий в ядрах Linux

У меня уже Ksplice Uptrack в Ubuntu выдал алярм по этому поводу и рантайм-патч наложился.

Nao ★★★★★ ()

Re: Локальное повышение привилегий в ядрах Linux

>сама возможность подобного лихого обращения с нулевыми указателями в современной ОС вызывает некоторое недоумение - к примеру, в архитектуре Win32/64 подобные плюхи принципиально невозможны

А чего тут удивительного? Ведь в лохматых 2000 годах код ядра писали всякие красноглазые уроды. Сколько еще открытий чудных нас ожидает в будущем?

Sun-ch ()

Re: Локальное повышение привилегий в ядрах Linux

да сайт-то ерунда... Но надо ж было куда-то выложить это... народ просил полный хистори спеца по комп безопасности и прочему... )))) Я только от него узнал, что есть такие - китакйские хакеры. И ещё разные вещи впервые услышал именно от него. Альтернативное мышление, расширение сознания, сферические кони и всё такое...

vovans ★★★★★ ()

Re: Локальное повышение привилегий в ядрах Linux

> Замечу, что сама возможность подобного лихого обращения с нулевыми указателями в современной ОС вызывает некоторое недоумение - к примеру, в архитектуре Win32/64 подобные плюхи принципиально невозможны по причине блокировке любого доступа к адресам с 0x0 по 0xFFFF (0xFFF в случае Win'9x).

эээ... исключения при обращении к диапазонам адресов происходят если MMU настроен соответствующим образом (не "замаплен"?). _обычно_ большой участок от 0x0 до непомню скольки именно так и помечается. да, это делается большинством ОС, специально для упрощения отлова распространённых ошибок. Win9x тут совершенно ни при чем.

rudchenkos ()

Re: Локальное повышение привилегий в ядрах Linux

Это даст дополнительный козырь вендотроллям... И попробуй потом убеди их в том, что это уже исправлено!

Dmitry_Sokolowsky ★★★★★ ()

Re: Локальное повышение привилегий в ядрах Linux

У меня тоже не работает -- пульсаудио нет.

Интересно, почему уже второй баг в ведре эксплуатируют с помощью pulseaudio? Может проблема и не в ведре-то вовсе? :)

anonymous4 ()
Ответ на: Re: Локальное повышение привилегий в ядрах Linux от Dmitry_Sokolowsky

Re: Локальное повышение привилегий в ядрах Linux

>Это даст дополнительный козырь вендотроллям... И попробуй потом убеди их в том, что это уже исправлено!

зачем? кого-то в чем-то убеждать... пускай тусуются на стороне. главное что мне(тебе) удобно и безопасно. а на виндотролей плевать.

k0l0b0k ★★ ()

Re: Локальное повышение привилегий в ядрах Linux

не могу ))) он вчера узнал, что он звезда, и что над ним смеются. Пообежался с час, а потом пишет - прости, мол, день такой выдался. ПРедлагаю просто не писать друг другу по ерунде и остаться друзьями ))

Ппц.. так что продолжение следует ))) когда всё забудется ))

vovans ★★★★★ ()

Re: Локальное повышение привилегий в ядрах Linux

вот именно. А кто уверен ещё, что вендотроллей надо убеждать, ссылка выше )) там и аська, и телефон его есть... можно мило поболтать, рассказать, что Линукс не дыряв...

Просто, если люди не соображают в принципе, то и убеждать их...

vovans ★★★★★ ()

Re: Локальное повышение привилегий в ядрах Linux

> Что и приводит к возможности внедрения кода, выполняющегося с правами ядра - достаточно положить его в нулевую страницу памяти.

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

const86 ★★★★★ ()

Re: Локальное повышение привилегий в ядрах Linux

> почему уже второй баг в ведре эксплуатируют с помощью pulseaudio? Может проблема и не в ведре-то вовсе?

Проблема — в особенностях построения системы, которые в обычных условиях не позволяют „за просто так“ поэксплуатировать даже критические баги. Вот и приходится создавать костыли наподобие pulseaudio, специально для подкормки оффтопикотроллей.

k336184 ()

Re: Локальное повышение привилегий в ядрах Linux

Во-первых, КАК что-то в указанную "нулевую страницу" положить? Тем более, что в "нулевой странице" должен быть как минимум кусок биоса, за неизменностью которого следит ведро, опции:
X86_CHECK_BIOS_CORRUPTION [=y]
X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK [=y]
X86_RESERVE_LOW_64K [=y]

Во-вторых... Вы хоть в собирающий скрипт заглядывали? Код собирается с опцией "-fno-stack-protector".

В-третьих...

r00t@r00t:/$ uname -a
Linux r00t 2.6.29.6madebyR00T #1 SMP Mon Jul 20 12:07:12 MSD 2009 i686 Intel(R) Core(TM)2 Duo CPU T7700 @ 2.40GHz GenuineIntel GNU/Linux
r00t@r00t:/$ cat /etc/slackware-version
Slackware 12.2.0
r00t@r00t:/$

Ведро самосборное.

под юзером:

r00t@r00t:/tmp/wunderbar_emporium$ ./exploit
[+] MAPPED ZERO PAGE!
[+] Resolved commit_creds to 0xc024d230
[+] Resolved prepare_kernel_cred to 0xc024d130
unable to find a vulnerable domain, sorry
r00t@r00t:/tmp/wunderbar_emporium$

и даже под рутом.
root@r00t:/tmp/wunderbar_emporium# ./exploit
[+] MAPPED ZERO PAGE!
[+] Resolved commit_creds to 0xc024d230
[+] Resolved prepare_kernel_cred to 0xc024d130
unable to find a vulnerable domain, sorry
root@r00t:/tmp/wunderbar_emporium#

Вывод: не стоит выеденного яйца.

su ()
Ответ на: Re: Локальное повышение привилегий в ядрах Linux от Dmitry_Sokolowsky

Re: Локальное повышение привилегий в ядрах Linux

>> Осталось только понять, как положить что-то в нулевую страницу ядру

> С патчем - к счастью, уже никак.

Патч исправляет не это, а возможность запуска кода с нулевого адреса. То есть типа положить туда что-то всё ещё можно. Прошёл по ссылкам (каюсь), но не нашёл объяснений. Суть бага проста и понятна, но чтоб с его помощью можно было сделать пакость - не вижу такого.

На x86 там лежит таблица прерываний реального режима. В принципе, ничего хорошего от передачи управления туда ожидать не стоит, но это всё же далеко до выполнения своего кода пользовательским процессом.

const86 ★★★★★ ()

Re: Локальное повышение привилегий в ядрах Linux

"... Recent kernels with mmap_min_addr support may prevent exploitation if
the sysctl vm.mmap_min_addr is set above zero. However, administrators
should be aware that LSM based mandatory access control systems, such
as SELinux, may alter this functionality.

It should also be noted that all kernels up to 2.6.30.2 are vulnerable to
published attacks against mmap_min_addr. ..."

( http://permalink.gmane.org/gmane.comp.security.full-disclosure/68951 )

$ sysctl vm.mmap_min_addr
vm.mmap_min_addr = 65536

$ uname -r
2.6.30.4

poige ()

Re: Локальное повышение привилегий в ядрах Linux

>Замечу, что сама возможность подобного лихого обращения с нулевыми указателями в современной ОС вызывает некоторое недоумение - к примеру, в архитектуре Win32/64 подобные плюхи принципиально невозможны по причине блокировке любого доступа к адресам с 0x0 по 0xFFFF (0xFFF в случае Win'9x).

АЙ КАК ТОЛСТО!

PS Обьясните несепциалисту в ядре linux действительно ли мапится нулевой адрес? И если да то как Линус коментирует такой баг "by disign"?

yurkis ()

Re: Локальное повышение привилегий в ядрах Linux

exploit.c: Assembler messages:
exploit.c:116: Error: Incorrect register `%rdx' used with `l' suffix

amd64?

farafonoff ★★ ()

Re: Локальное повышение привилегий в ядрах Linux

>Если точнее, затрагивает все ядра 2.4 и 2.6, восходя аж к 2001 году

Решето

>в архитектуре Win32/64 подобные плюхи принципиально невозможны

Перехожу на винду ;)

Buy ★★★★★ ()

Re: Локальное повышение привилегий в ядрах Linux

>./wunderbar_emporium.sh mv: невозможно выполнить stat для `pwnkrnel.c': Нет такого файла или каталога pulseaudio: no process killed [+] MAPPED ZERO PAGE! [+] Resolved security_ops to 0xc07bb160 [+] Resolved sel_read_enforce to 0xc04c7a8f unable to find a vulnerable domain, sorry [+] MAPPED ZERO PAGE! [+] Resolved security_ops to 0xc07bb160 [+] Resolved sel_read_enforce to 0xc04c7a8f unable to find a vulnerable domain, sorry mv: невозможно выполнить stat для `pwnkernel2.c': Нет такого файла или каталога rm: невозможно удалить `pwnkernel1.c': Нет такого файла или каталога

У меня не работает чего-то... :( (CentOS-5.5)

piranha ()

Re: Локальное повышение привилегий в ядрах Linux

# sysctl vm.mmap_min_addr
vm.mmap_min_addr = 65536
# uname -r
2.6.27.24-170.2.68.fc10.x86_64

# sysctl vm.mmap_min_addr
vm.mmap_min_addr = 65536
# uname -r
2.6.18-155.el5

$ sysctl vm.mmap_min_addr
vm.mmap_min_addr = 32768
$ uname -r
2.6.29.6-217.2.3.fc11.i586

Что, только редхат в курсе про защиту нулевой страницы?

Censo ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.