Що таке Stack Clash і що я можу з цим зробити?


27

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

  • Що це? Як сталася помилка з декількома ОС?
  • Як захистити свої системи?

Відповіді:


29

Стек Clash - це експлуатація, заснована на досить старій техніці. Пам'ять, яка використовується процесом, поділяється на дві області - стек та купу . Взагалі можна уявити стек як зростаючий вниз, а купу наростаючим вгору. Що відбувається, коли будь-який підросте досить, щоб зіткнутися з іншим? Загалом, що відбувається, коли стек зростає достатньо, щоб зазіхати на неспоріднені простори пам'яті? Оригінальній вразливості 12 років, і розробники ядра Linux виправили її тимчасово, використовуючи сторожову сторінку . Однак дослідникам компанії Qualys вдалося це використати, незважаючи на сторінку охорони.

Звіти Ars Technica :

Вразливості Stack Clash повільно набувають широкої поінформованості, спочатку у 2005 році з результатами дослідника безпеки Галела Делало і через п'ять років із випуском вразливості Linux дослідника Рафала Войцечука. Розробники Linux ввели захист, який покликаний запобігти зіткненням стеків, але сьогоднішнє дослідження демонструє, що зловмисникам порівняно легко обійти цю міру.

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

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

Цитуючи статтю LWN про оригінальне виправлення з 2010 року:

Оскільки Linux не відокремлює сторінки стека процесів і купи, можливе перевиконання сторінки стека на сусідню групу купи. Це означає, що досить глибокий стек (наприклад, з рекурсивного дзвінка) міг би отримати кінцеву пам'ять. Програма, яка може записати на цю купу сторінки (наприклад, X-клієнт), може потім маніпулювати зворотною адресою одного з викликів, щоб перейти на місце, яке вона обрала. Це означає, що клієнт може змусити сервер запускати код свого вибору - довільне виконання коду - який може бути використаний для отримання кореневих привілеїв.

Вищеописаний опис стосується різних ядер Unix-подібних.

У той час як Ars Technica робить відзначити тимчасовий обхідний шлях , згаданий в доповіді Qualys ( «встановити  жорсткий RLIMIT STACK і RLIMIT_AS  від  локальних користувачів  і  віддалених послуг  за низькою вартістю»), слід зазначити , що це не обов'язково гарантії проти цього подвигу . Наразі єдиний безпечний вихід - оновлення. Відповідно до аналізу безпеки:

Повинно бути зрозуміло, що спроби вирішити цю проблему ядра завжди будуть неповними, оскільки справжня проблема полягає у відсутності зондування стека. Оскільки альтернативне реальне рішення залежить від відновлення всієї країни користування, це, ймовірно, єдине можливе рішення в осяжному майбутньому.

Найкраще, що ми можемо зробити зараз, - оновити ядро ​​до виправленої версії.

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

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 ~ точний1
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 ~ точний1

Судо

Вищезгадана помилка судо охоплюється 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 ні, як зазначає трекер CVE, деякі комбінації все ще перераховані як очікування випуску. Я припускаю, що після випуску виправлень буде опубліковано більше USN.
муру

4
Але, так, оновлення має бути достатньо, додаткова конфігурація не потрібна.
муру

Якщо це впливає, як це перевірити?
ромашка

1
@immibis відповідно до наступної статті вони є, але існуюча реалізація не працює належним чином: Пояснення помилок Stackguard Qualys Research Labs
Ігор Б

1

Як сталася помилка з декількома ОС?

Щоб вирішити цю частину вашого питання конкретно:

Ця проблема виникає через використання спільного адресного простору для купи (яка зростає вгору) та стека (яка зростає вниз).

Така конструкція є загальною для багатьох систем, тому багато систем вразливі до одного класу вразливості.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.