
[Moved to Codeberg] 취약한 log4j 인스턴스를 위한 간단한 로컬 스캐너

(Go로 작성되었습니다. 왜냐하면, 아시다시피, "한 번 작성하면 어디서나 실행되니까요.")
이 도구는 웹 애플리케이션과 같은 Java 소프트웨어 설치 환경에서 log4j 1.x 및 2.x의 취약한 인스턴스를 찾는 데 사용할 수 있는 간단한 도구입니다. JAR 및 WAR 아카이브를 검사하고 취약한 것으로 알려진 클래스 파일을 플래그로 표시합니다. 스캔은 재귀적으로 수행됩니다: 취약한 클래스 파일을 포함하는 JAR 파일을 포함하는 WAR 파일을 포함하는 WAR 파일도 제대로 플래그로 표시되어야 합니다.
현재 인식되는 취약점은 다음과 같습니다:
스캔 도구는 현재 Maven을 통해 얻은 알려진 빌드 산출물을 확인합니다. Linux 배포판에서 수행되는 것과 같은 소스에서의 재빌드는 인식되지 않을 수 있습니다.
또한 ZIP 아카이브 구조를 다시 작성하여 JAR 파일에서 악성 클래스를 패치하는 데 사용할 수 있는 간단한 패치 도구도 포함되어 있습니다.
태그가 지정된 릴리스에 대한 x86_64 Windows, Linux, MacOSX용 바이너리는 Releases 페이지에서 제공됩니다.
$ ./local-log4j-vuln-scanner [--verbose] [--quiet] \
[--ignore-v1] [--ignore-vulns=...] \
[--exclude /path/to/exclude …] \
[--scan-network] \
[--log /path/to/file.log] \
/path/to/app1 /path/to/app2 …
--verbose 플래그는 문제가 발견되지 않더라도 검사된 모든 .jar 및 .war 파일을 표시합니다.
플래그는 알려진 취약점 표시를 제외한 출력을 억제합니다.
--quiet--ignore-v1 플래그는 log4j 1.x 취약점 검사를 _제외_합니다.
--ignore-vulns 플래그는 특정 취약점 검사를 _제외_할 수 있게 합니다.
예: -ignore-vulns=CVE-2021-45046,CVE-2021-44832.
모든 알려진 취약점을 검사하려면 다음과 같이 빈 목록을 전달하세요:
-ignore-vulns=
--log 플래그는 모든 것을 stdout/stderr 대신 로그 파일에 기록할 수 있게 합니다.
--exclude 플래그를 사용하여 스캔에서 하위 디렉터리를 제외할 수 있습니다. 여러 번 사용할 수 있습니다.
--scan-network 플래그는 스캐너가 네트워크 파일 시스템을 검색하도록 지시합니다 (기본적으로 비활성화됨). 이 기능은 Windows에서는 구현되지 않았습니다.
취약점 중 하나를 나타내는 클래스 파일이 발견되면 다음과 같은 메시지가 표준 출력에 인쇄됩니다:
./local-log4j-vuln-scanner - a simple local log4j vulnerability scanner
Checking for vulnerabilities: CVE-2019-17571, CVE-2021-44228, CVE-2021-45105
examining /path/to/vuln/log4shell-vulnerable-app-0.0.1-SNAPSHOT.war
indicator for vulnerable component found in /path/to/vuln/Downloads/log4shell-vulnerable-app-0.0.1-SNAPSHOT.war::WEB-INF/lib/log4j-core-2.14.1.jar (org/apache/logging/log4j/core/net/JndiManager.class): JndiManager.class log4j 2.14.0-2.14.1 CVE-2021-44228, CVE-2021-45105
Scan finished
주의: 이 도구는 본인의 책임 하에 사용하고 원본 JAR 파일을 보관하세요.
$ ./local-log4j-vuln-patcher log4j-core-2.14.1.jar log4j-core-2.14.1-patched.jar
Filtering out org/apache/logging/log4j/core/pattern/MessagePatternConverter.class (log4j 2.14)
Filtering out org/apache/logging/log4j/core/net/JndiManager.class (log4j 2.14.0-2.14.1)
Writing to log4j-core-2.14.1-patched.jar done
Go 컴파일러를 설치하세요.
체크아웃된 저장소에서 다음 명령을 실행하세요:
go build -o local-log4j-vuln-scanner ./scanner
go build -o local-log4j-vuln-patcher ./patcher
(Windows 시스템에서는 물론 적절한 .exe 확장자를 추가하세요.)
GNU General Public License, version 3
Hilko Bengen <[email protected]>