Static Token And Credential Scanner
STACS 是一个基于 YARA 的静态凭据扫描器,支持二进制文件格式、嵌套归档分析、可组合的规则集和忽略列表,以及 SARIF 报告。
目前,STACS 支持递归解包以下格式:
由于 STACS 基于检测到的文件类型工作,使用这些格式的专有文件格式和其他文件类型会自动得到支持。这包括 Docker 镜像、Android APK、Java JAR 文件、RPM、Debian 软件包 (.deb)、macOS 软件包 (.pkg) 等等!
STACS 专为发布二进制工件的团队设计。STACS 使开发人员能够自动检查其发布中是否意外包含静态凭据和密钥材料。
然而,这并不意味着 STACS 无法帮助 SaaS 应用、企业软件甚至源代码!
例如,STACS 可用于查找上传到公共和私有容器注册中心的 Docker 镜像中的静态凭据。它还可用于查找意外编译到可执行文件、移动设备软件包以及“企业归档”(例如 Java 应用服务器所使用的)中的凭据。
STACS 使用运行时提供的“规则包”来检测静态凭据。这些规则包定义了一组 YARA 规则,用于针对提供给 STACS 的文件运行。当发现与规则匹配时,会生成一个“发现项”。这些发现项代表文件中的潜在凭据,并报告给开发者进行修复或“忽略”。
如果发现项被确认为误报——即匹配到非真实凭据的内容——开发者可以生成一组“忽略列表”,以确保这些匹配不会出现在未来的报告中。
STACS 的真正力量来自对嵌套归档的自动检测和解包,以及可组合的忽略列表和规则包。
为了允许灵活和协作的使用,STACS 支持可组合的忽略列表。这允许一个忽略列表包含其他忽略列表,从而能够根据组织指南组合成一个“忽略树”。这些忽略列表在多个团队使用相同框架或产品的组织中特别有用。如果一个团队已经将一个发现项标记为误报,其他团队就能受益于无需处理相同的发现项。
与忽略列表类似,规则包也是可组合的。这使得组织能够定义一套供所有团队使用的基线规则,同时仍然允许团队维护特定于其产品的规则集。
使用 STACS 最简单的方式是使用发布到 Docker Hub 的 Docker 镜像。不过,STACS 也可以直接从 Python 的 PyPI 安装,或者通过克隆此仓库安装。请参阅下面的相关章节开始使用!
基于云的服务即将推出,它允许直接集成到构建和发布管道中,从而在发布前检测静态凭据!
使用已发布的镜像,STACS 可以立即用于扫描工件!STACS Docker 镜像提供了多个卷挂载点,用于将需要扫描的文件直接挂载到扫描容器中。
例如,要扫描当前文件夹中的所有内容,可以运行以下命令(必须安装 Docker)。
docker run \
--rm \
-v "$(pwd):/mnt/stacs/input:ro" \
stacscan/stacs:latest
如果你希望获得“漂亮”的可读输出,应使用以下命令:
docker run \
--rm \
-e STACS_OUTPUT_PRETTY=1 \
-v "$(pwd):/mnt/stacs/input:ro" \
stacscan/stacs:latest
默认情况下,STACS 会以 SARIF 格式将所有发现项输出到 STDOUT,并且为了保持有序,所有日志消息将发送到 STDERR。对于更高级的用例,还提供了其他几个卷挂载点。这些允许用户控制要使用的规则包、忽略列表和缓存目录。
STACS 也可以直接从 Python 的 PyPI 安装。这提供了一个 stacs 命令,开发者可以使用它在本地开发环境中直接扫描项目。
可以通过以下命令直接从 PyPI 安装 STACS:
pip install stacs
请注意: STACS 的 PyPI 版本不附带任何规则。还需要从社区规则仓库克隆这些规则,STACS 才能正常工作!
还没有。不过,有计划推出托管版本的 STACS,它可以轻松集成到现有构建系统中,并包含额外的预构建规则包和忽略列表。
不幸的是,误报是检测静态凭据过程中不可避免的副作用。如果规则过于精细,则规则维护会变成负担,并且 STACS 可能会遗漏凭据。如果规则过于粗糙,则 STACS 可能会产生太多误报!
为了提供帮助,STACS 提供了多种工具来帮助减少最终报告中出现的误报数量。
主要地,STACS 提供了一种机制,允许用户定义可组合的忽略列表,从而可以“忽略”一组发现项。这些规则可以像基于模式忽略所有文件那样粗略,也可以像忽略文件中特定行的特定发现项那样细致。
这些信息会自动传播到报告中,因此“已忽略”的发现项将在 SARIF 输出中标记为“已抑制”,同时输出中还会包含忽略原因以便跟踪。
如果使用“漂亮”输出(--pretty / STACS_OUTPUT_PRETTY),结果将以人类可读格式打印到控制台。

如果使用 SARIF,有许多可用的查看器可以使这些数据更易读,例如微软提供的这个出色的基于 Web 的查看器。下面是一个 Docker 容器镜像的发现项示例:

不幸的是,这似乎是由于 Docker Desktop for Mac 的限制所致。绑定挂载的 I/O 非常非常慢。