Log4shell: повна історія вразливості
На початку місяця з’явилося багато новин про вразливість log4shell. Вона загрожує мільйонам серверів, які використовують бібліотеку Log4j. Серед постраждалих — сервери Twitter, Amazon, Steam, Apple iCloud та Minecraft. У статті розповідаємо про небезпечну вразливість.
Про log4shell у загальних рисах
* Log4Shell (або CVE-2021-44228) — вразливість нульового дня, яка дозволяє зловмисникам віддалено керувати серверами та встановлювати шкідливе ПЗ. Її знайшли у бібліотеці Log4j, яка входить до складу Apache Logging Project. Log4Shell отримала оцінку 10 із 10 за шкалою оцінки вразливостей CVSS v3.
* Log4j — популярна в середовищі Java бібліотека журналювання з відкритим вихідним кодом. Бібліотека дає додаткові можливості для ведення логів, наприклад, рівні логів, механізми запису в різні лог файли, шаблони прокручування логів та інше.
Вразливість існує з 2017 року, але помітили та почали її використовувати у грудні цього року. Financial Times зазначає, що за допомогою log4shell хакери проводять близько 100 атак на хвилину на різні сервіси та програми по всьому світу.
Log4Shell знайшов Чен Чжаоцзюнь з Alibaba Cloud Security. Він повідомив про це розробникам бібліотеки log4j. Вразливими визнали всі версії бібліотеки між 2.10.0 та 2.14.x.
6 грудня, до того, як вразливість стала загальновідомою, Apache Software Foundation випустила перший патч для log4shell в релізі 2.15.0. Виявилося, що цього замало, але про це пізніше.
9 грудня log4shell стала відома як вразливість нульового дня після того, як від неї постраждали сервери Minecraft. Причому для їхнього злому багато зусиль не знадобилося. Зловмисникам вистачило того, щоб надіслати потрібний рядок у вигляді повідомлення до ігрового чату. Цей рядок зберігся в логах і mission complete. Розробники випустили оновлення гри, щоб виправити ситуацію.
Чим небезпечна log4shell
Використання цієї вразливості зловмисниками може призвести до втрати даних, ключів та секретів AWS або Kubernetes, встановлення шкідливого програмного забезпечення, наприклад, програм-вимагачів та бекдорів. І щоб це зробити, багато досвіду не потрібно. Достатньо лише одного рядка коду, як у ситуації з Minecraft.
Читайте про 12 основних команд Linux на сайті IT Education Blog.
Але на цьому ще не все. Чи вразлива ваша система, визначити складно. Log4Shell може бути будь-де на вашому сервері. Знайти вразливість непросто, оскільки багато програм використовують Log4j для створення та ведення логів. Навіть якщо сервер не на 100% Java, можуть бути невеликі екземпляри, де використовується Log4j. Або його використовує зовнішня інфраструктура вашої програми.
Резюмуємо: log4shell — небезпечний експлойт, який можна встановити швидко, дистанційно і при цьому його буде складно виявити.
Як працює вразливість log4shell
Основна причина появи Log4Shell — неправильна перевірка введення.
Простими словами, сервер надто довіряє ненадійним даним, що надходять від користувачів, що робить ваше ПЗ доступним для зловмисників.
У Log4j дані від користувача зберігаються в лог, наприклад, щоб послатися на них пізніше або для майбутнього входу в файл. Такі дані можуть захопити сервер, де ці логи ведуться. Тобто запис у логах може призвести до встановлення шкідливого ПЗ.
JNDI “Lookup” дозволяє додавати значення до конфігурації Log4j у довільних місцях. Користувач, що надає дані, може обирати спосіб їх форматування, зміст та спосіб отримання цього контенту.
* JNDI (Java Naming and Directory Interface) — це API у вигляді служби каталогів, за допомогою якого Java-клієнти можуть відкривати та переглядати дані та об’єкти за їх іменами.
Наприклад, більшість веб-клієнтів включають HTTP-заголовок
“User-Agent” з назвою браузера користувача. HTTP-сервери часто зберігають цей запис, щоб вирішити, які браузери підтримувати в майбутньому.
Зловмисник може надіслати рядок User-Agent: $ {env: TEMPORARY_SESSION_TOKEN} замість, наприклад, “Google Chrome”, що може викликати проблеми з дотриманням вимог. Це обманом змушує сервер зберегти на диск такий рядок. А він, потрапивши до логів, запускає шкідливе ПЗ.
Оновлення Log4j
Зараз log4shell поширена всім інтернетом. Хакери провели понад 840 000 атак по світу. Але чому оновлення Log4j 2.15.0, що усуває вразливість, не запобігло цій загрозі?
Оновлення усувало log4shell, за замовчуванням відключивши основну функціональність бібліотеки — лукапи JNDI-повідомлень. Це відкрило нову вразливість: у конфігураціях не за замовченням можна створити шкідливий input з використанням шаблону JNDI Lookup. Це може призвести до атаки типу “відмова в обслуговуванні”, тобто DoS.
Друга вразливість не така небезпечна: у неї 3,7 бала з 10. Щоб її виправити, розробники випустили ще один патч і версію 2.16, де повністю відключили JNDI.
У компанії Cloudflare відзначили, що хакери вже почали використовувати другий баг. А в Praetorian кажуть, що його можна використовувати для розкриття інформації, що може призвести до розкрадання даних із вразливих серверів.
Потім Apache представила версію 2.17.0 бібліотеки Log4j. Минула версія не вирішувала вразливість повністю, тому що не завжди захищала від нескінченної рекурсії під час пошуку. Це вже третє оновлення бібліотеки для усунення log4shell.
Як дізнатися чи вразливі ваші системи до log4shell
Спочатку здається, що слід розглядати лише сервери з кодом, написаним на Java, де вхідні TCP-з’єднання обробляються безпосередньо програмним забезпеченням Java та її бібліотеками.
Нагадуємо, що Log4Shell не обмежується серверами, написаними на чистій Java. Ця помилка не пов’язана і з кодом обробки сокетів на основі TCP: вразливість може ховатися будь-де в серверній мережі, де обробляються дані користувачів і зберігаються журнали.
В ідеалі потрібно знайти в мережі весь код на Java і перевірити, чи використовує він бібліотеку Log4j. На щастя, вже з’явилися інструменти, які дають змогу це зробити. Наприклад, від компанії Trend Micro.
Як захиститись від log4shell
Щоб захистити свої програми та сервери від цього експлойту, потрібно оновити Apache Log4j до версії 2.17.0. А якщо будуть проблеми з тим, щоб швидко оновити версію, можна використовувати mitigation guides, або гайди зниження ризиків від компаній, що спеціалізуються на кібербезпеці. Наприклад, докладний гайд від Sophos.
Підсумок
Від вразливості log4shell можуть постраждати сотні мільйонів пристроїв. Це великий недолік безпеки, який неможливо виправити протягом дня чи двох. За звітами компанії CyberScoop, щоб виявити кожен пристрій, який включає вразливу бібліотеку log4j, можуть піти місяці або роки.
Історія з log4shell показує, як лише одна вразливість може поставити під загрозу весь інтернет. Що не менш показово — як багато людей готові нею скористатися. Тому завжди слідкуйте за безпекою своїх систем та будьте готові швидко реагувати на загрози.
Авторські ІТ-курси з системного адміністрування та DevOps у навчальному центрі IT Education Center.