Як уникнути атак послідовності втечі в терміналах?


29

Читаючи подробиці CVE-2009-4487 (що стосується небезпеки втечі послідовностей у файлах журналів) я трохи здивований.

Цитувати CVE-2009-4487 :

nginx 0.7.64 записує дані в файл журналу без санітарії символів, що не друкуються, що може давати можливість віддаленим зловмисникам змінювати заголовок вікна, або, можливо, виконувати довільні команди або перезаписувати файли через HTTP-запит, що містить послідовність виходу емулятора терміналу.

Зрозуміло, що мова йде не про дірку в безпеці в nginx, а в емуляторах терміналів.

Звичайно, можливо, catщо файл журналу в термінал трапляється лише випадково, але grepлог-файл є досить поширеним явищем. lessможливо, дезінфікує втечу послідовностей, але хто знає, які команди оболонки не змінюють послідовності втечі ...

Я схильний погоджуватися з відповіддю лаку :

Загалом, мудрість уникнення термінальної відповіді ставилася під сумнів через регулярні проміжки часу, але все ще жодна з основних програм емуляції терміналів не вважає за потрібне відкинути ці послідовності, ймовірно, в помилковій спробі сумісності з уже не використовуваною технологією 1970-х років. [..] Замість того, щоб звинувачувати будь-яку програму, яка записує логіни, було б набагато продуктивніше з точки зору безпеки отримати програми емуляції терміналів припинити робити дурні речі і таким чином виправити цю та інші проблеми безпеки раз і для всіх.

Таким чином мої запитання:

Як я можу захистити свій xterm таким чином, що більше неможливо виконувати команди чи перезаписувати файли за допомогою послідовностей запуску?

Які термінальні емулятори для X захищені від цієї атаки?


4
Багато послідовностей евакуації роблять законні речі (перейменувати / змінити розмір / тощо xterm). Але чи може хтось ідентифікувати послідовності втечі, які виконують команди або перезаписують файли ?
крубо


Аналогічне питання щодо нападів-контролю-символів від атак на веб-браузер на Security SE: Як я можу захистити себе від такого роду зловживань буфера обміну? tl; dr: якщо ви використовуєте термінал на основі xterm / vte, випущений після 2013/2015, ви захищені від цього, оскільки вони фільтрують контрольні символи, за замовчуванням.
maxschlepzig

Відповіді:


27

