供應鏈攻擊檢測實戰:用 CLI 工具揪出 Node.js 套件隱藏後門
今時今日做 development,日日都要 npm install / pip install 一大堆套件,但你知唔知,啲 package 裡面可能收埋咗惡意程式碼?最近就爆出 Node-IPC 三個版本被植入 Stealer Backdoor,專偷 Developer 機密;TanStack 供應鏈攻擊更加打中 OpenAI 員工裝置,搞到全公司要強制更新 macOS。
👉 延伸閱讀:Linux Server 安全加固 6 步搞掂 — Defense in Depth 實戰指南
乜嘢係供應鏈攻擊?
**供應鏈攻擊**(Supply Chain Attack)就係黑客唔直接攻擊你,而係攻擊你依賴嘅第三方軟件供應商或者開源套件。佢哋喺 package 入面收埋 malicious code,等你 npm install 嗰陣自動中招。呢類供應鏈攻擊近年越嚟越猖狂,因為攻擊面廣、影響大,一次攻擊可以波及成千上萬個 downstream project。
供應鏈攻擊嘅常見手法
常見嘅供應鏈攻擊手法包括:
1. **Typosquatting** — 註冊個同正版 package 差一個字母嘅名,等你打錯字就中招
2. **Credential Theft** — 偷 maintainer 嘅 npm token,直接 push malicious version
3. **Dependency Confusion** — 利用 private package 名去 public registry 註冊同名 package
4. **Malicious Post-Install Scripts** — 喺 `postinstall` hook 入面執行惡意指令
用 CLI 檢測供應鏈攻擊:Step-by-Step
以下係用 command line 工具檢查你個 project 有冇中供應鏈攻擊嘅實戰流程。
Step 1:檢查 Package Integrity
# Check npm package integrity against lockfile
npm audit --json | python3 -c "
import json, sys
data = json.load(sys.stdin)
for vuln_id, info in data.get('vulnerabilities', {}).items():
for via in info.get('via', []):
if isinstance(via, dict) and 'title' in via:
print(f'⚠️ {info[\"name\"]}@{info.get(\"range\",\"?\")}: {via[\"title\"]}')
"
呢個 command 會睇晒你 project 入面所有 dependency,對照 npm advisory database,有冇已知嘅供應鏈攻擊漏洞一目了然。
Step 2:檢查 Post-Install Scripts
# Scan all node_modules for suspicious install scripts
find node_modules -name "package.json" -maxdepth 3 | while read f; do
scripts=$(python3 -c "import json; d=json.load(open('$f')); print('\n'.join(d.get('scripts',{}).keys()))" 2>/dev/null)
if echo "$scripts" | grep -qE 'install|postinstall|preinstall'; then
echo "🔍 $(dirname $f): $scripts"
fi
done
好多供應鏈攻擊都係靠 `postinstall` script 自動執行,呢個 scan 可以幫你快速搵出邊啲 package 有可疑嘅 install hook。
Step 3:Check for Obfuscated Code
# Find packages with heavily obfuscated/minified code (potential backdoor indicator)
find node_modules -name "*.js" -size +10k | while read f; do
entropy=$(python3 -c "
import math
with open('$f','rb') as fh:
data=fh.read()
if not data: exit(1)
freq={b:data.count(b)/len(data) for b in set(data)}
ent=-sum(p*math.log2(p) for p in freq.values())
print(round(ent,2))
" 2>/dev/null)
[ -n "$entropy" ] && [ "$(echo "$entropy > 7.5" | bc)" = "1" ] && echo "⚠️ High entropy: $f ($entropy)"
done
高 entropy 嘅 JavaScript file 通常代表高度混淆,正當 package 好少會咁做。如果搵到 entropy > 7.5 嘅 file,值得人手 review 一下。
Step 4:Network Connection Audit
# Check for packages that make outbound network connections
grep -rE 'https?://|fetch\(|axios\.|request\(' node_modules --include="*.js" -l 2>/dev/null | \
grep -v '/test/' | grep -v '/docs/' | \
sed 's|node_modules/||' | cut -d'/' -f1 | sort -u | while read pkg; do
echo "🌐 $pkg makes network calls"
done
供應鏈攻擊嘅 payload 通常會 connect 去 C2 server 偷 data,呢個 audit 幫你睇清楚邊啲 package 會向外連線。
Step 5:Dependency Graph Diff
# Compare current dependency tree with last known good state
npm ls --json > /tmp/deps_now.json 2>/dev/null
diff <(python3 -c "import json;d=json.load(open('/tmp/deps_now.json'));[print(k,v.get('version','?')) for k,v in d.get('dependencies',{}).items()]" 2>/dev/null) \
<(# compare with git HEAD package-lock.json)
用 git diff 比較 dependency tree 變化,新増嘅 transitive dependency 可能就係供應鏈攻擊嘅入口點。
預防供應鏈攻擊嘅 Best Practices
1. **Lockfile is your friend** — 永遠 commit `package-lock.json` / `yarn.lock`
2. **Use `–ignore-scripts`** — `npm install –ignore-scripts` 可以阻止 postinstall 自動執行
3. **Pin dependencies** — 唔好用 `^` 或 `~` range,直接 pin 死 exact version
4. **Regular audit** — 每星期行一次 `npm audit` + `pip-audit`
5. **Monitor registry** — 用 Socket.dev 或 Snyk 自動 scan 新 version
總結
供應鏈攻擊唔係遙不可及嘅理論,係每日真實發生緊嘅威脅。Node-IPC、TanStack、甚至連 OpenAI 都中過招。作為 developer,花 10 分鐘 set 好上面嘅 CLI 檢測流程,隨時可以發現潛在嘅供應鏈攻擊風險。記住:你嘅 project security 取決於最弱嗰個 dependency!
#供應鏈攻擊 #DevSecOps #NodeJS #npm安全 #Cybersecurity
📌 延伸閱讀:SSH 安全加固實戰:5分鐘鎖死駭客入侵路線 | 2026年5月重大資安漏洞速報



