从零编写AI安全审计脚本:权限、密钥与依赖全扫描
为什么要做AI安全审计
很多AI项目跑在服务器上,但容易忽视基础安全问题:模型文件权限过大、硬编码的API密钥、过时的依赖库。
一份简单的审计脚本能帮你自动扫描这些风险点,避免数据泄露或服务器被入侵。
本文适合刚接触服务器运维或AI部署的新手,按步骤写一个集成三大检查的Shell脚本。
审计脚本的准备工作
在开始前,确认你的服务器满足这些条件:
- 操作系统:Linux(Ubuntu 20.04+ 或 CentOS 7+)
- 已安装bash和python3
- 拥有sudo权限或至少能读目标目录
如果审计的是线上服务,建议先在开发环境测试脚本。
准备好以下信息:
- AI项目存放路径(例如 /opt/ai-project)
- 模型文件常见后缀(.h5, .pth, .bin 等)
- 可能存放密钥的配置文件或环境变量文件
第一步:编写模型权限检查模块
模型文件如果允许所有人都能读写,可能被恶意篡改或窃取。
新建文件 ai_security_audit.sh,写入以下片段:
#!/bin/bash
# 模型文件权限检查
MODEL_DIR="/opt/ai-project/models"
echo "[1] 检查模型文件权限..."
find "$MODEL_DIR" -type f \( -name "*.h5" -o -name "*.pth" -o -name "*.bin" \) -exec ls -la {} \; 2>/dev/null | awk '$1 ~ /^-r[w-]{2}[r-]{2}[r-]{2}/ {print $9 " 权限: " $1}'
上面的命令会列出所有模型文件及其权限。
正常应该只有属主或属组才有写权限(比如 -rw-r-----)。
如果出现 -rw-rw-rw- 或 -rwxrwxrwx,说明权限过高。
第二步:添加API密钥扫描功能
AI项目经常在配置文件或环境变量里放了云平台密钥、数据库密码。
我们可以用常见的正则表达式去搜索这些敏感字符串。
在同一个脚本里追加:
# API密钥/令牌扫描
KEYWORDS=("sk-" "AKIA" "token=" "password=" "secret=")
AUDIT_FILES=("/opt/ai-project/.env" "/opt/ai-project/config.py" "/opt/ai-project/app/config.json")
echo "[2] 扫描API密钥和敏感信息..."
for file in "${AUDIT_FILES[@]}"; do
if [ -f "$file" ]; then
for key in "${KEYWORDS[@]}"; do
matches=$(grep -n "$key" "$file" 2>/dev/null)
if [ -n "$matches" ]; then
echo "发现敏感字符串 '$key' 在文件 $file:"
echo "$matches" | head -5
fi
done
fi
done
这段代码只做示例,实际应更精细地过滤注释行和常见误报。
扫描结果会提示哪些文件里含有疑似密钥的字符串,你需要人工确认是否属于硬编码风险。
第三步:检测依赖库漏洞
AI项目常用pip安装PyTorch、TensorFlow等。
这些库可能含有已知CVE漏洞。
在脚本里调用pip审计功能:
# 依赖漏洞检查 (需要pip-audit或safety)
echo "[3] 检查Python依赖漏洞..."
if command -v pip-audit &>/dev/null; then
pip-audit -r /opt/ai-project/requirements.txt 2>&1 | grep -E "(found|vulnerability|fixed)"
elif command -v safety &>/dev/null; then
safety check -r /opt/ai-project/requirements.txt 2>&1 | grep -v "OK"
else
echo "建议安装 pip-audit: pip install pip-audit"
fi
如果没有安装这些工具,脚本会提醒。
你也可以在脚本开头自动安装:
pip install pip-audit -q
但注意线上环境安装可能提示冲突,建议提前装好。
运行脚本与结果验证
给脚本执行权限并运行:
chmod +x ai_security_audit.sh
./ai_security_audit.sh 2>&1 | tee audit_report.txt
输出日志会保存在 audit_report.txt 里。
重点关注:
- 权限过高条目:用
chmod 640或chmod 600修正 - 密钥泄漏:立即从代码和.git历史中移除,并轮换密钥
- 依赖漏洞:根据提示升级到修复版本
你可以定期(如每天cron)运行这个脚本,实现自动化审计。
避坑指南
- 不要在生产环境直接安装
pip-audit:如果服务器是纯内网或强依赖锁定版本,建议先在测试环境验证兼容性。 - 密钥检测有误报:比如程序中用的示例密钥
sk-test也会被扫出来。建议在脚本中加入白名单或仅输出可疑项,人工复核。 - 权限检查要递归子目录:上面的
find命令默认递归,但如果你只扫描顶层目录,记得加-maxdepth调整深度。 - 审计脚本本身不要暴露密钥:脚本里的路径和关键词不能含有真实敏感信息。
常见问题解答 (FAQ)
Q:没有模型文件目录,能审计什么?
A:可以跳过模型检查,专注密钥和依赖。建议先确认AI项目实际存储路径。
Q:扫描出很多密钥,怎么快速处理?
A:先在.gitignore里排除.env等文件,然后用git filter-branch或bfg工具清理历史。同时在云平台控制台轮换密钥。
Q:依赖漏洞告警太多,是否都要升级?
A:优先升级远程代码执行(RCE)和高危漏洞。如果升级会破坏兼容性,考虑使用防火墙或WAF做临时缓解。
总结与后续建议
本文写的AI安全审计脚本覆盖了文件权限、密钥泄露和依赖漏洞三个常见风险点。
你可以根据自己的项目结构调整目录和文件列表。
如果还想进一步检查Docker镜像安全、容器逃逸风险,可以结合trivy或docker scan。
建议将审计脚本加入CI/CD流水线,每次部署前自动触发安全扫描,防患于未然。