一键脚本审计指南:curl 管道执行之前该做的 5 步

bash <(curl -fsSL http://某脚本) 这一行,等于把 root 权限交给一个你不认识的人。90% 的人不会先看一眼。这篇给一套 10 分钟能走完的审计流程:不装、先看、沙箱验证、最后才执行。

一、先搞清这一行在干什么

curl 从网络拉一段文本,bash <(...) 把它当成脚本执行。整个过程没有哈希校验、没有签名,以当前用户身份(通常是 root)运行,可以读 SSH 私钥、改防火墙、写 systemd、装定时任务。而且脚本内容随时可能被替换——你今天看过的和明天跑的不是同一份。

二、第一步:只下载,不执行

curl -fsSL http://example.com/install.sh -o install.sh
ls -lh install.sh
sha256sum install.sh
head -40 install.sh
file install.sh

三、第二步:关键词扫描

grep -nE 'curl|wget' install.sh                  # 二次下载了什么
grep -nE 'base64 -d|xxd -r|eval' install.sh     # 混淆执行:高危
grep -nE 'rm -rf|mv .*/etc' install.sh          # 破坏性操作
grep -nE 'crontab|systemd|\.service' install.sh # 持久化
grep -nE 'authorized_keys|/etc/passwd|shadow' install.sh
grep -nE 'iptables|nft|ufw' install.sh          # 改防火墙
grep -nE 'curl.*\|.*sh|wget.*\|.*bash' install.sh

base64 -d | bash 这类组合基本可以直接判死。正规安装脚本不需要混淆。

四、第三步:看它往哪发数据

grep -oE 'https?://[a-zA-Z0-9./_-]+' install.sh | sort -u
grep -nE 'curl.*-d|curl.*-F|curl.*--data' install.sh

纯安装脚本只会从 GitHub 拉压缩包。如果它往陌生域名 POST 你的 IP、机器码、hostname,那就是遥测或回传。

五、第四步:沙箱里真跑一遍

docker run --rm -it --network none \
  -v $PWD:/w -w /w debian:12 bash

# 容器内
apt update && apt -y install curl
bash -x ./install.sh 2>&1 | tee /w/trace.log

--network none 是关键:断网执行,脚本的下载和上报全都会失败,但你能看到它想连哪里。bash -x 会打印每一条实际执行的命令。

六、第五步:跑完做体检

如果你已经在真机上跑了,用这几条命令把”脚本改了什么”翻出来:

crontab -l; ls -l /etc/cron.d /etc/cron.hourly 2>/dev/null
systemctl list-unit-files --state=enabled | tail -20
ls -lt /etc/systemd/system | head -10
ss -lntup
ufw status verbose; iptables -S | head -20
diff <(echo) ~/.ssh/authorized_keys 2>/dev/null; ls -l ~/.ssh/
find /etc /usr/local /opt -mmin -15 -type f 2>/dev/null | head -40

最后一条最有用:按修改时间列出最近 15 分钟内被动过的文件,脚本留下的东西基本都在里面。

七、红旗清单

特征为什么危险
eval $(echo ... | base64 -d)完全隐藏真实逻辑
下载后 chmod +x 直接跑二进制你无法审计二进制内容
写 /etc/cron.d/* 或 systemd timer定时回连,删了服务还在
往 authorized_keys 追加直接开后门
改 /etc/resolv.conf 或全局 DNS全站流量被接管
要求关闭 SELinux / 防火墙降低你原有防护

八、更省事的替代做法

  • 用官方安装脚本:Xray、Hysteria2、sing-box 都有官方 install 脚本,代码在仓库里,可审计、可卸载
  • 自己写 30 行:装个内核无非是下载二进制 + 写 systemd + 起服务,比读别人 800 行脚本快
  • 固定哈希:必须用第三方脚本时,把 sha256 存下来,每次执行前校验
  • 跑完改密码:脚本接触过你的机器,重要凭据换一遍成本很低

最后一句话:能看懂 800 行脚本的人,30 行就自己写完了;看不懂的人,也不该用 root 跑它。这不是危言耸听,是这类脚本被投毒的历史太长了。

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容