
IPネットワークをスキャンし、log4jライブラリのCVE-2021-44228脆弱性の可能性があるホストを特定します。
IPネットワークをスキャンして、log4jライブラリのCVE-2021-44228脆弱性の可能性があるホストを特定します。
セキュリティ監査には、はるかに優れた高度なツールが多数ありますが、その多くは商用ペネトレーションソフトウェアや外部のサードパーティサービス/ソフトウェアを必要とします。
このスクリプトは、迅速かつ独立した小さなツールとして作成されています。サーバーやデバイスが100%安全であることを確認するものではありません。IT環境を監査するために使用すべき多くのツールの1つと考えてください。プライベートIPアドレスとパブリックIPアドレスの両方で使用できます。
このスクリプトはlog4shellエクスプロイトを実演するものではありません。害を及ぼしたり、リモートコードを実行しようとしたりすることはありません。
スクリプトは、User-Agent、X-Api-Version、X-Forwarded-For フィールドに特別な文字列を含むHTTPS(443で終わるポート)またはHTTP(その他のすべてのポート)リクエストを作成します。その特別な文字列は ${jndi:ldap://some_listen_host:port} という形式です。
脆弱なlog4jライブラリが「ユーザー -> サービス | ロードバランサー -> セキュリティ -> サーバー -> ロギング」という経路のどこかでユーザーアクティビティ(私たちのHTTPリクエスト)をログに記録するために使用されている場合、JNDI文字列を解析し、some_listen_host:port へのLDAPセッションを確立しようとします。
some_listen_host:port でトラフィックを監視し、そのようなパケットを確認した場合、その送信元をさらに調査する必要があります。
http(s)リクエストが送信されるデフォルトポートは、80、8080、443、8443です。
これら2つのホストは同じマシンでも構いません。
リスニングホストで、空いているTCPポートで受信したパケットをキャプチャするために tcpdump を起動します。例:
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 ネットワークをテストして、リスニングホスト 192.158.0.3 のポート 12345 へのTCP接続をトリガーしようとします。
リスニングホストで tcpdump の出力を監視します。log4jの脆弱性が疑われるターゲットは、JNDI文字列を解析してLDAP接続を確立しようとします。
すべてのポートをスキャンするのは非効率的で、非常に時間がかかります。log4jライブラリは多くの製品で使用されているため、まず環境で使用されているWebポートを特定してください。独自のポートリストを指定してスクリプトを実行してください。
スクリプトや他のツールが外部からlog4jの脆弱性を発見するのを妨げる要素は多すぎます。その一部は次のとおりです:ネットワークおよびサーバーファイアウォール、Webアプリケーションファイアウォール、カスタム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.