Log4shell: полная история уязвимости

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.

Но на этом ещё не всё. Уязвима ли ваша система, определить сложно. 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.

Добавить комментарий

Спасибо, что поделились