LINUX.ORG.RU

В ядре Linux выявлен новый вариант уязвимости Dirty COW

 , ,


2

5

В ядре Linux выявлена критическая уязвимость (CVE-2017-1000405), которая манипулирует недоработкой в прошлогодних патчах, устраняющих нашумевшую уязвимость Dirty COW (CVE-2016-5195), но, как оказалось, закрывающих не все векторы атаки. Проблема проявляется в ядрах с 2.6.38 по 4.14 и позволяет поднять свои привилегии в системе. Для проверки своих систем на наличие уязвимости доступен рабочий прототип эксплоита.

Уязвимость присутствует в подсистеме управления памятью (в функции pmd_mkdirty) в реализации режима Transparent HugePage (THP). К функции touch_pmd() можно получить доступ через вызов get_user_pages() и добиться изменения содержимого PMD (Page Medium Directory) без выполнения цикла copy-on-write (COW) при попытке записи (в нормальных условиях при изменении общих страниц происходит «write fault» и для пытающегося выполнить запись процесса создаётся копия страницы памяти, в которую и вносятся изменения). В итоге, появляется возможность изменения содержимого больших страниц памяти, находящихся в режиме только для чтения, в том числе нулевой страницы виртуального адресного пространства процессов.

В отличие от уязвимости Dirty COW отсутствует возможность изменения содержимого произвольных файлов, так как в Ext4 не поддерживается маппинг обычных файлов в память с применением THP-страниц. При этом можно добиться перезаписи THP в режиме read-only, например перезаписать содержимое памяти привилегированного процесса или файлов, привязанных к разделяемой памяти (файлы в shmem могут отражаться в память с использованием THP).

Проблема пока остаётся неисправленной в Debian, Ubuntu, openSUSE, Gentoo. Обновления уже выпущены для Fedora 26 и 27. Штатные ядра SUSE Linux Enterprise и RHEL/CentOS проблеме не подвержены. Для ядра Linux подготовлен патч. В качестве обходного пути защиты можно отключить THP или запретить маппинг нулевой страницы в режиме THP:

echo never > /sys/kernel/mm/transparent_hugepage/enabled

echo 0 > /sys/kernel/mm/transparent_hugepage/use_zero_page

Взято с OpenNet.ru.

P. S. Далеко не на всех системах по умолчанию включен transparent_hugepage

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

Ответ на: комментарий от anonymous

Нет уж, теория заговора! Это всё жидомасоны по приказу ящериков в ядро коммитят и развешивают его. Но ЛЮДИ В ТЕМЕ всё ясно понимают, ведь это звенья одной цепи.

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

Если на десктопе запускают что-то кроме вконтактика, профит будет. У меня оно ускоряет рендеринг.

Рендеринг чего? Я просто эту штуку для жирных кешей использовал, или SG листов каких.

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

кто постоянно обнаруживает уязвимости

обнаруживают те кто активно пользуются линуксом-крупные корпорации, и админы/разработчики в них

я лично разрабатывая на Vulkan и web_gl в 2017 нашел десятки уязвимостей в браузере позволяющие делать очень многое(вплоть до получения доступа ко всей видеопамяти) и сотню багов в видеодрайвере из за вулкана (но якобы вулкан бета, якобы все норм)

не говоря про тыщи багов в джаваскрипте(браузерах) что я встретил за годы работы с ним, тыщи миллионов кривостей в серверной винде когда я работал сисадмином(багов с повышением привелегий до админа там это норма)

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

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

Мне всегда было интересно сколько в мире человек понимает то что сдесь написано

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

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

я лично разрабатывая на Vulkan и web_gl в 2017 нашел десятки уязвимостей в браузере позволяющие делать очень многое(вплоть до получения доступа ко всей видеопамяти)

Так ты скоро озолотишься - продашь эксплойт на черном рынке или получив премию за pwn2own.

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

Могу лишь повторить ещё раз свой тезис: Огромное развесистое ядро в котором [...]

