
Meles 发布容器镜像恶意软件扫描器,可逐层扫描并拦截未扫描的 Pod
来源标题:Meles – malware scanner for container images, layer by layer
Meles 是一款针对容器镜像的恶意软件扫描器,可逐层检查镜像内容,无需 Docker daemon。它支持 CLI、CI、Web UI 和 Kubernetes Operator,能在集群中扫描每个 Pod 的镜像,并可选地拦截新 Pod 直到镜像扫描完成。项目以欧洲獾命名,强调与漏洞扫描器和 Falco 等运行时检测互补而非替代。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
meles 是一款针对容器镜像的恶意软件扫描器:只需对镜像引用执行一条命令,无需 Docker 守护进程,退出码对 CI 友好。在 Kubernetes 中,它还会扫描 Pod 运行的每一个镜像;如果你愿意,还可以暂缓新 Pod 启动,直到其镜像扫描完成。
meles 在镜像运行之前检查其内容。它补充漏洞扫描器和 Falco 这类运行时检测,但不替代二者。名字来自 Meles meles,也就是欧洲獾——它会一层层地挖掘镜像。
CLI 与 CI:meles image <ref> 在发现恶意软件时让流水线失败。输出支持表格、JSON 或 SARIF,并可为误报设置忽略规则。
Web UI:快速扫描、cron 定时任务、运行历史以及整个集群的报告。
Operator:扫描每个 Pod 的镜像,并在工作负载旁写入 MalwareReport,可选启用 Prometheus 告警。
扫描门禁:可选功能,按命名空间暂缓新 Pod 启动,直到其镜像扫描完成,并固定已扫描的 digest。
Harbor:作为可插拔扫描器扫描每一个推送的镜像,也可与 Trivy 串联生成一份报告。
TL;DR
在你的机器上试用(Linux amd64、Docker、bash):
curl -fsSL https://github.com/movray/meles/releases/download/v0.3.3/meles_0.3.3_linux_amd64.tar.gz | tar -xz meles
docker run -d --name clamd -p 127.0.0.1:3310:3310 clamav/clamav:1.4
export MELES_CLAMD=tcp://127.0.0.1:3310
until (exec 3<>/dev/tcp/127.0.0.1/3310 && printf 'zPING\0' >&3 && head -c4 <&3 | grep -q PONG) 2>/dev/null; do sleep 5; done
./meles selftest
./meles image alpine:3.20
或者在集群中(需要集群管理员权限、一个默认 StorageClass、节点上约 2 GB 空闲内存):
kubectl create namespace meles
kubectl label namespace meles pod-security.kubernetes.io/enforce=baseline
helm install meles oci://ghcr.io/movray/charts/meles --version 0.3.3 -n meles --set operator.enabled=true
kubectl -n meles rollout status deploy/meles-clamd --timeout=15m
kubectl get malwarereports -A # every image running in your cluster
kubectl -n meles port-forward svc/meles-server 8080:80 # http://localhost:8080/
Operator 现在会拉取并扫描每个 Pod 的镜像,这会占用你各镜像仓库的拉取配额;它只生成报告,不会触碰你的 Pod。报告会在几分钟内出现。非常大的二进制文件可能以 Incomplete 结束,而它绝不等于 clean:参见 Reading the results。
port-forward 只是查看界面的最快方式。若需长期使用,请通过 server.ingress 或 server.httpRoute 暴露 UI,并用 server.oauth2Proxy 在前面加上登录,这些都在 chart 的 values 中配置:
Web UI 的登录。meles 自身没有登录功能,因此不要在未加登录的情况下暴露 UI。
从被后续层隐藏的文件到 Kubernetes 中的扫描门禁,逐步导览:docs/getting-started.md。
镜像扫描器通常覆盖漏洞、错误配置和密钥;meles 增加了恶意软件检测。
meles 会分别扫描每一层,而不仅仅是最终文件系统。被后续层删除的文件(whiteout)仍随镜像一起分发,仍会被发现,并附带添加它的层和删除它的层。
多架构镜像的所有平台默认都会被扫描:否则 amd64 CI runner 会漏掉 arm64 变体中的恶意软件。
不使用 Docker socket:镜像直接从仓库拉取。
扫描由 ClamAV 的 clamd 通过其 socket 协议完成。meles 不链接 libclamav,并保持 Apache-2.0 许可。
除 ClamAV 的签名外,Helm chart 还附带约 140 条精选 YARA 规则,用于检测挖矿程序、Linux 恶意软件、webshell 以及对容器的攻击,同样由 clamd 运行。
默认情况下 meles 只生成报告,且从不删除任何东西。它不能替代镜像签名、SBOM 或运行时检测。
docs/getting-started.md:逐步导览,从第一次扫描到集群中的扫描门禁
docs/results.md:Clean、Infected、Incomplete 和 Error 分别意味着什么,Clean 不保证什么,限制与误报
docs/popular-images.md:扫描 47 个热门镜像和 14 个已知恶意镜像的结果
本 README:使用 meles(CLI、Web UI、Kubernetes、Harbor)
docs/architecture.md:工作原理、状态存放位置、安全模型、设计决策
docs/development.md:构建、测试、发布
docs/architecture.md#planned-improvements:已规划但尚未实现的内容
CONTRIBUTING.md:issue 和 pull request
SECURITY.md:私下报告漏洞
安装
每个 release 都附带 Linux 和 macOS 的二进制文件(amd64、arm64)、多架构镜像和 Helm chart:
VERSION=0.3.3
# Binary
curl -fsSLO https://github.com/movray/meles/releases/download/v$VERSION/meles_${VERSION}_linux_amd64.tar.gz
tar -xzf meles_${VERSION}_linux_amd64.tar.gz meles
# Image (linux/amd64, linux/arm64; no shell, runs as non-root)
docker run --rm ghcr.io/movray/meles:$VERSION version
# Helm chart (see Kubernetes below)
helm install meles oci://ghcr.io/movray/charts/meles --version $VERSION -n meles -f my-values.yaml
# From source
go install github.com/movray/meles/cmd/meles@v$VERSION
二进制文件、镜像和 chart 由 release workflow 构建,并带有签名的构建来源证明。镜像在发布前会使用 meles 和 Trivy 扫描。使用 GitHub CLI 检查来源证明:
gh attestation verify meles_${VERSION}_linux_amd64.tar.gz -R movray/meles
gh attestation verify oci://ghcr.io/movray/meles:$VERSION -R movray/meles
gh attestation verify oci://ghcr.io/movray/charts/meles:$VERSION -R movray/meles
镜像和 chart 还使用 cosign(无密钥)签名,因此 Kyverno 或 Sigstore policy-controller 这类准入策略可以检查它们。签名是以 OCI referrer 形式存储的 Sigstore bundle:请使用 cosign 3 验证(cosign 2 需要 --new-bundle-format):
cosign verify ghcr.io/movray/meles:$VERSION \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
--certificate-identity-regexp '^https://github.com/movray/meles/\.github/workflows/release\.yml@refs/tags/v'
快速开始
你需要一个正在运行的 clamd。使用 apt install clamav-daemon 后,meles 会找到它的
(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。