供應鏈
什麼是錯字搶註(typosquatting)?
錯字搶註是一種攻擊手法:註冊與熱門名稱極為相似的名稱,等待有人打錯字。它最初出現在網站網域。在軟體領域,攻擊者會發布名稱類似 crossenv(而非 cross-env)的惡意套件,安裝指令只要打錯一個字,攻擊者的程式碼就會在開發人員的電腦或 CI 管線中執行。
更新日期
套件錯字搶註如何運作
- 鎖定目標。攻擊者挑選熱門套件,即使打錯字的比例很低,累積起來也相當可觀。
- 註冊相近的名稱。差異可能只是一個字母、少了一個連字號、字元順序對調,或加上一個看似合理的後綴。
- 隱藏惡意酬載。這類套件常會包裝真正的套件,因此一切仍正常運作,看不出任何異狀。
- 在安裝時執行。套件管理工具可以在安裝期間執行腳本,因此程式碼在任何人呼叫它之前就已執行,並能存取環境變數與權杖。
- 竊取並擴散。攻擊者利用竊得的憑證發布更多套件,或進一步入侵其他系統。
常見的錯字搶註手法
| 手法 | 真正的套件 | 仿冒套件 |
|---|---|---|
| 缺少分隔符號 | cross-env |
crossenv |
| 加上後綴 | jquery |
jquery.js |
| 字母對調 | ffmpeg |
ffmepg |
| 少一個字母 | mongoose |
mongose |
| 加上前綴 | sqlite |
node-sqlite |
上述所有仿冒套件都來自同一場真實的攻擊活動,詳見下一節。
真實案例:crossenv
2017 年,一位名為 hacktask 的 npm 使用者發布了 crossenv,仿冒熱門的
cross-env。它保留了真正套件的功能,同時將安裝者的環境變數傳送到攻擊者的伺服器。而在建置中,權杖正是存放在環境變數裡。
Snyk 的分析發現,它是同一帳號所發布的 30 多個惡意套件之一,並且在約兩週內都未被發現,直到一位工程師注意到它。
為什麼 AI 程式設計助理讓問題更嚴重
AI 助理可能會建議一個根本不存在的套件。如果攻擊者註冊了那個名稱,下一個接受建議的人就會安裝惡意軟體。這有時被稱為 slopsquatting。自動安裝相依套件、卻沒有人檢查名稱的自動化代理,更讓風險進一步升高。
錯字搶註與相依性混淆的差異
兩者都利用套件名稱的解析方式,但犯錯的環節不同。
| 錯字搶註 | 相依性混淆 | |
|---|---|---|
| 誰犯了錯 | 有人打錯了名稱 | 建置系統選錯了登錄庫 |
| 名稱 | 與公開套件相近 | 與私有的內部套件完全相同 |
| 如何得逞 | 有人不小心安裝了它 | 版本號較高的公開版本優先被採用 |
| 主要防禦 | Lockfile 與新相依套件審查 | 使用具範圍的套件(scoped packages),並設定登錄庫讓內部名稱保持私有 |
相依性混淆在 2021 年聲名大噪:研究人員 Alex Birsan 在漏洞獎勵計畫下或經授權的情況下,利用此手法讓程式碼在 Apple、Microsoft 與 PayPal 等超過 35 家組織內部執行。
如何防範錯字搶註
-
在 CI 中從 lockfile 安裝。使用
npm ci或其他工具的對應指令。這樣一來,打錯的名稱只能透過經過審查的變更進入。請參閱 lockfile 能做什麼、不能做什麼。 - 在 pull request 中審查新的相依套件。仔細檢查名稱本身,並閱讀 lockfile 的差異,而不是直接略過。
- 安裝前先確認。將名稱與專案本身的文件比對,並對下載次數少、最近才首次發布或沒有儲存庫連結的套件保持警覺。
- 限制安裝腳本。在建置允許的範圍內停用它們。
- 採用新套件前先等一等。惡意套件通常在出現後不久就會被發現並移除。
- 限制建置能連線的對象。只能與已知主機通訊的建置,即使執行了惡意套件,也無法將您的機密傳送給攻擊者。請參閱 GitHub Actions 對外連線政策。
- 檢查每一個 AI 建議。安裝前,先確認套件確實存在,而且就是您想要的那一個。
請注意,錯字搶註套件在出現當天並沒有 CVE,因此以資安公告為基礎的 SCA 掃描不會標記它。更多內容請參閱 軟體供應鏈安全最佳實務。
網域錯字搶註
這是此攻擊最初的形式,也稱為 URL 劫持:註冊例如拼錯的銀行或登入頁面網域。打錯網址的訪客會進入一個仿冒網站,其目的是竊取憑證或散布惡意軟體。防禦方式也不同:註冊您自己網域的常見拼錯版本、監控相似網域的註冊,並使用密碼管理工具,因為它不會在錯誤的網域上自動填入密碼。
CRACI 如何限制損害
CRACI 不會依據行為或信譽偵測新的惡意套件,這部分請使用套件防火牆或行為分析工具。CRACI 的作用是圍堵它們。作為您的 GitHub Actions 執行器,它會強制執行對外連線政策,封鎖建置不需要的連線,因此竊取機密的套件無處可送,即使這種攻擊前所未見也一樣。每個作業取得的每個套件都有紀錄,因此一旦攻擊被揭露,您就能查出哪些建置引入了它;而已有公開 CVE 的版本會被標記,並可由政策關卡封鎖。請參閱 什麼是供應鏈攻擊。
錯字搶註:常見問題
簡單來說,什麼是錯字搶註?
就是註冊一個看起來與熱門名稱(例如套件或網站)幾乎一樣的名稱,等待有人打錯字。這個仿冒名稱接著會散布惡意軟體或竊取憑證。
錯字搶註有哪些實例?
2017 年,npm 套件 crossenv 仿冒了熱門的 cross-env。它的運作方式與真正的套件相同,同時也將使用者的環境變數傳送到攻擊者的伺服器。
錯字搶註與相依性混淆有什麼不同?
錯字搶註仰賴有人打錯公開套件的名稱。相依性混淆則使用與私有套件完全相同的名稱,仰賴建置系統改為取得公開版本。
錯字搶註違法嗎?
在多數地區,散布惡意軟體或竊取憑證都是違法的。網域錯字搶註也可能違反商標法,例如美國的《Anticybersquatting Consumer Protection Act》。
什麼是 slopsquatting?
這是一種變形手法:攻擊者註冊 AI 助理容易憑空捏造的套件名稱。任何安裝了該建議套件的人,都會取得攻擊者的程式碼。
如何偵測錯字搶註?
依名稱與中繼資料審查新的相依套件,並使用能將套件名稱與熱門套件比對、或分析其行為的工具。以資安公告為基礎的掃描工具,只有在套件被通報後才派得上用場。