開發者筆電上,躺著一堆明文金鑰
雲端金鑰的設定檔、寫死資料庫密碼的測試腳本、從同事那裡複製來的 token、好幾年沒換的 SSH 私鑰。這些檔案不在 git 裡,所以感覺很安全;但筆電只要中了惡意程式或被偷,它們就一起被帶走。
- 開發者家目錄常放著雲端金鑰設定檔、寫死密碼的腳本和多年沒換的 SSH 私鑰;不在 git 裡,不代表安全。
- 惡意套件與竊密程式專找常見的設定檔路徑,本機金鑰又常是長期有效、權限過大,一台筆電就能交出管理員權限。
- 不用先買工具:用開源掃描器自我盤點、改用 SSO 短期憑證、縮小權限、停用閒置金鑰,並把撤銷金鑰寫進離職流程。
一個看似正常的開發套件
假設有一家二十人的 SaaS 新創。工程師 N 安裝了一個看似正常的開發套件,裡面藏著竊取程式,會把家目錄的設定檔打包上傳。幾天後,公司的雲端帳號出現陌生的存取金鑰。調查發現,那把被盜的雲端金鑰是 N 兩年前建立、存在本機設定檔裡的,而且權限是管理員等級。
先說清楚,這是示意情境,不是真實事件,公司、人物與經過都是為了說明而設。但打開任何一位工程師的家目錄,你多半會找到類似的東西:放著雲端金鑰的設定檔、寫死資料庫密碼的測試腳本、從同事那裡複製來的 API token、好幾年沒換的 SSH 私鑰。
這篇要講的只有一件事:不在 git 裡,不代表安全;本機上的長期金鑰,要換成會自己過期的憑證。
本機不等於安全
第一層是位置。惡意套件、竊密程式專找常見的設定檔路徑,家目錄是它們最先翻的地方。
第二層是壽命。本機金鑰很少輪換,建立那天到被偷那天,可能已經好幾年。
第三層是權限。為了方便,常常直接給了管理員權限,一把金鑰就能做所有事。
最後是清單。公司不知道哪台筆電上有哪些金鑰,出事時也就答不出還要撤銷哪幾把。
這篇示意情境裡,被帶走的是什麼
這是示意情境,沒有實際外洩;下表列的是開發者筆電上最常見、也最常被竊密程式帶走的憑證。
| 服務 | 憑證類型 | 用途 | 存在形式 | 放在哪 | 權限範圍 | 狀態 |
|---|---|---|---|---|---|---|
| 雲端帳號(IAM) | 長期存取金鑰 | 工程師在本機用命令列操作雲端 | 明文寫在家目錄的雲端設定檔 | 工程師 N 的筆電 | 管理員等級(示意情境中被拿來建立陌生的存取金鑰) | 示意情境;兩年前建立、從未輪換,撤銷前持續有效 |
| 其他本機憑證(資料庫密碼、第三方 API token、SSH 私鑰) | 密碼/API token/私鑰 | 測試腳本、呼叫第三方服務、登入主機 | 腳本內常數、純文字檔、PEM 私鑰檔 | 同一台筆電的家目錄 | 依各服務而定 | 是否一起被帶走無法確認 |
第二列標成缺口,是因為竊取程式打包了哪些檔案,要做惡意程式分析才知道。
能證明的、只能推論的
這篇是觀點文,情境是示意的,所以能證明的只有官方文件與專案頁寫明的事;情境裡的經過只能算推論,不知道的就寫成缺口。
不花錢就能做的流程
到這裡,其實已經足夠理解問題在哪。如果你想直接動手,可以跳到「今天就可以來試試」;下面是完整的六步流程。
第一步,自我盤點。 請每位工程師用開源掃描器掃自己的家目錄。結果只給本人看,自己處理,降低抗拒。
第二步,能換成短期憑證的就換。 雲端存取改用 SSO 登入、取得短期憑證(主要雲端平台的命令列工具多半支援),不要在本機放長期存取金鑰。
第三步,權限縮小。 開發用的帳號只給開發環境的權限;正式環境的金鑰不放在個人電腦上。
第四步,找出閒置金鑰。 AWS IAM Access Analyzer 可以找出未使用的存取金鑰(付費功能);Google Cloud 的 IAM 建議工具可以提出縮小角色的建議。
第五步,全碟加密和套件衛生。 開啟全碟加密;安裝套件前確認來源,鎖定版本。
第六步,離職時撤銷。 離職檢查表加上「撤銷此人建立的所有金鑰」。
什麼時候不需要買工具
工程師在十人以下的話,開源掃描加上「改用短期憑證」就能處理大部分問題。需要集中看到全公司裝置上的金鑰狀況時,才需要端點層級的工具。
市面上大致分四類。開源掃描器:Gitleaks、TruffleHog。雲端原生:短期憑證登入、AWS IAM Access Analyzer、Google Cloud IAM 建議工具。密鑰管理:雲端原生的 AWS Secrets Manager、Google Cloud Secret Manager;開源的 Infisical、OpenBao;商用的密碼和密鑰管理器(例如 1Password 的開發者密鑰管理,官網說程式可以在執行時透過 CLI 或 SDK 取出密鑰)。端點管理:MDM 和端點偵測回應類產品,可以搭配政策檢查。
限制也要一起看:把金鑰移進保管庫可以減少明文檔案,但如果電腦已經被入侵,執行時取出的金鑰還是可能被攔截,這無法取代端點防護;掃描靠規則比對,會有漏判。選的時候問三件事:雲端平台本身有沒有短期憑證機制(有就先用)、團隊規模(人少靠自我盤點,人多需要集中可見性)、裝置管理現況(沒有 MDM 的話,端點層級的工具很難推行)。
後續更新兩則。2026/07/28,1Password 宣布 Developer Watchtower 正式提供,官網說可以找出開發者裝置上的明文密鑰,並移進受管理的保管庫。2026/10/17 查證時,1Password Device Trust 的英文產品頁列出「AI 與密鑰探索」功能(推出日期未在頁面上註明);另外,Gitleaks 的 README 寫明專案「功能完整」,之後只發布安全修補,作者轉而開發 Betterleaks。
這篇提到的項目要花多少錢
來源沒有列損失金額與商用方案價格,表裡照實標成未公開或估算。
| 項目 | 用量 | 單價 | 期間 | US$ | NT$ | 舉證 |
|---|---|---|---|---|---|---|
| 每位工程師自我掃描家目錄並處理 估 | 每人 | 估 30–60 分鐘 | 一次性 | — | — | 本站估算 |
| Gitleaks/TruffleHog | 開源 | 軟體免費 | — | 0.00 | 0 | 各專案 GitHub 頁 |
| AWS IAM Access Analyzer 未使用存取發現 | 依帳號與角色數 | 付費功能,本文未取得價格 | 每月 | — | — | AWS 官方文件註明為付費功能 |
| Google Cloud IAM 角色建議 | 依專案 | 本文來源未列價格 | — | — | — | 官方文件未在本文引用處列價格 |
| 示意情境中被盜管理員金鑰造成的損失 | 未公開 | 未公開 | — | — | — | 示意情境,無實際帳單 |
| 合計(僅可證明列) | 0.00 | 0 | ||||
最便宜的一列是掃描,最貴的一列是那把兩年沒換、權限是管理員的金鑰被拿去之後,你還不知道它做了什麼。
你可以學到什麼
站在攻擊者那一側看,開發者的家目錄是一個路徑固定、內容豐富的保險箱。他不用猜,只要知道常見設定檔放在哪;裡面的金鑰多半長期有效、權限又大,一台筆電就夠了。
- 01開發者家目錄裡的雲端設定檔、測試腳本、SSH 私鑰都可能存著明文金鑰;不在 git 裡,不代表安全。
- 02竊密程式專找常見的設定檔路徑,所以本機長期金鑰要換成用 SSO 取得、會自己過期的短期憑證。
- 03開發帳號只給開發環境權限,正式環境的金鑰不放在個人電腦上,被偷時影響範圍才會小。
- 04用 IAM Access Analyzer 或 IAM 建議工具找出閒置金鑰與過大的角色,該停用的先停用。
- 05把金鑰移進保管庫能減少明文檔案,但無法取代端點防護;電腦已被入侵時,執行時取出的金鑰仍可能被攔截。
- 01明文金鑰這篇的主角:不加密地躺在設定檔與腳本裡,誰拿到檔案誰就能用。
- 02長期存取金鑰建立後不會自己過期,被偷的那天距離建立可能已經好幾年。
- 03短期憑證(SSO 登入)取代本機長期金鑰的做法,就算被偷也很快失效。
- 04家目錄設定檔竊密程式最先翻的地方,自我盤點也從這裡開始。
- 05最小權限開發帳號只給開發環境權限,決定被偷時損失有多大。
- 06IAM Access Analyzer找出未使用存取金鑰的 AWS 官方工具,注意這是付費功能。
- 07IAM 角色建議Google Cloud 依實際使用建議縮小角色,處理「為了方便給了管理員」。
- 08Gitleaks dir不只掃 repo,也能掃本機目錄,適合工程師自我盤點。
- 09全碟加密筆電被偷時保護檔案的最後一道防線。
- 10離職撤銷人走了,他建立的金鑰也要一起收回,否則清單永遠補不齊。
全部唯讀,不改任何設定;做完你會知道自己有沒有同樣的破口。
- 看一眼自己家目錄裡的雲端與 SSH 設定資料夾有哪些檔案(唯讀,不要打開貼給別人)
ls -la ~/.aws ~/.ssh看到什麼代表什麼:看到 credentials 這類檔案,代表本機可能放著長期金鑰;私鑰檔的建立日期越早,越該檢查。 - 已安裝 Gitleaks 的話,掃一次自己的家目錄,結果遮蔽顯示,只給自己看(唯讀)
gitleaks dir --redact ~看到什麼代表什麼:列出的每一筆都是明文密鑰候選;掃描器會漏判,沒有發現也不代表沒有。 - AWS 使用者:列出自己帳號下的存取金鑰(唯讀)
aws iam list-access-keys看到什麼代表什麼:看到建立日期很久以前、狀態為 Active 的金鑰,就是示意情境裡那一把的同類;把每一把的 ID 末 4 碼與建立日期記進「laptop-key-ledger-n4.csv」,第六步離職撤銷時才有清單可對。 - 對上一步列出的每把金鑰,查它上次被使用的時間(唯讀)
aws iam get-access-key-last-used --access-key-id <你的金鑰 ID>看到什麼代表什麼:很久沒用過的金鑰,是可以優先停用的候選;最近有使用但你不記得用過的,要特別追查。 - 確認筆電已開啟全碟加密(macOS:系統設定 → 隱私權與安全性 → FileVault;Windows:設定 → 裝置加密或 BitLocker)(唯讀)看到什麼代表什麼:顯示已關閉的,筆電一旦遺失,家目錄裡的檔案就沒有任何保護。
揭露:本文未受任何廠商贊助,提及的產品僅為舉例。
來源
每篇新文章一封:三點摘要、關鍵字定義、今天能做的一件事。
延伸閱讀
門是一個沒更新的內部工具,鑰匙就放在 GitLab 裡
91APP 10 月 22 日公布 18 天階段性調查:攻擊者從一個沒套修補的 Appsmith 進入內網,在內部 GitLab 找到一座訂單資料庫的金鑰,10 月 3 日進去、10 月 14 日深夜才被阻斷。前篇寫「入口未公開」,現在入口公開了。這篇是續篇:拆開新的第一手說明,看它證明了什麼、還缺什麼,以及你家的內部工具和 repo 今天能查什麼。
六台主機共用一把沒上鎖的鑰匙,而通往它們的門其實一直開著
維運設計是『所有人先進跳板機、再進其他主機』,方向沒有錯。錯的是網路層從沒強制這條路,而那把讓跳板機免密碼開全叢集的 root 私鑰,沒有 passphrase、裸躺在磁碟上。這篇是作者分析:跳板機與 SSH 金鑰信任最常見的幾個誤區,以及它們為什麼看起來很安全。
寄信功能十分鐘就會動,難的是不讓別人也能用
本站新增「寄一份盤點結果給我」:應用端一把金鑰都不放,信交給內部閘道送,對外路由一律 token 加限流。外加一個把整組環境變數清空換來的教訓。