此仓库包含一组 YARA 规则,通过查找受影响版本中出现的若干特征,来检测易受 CVE-2021-44228、CVE-2021-45046 和/或 CVE-2021-45105 影响的 log4j 版本。
此工具可递归处理 Docker 镜像、系统软件包、文件系统镜像,甚至安装介质等二进制文件。有关受支持文件格式的完整列表,请参阅"工作原理"一节。
JndiManager 构造函数的特征(< 2.15.0)。JndiManager 的 Interpolator 类(< 2.16.0)。ConfigurationStrSubstitutor 的 AbstractConfiguration 类(< 2.17.0)。尽管已有大量资源可用于通过 CodeQL 或 Semgrep 检测 log4j 的不安全使用,但截至目前,仍没有可用于检测二进制制品中潜在易受攻击的 log4j 版本的资源。
这给运行非内部开发的企业应用程序的组织带来了挑战,或者对于执行初始分类的团队而言,源代码无法立即获取。
由于此漏洞很可能出现在各种"意想不到"的地方,此工具旨在帮助检测已编译制品中易受攻击的 log4j 版本,随后可对这些制品进行人工审查以确定可利用性。
混淆代码将导致漏报(false negative),即由于使用了混淆技术,无法检测到潜在易受攻击的组件。
要运行此工具,请克隆此仓库并按照以下步骤操作。此操作假设已安装 Docker 和 jq。
artifacts/ 文件夹中./quickstart.sh)或者,可以使用以下命令自定义运行:
docker run \
--rm \
--mount type=bind,source=$(pwd)/artifacts,target=/mnt/stacs/input \
--mount type=bind,source=$(pwd)/rules,target=/mnt/stacs/rules \
stacscan/stacs:latest \
--rule-pack "/mnt/stacs/rules/vulnerability.json" \
"/mnt/stacs/input"
如果您只想查找 CVE-2021-44228,可以使用以下命令:
docker run \
--rm \
--mount type=bind,source=$(pwd)/artifacts,target=/mnt/stacs/input \
--mount type=bind,source=$(pwd)/rules,target=/mnt/stacs/rules \
stacscan/stacs:latest \
--rule-pack "/mnt/stacs/rules/CVE-2021-44228.json" \
"/mnt/stacs/input"
如果您只想查找 CVE-2021-45046,可以使用以下命令:
docker run \
--rm \
--mount type=bind,source=$(pwd)/artifacts,target=/mnt/stacs/input \
--mount type=bind,source=$(pwd)/rules,target=/mnt/stacs/rules \
stacscan/stacs:latest \
--rule-pack "/mnt/stacs/rules/CVE-2021-45046.json" \
"/mnt/stacs/input"
如果您只想查找 CVE-2021-45105,可以使用以下命令:
docker run \
--rm \
--mount type=bind,source=$(pwd)/artifacts,target=/mnt/stacs/input \
--mount type=bind,source=$(pwd)/rules,target=/mnt/stacs/rules \
stacscan/stacs:latest \
--rule-pack "/mnt/stacs/rules/CVE-2021-45105.json" \
"/mnt/stacs/input"
此工具也可以在不使用 Docker 的情况下运行。请参阅 STACS 的安装说明,了解如何在不使用 Docker 的情况下安装 STACS。
要扫描 Docker 镜像,首先需要将其导出到 artifacts 目录中再进行扫描。可以使用以下命令完成此操作:
IMAGE="alpine:latest"
NAME="alpine_latest"
docker export $(docker create ${IMAGE}) -o artifacts/${NAME}.tar
或者,可以仅使用以下命令导出正在运行的容器:
# Replace CONTAINER_ID with the correct container identifier.
CONTAINER_ID="c29209118f9a"
NAME="widget_example"
docker export ${CONTAINER_ID} -o artifacts/${NAME}.tar
您需要调查应用程序中 log4j 的使用情况,以判断该产品是否存在漏洞。如果由于无法访问源代码或其他原因而无法做到这一点,您应检查供应商是否已就此发布任何公告。
无法保证包含易受攻击版本的 log4j 就意味着该产品一定存在漏洞!
如果找不到任何公告,您应联系供应商,询问此漏洞对该产品的影响。
另请参阅 log4j 项目发布的缓解措施。或者,更推荐的做法是升级到不受影响的 log4j 版本。
尽管并非为此目的而设计,此工具使用 STACS 引擎进行批量二进制分解和分析。
STACS 是一款由 YARA 驱动的静态凭据扫描器,支持二进制文件格式、嵌套压缩包分析、可组合规则集和忽略列表,以及 SARIF 报告。
例如,此工具可以分析包含已导出 Docker 镜像的 tar 包,而该镜像的文件系统中某处包含受此漏洞影响的 JAR 文件。
它还可以分析嵌套的 tar、jar、war、ear、zip、apk、bz2、tgz、xz、rpm、iso 等格式。
请提交一个 GitHub issue 描述该问题,并尽可能附上受影响的二进制制品的链接。
也非常欢迎提交拉取请求(Pull Request)来调整规则集!
请参阅 validation/ 目录,其中包含此规则集验证产生的一组日志文件。