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 ()
Ответ на: комментарий от Novell-ch

>пульсаудио не стоит на машине

Что-то как-то не верится. Исходник pwnkernel.c посмотри.

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

anonymous4
()
Ответ на: комментарий от su

>Похоже, ситуация более ординарна:
>pulseaudio должен не только присутствовать в системе, но и быть setuid root. Таким образом, "эксплойт" если и эксплуатирует "дырку" в ядре, то относительно кривоватого пульсаудио, который допускает такое обращение внутри себя.


Возможно, в чем-то вы и правы, но имхо все не так просто.

У меня на тестовой машинке этот сплойт отлично работает (в перерывах между сегфолтами), и реально дает рута. Меж тем _бинарника_ пульса на машине нет - есть только либы пульса. (Не обновленные, правда, ибо светлый образ тестовой машины долго валялся среди прочего хлама на нашем серваке.)

Прошлый сплойт действительно не запустился, не увидев бинарника пульса. А этот - работает и так.

nnz ★★★★
()
Ответ на: комментарий от Reset

$ ./wunderbar_emporium.sh
[+] Personality set to: PER_SVR4
I: caps.c: Limited capabilities successfully to CAP_SYS_NICE.
I: caps.c: Dropping root privileges.
I: caps.c: Limited capabilities successfully to CAP_SYS_NICE.
UNABLE TO MAP ZERO PAGE!

Я так понял в случае успеха сразу мапиться zero page, у меня же нет, может первые 4 строки что-то говорят об этом? Не понимаю в чем подвох...

Buy ★★★★★
()
Ответ на: комментарий от Buy

Нагуглил следующее:

Способности (capabilities) - это привилегии программ совершать какие-либо действия. Включение способности влияет на все программы без исключения. Нельзя включить способность у всех программ, а у нескольких выключить.

Параметр CAP_SYS_NICE - управляет способностью изменять приоритет чужих процессов. Рекомендуется выключить данную способность (это по рекомендации).

Первоначальная инициализация параметров способностей происходит при загрузке системы. Похоже где-то в rc- скриптах (где? в каком файле можно посмотреть конфигурацию?)... Имею:

I: caps.c: Limited capabilities successfully to CAP_SYS_NICE.
I: caps.c: Dropping root privileges.
I: caps.c: Limited capabilities successfully to CAP_SYS_NICE.
UNABLE TO MAP ZERO PAGE!

Из-за каких-то ограничений CAP_SYS_NICE и не удаеться получить root привилегии (: Dropping root privileges) и замапить zero page. Может кто занет как это в Kubuntu 9.04 настраиваеться?

Buy ★★★★★
()

URL: http://www.securityfocus.com/data/vulnerabilities/exploits/wunderbar_emporium-3.tgz

user@pc [~/bin/exploits/wunderbar_emporium-3]
$ ./wunderbar_emporium.sh 
 [+] MAPPED ZERO PAGE!
 [+] Resolved sel_read_enforce to 0xffffffff802faa7a
 [+] got ring0!
 [+] detected 2.6 style 4k stacks
MPlayer dev-SVN-r29417Can't open joystick device /dev/input/js0: No such file or directory
Can't init input joystick
mplayer: could not connect to socket
mplayer: No such file or directory
Failed to open LIRC support. You will not be able to use your remote control.

Playing /tmp/video.6TBZHW.
AVI file format detected.
[aviheader] Video stream found, -vid 0
[aviheader] Audio stream found, -aid 1
VIDEO:  [XVID]  472x240  32bpp  15.000 fps  150.6 kbps (18.4 kbyte/s)

Exiting... (End of file)
 [+] Disabled security of : nothing, what an insecure machine!
 [+] Got root!
# uname -a
Linux pc 2.6.26-2-amd64 #1 SMP Sun Jul 26 20:35:48 UTC 2009 x86_64 GNU/Linux
# cat /etc/debian_version
squeeze/sid
# 

Nuff said.

confluent_anonymous
()
Ответ на: комментарий от anonymous4

> Патч, с которым оно собирается на 64-битной системе:

Лол, патч для эксплойта!

Bircoph
()

Автор, если не знаешь ничего про венду - молчи! NtAllocateVirtualMemory возвращает нулевой указатель при определённых параметрах, так что в венде эксплуатация NULL pointer derefence тоже очень проста. доступа к адресам с 0x0 по 0xFFFF (0xFFF в случае Win'9x)- это ФИЗИЧЕСКАЯ память!

Krestov
()
Ответ на: комментарий от Buy

Эксплоит пытается замэпить 0 виртуальный адреc, а потом (через ошибку в ядре) выполнить этот код. Вообще, обычно это не работает: mem = mmap(NULL, 0x1000, PROT_READ | PROT_WRITE, MAP_FIXED | MAP_ANONYMOUS | MAP_PRIVATE, 0, 0)

Здесь (http://lwn.net/Articles/342573/) описывается тот факт, что для нужд wine (выполнения 16 битного кода -- видимо для таблицы прерываний и пр.) в ядре разрешается делать mmap на 0 адрес (см. /proc/sys/vm/mmap_min_addr). Самое интересное, что в статье утверждается, что в Ubuntu при установке wine эта возможность включается для системы в целом. Кроме того, в следствии особенностей архитектуры SELinux, по умолчанию, системы с включенным SELinux (как я понял) также разрешают пользователям делать mmap 0 адреса.

Так что работает не у всех. ;)

gloomy ★★
()
Ответ на: комментарий от gloomy

Хотя прикол с suid pulseaudio я не понял -- если мы и так root suid то зачем нам exploit? Внутри .sh там выбор -- или просто запустить ./exploit или с помощью pulseaudio -L

gloomy ★★
()
Ответ на: комментарий от gloomy

Короче, в комплексе работает у тех, у кого pulseaudio suid root и у тех, кого по какой-то причине отключена проверка mmap_min_addr.

gloomy ★★
()

5 баллов :)))
------------------------
Вот теперь я точно знаю, что этим эксплойтом много машин взломано... самими же их владельцами... А когда вирус под линукс появится вполне рабочий - наверняка все намаренно будут заражать свои кмопьютеры. Исключительно из-за скуки.
Quasar [?] (2009-08-15 11:56:03, звездная дата: 1250322963)
----------------------------
http://nicegnulinux.org.ua/news/2816/2826

Bod ★★★★
()
Ответ на: комментарий от confluent_anonymous

Нетбук с Ubutu 8.10 оказался не таким беззщитным, но тоже сломался:

$ ./wunderbar_emporium.sh 
 [+] MAPPED ZERO PAGE!
 [+] Resolved selinux_enforcing to 0xc058b3fc
 [+] Resolved selinux_enabled to 0xc058b3f8
 [+] Resolved apparmor_enabled to 0xc0471844
 [+] Resolved apparmor_complain to 0xc058cff0
 [+] Resolved apparmor_audit to 0xc058cff8
 [+] Resolved apparmor_logsyscall to 0xc058cffc
 [+] Resolved security_ops to 0xc0589ba4
 [+] Resolved default_security_ops to 0xc04705e0
 [+] Resolved sel_read_enforce to 0xc021e980
 [+] Resolved audit_enabled to 0xc054d2c4
 [+] got ring0!
 [+] detected 2.6 style 8k stacks
MPlayer 1.0rc2-4.3.2 (C) 2000-2007 MPlayer Team
CPU: Intel(R) Celeron(R) M processor          900MHz (Family: 6, Model: 13, Stepping: 8)
CPUflags:  MMX: 1 MMX2: 1 3DNow: 0 3DNow2: 0 SSE: 1 SSE2: 1
Compiled with runtime CPU detection.
mplayer: could not connect to socket
mplayer: No such file or directory
Failed to open LIRC support. You will not be able to use your remote control.

Playing /tmp/video.3ErX1I.
AVI file format detected.
[aviheader] Video stream found, -vid 0
[aviheader] Audio stream found, -aid 1
VIDEO:  [XVID]  472x240  32bpp  15.000 fps  150.6 kbps (18.4 kbyte/s)

Exiting... (End of file)
 [+] Disabled security of : LSM
 [+] Got root!
# uname -a
Linux eee 2.6.27-11-eeepc #3 SMP Sat Feb 7 14:18:54 MST 2009 i686 GNU/Linux
# 

confluent_anonymous
()
Ответ на: комментарий от gloomy

> Короче, в комплексе работает у тех, у кого pulseaudio suid root и у тех, кого по какой-то причине отключена проверка mmap_min_addr.

У меня после установки pulseaudio имел suid (kubuntu 9.04) , а как определить отключена ли проверка mmap_min_addr? Где это задаеться?
По поводу:

I: caps.c: Limited capabilities successfully to CAP_SYS_NICE.
I: caps.c: Dropping root privileges.
I: caps.c: Limited capabilities successfully to CAP_SYS_NICE.

Нашел:
Called SUID root and real-time and/or high-priority scheduling was requested in the configuration. However, we lack the necessary privileges.

Проблема может быть в том, что запрашиваеться real-time and/or high-priority scheduling, но получаеться отказ из-за ограничения параметра способности CAP_SYS_NICE.

Buy ★★★★★
()
Ответ на: комментарий от Deisler

О! Спасибо! Теперь не приходится писать su, а затем ещё пароль длинный набирать. Логиниться по рутом стало намного проще!

Azef
()
Ответ на: комментарий от gloomy

а что с помощью любой suid программы можно получить root shell ?

Reset ★★★★★
()
Ответ на: комментарий от Nao

>Чтобы этот эксплоит заработал, надо сначала этот сраный pulseaudio удачно запустить похоже...

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

Dudraug ★★★★★
()
Ответ на: комментарий от nnz

dudraug@dudraug-laptop:~/temp/wunderbar_emporium$ ls /usr/bin/pulseaudio
ls: невозможно получить доступ к /usr/bin/pulseaudio: No such file or directory


dudraug@dudraug-laptop:~/temp/wunderbar_emporium$ apt-cache policy libpulse0
libpulse0:
  Установлен: 1:0.9.14-0ubuntu20.2
  Кандидат: 1:0.9.14-0ubuntu20.2
  Таблица версий:
 *** 1:0.9.14-0ubuntu20.2 0
        500 http://archive.ubuntu.com jaunty-updates/main Packages
        500 http://archive.ubuntu.com jaunty-security/main Packages
        100 /var/lib/dpkg/status
     1:0.9.14-0ubuntu20 0
        500 http://archive.ubuntu.com jaunty/main Packages


Бинарника нет, а либы то на месте. В убунте очень проблемно пульсу совсем удалить. Эксплоит работает. 

Dudraug ★★★★★
()
Ответ на: комментарий от anonymous4

(Kubuntu 9.04, gcc version 4.3.3, kernel 2.6.28-14-generic ) Вот:

$ sysctl vm/mmap_min_addr
vm.mmap_min_addr = 65536
$

Это говорит, что минимально возможный адресс который можно замапить 65536?

Buy ★★★★★
()
Ответ на: комментарий от anonymous4

Да, по умолчанию действительно mmap_min_addr=65536 (/proc/sys/vm/mmap_min_addr), но почему она у некоторых =0...

Наверно из-за wine, много рекомендаций, чтоб обеспечить его нормальную работу мол надо прописать vm.mmap_min_addr=0 в /etc/sysctl.conf и т.д
То же самое и в "WINE@Etersoft 1.0. Руководство пользователя":

http://cgroup.drohobych.com.ua/index.php?option=com_content&task=view&...

Вот почему у одних мапиться, у других нет. Теперь подумаем, стоит ли ради фотожопа ставить vm.mmap_min_addr=0 :)))

Buy ★★★★★
()
Ответ на: комментарий от Nao

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

В ничего не путаете?
По состоянию на текущий момент Canonical игнорирует эту дыру: http://www.ubuntu.com/usn/

Что неудивительно, учитывая тот факт, что дебианщики выпустили фикс только для stable и oldstable.
<p mode="fat_trolling">Наверное, сейчас вся команда безопасности Canonical в составе двух человек сидит, хлещет виски и дружно материт дебианщиков, потому что без их помощи поменять одну строчку в сорцах и пересобрать ядро не в силах :D</p>

И я сомневаюсь, что какая-то там левая контора ksplice uptrack будет предоставлять альтернативную поддержку ядра убунты, несовместимую с вендорской.

nnz ★★★★
()
Ответ на: комментарий от confluent_anonymous

Похоже, проблема решилась добавлением следующей строчки в /etc/sysctl.conf :
vm.mmap_min_addr=65536

Попытка использования уязвимости:
user@pc [~/bin/exploits/wunderbar_emporium-3]
$ ./exploit
UNABLE TO MAP ZERO PAGE!
user@pc [~/bin/exploits/wunderbar_emporium-3]
$

А вот wine перестал запускаться.

confluent_anonymous
()
Ответ на: комментарий от Azef

>О! Спасибо! Теперь не приходится писать su, а затем ещё пароль длинный набирать. Логиниться по рутом стало намного проще!

sudo и NOPASSWD или ssh с ключиком, не? :)

по теме: 2.6.29-gentoo-r5, ни один сплоит не сработал как нужно. пульс стоит и даже запущен :)

mcdebugger ★★
()
Ответ на: комментарий от confluent_anonymous

sylvia@allure:~$ sysctl vm.mmap_min_addr
vm.mmap_min_addr = 4096


тогда можете увидеть и 4096
с wine проблем нет

Sylvia ★★★★★
()

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

Для тех, кто недоумевает:

"NULL (zero) can actually be a valid pointer address. By default, the very bottom of the virtual address space (the "zero page," along with a few pages above it) is set to disallow all access as a way of catching null-pointer bugs (like the one described above) in both user and kernel space. But it is possible, using the mmap() system call, to put real memory at the bottom of the virtual address space. There are some valid use cases for this functionality, including running legacy binaries. Even so, most contemporary systems disable page-zero mappings through the use of the mmap_min_addr sysctl knob."

Цитата отсюда, тут детально описана механика предыдущего null-pointer эксплойта: http://lwn.net/Articles/341620/ Кому интересно, что и как и почему на самом деле, рекомендую.

ikm ★★
()
Ответ на: комментарий от nnz

> И я сомневаюсь, что какая-то там левая контора ksplice uptrack будет предоставлять альтернативную поддержку ядра убунты, несовместимую с вендорской.

Она как раз довольно серьезная контора. Думаю, что автор исходного поста ничего не напутал.

ikm ★★
()
Ответ на: комментарий от ikm

>> И я сомневаюсь, что какая-то там левая контора ksplice uptrack будет предоставлять альтернативную поддержку ядра убунты, несовместимую с вендорской.

>Она как раз довольно серьезная контора. Думаю, что автор исходного поста ничего не напутал.


Т.е. помимо Ubuntu от Canonical есть одноименный, но несовместимый дистрибутив Ubuntu от Ksplice Uptrack?

nnz ★★★★
()
Ответ на: комментарий от nnz

> Т.е. помимо Ubuntu от Canonical есть одноименный, но несовместимый дистрибутив Ubuntu от Ksplice Uptrack?

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

ikm ★★
()
Ответ на: комментарий от confluent_anonymous

>А вот wine перестал запускаться.

В "WINE@Etersoft Руководство пользователя", да и на форумах многих, советуют поставить mmap_min_addr=0, чтоб избежать ошибок при работе с wine. Возможно в некоторых дистрибах так по умолчанию сразу делают, чтоб народ не заморачивался с этим. Но вот проявилась и обратная сторона...

А mmap_min_addr=65536 так просто у меня в Kubuntu 9.04 по умолчанию (наверно во всех *buntu).

> 4096
> поставьте

Вот, значит для wine не обязательно 0.

Buy ★★★★★
()

Давайте все вместе Линуса Тордвальса попросим чтобы он патч от http://grsecurity.net/ в ядро наконец включил, там кроме всего прочего есть защита от "Protection against exploitable null-pointer dereference bugs in the kernel".. А то в мастдае ветки NT есть, в OpenBSD есть, а в ванильном Линуксе до сих пор нету....

GNUFun
()
Ответ на: комментарий от ikm

>> Т.е. помимо Ubuntu от Canonical есть одноименный, но несовместимый дистрибутив Ubuntu от Ksplice Uptrack?

