
當 AI 無所不能,我回頭確認一遍家裡的鑰匙
這陣子我越來越依賴 Claude Code 幫我打理數位生活,從整理我的 Obsidian 筆記庫,到維護家裡自架的一堆服務(OpenWrt 路由器、AdGuard Home、Synology NAS、Oracle 雲端主機、Home Assistant),再到各種半夜自己跑的自動化,幾乎都交給他。他能做的事愈來愈多,我有一天就認真想了一件以前沒細想的事:我把一個「能讀我電腦裡的檔案、能執行指令、又能連上網路」的 AI 幫手,給了這麼大的權限,那萬一哪天出錯,會錯到哪裡去? 先搞清楚:權限這麼大,可能出什麼錯? 於是我請 Claude 陪我,把這件事從頭查一遍。查下來,AI 幫手(agent)的風險大致歸成幾類: 致命三要素(lethal trifecta):能讀檔案、能執行指令、能連網路,這三件單獨都還好,但湊在一起,一旦 AI 被騙,它就有能力把你的祕密讀出來、再送到外面去。 間接提示注入(indirect prompt injection):白話說,就是一段藏在網頁或某個檔案裡的惡意指令,可能在 AI 幫你讀資料時,偷偷叫它去做你根本沒交代的事,比如翻出你的金鑰再傳出去。 對話會留存:你順手貼進對話框的東西,其實會被記在某個地方。 老問題的放大版:密鑰散得到處都是、權限給太大、不小心把祕密存進了 git。 查完我的感想是,這些都不是假設性的學術風險,是真的會發生的事。再加上身邊愈來愈多同好也開始玩 AI agent、也在自架自己的服務,我想說乾脆把我查到的、做過的都記下來分享,希望也幫到正走在同一條路上的大家。 我們做了哪些檢查與掃描 方向定了,我跟 Claude 就一項一項盤: 數清楚我到底有多少把「鑰匙」跟 token,各自散在哪。不數還好,一數有點尷尬,原來比我想像中亂。 用一個叫 gitleaks 的工具,掃我自己筆記庫跟所有專案的 git 歷史,看有沒有哪次手滑把金鑰存了進去。 把家裡每一台主機之間「誰可以登入誰」的關係攤開來看(這在資安上叫橫向移動 lateral movement,意思是攻擊者攻破一台之後,能不能再跳到下一台)。 檢查我給 AI 的權限設定,跟過去那些對話紀錄到底留了什麼。 找到的問題,跟我們怎麼補 這段有點像在自首😅,但我覺得誠實把坑寫出來,比假裝自己一開始就做得很好有用多了。 問題一:一把沒上鎖的萬能鑰匙 我有一把 SSH(Secure Shell,遠端登入主機用的)金鑰,居然沒設密碼,而且同一把幾乎能打開我家所有主機。等於一把沒上鎖的萬能鑰匙,誰撿到誰就開全家。 我們的處理是:幫它加上密碼(passphrase),再用一個叫 ssh-agent 的機制,讓我只要輸入一次、之後自動化照樣順順跑,安全跟方便都顧到。然後把它從「一把開全家」改成「一把鑰匙只能做一件事」(這招叫 forced command,指定這把金鑰登入後只能執行某個預先設定的指令,而不能取得一般 shell)。 問題二:順手貼進對話的密碼 我以前圖方便,曾把 token 直接貼進跟 AI 的對話框,那它就被留在本機紀錄裡了。這種「已經外洩過」的東西,與其一個一個追副本,最乾淨的做法是直接把舊鑰匙作廢(rotate),重發一把新的,舊的當場失效,外面那些副本就全變廢紙。 問題三:筆記裡躺著兩個忘記的金鑰 這是這次最有感的。我用 gitleaks 掃自己的筆記歷史,竟然挖出兩個我幾年前順手記下、早就忘得一乾二淨的真實金鑰。原來最大的洞,常常不是什麼高深攻擊,而是「過去那個貪方便的自己」。 ...







![[EBM] 當統計不顯著時,我該計算研究的檢力嗎?Misleading post-hoc power](https://drpwchen.com/images/795bfa347c99-494EE684-EEE1-4B04-966C-73A1572186E4.jpeg)