Термінали VT100 (які певною мірою емулюють усі сучасні емулятори терміналів) підтримують ряд проблемних команд, але сучасні емулятори чи дистрибутиви відключають більш проблемні та менш корисні. Ось невичерпний список потенційно ризикованих послідовностей втечі (не враховуючи тих, які просто роблять відображення певним чином нечитаним):

  • Довільні команди журнальних файлів у rxvt та Eterm повідомляють HD Moore . Це справді основні помилки, на щастя, давно виправлені.
  • Команда відповіді, також відома як Стан терміналу повернення, на яку викликається ENQ( Ctrl+E). Це вставляє текст у термінал так, ніби користувач ввів його. Однак цей текст не знаходиться під контролем зловмисника: це власне ім'я терміналу, як правило, щось на зразок xtermабо screen. У моїй системі (стиснення Debian) xterm повертає порожню рядок за замовчуванням (цим керує answerbackStringресурс).
  • Команди ESC [ cта друзі команди "Надіслати атрибути пристрою" . Термінал відповідає з ESC [ … c(де може містити цифри та розділові знаки ASCII). Це спосіб запиту деяких можливостей терміналу, здебільшого застарілих, але, можливо, використовуються старими програмами. Знову ж таки, відповідь терміналу не відрізняється від введення користувачем, але він не знаходиться під контролем зловмисника. Послідовність керування може виглядати як функціональна клавіша, але лише у випадку, якщо користувач має незвичну конфігурацію (жоден із звичайних налаштувань, з якими я стикався, не має дійсної послідовності виходу функціональної клавіші, яка є префіксом термінальної відповіді).
  • Різні функції управління пристроєм (DCS вимикається, починаючи з ESC P).
    • Я не знаю, яку шкоду можна зробити DECUDK(встановити визначені користувачем клавіші) на типовому емуляторі терміналу.
    • DECRQSS(Рядок запиту статусу) - це ще одна команда, на яку термінал відповідає відповідною послідовністю, на цей раз починаючи з \eP; це може бути проблематично, оскільки \ePце дійсний ключ ( Alt+ Shift+ P).
    • Xterm має ще дві експериментальні особливості: ESC P + p …і ESC P + q …, щоб отримати та встановити рядки termcap. З опису це може бути використане принаймні для зміни ефекту функціональних клавіш.
  • Кілька команд звіту про стан: ESC [ … n(Звіт про стан пристрою). Термінал відповідає послідовністю відходу. Більшість цих послідовностей евакуації не відповідають функціональним послідовностям функціональних клавіш. Одне виглядає проблематично: звіт ESC [ 6 nскладається у формі, де є і знакові послідовності, і це могло б виглядати як з деякими модифікаторами.ESC [ x ; y RxyF3
  • Команди віконних маніпуляцій ESC [ … t.
    • Деякі з них дозволяють змінити розмір вікна xterm, іконіфікувати тощо, що є руйнівним.
    • Деякі з них призводять до того, що термінал реагує на будь-яку послідовність виходу. Більшість цих послідовностей евакуації виглядають з низьким рівнем ризику, однак є дві небезпечні команди: відповіді ESC [ 2 0 tта відповідні ESC [ 2 1 tярлики та заголовки вікна терміналу відповідно, а зловмисник може вибрати їх.
    • Принаймні під натисканням Debian, xterm ігнорує ці команди за замовчуванням; їх можна ввімкнути, встановивши allowWindowOpsресурс, або вибірково через disallowedWindowOpsресурс. Gnome-термінал в Ubuntu 10.04 реалізує навіть відповіді заголовків за замовчуванням. Я не перевіряв інші термінали чи версії.
  • Команди, щоб встановити назву термінала або ім'я піктограми. Під xterm та більшості інших X-терміналів вони є . Під екраном послідовність відходу є . Я вважаю занепокоєння з приводу цих команд завищеним. Хоча вони допускають певну кількість пустощів, будь-яка веб-сторінка має той самий випуск. Діяти у вікні, заснованому виключно на його заголовку, а не на своєму класі, це подібне до відкриття файлу, ім'я якого вам дала недовірена сторона, або не цитування змінного розширення в сценарії оболонки, або погладжування шаленої собаки по носу - не нарікайте, якщо вас покусали.ESC ] digit ; title ESC \ESC k title ESC \

Я вважаю, що відповідь Варніса є сумлінною. Складається враження, що він або намагається перекласти звинувачення, або в режимі нацистів безпеки (будь-яка турбота про безпеку, справжня чи ні, виправдовує функцію шантажу).

Загалом, мудрість уникнення термінальної відповіді ставилася під сумнів через регулярні проміжки часу, але все ще жодна з основних програм емуляції терміналів не вважає за потрібне відкинути ці послідовності, ймовірно, в помилковій спробі сумісності з уже не використовуваною технологією 1970-х років. (…)
Замість того, щоб звинувачувати будь-яку програму, яка записує логіни, було б набагато продуктивніше з точки зору безпеки отримати програми емуляції терміналів перестати робити дурні речі і таким чином виправити цю та інші проблеми безпеки раз і за всіх.

Багато відповідей є корисними функціями: програмі потрібно знати такі речі, як положення курсору та розмір вікна. Налаштування заголовка вікна також дуже корисно. ioctlДля цих дзвінків можна повністю покластися , однак для цього потрібні були додаткові код та утиліти для здійснення цих ioctlвикликів та переведення їх у текст у стилі unix, передаючи дескриптори файлів. Змінити ці інтерфейси зараз було б багато роботи, мало користі.

Текстові файли не повинні містити символи, що не друкуються, такі як контрольні символи. Файли журналу, як правило, очікуються текстовими файлами. Файли журналу не повинні містити контрольних символів.

Якщо ви переживаєте, що файл може містити послідовності запуску, відкрийте його в редакторі або перегляньте його lessбез опції -rабо -Rопції або перегляньте його cat -v.


2
"Можна було б повністю покластися на дзвінки ioctl для цих", але що робити, якщо між додатком та терміналом дійсно є послідовний кабель?
mmv-ru

5

Це не так просто; багато людей мають код для встановлення xtermзаголовка як частини підказки тощо, і з дуже поважних причин (як shutdownможе сказати вам кожен, хто невірний апарат із неправильного вікна терміналу!). Таким чином, правильне її виправлення передбачає введення контекстів безпеки і тим самим серйозно ускладнює взаємодію між оболонками та емуляторами терміналів, і, мабуть, і точковими файлами людей. Або ви можете скористатися рішенням про низьку оренду для санітарії всього, що може відображатися в терміналі; це значною мірою зводиться до уникнення контрольних символів, що, мабуть, слід зробити все одно, щоб вони виділялися (оскільки у файлі журналу вони можуть вказувати, що хтось намагається ввести shellcode).

(На відміну від цього, пенікод - це більш серйозний приклад такої ж проблеми - і тим не менш, він став офіційним стандартом. Іноді безпека зводиться до пом’якшення небезпечних конструкцій, які не знаходяться під контролем.)


1
Х-термін може дозволити змінювати заголовок за допомогою послідовностей евакуації, але не дозволяти перезаписувати файли та виконувати довільні команди за допомогою послідовностей втечі. Це був би крок вперед, чи не так?
maxschlepzig

1
Прямі способи цього були відключені роками. Непрямі способи все ще залишаються, хоча вони принаймні потребують додаткового кроку (тобто соціальної інженерії, щоб користувач викликав перепрограмовану функціональну клавішу). Але смуга заголовка була спеціально закликана в CVE, імовірно, як частина атаки, яка заплутує користувача робити щось у неправильному місці. Найбільша сучасна турбота - це те, що можна запрограмувати для надсилання до оболонки тексту довільного тексту та відповідей, які дозволяють зловмиснику дізнатись, що можна зробити емулятором терміналу ...
geekosaur

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