>Нет, есть поддержка латанья ядер Ubuntu на лету, осуществляемая компанией Ksplice. Каждую новую уязвимость они рассматривают индивидуально (например, когда требуется менять структуры данных в памяти, они дописывают код, который осуществит эти действия на лету), поэтому небольшое расхождение с текущим патч-состоянием апстрим-ядра вполне возможно.


Фактически вы подтвердили мои слова. ksplice uptrack предоставляет альтернативный дистрибутив, несовместимый с оригинальной ubuntu от canonical.

Про рантайм-патчи я в курсе. А вот как там обстоит дело насчет патчей на сохраненные бинарники? Т.е. если юзеру пропатчат ядро "на лету", а он потом ребутнется - изменения останутся? Или пропадут?

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

nnz ★★★★
()
Ответ на: комментарий от gloomy

> Хотя прикол с suid pulseaudio я не понял -- если мы и так
> root suid то зачем нам exploit?
Как я понимаю, этот эксплойт демонстрирует обход selinux и apparmor.
Они бы не дали pulseaudio запустить шелл. Если они
не стоят, то этот эксплойт и правда нафиг не нужен.
И все, у кого он тут заработал, на самом деле занимались
ерундой. :)
Там же есть другой, который и без pulseaudio работает:
http://www.securityfocus.com/data/vulnerabilities/exploits/36038-4.tgz
Но он только для ia32, рассчитан на 8К kernel stack
(а сейчас в моде 4К), и тд. Так что его мало кто тут
запустит.
Одним словом, шоу не удалось у парней. :)
Эксплойты надо писать лучше, и документировать, чтобы
не приходилось пол часа думать, что они вообще делают. :)

anonmyous ★★
()
Ответ на: комментарий от rudchenkos

> большой участок от 0x0 до непомню скольки именно так и помечается.
> да, это делается большинством ОС, специально для упрощения отлова
> распространённых ошибок. Win9x тут совершенно ни при чем.
Имеется ввиду, что ОС не даст проге из юзерспейса
эти адреса замапить. Разные ОС накладывают разные
ограничения, и вин9х тут тоже "при чём". В линуксе
новом это в /proc/sys/vm/mmap_min_addr задаётся.

anonmyous ★★
()
Ответ на: комментарий от anonymous4

> Интересно, почему уже второй баг в ведре эксплуатируют с помощью
> pulseaudio? Может проблема и не в ведре-то вовсе? :)
По тому, что пульсаудио выполняется от рута, и ему можно
подсунуть любой код ввиде плагина. И в нём был баг: он
забывал сбросить привилегии рута при выполнении кода
плагинов...
http://www.opennet.ru/base/linux/1247762323_2643.txt.html
Ещё вопросы есть? :)
Эксплойты, которые его используют, обычно хвастаются
уже не получением рута на "какой-то" машине, а, например,
пробиванием selinux. Тут одних багов pulseaudio уже не
достаточно.

anonmyous ★★
()
Ответ на: комментарий от yurkis

> PS Обьясните несепциалисту в ядре linux действительно ли мапится
> нулевой адрес?
Да, прога может замапить нулевой адрес, если это не запрещено
через /proc/sys/vm/mmap_min_addr.

> И если да то как Линус коментирует такой баг "by disign"?
Это - нужная фича. Для vm86, к примеру.

anonmyous ★★
()
Ответ на: комментарий от anonmyous

>По тому, что пульсаудио выполняется от рута, и ему можно подсунуть любой код ввиде плагина. И в нём был баг: он забывал сбросить привилегии рута при выполнении кода плагинов

Решето!

anonymous4
()
Ответ на: комментарий от Buy

>>UNABLE TO MAP ZERO PAGE
> Вопрос к гуру. Что по человечески это означает?
Это означает, что надо сделать:
su -c "echo 0 > /proc/sys/vm/mmap_min_addr"
Но опять же, вы пытаетесь запустить эксплоит selinux & apparmor,
которые у вас всё равно не используются. :)
Запускайте лучше этот:
http://www.securityfocus.com/data/vulnerabilities/exploits/36038-4.tgz

anonmyous ★★
()
Ответ на: комментарий от const86

> На x86 там лежит таблица прерываний реального режима.
Так, учим матчасть, вкуриваем про физические адреса,
про линейные, и про виртуальное адресное пространство.

