The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

19.06.2017 20:23  Раскрыты детали атаки Stack Сlash и 15 root-эксплоитов для разных ОС

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

Для защиты от подобных пересечений в ядре Linux и других ОС применяют технику "stack guard-page", суть которой в подстановке граничных страниц памяти, обращение к которым приводит к генерации исключения (page-fault). Защита была разработана в ответ на выявление в 2010 году уязвимости CVE-2010-2240 и основана на том, что обычно стек заполняется постепенно и при его переполнении будет осуществлён доступ к "stack guard-page".

Исследователи Qualys попытались выявить практические методы инициирования подобных столкновений и обхода защиты "stack guard-page", что им блестяще удалось - выявлено 20 уязвимостей, связанных с недоработками выделения памяти в стеке/куче ядра, libc и компонентов пространства пользователя, позволяющих обойти средства защиты от выхода за границы стека. Суть предложенного Qualys метода обхода "stack guard-page" заключается в том, что некоторые приложения позволяют заполнять стек не последовательно и поддерживают конструкции, дающие возможность пробросить указатель стека с большим смещением, что позволяет избежать попадания в "stack guard-page".

Предложенные методы атаки разделены на три базовые категории:

  • Столкновение стека с другой областью памяти: выделение памяти производится до тех пор, пока стек не достигнет другой области памяти или пока другая область памяти не достигнет стека;
  • Проброс минуя страницу защиты стека (stack guard-page): указатель стека перемещается из стека в другую область памяти, не касаясь страницы защиты стека;
  • Разбиение стека или другой области памяти: осуществляется перезапись стека содержимым другой области памяти или перезапись другой области памяти содержимым стека. В качестве другой области памяти может выступать куча, анонимный mmap(), доступный на запись/чтение сегмент ld.so или PIE (Position-Independent Executable).

Для демонстрации практических атак создано 15 рабочих прототипов эксплоитов, позволяющих повысить свои привилегии через манипуляции с различными приложениями в различных операционных системах (Debian, CenOS, Fedora, Ubuntu, OpenBSD, NetBSD, FreeBSD, Solaris). Среди опубликованных прототипов эксплоитов:

  • Локальная root-уязвимость в Exim, манипулирующая недоработкой (CVE-2017-1000369), из-за которой при обработке некоторых аргументов командной строки не выполняется корректное освобождение памяти. Воспользовавшись данной проблемой локальный атакующий может в сочетании с уязвимостью CVE-2017-1000376 в glibc организовать выполнение своего кода с правами root. Эксплоит протестирован в Debian GNU/Linux (i386);
  • Поднятие привилегий в системе через утилиту sudo. Для атаки используется сочетание уязвимостей в sudo (CVE-2017-1000367) и в Glibc (CVE-2017-1000366). Проблема в Glibc вызвана некорректной обработкой памяти, выделенной для переменных окружения в suid-программах. Работа эксплоита продемонстрирована в Debian, Ubuntu и CentOS (i386);
  • Ещё один эксплоит, позволяющий получить привилегии root через манипуляцию с утилитой sudo. Эксплоит примечателен работой в дистрибутивах с включенным SELinux;
  • Локальный root-эксплоит через манипуляцию с ld.so и большинством SUID-root программ (используются уязвимости в glibc CVE-2017-1000366 и ядре Linux CVE-2017-1000370). Работа эксплоита продемонстрирована в Debian, Fedora и CentOS (i386);
  • Локальный root-эксплоит через манипуляцию с ld.so и большинством SUID-root программ, собранных в режиме PIE (используется уязвимость в glibc CVE-2017-1000366 и другая уязвимость в ядре Linux CVE-2017-1000371). Работа эксплоита продемонстрирована в Debian, Fedora и Ubuntu (i386);
  • Локальный root-эксплоит против утилиты /bin/su (используется уязвимость в glibc CVE-2017-1000366 и уязвимость в ядре Linux CVE-2017-1000365). Работа эксплоита продемонстрирована в Debian (i386);
  • Концептуальный эксплоит для получения контроля за регистром eip через sudo на системах i386 с патчами grsecurity/PaX (CVE-2017-1000367, CVE-2017-1000366, CVE-2017-1000377);
  • Концептуальный эксплоит для получения контроля за указателем адреса возврата (rip) через манипуляции с Exim (CVE-2017-1000369) в окружении Debian (amd64);
  • Локальный root-эксплоит против ld.so и большинство SUID-root приложений (CVE-2017-1000366, CVE-2017-1000379). Работа эксплоита продемонстрирована в Debian, Ubuntu, Fedora и CentOS (amd64);
  • Концептуальный эксплоит для обхода защиты stack guard-page в OpenBSD через манипуляции с утилитой /usr/bin/at. Для атаки используются уязвимости в реализации stack guard-page (CVE-2017-1000372) и libc функции qsort (CVE-2017-1000373);
  • Концептуальный эксплоит для обхода защиты stack guard-page в NetBSD (CVE-2017-1000374, CVE-2017-1000375);
  • Концептуальный эксплоит для атаки в окружении FreeBSD и обхода защиты RLIMIT_STACK в setrlimit (CVE-2017-1000385);
  • Два концептуальных эксплоита для обхода защиты stack guard-page во FreeBSD (CVE-2017-1083, CVE-2017-1084);
  • Локальный root-эксплоит против /usr/bin/rsh в окружении Solaris 11 (CVE-2017-3630, CVE-2017-3629, CVE-2017-3631 CVE-2017-3631).

Для большинства вышеотмеченных уязвимостей уже доступны обновления от дистрибутивов (разработчики дистрибутивов были в закрытом порядке извещены о проблемах в середине мая и сегодня скоординировано выпустили обновления). В качестве общей меры для противодействия выявленным уязвимостям предлагается пересобрать все приложения и библиотеки в пространстве пользователя с использованием опции "-fstack-check" в GCC, которая добавляет защиту от перемещения указателя стека в другую область памяти, минуя stack guard-page. Но так как "-fstack-check" пока не всегда работает корректно, для защиты в краткосрочной перспективе предложено увеличить размер stack guard-page с применяемых ныне нескольких килобайт до как минимум 1 Мб, что существенно затруднит эксплуатацию. Также рекомендовано предоставить средства для произвольного изменения размера stack guard-page администратором (например, grsecurity/PaX предоставляет /proc/sys/vm/heap_stack_gap).

  1. Главная ссылка к новости (http://openwall.com/lists/oss-...)
  2. OpenNews: Обнаружена локальная root-уязвимость, затрагивающая все Linux-ядра 2.6.x
  3. OpenNews: В sudo устранена уязвимость, позволяющая переписать файл на системах с SELinux
Лицензия: CC-BY
Тип: Проблемы безопасности
Ключевые слова: stack, heap, security
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение Линейный вид | Ajax | Показать все | RSS
 
  • 1.3, Аноним, 21:54, 19/06/2017 [ответить] [смотреть все]
  • +/
    А разве нельзя на уровне ОС выделять страницы памяти так, чтобы между соседними ... весь текст скрыт [показать]
     
     
  • 2.5, Аноним, 21:56, 19/06/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +15 +/
    Это и есть stack guard-page  про обход которой говориться в новости.
     
  • 2.6, Аноним, 21:56, 19/06/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • –15 +/
    В мире управляемых языков таких проблем нет ... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.10, Michael Shigorin, 22:31, 19/06/2017 [^] [ответить] [смотреть все]  
  • +5 +/
    Rust is memory safe but has this same stack exhaustion issue ... весь текст скрыт [показать]
     
     
  • 4.44, Soos, 11:06, 20/06/2017 [^] [ответить] [смотреть все]  
  • +1 +/
    Rust не управляемый язык. Речь идёт о C#.
     
     
  • 5.76, pripolz, 18:35, 10/07/2017 [^] [ответить] [смотреть все]  
  • –1 +/
    http cdn3 meme am cache images folder526 600x600 16784526 you-cant-if-you-dont... весь текст скрыт [показать]
     
  • 3.11, Аноним, 22:36, 19/06/2017 [^] [ответить] [смотреть все]  
  • +2 +/
    Вот только ОСей на этих управляемых языках нету.
     
     
  • 4.24, Аноним, 23:43, 19/06/2017 [^] [ответить] [смотреть все]  
  • +1 +/
    И в ближайшем будущем не будет, ибо ядро должно быть производительным Может быт... весь текст скрыт [показать]
     
     
  • 5.28, Crazy Alex, 02:31, 20/06/2017 [^] [ответить] [смотреть все]  
  • +/
    Уже пытались... Толку нет
     
     
  • 6.50, Аноним, 13:01, 20/06/2017 [^] [ответить] [смотреть все]  
  • +1 +/
    Неудачники, не хватает гения.
     
  • 3.14, 123, 22:41, 19/06/2017 [^] [ответить] [смотреть все]  
  • +/
    Стэка в упр коде вроде как по определению быть не может Расплата в производител... весь текст скрыт [показать]
     
  • 3.30, Аноним, 06:34, 20/06/2017 [^] [ответить] [смотреть все]  
  • +/
    Зато в виртуальных машинах таких языков ещё как есть.
     
     
  • 4.47, Аноним, 11:51, 20/06/2017 [^] [ответить] [смотреть все]  
  • +/
    Легче исправить в одной виртуальной машине, чем в миллионах проектов.
     
  • 3.75, pripolz, 18:34, 10/07/2017 [^] [ответить] [смотреть все]  
  • –1 +/
    http cdn3 meme am cache images folder526 600x600 16784526 you-cant-if-you-dont... весь текст скрыт [показать]
     
  • 1.9, Michael Shigorin, 22:28, 19/06/2017 [ответить] [смотреть все]  
  • +/
    > CCVE-2017-1000366

    Предложил мелкую правку новости с учётом https://cve.basealt.ru/informatsiia-ob-uiazvimosti-cve-2017-1000366.html ;-)

     
     
  • 2.18, Wladmis, 22:59, 19/06/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    А что за механизм защиты?
     
     
  • 3.42, boyarsh, 10:24, 20/06/2017 [^] [ответить] [смотреть все]  
  • +5 +/
    commit b7a528c6ce72ee0350c5f51f76d0986aba7706b2 Author Dmitry V Levin ldv alt... весь текст скрыт [показать]
     
  • 3.45, Michael Shigorin, 11:27, 20/06/2017 [^] [ответить] [смотреть все]  
  • +/
    В дополнение к уже сказанному boyarsh цитирую ответ ldv --- Наша официальная ... весь текст скрыт [показать]
     
  • 2.21, Аноним, 23:09, 19/06/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Как-то слишком голословно, что именно за защита PS Главное то не упомянули, чт... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.53, пох, 14:25, 20/06/2017 [^] [ответить] [смотреть все]  
  • +1 +/
    это _не_ дыра Дыра - ошибка в коде программы, позволяющая, подсунув ей то, о че... весь текст скрыт [показать]
     
     
  • 4.55, добрый, 14:42, 20/06/2017 [^] [ответить] [смотреть все]  
  • +/
    Если по уму, то это должны делать авторы libc, поскольку ld so тоже использует п... весь текст скрыт [показать]
     
     
  • 5.57, пох, 15:23, 20/06/2017 [^] [ответить] [смотреть все]  
  • +/
    автор либси - некто Ульрих Дрепер, известный своим клиническим вывихом мозгов О... весь текст скрыт [показать]
     
     
  • 6.60, Black_Angel_by, 15:50, 20/06/2017 [^] [ответить] [смотреть все]  
  • +1 +/
    Уже давно пилят без Дреппера.
     
  • 6.62, Michael Shigorin, 16:06, 20/06/2017 [^] [ответить] [смотреть все]  
  • +/
    Там сейчас сильно другая ситуация, но добиться консенсуса по чему-нить вроде htt... весь текст скрыт [показать]
     
     
  • 7.64, пох, 16:36, 20/06/2017 [^] [ответить] [смотреть все]  
  • +/
    тут я не уверен, что оно a вообще нужно в libc любое добавление кода ломает со... весь текст скрыт [показать]
     
     
  • 8.66, добрый, 17:16, 20/06/2017 [^] [ответить] [смотреть все]  
  • +/
    Если не в libc, то никак не в библиотеке, которая будет подгружаться уже после о... весь текст скрыт [показать]
     
     
  • 9.67, пох, 17:42, 20/06/2017 [^] [ответить] [смотреть все]  
  • +/
    эта фича, в том виде в котором была обнаружена в rhel, не проверяет su gid биты ... весь текст скрыт [показать]
     
  • 9.68, пох, 17:50, 20/06/2017 [^] [ответить] [смотреть все]  
  • +/
    это мы уже о другой фиче, ld so она перпендикулярна, просто новая функциональнос... весь текст скрыт [показать]
     
  • 1.12, Аноним, 22:38, 19/06/2017 [ответить] [смотреть все]  
  • +4 +/
    Это просто ужас какой-то
     
  • 1.13, key, 22:41, 19/06/2017 [ответить] [смотреть все]  
  • +/
    Я правильно понимаю что, стек можно определить двумя адресами - начало и конец.
    Также и с кучей(наверное можно обойдись только началом?).
    Почему нельзя просто проверять границы?
    if((operation == new and Addr < HeapStartAddr) or
    (operation == stack and StackStartAddr < Addr < StackEndAddr)
    ) cout << "Error";

    Там же неверняка накладные расходы на реализацию защищенной страницы не меньше?
    Объясните, а то для моих скудных познаний stack guard-page выглядит слишком костыльно.

     
     
  • 2.15, key, 22:43, 19/06/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Конечно же код неправильный - границы стека и кучи меняются При выделении памят... весь текст скрыт [показать] [показать ветку]
     
  • 2.16, 123, 22:48, 19/06/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Этим вроде как менеджер памяти ОС должен заниматься Поэтому меньше должно быть ... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.17, Аноним84701, 22:52, 19/06/2017 [^] [ответить] [смотреть все]  
  • +/
    Оно по-любому меньше будет, потому как в первом случае проверка при каждой опера... весь текст скрыт [показать]
     
     
  • 4.20, 123, 23:08, 19/06/2017 [^] [ответить] [смотреть все]  
  • +/
    Обращение к региону это выход push за пределы страницы Пойду побью себя Танен... весь текст скрыт [показать]
     
     
  • 5.22, Аноним84701, 23:14, 19/06/2017 [^] [ответить] [смотреть все]  
  • +/
    Ну да, а что Я толком правда уже не помню, но вроде как прилетает pagefault-эк... весь текст скрыт [показать]
     
  • 2.19, Аноним84701, 23:00, 19/06/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    http wiki osdev org Paging Если вкратце, то проверки страниц проводятся так и... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.32, Аноним, 06:58, 20/06/2017 [^] [ответить] [смотреть все]  
  • +2 +/
    gt оверквотинг удален Стоит уточнить, что 171 тратится 187 из-за сторожевы... весь текст скрыт [показать]
     
  • 2.46, Ordu, 11:43, 20/06/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +2 +/
    Stack guard страница фактически не требует никаких накладных расходов, она один ... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.48, Олег, 12:03, 20/06/2017 [^] [ответить] [смотреть все]  
  • +2 +/
    rbp указывает на начало фрейма функции, на вершину стека указывает rsp
     
     
  • 4.49, Ordu, 12:22, 20/06/2017 [^] [ответить] [смотреть все]  
  • +1 +/
    Да, спасибо за поправку ... весь текст скрыт [показать]
     
  • 1.23, Аноним, 23:40, 19/06/2017 [ответить] [смотреть все]  
  • +/
    У меня с -fstack-check localedef в glibc падает в сегфолт Проверьте, так же у в... весь текст скрыт [показать]
     
     
  • 2.25, Аноним, 23:53, 19/06/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +1 +/
    Известный баг https bugs gentoo org show_bug cgi id 608788 https sourceware ... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.26, Аноним, 00:15, 20/06/2017 [^] [ответить] [смотреть все]  
  • +/
    Благодарю, патчик самое то.
     
  • 1.27, A.Stahl, 01:55, 20/06/2017 [ответить] [смотреть все]  
  • +/
    И эти же анонимы ржут по поводу Hurd. Ну ржите...
     
     
  • 2.29, Crazy Alex, 02:34, 20/06/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +4 +/
    Ну, подход давайте смиримся с кривым кодом и просто распихаем по песочницам нр... весь текст скрыт [показать] [показать ветку]
     
  • 2.31, Аноним, 06:37, 20/06/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    И где твой Hurd Почему, если он такой безопасный, его до сих пор не внедрили, а... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.35, PF, 09:09, 20/06/2017 [^] [ответить] [смотреть все]  
  • +/
    Hurd не нужен корпорациям
     
     
  • 4.36, Аноним, 09:32, 20/06/2017 [^] [ответить] [смотреть все]  
  • +1 +/
    А почему ?
     
  • 2.33, angra, 07:46, 20/06/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +2 +/
    А чем бы помог Hurd в большинстве указанных случаев Ну кроме того, что он на то... весь текст скрыт [показать] [показать ветку]
     
  • 2.34, Elhana, 08:36, 20/06/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +2 +/
    Можно подумать, что с Hurd все эти проблемы в статье магическим образом решаются... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.37, Аноним, 09:32, 20/06/2017 [^] [ответить] [смотреть все]  
  • +1 +/
    Там же микроядро ! Они магическим образом решает все проблемы.
     
  • 3.38, Tim, 09:33, 20/06/2017 [^] [ответить] [смотреть все]  
  • +2 +/
    В Linux, по историческим причинам, используется плоская модель памяти, т е код,... весь текст скрыт [показать]
     
     
  • 4.43, yet another anonymous, 11:00, 20/06/2017 [^] [ответить] [смотреть все]  
  • +1 +/
    Не назовет ли автор действующие операционки с прогрессивной сегментной организац... весь текст скрыт [показать]
     
     
  • 5.51, Tim, 13:53, 20/06/2017 [^] [ответить] [смотреть все]  
  • +3 +/
    Последняя была в IBM z series Но общую тенденцию озвучил главный Security peop... весь текст скрыт [показать]
     
     
  • 6.52, Crazy Alex, 14:18, 20/06/2017 [^] [ответить] [смотреть все]  
  • +1 +/
    Ну так главный знает, что говорит Потребности в безопасности - они у всех разны... весь текст скрыт [показать]
     
     
  • 7.59, Tim, 15:38, 20/06/2017 [^] [ответить] [смотреть все]  
  • +/
    Правильно. Никакой магии, простой компромис.
     
  • 4.54, добрый, 14:38, 20/06/2017 [^] [ответить] [смотреть все]  
  • +/
    Вот только в AMD64 от сегментации избавились, поспешно и неосмотрительно.
     
     
  • 5.61, Tim, 16:03, 20/06/2017 [^] [ответить] [смотреть все]  
  • +1 +/
    При переключении контекста задач, требуется подгрузить таблицу трансляции адресо... весь текст скрыт [показать]
     
     
  • 6.65, добрый, 16:48, 20/06/2017 [^] [ответить] [смотреть все]  
  • +/
    Нет, не требуется Страничные таблицы никогда не подгружаются в кэш заранее цели... весь текст скрыт [показать]
     
     
  • 7.70, J.L., 18:48, 20/06/2017 [^] [ответить] [смотреть все]  
  • +/
    можно узнать по каким мне сильно не понятен этот вопрос и почему вообще отказа... весь текст скрыт [показать]
     
     
  • 8.72, добрый, 21:21, 20/06/2017 [^] [ответить] [смотреть все]  
  • +/
    Моральное устаревание На тот момент сегменты кода, данных и стека с разными адр... весь текст скрыт [показать]
     
     
  • 9.74, J.L., 13:32, 22/06/2017 [^] [ответить] [смотреть все]  
  • +/
    и сейчас нет в современном процессоре механизма на запрет чтение запись исполнен... весь текст скрыт [показать]
     
  • 1.56, Аноним, 14:47, 20/06/2017 [ответить] [смотреть все]  
  • +/
    rhel5 x64 подвержен ?
     
     
  • 2.58, пох, 15:28, 20/06/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    судя по приехавшему сегодня патчу ведра - да Патчей sudo, ld so и всего прочего... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.63, Аноним, 16:18, 20/06/2017 [^] [ответить] [смотреть все]  
  • +/
    интересно, а сентос обновит или забьет ?
     
     
  • 4.69, пох, 17:52, 20/06/2017 [^] [ответить] [смотреть все]  
  • +/
    а они разьве поддерживают пятую версию ... весь текст скрыт [показать]
     
  • 1.73, Аноним, 13:12, 22/06/2017 [ответить] [смотреть все]  
  • +/
    Нужно реализовать аппаратную поддержку маркировки страниц как стек и куча с пров... весь текст скрыт [показать]
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:


      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor