AI漏洞扫描配置:用Trivy扫描容器镜像与依赖漏洞
AI漏洞扫描配置的目标不是装一个工具就结束,而是让每次扫描都有明确的对象、规则和可复查的结果。
对于部署在容器或服务器上的AI服务,最直接的切入点是扫描运行镜像和依赖包中的已知漏洞。
下面以开源工具Trivy为例,说明从安装到验证的完整配置过程,适用于Linux服务器和常见容器环境。
开始前先确认扫描对象和权限
Trivy可以扫描容器镜像、本地文件系统、代码仓库中的依赖锁文件。
开始前需要明确:
- 要扫描的是正在运行的镜像,还是准备构建的新镜像;
- 服务器是否已安装Docker或Podman,因为扫描远程镜像需要容器运行时配合;
- 当前账号是否有权限读取镜像和本地目录;
- 扫描结果是否需要保存为文件,供后续对比和审计。
如果只是临时检查,直接扫描本地镜像即可;
如果希望纳入发布流程,建议把扫描命令和退出码写进CI脚本,让高危漏洞阻断构建。
安装Trivy并做一次基线扫描
在Debian或Ubuntu系统上,可以用官方仓库安装,也可以下载二进制。
以下命令以二进制安装为例,先确认系统架构再下载:
uname -m
输出x86_64时下载amd64版本。
安装到/usr/local/bin:
TRIVY_VERSION=$(curl -s https://api.github.com/repos/aquasecurity/trivy/releases/latest | grep tag_name | cut -d'"' -f4)
wget https://github.com/aquasecurity/trivy/releases/download/${TRIVY_VERSION}/trivy_${TRIVY_VERSION#v}_Linux-64bit.tar.gz
tar -zxvf trivy_*_Linux-64bit.tar.gz
sudo mv trivy /usr/local/bin/
trivy --version
trivy --version能输出版本号即安装成功。
接着扫描一个本地镜像,例如my-ai-service:latest:
trivy image my-ai-service:latest
首次运行会下载漏洞数据库,需要能访问外网。
扫描完成后会按严重级别列出漏洞,包括包名、当前版本、修复版本和漏洞编号。
这一步是基线,用于判断当前镜像是否存在高危问题。
把扫描结果固定成可复查的报告
临时输出不利于对比,建议把结果保存为JSON或表格文件,并只关注有修复版本的漏洞。
例如:
trivy image --format json --output trivy-report.json my-ai-service:latest
如果只想看高危和严重漏洞,可以用严重级别过滤:
trivy image --severity HIGH,CRITICAL --format table my-ai-service:latest
在CI中,可以用--exit-code 1让存在高危漏洞时命令返回非零,从而阻断流水线:
trivy image --severity HIGH,CRITICAL --exit-code 1 my-ai-service:latest
注意:--exit-code只表示“发现符合条件的漏洞”,不代表漏洞一定可利用。
是否阻断发布需要结合业务判断,避免因为误报导致正常构建失败。
扫描依赖文件和文件系统
AI服务除了容器镜像,还可能在虚拟环境或代码目录中安装依赖。
Trivy支持扫描requirements.txt、package-lock.json、poetry.lock等文件。
进入项目目录后执行:
trivy fs --scanners vuln .
如果只想扫描特定依赖文件,可以指定路径:
trivy fs --scanners vuln ./requirements.txt
扫描结果同样可以用--severity和--format json控制输出。
对于AI项目,重点检查深度学习框架、推理服务依赖和Web框架的版本,这些组件往往直接暴露在请求链路上。
常见报错和避坑点
- 下载漏洞数据库失败:检查服务器DNS和出网策略。Trivy默认访问GitHub和GHCR,如果网络受限,需要配置代理或使用离线数据库。
- 镜像扫描提示找不到镜像:确认镜像名和标签正确,本地镜像可用
docker images查看。扫描远程镜像时确保Docker守护进程可访问。 - 扫描速度慢:首次下载数据库较慢,后续会缓存。可以设置
TRIVY_CACHE_DIR指定缓存目录,避免重复下载。 - 误报处理:某些漏洞在特定运行环境下不可利用,可以通过
.trivyignore文件忽略指定漏洞编号,但必须记录忽略原因和复查日期,不能默认全部忽略。 - 不要只扫一次:漏洞数据库每天更新,建议至少每周扫描一次生产镜像,或在每次构建时自动扫描。
验证配置是否生效
完成上述配置后,用以下方式确认扫描链路可用:
- 执行
trivy image --severity CRITICAL my-ai-service:latest,确认能输出结果或明确提示无严重漏洞; - 检查生成的JSON报告是否包含
Vulnerabilities字段和修复版本信息; - 在CI中故意使用一个带已知高危漏洞的旧镜像,确认
--exit-code 1能让流水线失败; - 查看
.trivyignore中的忽略项是否都有注释和复查日期。
如果扫描结果为空,先确认镜像是否真的没有漏洞,还是数据库下载失败或扫描对象路径错误。
用trivy image --debug可以看到详细过程。
常见疑问
Trivy能扫描AI模型文件本身吗?
不能。Trivy主要扫描操作系统包、语言依赖和容器层中的已知漏洞,不分析模型权重或提示词内容。模型安全需要另外的测试方法。
扫描结果里的漏洞必须全部修复吗?
不一定。优先处理有修复版本且位于对外服务路径上的高危漏洞。没有修复版本的漏洞需要评估暴露面,并记录接受风险的理由。
能否在离线服务器上使用?
可以。需要提前下载漏洞数据库和镜像,或使用Trivy的离线模式。具体方式参考官方文档中关于--offline-scan和数据库缓存的说明。
扫描频率怎么定?
建议每次构建镜像时自动扫描,生产环境每周至少复查一次。如果出现新的高危漏洞公告,应临时增加一次扫描。