anonmyous ★★
()
Ответ на: комментарий от anonmyous

Не, я ленивый. Ты лучше скажи, оно вообще работоспособно на x86-64? Или нужно совершенно другой эксплоит писать? Кстати, NX-бит что-то решает?

anonymous4
()
Ответ на: комментарий от su

> Во-первых, КАК что-то в указанную "нулевую страницу" положить?
Например так:
mmap(0, getpagesize(), PROT_READ | PROT_WRITE | PROT_EXEC,
MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0);

> Тем более, что в "нулевой странице" должен быть как минимум
> кусок биоса, за неизменностью которого следит ведро, опции:
Ай-ай-ай, какая безграмотность. :) Про физические vs линейные
адреса что-нибудь слышали? Для чего нужен /dev/mem - знаете?
Пока не узнаете, воздержитесь от подобных заявлений. :)
Но даже и когда узнаете, всё равно вам надо ещё будет осознать,
что биосы лежат по физическим адресам выше 0xa0000, а вовсе
не там, где вы подумали. const86 был ближе к правильному
ответу, когда про таблицу векторов говорил. :)

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

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

anonmyous ★★
()
Ответ на: комментарий от anonymous4

> Не, я ленивый.
Я не тебе отвечал, братьев анонимусов я вообще уважаю. :)

> Ты лучше скажи, оно вообще работоспособно на x86-64?
В исходном виде - нет. Тут кто-то патч постил - ты пробовал?

> Или нужно совершенно другой эксплоит писать?
Я не автор этого эксплойта, могу попробовать поэксперементировать
конечно... Там завязка на 8К стек ядра, к примеру, тоже
есть...

> Кстати, NX-бит что-то решает?
Не должен, так как они там делают mprotect() с флагом PROT_EXEC.
То есть разрешают исполнение. Без NX оно просто всегда и так
разрешено, когда разрешено чтение страницы.

anonmyous ★★
()
Ответ на: комментарий от anonmyous

>Тут кто-то патч постил - ты пробовал?

Этот? http://www.linux.org.ru/view-message.jsp?msgid=3958582&page=1#comment-396... Пробовал, это я его и постил :)

Кстати, аналогичный подход так лихо не работает с эксплоитом, на который ты ссылку дал (который только exploit.c в архиве).

anonymous4
()
Ответ на: комментарий от anonymous4

> Кстати, аналогичный подход так лихо не работает с эксплоитом,
> на который ты ссылку дал (который только exploit.c в архиве).
Этот можно с -m32 собрать.
Но на самом деле ничего, кроме паники ядра, мне это не дало. :)
Впрочем, и такая реакция вполне уже говорит об уязвимости.

anonmyous ★★
()
Ответ на: комментарий от anonmyous

>> На x86 там лежит таблица прерываний реального режима.

>Так, учим матчасть, вкуриваем про физические адреса, про линейные, и про виртуальное адресное пространство.

Про таблицу прерываний я погорячился, но на суть моего вопроса это не влияет, так что свою язвительность оставь при себе.

const86 ★★★★★
()
Ответ на: комментарий от anonmyous

>> Во-первых, КАК что-то в указанную "нулевую страницу" положить?

> Например так:

> mmap(0, getpagesize(), PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0);

Так у нас будет нулевая страница в памяти процесса, а не в ядре. Почему вдруг ядерная функция при обращении по нулевому адресу видит (исполняет) то, что какой-то процесс в своей памяти понаписал?

const86 ★★★★★
()
Ответ на: комментарий от const86

> Так у нас будет нулевая страница в памяти процесса, а не в ядре.
И там, и там.

> Почему вдруг ядерная функция при обращении по нулевому адресу
> видит (исполняет) то, что какой-то процесс в своей памяти понаписал?
Адресное пространство одно. Ядро располагается (на архитектуре i386)
выше 3 гигабайта адресного пр-ва, а юзерспейс - ниже. Но
юзерспейс не видит код ядра - оно для него защищено от чтения
и записи. Ядро же его видит и может (в случае ошибки) исполнить.
Так в линуксе сделано, иначе бы системные вызовы работали
гораздо медленнее. Переключений mm-контекста было бы многовато.

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