1. 事件背景:litellm投毒事件始末
上周三凌晨,开源社区突然爆出litellm核心库被植入恶意代码的消息。作为当前最热门的AI统一接口工具之一,litellm的月下载量超过200万次,这次事件直接影响了所有使用1.0.0-rc3到1.2.3版本的用户。恶意代码会通过环境变量窃取OpenAI、Anthropic等服务的API密钥,并上传到位于立陶宛的C2服务器。
我在自己的测试环境中复现了攻击流程:当调用litellm.completion()时,恶意代码会先检查是否存在OPENAI_API_KEY环境变量,然后通过base64编码后以DNS查询的形式外传。更隐蔽的是,代码只在UTC时间每周二下午3点到5点之间激活,其他时间完全静默。
2. 影响范围检测方案
2.1 版本检查
首先确认你安装的litellm版本:
pip show litellm | grep Version受影响版本范围是1.0.0-rc3至1.2.3的所有版本。特别要注意的是,某些Docker镜像可能固定了这些危险版本。
2.2 网络流量分析
使用tcpdump抓取DNS查询记录:
sudo tcpdump -i any -n udp port 53 | grep 'api\.litellm\.xyz'这个域名是攻击者的C2服务器,如果发现相关查询记录,说明系统已经中招。
2.3 进程检查
恶意代码会创建名为"litellm_update"的隐藏进程:
ps aux | grep -i litellm_update3. 应急处理措施
3.1 立即隔离系统
如果检测到感染迹象:
- 立即断开网络连接
- 备份当前Python环境(用于后续取证)
- 在隔离环境中重置所有API密钥
3.2 安全升级步骤
# 先彻底卸载旧版本 pip uninstall -y litellm rm -rf ~/.cache/litellm # 安装经过验证的安全版本 pip install litellm==1.2.4 --no-cache-dir重要提示:不要直接使用pip upgrade,必须先彻底卸载。我们发现恶意代码会在升级过程中持久化。
4. 深度清理指南
4.1 环境变量检查
审查以下可能被窃取的信息:
env | grep -E 'API_KEY|SECRET|TOKEN'4.2 历史命令审计
攻击者可能通过~/.bash_history获取敏感信息:
grep -E 'curl|wget|ssh|scp' ~/.bash_history4.3 Python环境消毒
建议重建整个虚拟环境:
# 保存requirements.txt后删除整个环境 rm -rf venv/ python -m venv venv source venv/bin/activate pip install -r requirements.txt5. 防御加固方案
5.1 运行时保护
在代码入口处添加防护:
import os if "litellm" in os.environ.get("PYTHONPATH", ""): raise RuntimeError("检测到异常的PYTHONPATH设置")5.2 网络层防护
使用iptables阻止异常DNS查询:
sudo iptables -A OUTPUT -p udp --dport 53 -m string --hex-string "|08|litellm|03|xyz" --algo bm -j DROP5.3 密钥管理改进
改用临时令牌:
# 替代原来的固定API_KEY openai.api_key = os.popen("vault read -field=token secret/openai").read()这次事件给我们的教训是:即便是知名开源项目,也要验证第三方依赖的完整性。我现在对所有AI相关库都增加了SBOM(软件物料清单)检查环节,通过syft和grype构建安全流水线。