
Сканируйте вашу IP-сеть и определите хосты с возможной уязвимостью CVE-2021-44228 в библиотеке log4j.
Сканируйте свою IP-сеть и определяйте хосты с возможной уязвимостью CVE-2021-44228 в библиотеке log4j.
Существуют гораздо более совершенные и продвинутые инструменты для аудита безопасности, но многие из них требуют коммерческого пентест-ПО или внешних сторонних сервисов.
Этот скрипт написан как быстрый и самостоятельный маленький инструмент. Он не подтвердит, что ваши серверы и устройства на 100% безопасны. Воспринимайте его как один из многих инструментов, которые следует использовать для аудита вашей ИТ-среды. Может использоваться как на частных, так и на публичных IP-адресах.
Скрипт не является демонстрацией эксплойта log4shell. Он не наносит никакого вреда и не пытается выполнить удалённый код.
Скрипт создаёт HTTPS-запрос (порты, оканчивающиеся на 443) или HTTP-запрос (все остальные порты) со специальной строкой в полях: User-Agent, X-Api-Version и X-Forwarded-For. Эта строка имеет формат ${jndi:ldap://some_listen_host:port}.
Если уязвимая библиотека log4j используется для логирования действий пользователя (нашего HTTP-запроса) где-то по пути «пользователь -> сервис | балансировщики нагрузки -> безопасность -> серверы -> логирование», она распарсит строку JNDI и попытается установить LDAP-сессию на наш some_listen_host:port.
Если мы мониторим трафик на some_listen_host:port и замечаем такие пакеты, их источник следует проверить дополнительно.
Порты по умолчанию, на которые отправляются HTTP(S)-запросы: 80, 8080, 443 и 8443.
Эти два хоста могут быть одной и той же машиной.
На слушающем хосте запустите tcpdump для захвата пакетов, принимаемых на каком-нибудь свободном TCP-порту. Пример:
tcpdump -nn -i ens160 tcp port 12345
На хосте Linux запустите скрипт с необходимыми параметрами. Пример:
./log4j-quick-scan.py -e 192.168.0.3:12345 192.168.0.0/24"
Это протестирует сеть 192.168.0.0/24, пытаясь вызвать TCP-соединение к слушающему хосту 192.158.0.3 на порт 12345.
Мониторьте вывод tcpdump на слушающем хосте. Цели, подозреваемые в уязвимости log4j, распарсят строку JNDI и попытаются установить LDAP-соединение.
Сканировать все порты неэффективно и крайне медленно. Поскольку библиотека log4j используется во многих продуктах, сначала определите, какие веб-порты используются в вашей среде. Запускайте скрипт со своим собственным списком портов.
Существует слишком много элементов, которые могут помешать скрипту и другим инструментам обнаружить уязвимость log4j извне. Некоторые из них: сетевые и серверные межсетевые экраны, веб-приложения, пользовательские TCP-порты, программное обеспечение/сервисы, не логирующие события низкой серьёзности (например, наш обычный HTTP-запрос), скрипт обращается по IP-адресу вместо требуемого имени хоста и т.д.
Всегда проверяйте уведомления разработчиков открытого ПО или вендоров о деталях проблемы log4j.
usage: log4j-quick-scan.py [-h] [-V] -e LISTENHOST [-p PORTS] [-l LOG] target
Scan hosts with log4j+jndi doing external connections.
required arguments:
-e LISTENHOST, --listenhost LISTENHOST
Host[:port] where to monitor tcp connections. It could be the same machine where script is to be run.
optional arguments:
-h, --help show this help message and exit
-V, --version Display version and exit.
-p PORTS, --ports PORTS
Optional, comma separated list of ports on tested hosts. Default: 80,8080,443,8443
-l LOG, --log LOG Optional, append output to custom log file. Default: ./log4j-quick-scan.log
positional arguments:
target Scan target: IP network in CIDR format.