Ты явно не знаешь, что ядра все огромны. Если ты не в курсе, то объясню: микроядра не выполняют вообще никаких системных функций, а лишь обеспечивают IPC для огромного множества ядерных сервисов. Поверх микроядер (о, ужас!) можно запускать ООП-код на плюсах. (плюсы аж в ядре)

Потому микроядра типа ntoskernel и mach (XNU/Darwin) тоже ОГРОМНЫ.

Но что ты блэт в ядре забыл?!..

anonymous ()

не понял

echo never > /sys/kernel/mm/transparent_hugepage/enabled

echo 0 > /sys/kernel/mm/transparent_hugepage/use_zero_page

это хорошо или плохо, просто у меня в ядре именно так и не пойму надо чего поменять или так сойдет

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

Решето же. Драгонфлайбсд лучше.

Ага, Запорожец лучше Боинга, потому что Запорожцы ни разу не попадали в авиакатастрофу. И пох что летать не умеют (да и ездят тоже не особо). Главное по правильным критериям оценивать :)

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

Про какие-то вирусы-шмирусы пишут тут. А так хоть бы разок увидеть одним глазком хоть один вирус под линукс!

Ты или а) займись вплотную хостингом, а там такого говна каждый месяц приплывает, или б) чуть точнее опиши понятие «вирус», чтобы когда я тебе его показал, ты не съехал красноглазым способом типа «не судо под рутом», или «это не вирус, а червь».

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

Шелл херня. Помню под Виндой в 2000-х был вирусняк, который запускал себя процессом с рандомным именем, а когда его прибиваешь - перезапускался уже под другим. При чем оригинал встроился в какой-то из системных виндовых софтин типа explorer. У меня под никсами сейчас та же самая хрень. Не шелл, а именно бинарь, который именно разрабатывался со знанием структуры Linux. Судя по отжиранию проца, майнит битки ))

https://pp.userapi.com/c824603/v824603252/4a2e9/TYr731yXU7c.jpg

vblats ()
Последнее исправление: vblats (всего исправлений: 1)
Ответ на: комментарий от anonymous

When I first encountered Unix 6th edition after working in the IBM mainframe world, my reaction was “Amazing! the whole Unix kernel has fewer lines of code than the OS/360 serial line driver.” – Richard Miller

Еще на ядро plan9 посмотри

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

«Всё ядро намного меньше одного-только драйвера» — и если его начать обязывать всеми инфраструктурными плюшками, то придётся написать сверху ещё очень много кода. А если все плюшки попытаться заставить на всех платформах, то кода в 40 раз больше станет

(не говоря уже о том, что надо будет делать поодержку 32 и 64, и костылить EFI/BIOS/CSM)

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

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

Ричард Миллер делал порт plan 9 для первой raspberry pi и вышло 7к строк кода сверху. По поводу современных ядер - вынести просто нужно все барахло из ядра, пускай мейнтейнеры сами собирают со всеми плюшками которые нужны для целевого дистра. Но это не про linux.

anonymous ()

В CentOS аж целое новое ядро сегодня приехало. А когда аж втуда такое приезжает - «этожжж неспроста». И точно неспроста. А оперативно работают таки!

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

а) проблема конкретной конечной машины, а не сервера, который не виноват в том, что пользователи конечной машины используют решето; б) давай не будем растекаться по древу,здесь всё хорошо описали, что такое вирус — приведи пример для линуксов, буду благодарен (ищу с 2008 г.)

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

скорее наоборот, приняли, вот что на 4.9.63:

[*] The beginning of the zero huge page: 0
[*] Racing. Gonna take a while...
[*] Done 0x1000 bytes
[*] Done 0x2000 bytes
...
[*] Done 0x1ff000 bytes
[*] Done 0x200000 bytes
[*] Success!

получилось без ощутимых задержек.

metawishmaster ★★★ ()
Последнее исправление: metawishmaster (всего исправлений: 1)