Что такое Stack Clash и что я могу с этим сделать?


27

Я слышал о новой уязвимости под названием Stack Clash, которая, очевидно, затрагивает несколько Unix-подобных систем (не только Linux, но и BSD, и Solaris).

  • Что это такое? Как возникла ошибка в нескольких ОС?
  • Как я защищаю свои системы?

Ответы:


29

Stack Clash - это эксплойт, основанный на довольно старой технике. Память, используемая процессом, разделена на две области - стек и куча . Как правило, можно представить, что стек растёт вниз, а куча - вверх. Что происходит, когда один из них вырастает настолько, что сталкивается с другим? В более общем плане, что происходит, когда размер стека увеличивается настолько, что он вторгается в несвязанные области памяти? Первоначальной уязвимости исполнилось 12 лет, и разработчики ядра Linux временно исправили ее, используя защитную страницу . Тем не менее, исследователи в Qualys сумели использовать это несмотря на защитную страницу.

Ars Technica сообщает :

Уязвимости Stack Clash постепенно завоевывали широкую известность: сначала в 2005 году, благодаря выводам исследователя безопасности Gaël Delalleau, и через пять лет после выпуска уязвимости Linux исследователем Рафалом Войчуком. Разработчики Linux представили защиту , предназначенную для предотвращения стековых столкновений, но сегодняшнее исследование показывает, что злоумышленникам относительно легко обойти эту меру.

Основная атака для проверки концепции, разработанная Qualys, использует уязвимость, обозначенную как CVE-2017-1000364. Исследователи Qualys также разработали атаки, использующие Stack Clash для использования отдельных уязвимостей, в том числе CVE-2017-1000365 и CVE-2017-1000367. Например, в сочетании с CVE-2017-1000367, недавно исправленным недостатком в Sudo, также обнаруженным Qualys, локальные пользователи могут использовать Sudo для получения полных привилегий root в гораздо более широком диапазоне операционных систем. До сих пор Qualys не могла заставить эксплойты удаленно выполнять код. Единственным удаленным приложением, которое они исследовали, был почтовый сервер Exim, который, по совпадению, оказался невосполнимым. Qualys сказал, что не может исключить возможность существования таких эксплойтов для удаленного выполнения кода. Qualys сказал, что выпустит пробные версии эксплойтов позже,

[...] Более подробная информация доступна в этом подробном техническом совете от Qualys и этом техническом анализе от grsecurity .

Цитирование в LWN статьи о первоначальном исправить с 2010 года:

Поскольку Linux не разделяет стек процессов и страницы кучи, возможно переполнение страницы стека на соседнюю страницу кучи. Это означает, что достаточно глубокий стек (например, из рекурсивного вызова) может использовать память в куче. Программа, которая может записать на эту страницу кучи (например, X-клиент), может затем манипулировать адресом возврата одного из вызовов, чтобы перейти к выбранному месту. Это означает, что клиент может заставить сервер запускать код по своему выбору - выполнение произвольного кода - который можно использовать для получения привилегий root.

Приведенное выше описание относится к различным Unix-подобным ядрам.

В то время как Ars Technica отмечает временный обходной путь, упомянутый в отчете Qualys («установите  жесткие значения RLIMIT STACK и RLIMIT_AS  для  локальных пользователей  и  удаленных служб  на низкое значение»), следует отметить, что это не обязательно защитит от этого эксплойта . Единственный безопасный выход - это обновление. Согласно анализу безопасности:

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

Лучшее, что мы можем сделать сейчас, - это обновить ядро ​​до исправленной версии.

В эксплойте 2010 года использовался X-сервер, в этом - sudo, а в следующей может быть любая из множества пользовательских программ, которые в какой-то момент выполняются с повышенными привилегиями.

Компания Qualys еще не опубликовала код проверки концепции для эксплойтов (они планируют сделать это позднее).


С CVE-2017-1000364 связано несколько уведомлений о безопасности Ubuntu:

Также обратите внимание, что трекер CVE перечисляет несколько комбинаций релиз / ядро ​​как ожидающие исправления.

Как правило, самое простое решение - обновить ваши системы до последней версии пакета ядра ASAP.

Соответствующие версии ядра из USN (отобранные с использованием for i in {24..35}; curl -s https://www.ubuntu.com/usn/usn-33$i-1/ | pup 'dl:nth-last-of-type(1)'):

Ubuntu 17.04:
linux-image-4.10.0-24-lowlatency 4.10.0-24.28
linux-image-generic-lpae 4.10.0.24.26
linux-image-generic 4.10.0.24.26
linux-image-4.10.0-24-generic-lpae 4.10.0-24.28
linux-image-4.10.0-24-generic 4.10.0-24.28
linux-image-lowlatency 4.10.0.24.26
Ubuntu 17.04:
linux-image-4.10.0-1008-raspi2 4.10.0-1008.11
linux-image-raspi2 4.10.0.1008.10
Ubuntu 16.10:
linux-image-powerpc-smp 4.8.0.56.69
linux-image-powerpc-e500mc 4.8.0.56.69
linux-image-4.8.0-56-powerpc-smp 4.8.0-56.61
linux-image-4.8.0-56-powerpc-e500mc 4.8.0-56.61
linux-image-4.8.0-56-lowlatency 4.8.0-56.61
linux-image-generic 4.8.0.56.69
linux-image-4.8.0-56-generic 4.8.0-56.61
linux-image-powerpc64- emb 4.8.0.56.69
linux-image-virtual 4.8.0.56.69
linux-image-powerpc64-smp 4.8.0.56.69
linux-image-4.8.0-56-generic-lpae 4.8.0-56.61
linux-image-generic-lpae 4.8.0.56.69
linux-image-lowlatency 4.8.0.56.69
linux-image-4.8.0-56-powerpc64- emb 4.8.0-56.61
Ubuntu 16.10:
linux-image-4.8.0-1040-raspi2 4.8.0-1040.44
linux-image-raspi2 4.8.0.1040.44
Ubuntu 16.04 LTS:
linux-image-powerpc64-smp-lts-utopic 4.4.0.81.87
linux-image-generic-lts- wily 4.4.0.81.87
linux-image-generic-lts-utopic 4.4.0.81.87
linux-image-4.4.0-81-generic-lpae 4.4.0-81.104
linux-image-powerpc64-emb-lts-vivid 4.4.0.81.87
linux-image-powerpc-e500mc 4.4.0.81.87
linux-image-generic-lpae-lts-xenial 4.4.0.81.87
linux-image-generic-lpae-lts-utopic 4.4.0.81.87
linux-image-powerpc-e500mc-lts-xenial 4.4.0.81.87
linux-image-4.4.0-81-powerpc64- emb 4.4.0-81.104
linux-image-powerpc-e500mc-lts- wily 4.4.0.81.87
linux-image-4.4.0-81-powerpc-e500mc 4.4.0-81.104
linux-image-generic-lpae-lts- wily 4.4.0.81.87
linux-image-virtual-lts-vivid 4.4.0.81.87
linux-image-virtual-lts-utopic 4.4.0.81.87
linux-image-virtual 4.4.0.81.87
linux-image-powerpc64-emb-lts- wily 4.4.0.81.87
linux-image-lowlatency-lts-vivid 4.4.0.81.87
linux-image-powerpc-e500mc-lts-vivid 4.4.0.81.87
linux-image-powerpc64- emb 4.4.0.81.87
linux-image-powerpc-smp-lts-xenial 4.4.0.81.87
linux-image-4.4.0-81-generic 4.4.0-81.104
linux-image-powerpc64-smp-lts-vivid 4.4.0.81.87
linux-image-lowlatency-lts- wily 4.4.0.81.87
linux-image-4.4.0-81-lowlatency 4.4.0-81.104
linux-image-generic 4.4.0.81.87
linux-image-lowlatency-lts-xenial 4.4.0.81.87
linux-image-powerpc64-smp-lts-xenial 4.4.0.81.87
linux-image-powerpc64-emb-lts-utopic 4.4.0.81.87
linux-image-generic-lts-xenial 4.4.0.81.87
linux-image-generic-lts-vivid 4.4.0.81.87
linux-image-powerpc-e500mc-lts-utopic 4.4.0.81.87
linux-image-powerpc-smp 4.4.0.81.87
linux-image-4.4.0-81-powerpc-smp 4.4.0-81.104
linux-image-generic-lpae-lts-vivid 4.4.0.81.87
linux-image-generic-lpae 4.4.0.81.87
linux-image-powerpc64-smp-lts- wily 4.4.0.81.87
linux-image-powerpc64-emb-lts-xenial 4.4.0.81.87
linux-image-powerpc-smp-lts- wily 4.4.0.81.87
linux-image-virtual-lts- wily 4.4.0.81.87
linux-image-powerpc64-smp 4.4.0.81.87
linux-image-4.4.0-81-powerpc64-smp 4.4.0-81.104
linux-image-powerpc-smp-lts-utopic 4.4.0.81.87
linux-image-powerpc-smp-lts-vivid 4.4.0.81.87
linux-image-lowlatency 4.4.0.81.87
linux-image-virtual-lts-xenial 4.4.0.81.87
linux-image-lowlatency-lts-utopic 4.4.0.81.87
Ubuntu 16.04 LTS:
linux-image-4.4.0-1016-gke 4.4.0-1016.16
Ubuntu 16.04 LTS:
linux-image- snapdragon 4.4.0.1061.54
linux-image-4.4.0-1061- snapdragon 4.4.0-1061.66
Ubuntu 16.04 LTS:
linux-image-4.4.0-1020-aws 4.4.0-1020.29
Ubuntu 16.04 LTS:
linux-image-raspi2 4.4.0.1059.60
linux-image-4.4.0-1059-raspi2 4.4.0-1059.67
Ubuntu 16.04 LTS:
linux-image-4.8.0-56-powerpc-smp 4.8.0-56.61 ~ 16.04.1
linux-image-4.8.0-56-powerpc-e500mc 4.8.0-56.61 ~ 16.04.1
linux-image-4.8.0-56-lowlatency 4.8.0-56.61 ~ 16.04.1
linux-image-4.8.0-56-generic 4.8.0-56.61 ~ 16.04.1
linux-image-generic-hwe-16.04 4.8.0.56.27
linux-image-lowlatency-hwe-16.04 4.8.0.56.27
linux-image-4.8.0-56-generic-lpae 4.8.0-56.61 ~ 16.04.1
linux-image-virtual-hwe-16.04 4.8.0.56.27
linux-image-generic-lpae-hwe-16.04 4.8.0.56.27
linux-image-4.8.0-56-powerpc64- emb 4.8.0-56.61 ~ 16.04.1
Ubuntu 14.04 LTS:
linux-image-powerpc-smp-lts-xenial 4.4.0.81.66
linux-image-lowlatency-lts-xenial 4.4.0.81.66
linux-image-4.4.0-81-powerpc-smp 4.4.0-81.104 ~ 14.04.1
linux-image-4.4.0-81-powerpc-e500mc 4.4.0-81.104 ~ 14.04.1
linux-image-4.4.0-81-lowlatency 4.4.0-81.104 ~ 14.04.1
linux-image-4.4.0-81-generic-lpae 4.4.0-81.104 ~ 14.04.1
linux-image-generic-lpae-lts-xenial 4.4.0.81.66
linux-image-powerpc64-smp-lts-xenial 4.4.0.81.66
linux-image-4.4.0-81-generic 4.4.0-81.104 ~ 14.04.1
linux-image-4.4.0-81-powerpc64-smp 4.4.0-81.104 ~ 14.04.1
linux-image-generic-lts-xenial 4.4.0.81.66
linux-image-powerpc64-emb-lts-xenial 4.4.0.81.66
linux-image-powerpc-e500mc-lts-xenial 4.4.0.81.66
linux-image-virtual-lts-xenial 4.4.0.81.66
linux-image-4.4.0-81-powerpc64- emb 4.4.0-81.104 ~ 14.04.1
Ubuntu 14.04 LTS:
linux-image-powerpc-e500mc 3.13.0.121.131
linux-image-lowlatency- pae 3.13.0.121.131
linux-image-3.13.0-121-powerpc64- emb 3.13.0-121.170
linux-image-generic- pae 3.13.0.121.131
linux-image-3.13.0-121-powerpc-smp 3.13.0-121.170
linux-image-3.13.0-121-powerpc-e500mc 3.13.0-121.170
linux-image-3.13.0-121-powerpc-e500 3.13.0-121.170
linux-image-3.13.0-121-generic-lpae 3.13.0-121.170
linux-image-generic-lts-Quantal 3.13.0.121.131
linux-image-virtual 3.13.0.121.131
linux-image-powerpc-e500 3.13.0.121.131
linux-image-generic-lts-trusty 3.13.0.121.131
linux-image-3.13.0-121-generic 3.13.0-121.170
linux-image-omap 3.13.0.121.131
linux-image-powerpc64- emb 3.13.0.121.131
linux-image-3.13.0-121-powerpc64-smp 3.13.0-121.170
linux-image-generic 3.13.0.121.131
linux-image-highbank 3.13.0.121.131
linux-image-generic-lts- saucy 3.13.0.121.131
linux-image-powerpc-smp 3.13.0.121.131
linux-image-3.13.0-121-lowlatency 3.13.0-121.170
linux-image-generic-lpae-lts- saucy 3.13.0.121.131
linux-image-generic-lts- raring 3.13.0.121.131
linux-image-powerpc64-smp 3.13.0.121.131
linux-image-generic-lpae-lts-trusty 3.13.0.121.131
linux-image-generic-lpae 3.13.0.121.131
linux-image-lowlatency 3.13.0.121.131
Ubuntu 12.04 ESM:
linux-image-powerpc-smp 3.2.0.128.142
linux-image-3.2.0-128-virtual 3.2.0-128.173
linux-image-3.2.0-128-generic- pae 3.2.0-128.173
linux-image-generic 3.2.0.128.142
linux-image-generic- pae 3.2.0.128.142
linux-image-highbank 3.2.0.128.142
linux-image-3.2.0-128-highbank 3.2.0-128.173
linux-image-3.2.0-128-powerpc-smp 3.2.0-128.173
linux-image-virtual 3.2.0.128.142
linux-image-powerpc64-smp 3.2.0.128.142
linux-image-3.2.0-128-omap 3.2.0-128.173
linux-image-3.2.0-128-powerpc64-smp 3.2.0-128.173
linux-image-omap 3.2.0.128.142
linux-image-3.2.0-128-generic 3.2.0-128.173
Ubuntu 12.04 LTS:
linux-image-3.13.0-121-generic 3.13.0-121.170 ~ precision1
linux-image-generic-lpae-lts-trusty 3.13.0.121.112
linux-image-generic-lts-trusty 3.13.0.121.112
linux-image-3.13.0-121-generic-lpae 3.13.0-121.170 ~ precision1

Судо

Вышеупомянутая ошибка sudo описана в USN-3304-1 от 30 мая 2017 года:

Ubuntu 17.04:
sudo-ldap 1.8.19p1-1ubuntu1.1
sudo 1.8.19p1-1ubuntu1.1
Ubuntu 16.10:
sudo-ldap 1.8.16-0ubuntu3.2
sudo 1.8.16-0ubuntu3.2
Ubuntu 16.04 LTS:
sudo-ldap 1.8.16-0ubuntu1.4
sudo 1.8.16-0ubuntu1.4
Ubuntu 14.04 LTS:
sudo-ldap 1.8.9p5-1ubuntu1.4
sudo 1.8.9p5-1ubuntu1.4

Таким образом, в итоге это уже должно быть исправлено в большинстве версий Ubuntu, которые все еще поддерживаются, просто нужно обновить?
CJCombrink

@TheBadger no, как отмечается в трекере CVE, некоторые комбинации по-прежнему перечислены как ожидающие выпуска. Я полагаю, что по мере выпуска исправлений будет опубликовано больше номеров USN.
Муру

4
Но, да, обновления должно быть достаточно, дополнительная настройка не требуется.
Муру

Если это влияет, как проверить?
Дейзи

1
@immibis в соответствии со следующей статьей, но существующая реализация не работает должным образом: Объяснение ошибки в Stackguard от Qualys Research Labs
Игорь Б

1

Как возникла ошибка в нескольких ОС?

Чтобы ответить на эту часть вашего вопроса конкретно:

Эта проблема возникает из-за использования общего адресного пространства для кучи (которая растет вверх) и стека (которая растет вниз).

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.