Что такое Столкновение Стека и что я могу делать с этим?

Я услышал о новой уязвимости под названием Столкновение Стека, которое, по-видимому, влияет на несколько подобных Unix систем (не только Linux, но и BSDs, Солярис также).

  • Что это? Как ошибка мульти-ОС прибывала для случая?
  • Как я защищаю свои системы?
27
задан 20 June 2017 в 00:01

2 ответа

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

Ars Technica сообщает:

Уязвимости Столкновения стека медленно получали широко распространенную осведомленность, сначала в 2005 с результатами исследователя в области безопасности Gaël Delalleau и пять лет спустя с выпуском уязвимости Linux исследователем Rafal Wojtczuk. Разработчики Linux представили защиту, которая была предназначена для предотвращения столкновений стека, но сегодняшнее исследование демонстрирует, что для взломщиков относительно легко обойти ту меру.

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

[...] Намного больше информации доступно в этой подробной технической консультации от Qualys и этом техническом анализе от grsecurity.

Заключение в кавычки статьи LWN об исходной фиксации с 2010:

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

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

В то время как Ars Technica действительно отмечает временное обходное решение, упомянутое в отчете Qualys ("устанавливает твердую СТОПКУ RLIMIT и RLIMIT_AS  локальных пользователей и удаленных сервисов к низкой стоимости"), нужно отметить, что это не обязательно охраняет против этого использования. Единственный безопасный выход в настоящее время должен обновлять. Согласно grsecurity анализу:

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

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

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

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


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

Также обратите внимание, что средство отслеживания CVE перечисляет несколько комбинаций выпуска/ядра, поскольку ожидание фиксирует.

Обычно самая простая фиксация должна обновить Ваши системы к последнему пакету ядра как можно скорее.

Соответствующие версии ядра от USNs (отобранное использование 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 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:
3.13.0-121.170~precise1 linux-image-3.13.0-121-generic
linux-image-generic-lpae-lts-trusty 3.13.0.121.112
linux-image-generic-lts-trusty 3.13.0.121.112
3.13.0-121.170~precise1 linux-image-3.13.0-121-generic-lpae

Sudo

Вышеупомянутая 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:
1.8.16-0ubuntu3.2 sudo-ldap
1.8.16-0ubuntu3.2 sudo
Ubuntu 16.04 LTS:
1.8.16-0ubuntu1.4 sudo-ldap
1.8.16-0ubuntu1.4 sudo
Ubuntu 14.04 LTS:
sudo-ldap 1.8.9p5-1ubuntu1.4
sudo 1.8.9p5-1ubuntu1.4
29
ответ дан 23 November 2019 в 01:05

, Как ошибка мульти-ОС прибывала для случая?

Для обращения к этой части вопроса конкретно:

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

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

1
ответ дан 23 November 2019 в 01:05

Другие вопросы по тегам:

Похожие вопросы: