管道curl到sh的安全隐患解析
问题概述
许多流行工具的主页都会提供类似的一行命令:
|
|
总有人评论说这种做法不安全。但真的比克隆仓库、构建并运行代码更不安全吗?
安全隐患分析
网络中断风险
简单的安装脚本:
|
|
如果网络连接在"步骤2"命令到达前中断,就会只执行了步骤1而没有执行步骤2。
更危险的例子:
|
|
如果网络在恰当时机中断,可能导致rm -rf ~命令执行不完整。
服务器检测与差异化响应
存在一种巧妙攻击:脚本可能让bash缓慢读取,导致curl产生背压,服务器可以检测到这一点,并提供与直接下载不同的脚本内容。这种攻击感觉"难以检测",因此格外可怕。
验证缺失
这种方式完全消除了比较下载内容校验和与给定签名的可能性。而使用Git时,Merkle树能确保你获取与其他人都相同的源码/脚本。
对比分析
与源码安装对比
- 构建源码至少知道用于生成二进制文件的代码
- 包管理器通常能保证完全卸载工具
- curl到bash通常不支持哈希验证,可能第一天安全安装,第二天网站被入侵就获得恶意软件
针对性攻击风险
恶意服务器可能通过IP地址识别你或你的雇主,向你发送恶意脚本,而向其他人发送良性脚本。同样的担忧也适用于从互联网下载任何脚本或可执行文件。
解决方案
正确做法
|
|
更安全的方法
|
|
这种方式相比curl | sh有几个优势:
- 在mac上绕过gatekeeper/公证
- 防恶意软件工具可以获取文件哈希并可能阻止执行
- 至少有一些东西可以逆向分析以弄清楚它做了什么
现实考量
大项目可能会正确处理这些问题,但并非所有人都会。即使是明显的安全措施,如果假设不再适用于更改后的代码或基础设施,安全性也只是想象。