log4jscanner 谷歌开源log4j漏洞扫描器

log4jscanner 谷歌开源log4j漏洞扫描器

log4jsscanner简介

用于分析 JAR 文件的 log4j 漏洞文件系统扫描器和 Go 包。[针对本地系统的jar包进行扫描]

log4jscanner 下载地址

①GitHub

②云中转网盘

https://yzzpan.com/#sharefile=Al20tnRv_26022
解压密码:www.ddosi.org

安装方法

预编译的二进制文件可作为发布资产使用

要使用现有的Go安装从源代码安装,请使用 go install

go install github.com/google/log4jscanner@latest

或者直接从 repo 构建:

git clone https://github.com/google/log4jscanner.git
cd log4jscanner
go build -o log4jscanner

使用方法

以exe为例

log4jscanner 谷歌开源log4j漏洞扫描器
用法: log4jscanner [flag] [目录]

log4j漏洞扫描器。扫描程序遍历提供的目录
试图找到易受攻击的jar文件。输出易受攻击的jar文件路径stdout。

Flags:

    -s, --skip     Glob pattern to skip when scanning (e.g. '/var/run/*'). Glob模式扫描时要跳过的目录(例如 '/var/run/*' )可能提供了很多次。
    -w, --rewrite  当检测到存在漏洞的jars时重写它们。
    -v, --verbose  输出详细信息

命令行工具

这个项目包括一个扫描目录,将任何检测到的 JAR 打印到标准输出。

$ log4jscanner ./jar/testdata
./jar/testdata/bad_jar_in_jar.jar
./jar/testdata/log4j-core-2.1.jar
./jar/testdata/log4j-core-2.12.1.jar
./jar/testdata/log4j-core-2.14.0.jar
./jar/testdata/log4j-core-2.15.0.jar
./jar/testdata/vuln-class.jar

或者,该--rewrite标志可以就地从检测到的 JAR 中主动删除易受攻击的类。

$ zipinfo /tmp/vuln-class.jar | grep Jndi
-rw-r--r--  3.0 unx     2937 bx defN 20-Nov-06 14:03 lookup/JndiLookup.class
-rw-r--r--  3.0 unx     5029 bx defN 20-Nov-06 14:03 net/JndiManager.class
-rw-r--r--  3.0 unx      249 bx defN 20-Nov-06 14:03 net/JndiManager$1.class
-rw-r--r--  3.0 unx     1939 bx defN 20-Nov-06 14:03 net/JndiManager$JndiManagerFactory.class
$ log4jscanner --rewrite /tmp
/tmp/vuln-class.jar
$ zipinfo /tmp/vuln-class.jar | grep Jndi
-rw-r--r--  3.0 unx     5029 bx defN 20-Nov-06 14:03 net/JndiManager.class
-rw-r--r--  3.0 unx      249 bx defN 20-Nov-06 14:03 net/JndiManager$1.class
-rw-r--r--  3.0 unx     1939 bx defN 20-Nov-06 14:03 net/JndiManager$JndiManagerFactory.class

在 MacOS 上,您可以使用以下命令扫描整个数据目录:

$ sudo log4jscanner /System/Volumes/Data

扫描器还可以通过传递 glob 模式来跳过目录。在 Linux 上,您可以选择扫描整个根文件系统,但跳过特定于站点的路径(例如/data/*目录)。默认情况下,log4jscanner 不会扫描魔法文件系统,例如 /proc 和 /sys。

$ sudo log4jscanner --skip '/data/*' /

对于大量定制,例如向外部端点报告,该工具的大部分逻辑都通过jar.WalkerAPI公开。

Package

解析逻辑可通过jar包获得,并可用于扫描存储在其他代码存储库中的资产。由于 JAR 使用 ZIP 格式,因此此包在archive/zip.Reader.

import (
	"archive/zip"
	// ...

	"github.com/google/log4jscanner/jar"
)

func main() {
	rc, err := zip.OpenReader(pathToJARFile)
	if err != nil {
		if errors.Is(err, zip.ErrFormat) {
			// File isn't a ZIP file.
			return
		}
		log.Fatalf("opening class: %v", err)
	}
	defer rc.Close()

	if !jar.IsJAR(&rc.Reader) {
		// ZIP file isn't a JAR file.
		return
	}

	result, err := jar.Parse(&rc.Reader)
	if err != nil {
		log.Fatalf("parzing zip file: %v", err)
	}
	if result.Vulnerable {
		fmt.Println("File is vulnerable")
	}
}

查看examples/完整程序的目录。

误报情况

已观察到扫描仪的误报。在自动重写 JAR 或根据扫描结果采取其他缓解措施时要小心。

如果您确实遇到了误报,请提交一个问题。

项目地址

GitHub

https://github.com/google/log4jscanner

转载请注明出处及链接

Leave a Reply

您的电子邮箱地址不会被公开。 必填项已用 * 标注