Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
log4shell_sentinel — A Smart Log4Shell/Log4j/CVE-2021-44228 Scanner | Kitploit
Инструменты/GitHubGitHub/ossie-git/log4shell_sentinel
Vulnerability ScannersContainer SecurityVulnerability AnalysisForensicsIncident ResponseLog Analysis
GitHubossie-git/log4shell_sentinel

log4shell_sentinel

A Smart Log4Shell/Log4j/CVE-2021-44228 Scanner

Репозиторий
1414 лет назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Log4Shell Sentinel - Умный сканер CVE-2021-44228

Введение

Хотя было выпущено несколько отличных инструментов, помогающих организациям сканировать свои среды на предмет приложений, уязвимых к критической уязвимости Log4J / CVE-2021-44228, я посчитал, что:

  • ни один из инструментов, с которыми я сталкивался, не был предназначен для аналитиков, чтобы отслеживать конкретную находку на протяжении всего процесса устранения. Log4Shell Sentinel выводит свои результаты в формате CSV в расчёте на то, что аналитик затем обработает результаты в Excel, добавит некоторые находки в список игнорирования и повторно запустит сканирование, сравнит результаты, добавит данные к результатам сканирования и т.д.
  • файловые сканеры оставляют много работы для аналитиков, особенно в контейнеризированных средах

Так родился Log4Shell Sentinel. Log4Shell Sentinel — это файловый сканер с некоторыми уникальными возможностями. Он не предназначен для замены всех остальных доступных инструментов, но может их дополнять.

Возможности

Log4Shell Sentinel — это файловый сканер. Он ищет Java-приложения, сканируя целевую систему на наличие артефактов следующих форматов файлов:

Тип файлаОписание
Простой jarСлучай, когда файл log4j-core не встроен.
Fat / Uber jarUber jar — это jar, который содержит как ваши классы/пакет, так и все зависимости вашего приложения (библиотеки, ресурсы и метаданные) в одном файле jar. Это наиболее часто используемый вариант развёртывания.
WARФайл war (Web Application Archive) содержит ваш код JSP, HTML и JavaScript, а также библиотеки и другие ресурсы. Этот формат используется реже.
EAREAR (Enterprise Application Archive) — ещё один формат, который чаще использовался с Jakarta EE для развёртывания.

и ищет экземпляры уязвимых jar-файлов log4j-core. Затем он:

  • вычисляет MD5-хэш артефакта. Это позволяет аналитику идентифицировать одно и то же приложение, работающее на разных машинах/контейнерах, и рассматривать их как одну находку.

  • для файлов, определённых как принадлежащие контейнеру, например: /var/lib/docker/overlay2/192768f471818601094bf4edd96d14bfc0e2b178a04a2efd00b2231ad4e46b33/merged/app/spring-boot-application.jar, выполняет сложную работу по сопоставлению файла с соответствующим образом. Например, он преобразует вышеуказанное в следующий образ: ghcr.io/christophetd/log4shell-vulnerable-app:latest. Поскольку различные среды выполнения контейнеров хранят это сопоставление по-разному, это может сэкономить аналитику часы разочарований. Это также позволяет аналитику рассматривать несколько контейнеров, запускающих одно приложение, как одну находку.

  • удаляет бесполезные совпадения, такие как совпадения, соответствующие контейнерам, которые в данный момент не запущены, включая кэшированные образы. Это позволяет аналитику сосредоточиться на важном и снова экономит часы ненужной работы.

  • позволяет аналитику игнорировать совпадения на основе:

    • MD5-хэша
    • пути к файлу
    • образа контейнера

    Это позволяет аналитику удалить приложения, которые, как известно, не являются уязвимыми, или которые соответствуют приложениям командной строки, не представляющим угрозы. Например, если обнаружен экземпляр Logstash, аналитик может решить игнорировать его, если они не используют этот инструмент или запускают его только время от времени из командной строки.

  • оптимизирован для работы с вашими инструментами управления конфигурацией, такими как Ansible, что позволяет быстро сканировать вашу среду за считанные минуты.

Обогащение метаданными

Подробнее об обогащении метаданными, добавленном Log4Shell Sentinel, читайте в моём блог посте.

Установка

Самый простой способ — просто скачать предварительно скомпилированный бинарный файл.

Сборка из исходников

Опять же, это просто. Однако, скорее всего, вы захотите собрать статически скомпилированную версию, чтобы обойти любые различия, связанные с GLIBC в вашей среде. Инструмент использует следующие модули, которые по умолчанию используют CGO:

  • os/user
  • net

Чтобы собрать статически скомпилированную версию, использующую Go-версии этих библиотек, просто клонируйте репозиторий, а затем выполните:

root@kitploit:~
$ CGO_ENABLED=0 go build -ldflags="-s -w"
$ ldd log4shell_sentinel
        not a dynamic executable

Использование

root@kitploit:~
$ ./log4shell_sentinel -h
NAME:
   Log4Shell Sentinel - by Osama Elnaggar

USAGE:
   log4shell_sentinel [global options] command [command options] [arguments...]

VERSION:
   v1.0.0

COMMANDS:
   help, h  Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --path value, -p value       Path to search (default: ".")
   --no-banner, --nb            Suppress banner (default: false)
   --no-messages, --nm          Suppress messages except for CSV output (default: false)
   --no-header, --nh            Suppress header in CSV output (default: false)
   --imd5 value, --im value     Ignore MD5 hashes. Refer to the GitHub page for expected format
   --ipath value, --ip value    Ignore file path matches. Refer to the GitHub page for expected format
   --icimage value, --ic value  Ignore container image matches. Refer to the GitHub page for expected format
   --print-headers, --ph        Print CSV Headers only (default: false)
   --help, -h                   show help (default: false)
   --version, -v                print the version (default: false)

Из коробки сканирование просто сканирует текущую директорию. Например:

root@kitploit:~
$ ./log4shell_sentinel

░█░░░█▀█░█▀▀░█░█░█▀▀░█░█░█▀▀░█░░░█░░░░░█▀▀░█▀▀░█▀█░▀█▀░▀█▀░█▀█░█▀▀░█░░
░█░░░█░█░█░█░░▀█░▀▀█░█▀█░█▀▀░█░░░█░░░░░▀▀█░█▀▀░█░█░░█░░░█░░█░█░█▀▀░█░░
░▀▀▀░▀▀▀░▀▀▀░░░▀░▀▀▀░▀░▀░▀▀▀░▀▀▀░▀▀▀░░░▀▀▀░▀▀▀░▀░▀░░▀░░▀▀▀░▀░▀░▀▀▀░▀▀▀

- A CVE-2021-44228/CVE-2021-45046/CVE-2021-45105 Scanner
- v1.0.0
- by Osama Elnaggar

[*] WARNING: Running as non-root user.
             Non-readable files / dirs will be skipped
             Container mapping will fail

[*] Starting shallow scan ............ [DONE]
[*] Starting deep scan ............... [DONE]
[*] Calculating MD5 hashes ........... [DONE]
[*] Performing container image lookups [DONE]
[*] Processing ignore list(s) ........ [DONE]
[*] Generating output ................ [DONE]

IP,Hostname,AppName,Team,Ignore (Y/N),Comments,MD5Hash,Timestamp,Container,ContainerImage,FullPath,Version
192.168.121.121,server3,,,,,4e615cd580758b70c49ade1f79103328,2021-12-21T07:38:09Z,true,ghcr.io/christophetd/log4shell-vulnerable-app:latest,/run/containerd/io.containerd.runtime.v2.task/k8s.io/dc2c9c214809f506283c917244cd126a9b056ac7274322d12b59c9196d95dd9b/rootfs/app/spring-boot-application.jar,log4j-core-2.14.1.jar

Вы сразу получите ПРЕДУПРЕЖДЕНИЕ, если запустите его от имени непривилегированного пользователя, так как для работы требуются права root:

  • если вы планируете сканировать всю файловую систему (рекомендуется)
  • если вы планируете выполнять сопоставление контейнеров с образами (требуется доступ к демону Docker, файлам конфигурации и т.д.)

Он будет работать и без прав root, но может не дать наилучших результатов.

Понимание находок

Пример находки выглядит так:

root@kitploit:~
IP,Hostname,AppName,Team,Ignore (Y/N),Comments,MD5Hash,Timestamp,Container,ContainerImage,FullPath,Version
192.168.121.121,server3,,,,,4e615cd580758b70c49ade1f79103328,2021-12-21T07:38:09Z,true,ghcr.io/christophetd/log4shell-vulnerable-app:latest,/run/containerd/io.containerd.runtime.v2.task/k8s.io/dc2c9c214809f506283c917244cd126a9b056ac7274322d12b59c9196d95dd9b/rootfs/app/spring-boot-application.jar,log4j-core-2.14.1.jar

Некоторые поля намеренно оставлены пустыми и предназначены для заполнения аналитиком в Excel и т.д. Краткое описание каждого поля приведено ниже:

Параметры

Инструмент имеет следующие параметры:

Поддержка сопоставления контейнеров с образами

Одна из уникальных особенностей Log4Shell Sentinel, не встречающаяся ни в одном другом инструменте, — это возможность переводить jar-файлы, найденные при сканировании файловой системы, такие как:

/var/lib/docker/overlay2/192768f471818601094bf4edd96d14bfc0e2b178a04a2efd00b2231ad4e46b33/merged/app/spring-boot-application.jar

в соответствующий образ контейнера (вышеуказанное, например, преобразуется в ghcr.io/christophetd/log4shell-vulnerable-app:latest). Поскольку различные среды выполнения контейнеров хранят это сопоставление по-разному, это может сэкономить аналитику часы разочарований. Это также позволяет аналитику рассматривать несколько контейнеров, запускающих одно приложение, как одну находку. Решение в настоящее время поддерживает следующие поиски:

  • Docker (с драйвером хранения overlay2)
  • Docker (с драйвером хранения aufs)
  • CRI-O
  • containerd

Списки игнорирования

Количество выявленных приложений может сначала оказаться ошеломляющим, или вы можете захотовать сосредоточиться на определённом подмножестве выявленных приложений, например, на тех, которые доступны внешним пользователям. Или вы можете захотеть сосредоточиться на определенной области соответствия. Для поддержки этого приложение поддерживает указание списка. Log4Shell в настоящее время поддерживает 3 списка игнорирования:

  • список игнорирования MD5-хэшей
  • список игнорирования образов контейнеров
  • список игнорирования путей

Вместо простых списков он ожидает ввод в виде CSV-файла. Это побуждает аналитика документировать, почему они игнорируют конкретную находку. По мере того как аналитик обрабатывает находки и выявляет неуязвимые приложения с помощью ручного или автоматизированного анализа исходного кода, инструментов DAST и т.д.

Список игнорирования MD5-хэшей

Список представляет собой простой CSV-файл в следующем формате:

root@kitploit:~
MD5Sum,AppName,Reason

Столбцы AppName и Reason могут быть пустыми, но они предназначены для того, чтобы вы могли отслеживать, почему вы включаете или исключаете конкретные приложения.

ПРИМЕЧАНИЕ: Поскольку эта функция использует MD5-хэш, вычисленный для приложения, она будет работать только для приложений, которые являются fat / uber jar, EAR или WAR.

Например, если у нас есть следующая находка:

root@kitploit:~
IP,Hostname,AppName,Team,Ignore (Y/N),Comments,MD5Hash,Timestamp,Container,ContainerImage,FullPath,Version
192.168.121.121,server3,,,,,4e615cd580758b70c49ade1f79103328,2021-12-21T07:38:09Z,true,ghcr.io/christophetd/log4shell-vulnerable-app:latest,/run/containerd/io.containerd.runtime.v2.task/k8s.io/dc2c9c214809f506283c917244cd126a9b056ac7274322d12b59c9196d95dd9b/rootfs/app/spring-boot-application.jar,log4j-core-2.14.1.jar

и мы определили, что приложение не уязвимо, мы можем просто сохранить следующее в hashes.csv:

root@kitploit:~
4e615cd580758b70c49ade1f79103328,Demo App,Not vulnerable

а затем перезапустить:

root@kitploit:~
# ./log4shell_sentinel --im hashes.csv --path /

вышеуказанная находка будет подавлена.

Сопоставление контейнеров -> список игнорирования образов

Список представляет собой простой CSV-файл в следующем формате:

root@kitploit:~
Container Image,AppName,Reason

Основываясь на предыдущем примере, мы можем указать игнорировать любую находку, где образом контейнера является: ghcr.io/christophetd/log4shell-vulnerable-app:latest, создав файл images.csv следующего содержания:

root@kitploit:~
ghcr.io/christophetd/log4shell-vulnerable-app:latest,,

а затем запустив его:

root@kitploit:~
# ./log4shell_sentinel --ic images.csv -p /

Опять же, наша предыдущая находка будет подавлена.

Список игнорирования путей

Опять же, это простой CSV-файл в следующем формате:

root@kitploit:~
Path,AppName,Reason

Используя приведённый выше пример, если мы создадим следующий файл paths.csv:

root@kitploit:~
/run/containerd/io.containerd.runtime.v2.task/k8s.io/dc2c9c214809f506283c917244cd126a9b056ac7274322d12b59c9196d95dd9b/rootfs/app/spring-boot-application.jar,Demo App,Not vulnerable

предыдущая находка будет подавлена.

ПРЕДУПРЕЖДЕНИЕ: По возможности лучше использовать MD5-хэш или имя образа контейнера для подавления, так как путь может быть не уникальным.

Массовое сканирование вашей среды

Хотя запуск Log4Shell Sentinel на одном сервере вполне нормально, он действительно раскрывается в сочетании с вашим любимым инструментом управления конфигурацией (Ansible, Chef, Puppet, Salt, AWS SSM и т.д.) или даже простыми параллельными SSH-инструментами, такими как parellel-ssh.

Это даёт многочисленные преимущества, включая:

  • поиск дублирующихся экземпляров ваших приложений и контейнеров и рассмотрение этих находок как одной находки на этапе анализа
  • сканирование всей вашей среды за считанные минуты

Полный пример этого в действии смотрите в моём блог посте

Рабочий процесс

Смотрите раздел Массовое сканирование вашей среды.

Часто задаваемые вопросы

  • Я не вижу все уязвимые приложения. Почему?
    • Основная причина, вероятно, связана либо с запуском не от пользователя root (требуется доступ к местам, где могут быть установлены ваши приложения), либо с тем, что вы указали правильный path. Рекомендуется запускать его от пользователя root и установить --path /.
  • Какие у него ограничения? Некоторые ограничения включают:
    • Инструмент не может окончательно утверждать, уязвимо ли данное приложение или нет. Вместо этого он определяет, содержит ли приложение версию библиотеки, которая является уязвимой.
    • Если обнаруженное приложение не работает в контейнере, инструмент не может определить, работает ли данное приложение. Так что даже инструмент командной строки, использующий уязвимую версию, будет обнаружен.
    • Инструмент требует SSH-доступа и поэтому не будет обнаруживать проблемы в системах, где он не может быть запущен.
  • Сопоставление контейнеров с образами не работает. Почему?
    • Начиная с версии v1.0.0, инструмент в настоящее время поддерживает сопоставление для следующих:

      • Docker (с драйвером хранения Overlay2)
      • Docker (с драйвером хранения aufs)
      • CRI-O
      • containerd

      Если вы используете что-то другое, сопоставление работать не будет. Если вы используете один из вышеперечисленных, возможно, вы запускаете инструмент не от пользователя root, или используемые сокеты/файлы находятся в нестандартном расположении.

  • Какие уязвимости он обнаруживает?
    • Хотя в первую очередь он нацелен на обнаружение версий log4j, которые могут быть подвержены CVE-2021-45105, он также помечает версии, уязвимые для CVE-2021-45046 и CVE-2021-44228.
  • Работает ли инструмент в Windows?
    • Хотя я этого не тестировал, он должен работать. Однако такие функции, как сопоставление файлов контейнеров с образами, специфичны для Linux.

Автор

Разработано: Osama Elnaggar

  • Веб-сайт: https://osamaelnaggar.com
  • Twitter: https://twitter.com/securityfu
  • LinkedIn: https://www.linkedin.com/in/osama-elnaggar-08230957
Скачать инструмент
ПолеПримерОписание
IP192.168.121.121Если у экземпляра несколько IP-адресов, добавляется основной IP
Hostnameserver3Имя хоста
AppNameОставляется пользователю для заполнения после завершения сканирования
TeamОставляется пользователю для заполнения после завершения сканирования
Ignore (Y/N)Оставляется пользователю для заполнения после завершения сканирования
CommentОставляется пользователю для заполнения после завершения сканирования
MD5Hash4e615cd580758b70c49ade1f79103328Уникальный отпечаток приложения
Timestamp2021-12-21T07:38:09ZВременная метка выполнения сканирования. Полезна при агрегации нескольких сканирований одного хоста
ContainertrueTrue = это контейнер
ContainerImageghcr.io/christophetd/log4shell-vulnerable-app:latestЕсли обнаружен контейнер, это соответствующий образ
FullPath/run/containerd/io.containerd.
runtime.v2.task/k8s.io/.../spring-boot-application.jar
Полный путь к находке. В этом примере уязвимый JAR-файл является частью fat / uber jar
Versionlog4j-core-2.14.1.jarОбнаруженная версия log4j-core
ПараметрОписание
--path value, -p valueУказывает, какие пути сканировать. По умолчанию сканирует текущую директорию. ВАЖНО: рекомендуется установить значение / для покрытия всей файловой системы
--no-banner, --nbПодавляет баннер
--no-messages, --nmПодавляет сообщения, такие как сообщения о прогрессе
--no-header, --nhПодавляет заголовок вывода CSV. Рекомендуется при запуске на нескольких серверах
--imd5 value, --im valueИгнорировать MD5-хэши. Подробнее об этом в разделе Списки игнорирования
--ipath value, --ip valueИгнорировать совпадения по пути к файлу. Подробнее об этом в разделе Списки игнорирования
--icimage value, --ic valueИгнорировать совпадения по образу контейнера. Подробнее об этом в разделе Списки игнорирования
--print-headers, --phПечатать только заголовки CSV. При запуске Log4Shell Sentinel на нескольких серверах и агрегации результатов обычно отключают вывод заголовков. Эта команда выводит только заголовок, чтобы вы могли добавить его в лист Excel
  • Есть ли внешние зависимости?
    • Нет. Бинарный файл статически скомпилирован.