Day 279

電腦突然跳出要密碼,你知道是誰在要嗎?

Day 279 電腦突然跳出要密碼,你知道是誰在要嗎? — 投影片 1Day 279 電腦突然跳出要密碼,你知道是誰在要嗎? — 投影片 2Day 279 電腦突然跳出要密碼,你知道是誰在要嗎? — 投影片 3Day 279 電腦突然跳出要密碼,你知道是誰在要嗎? — 投影片 4
1 / 4

現在我常常讓 agent(能幫我操作電腦、執行工作的 AI)替我做事。做到一半,時不時就會跳出要存取 macOS Keychain(鑰匙圈)、或要其他系統權限的請求。

其中我會特別提防的,是 Keychain 的存取請求。裡面放的是密碼、金鑰這類機密資料。

但授權視窗跳出來時,我想先知道:到底是誰在跟我要?這是剛剛請 agent 做的事,還是某支我不認識的程式?

所以我就跟 AI 討論,能不能在授權的時候,把背後的來源顯示出來。於是做了一個叫 kcwho 的小工具,在系統授權視窗旁邊補充來源線索。kcwho 已經開源,連結放在文末。

Keychain 的請求,我會特別停一下

以前我寫過一篇〈掉了一台進口車的故事〉,是自己遇過的血淚史。連結放在文末。

現在讓 agent 幫忙操作電腦,接觸到的工具、腳本和背景程式更多,授權請求也跟著出現。當下很容易把它跟正在做的工作連在一起:應該是剛剛那個任務需要吧?

但光是時間剛好接近,還不足以確認是哪支程式在要求存取。

尤其 Keychain 的授權有範圍差別。Apple 官方說明裡,選擇「開放一次」(視窗上的 Allow),下次存取相關密碼時還會再問;選擇「永遠允許」(Always Allow),那個 App 往後存取相關密碼時,就不必再詢問。

按下去之前,我希望看得到足夠的資訊,判斷這次請求跟我正在做的事有沒有關係。

看到 security,還是不知道背後是誰

像這張截圖,系統告訴我:security 想存取 Keychain 裡的 Chrome Safe Storage。

macOS 授權視窗顯示 security 要存取 Chrome Safe Storage,密碼欄空白,下方有 Always Allow、Deny 與 Allow 按鈕

security 是 macOS 內建的工具,其他程式或腳本都可以呼叫它。看到這個名字,仍然不知道是哪支程式在背後呼叫。

我需要的資訊是:誰發起這次請求、想存取什麼,以及它跟我正在做的事有沒有關係。

即使確認是系統顯示的授權視窗,也還得確認背後發起請求的程式。系統替它詢問,不代表那支程式就值得信任。

把來源線索放在授權視窗旁

kcwho 想做的事很單純:授權視窗出現時,在旁邊多放一個面板,把查到的線索顯示出來,讓我在同一個畫面裡判斷。

目前它會查看本機的程式資訊,以及部分系統紀錄,嘗試追查背後的呼叫來源。像是哪支背景服務、經過哪些程式,或命令裡指定要查哪個 Keychain 項目。

像下面這張,面板列出 com.dawson.claude-creds-sync 想存取 Claude Code-credentials,還有 security ← bash ← bash ← launchd 這條呼叫路徑。

security 要求使用 kcwho-test 鑰匙圈的授權視窗旁,kcwho 藍色面板顯示請求來源 com.dawson.claude-creds-sync、要存取的項目 Claude Code-credentials,以及 security ← bash ← bash ← launchd 的呼叫路徑

面板不會替我按允許,也不會接收我輸入的密碼。密碼還是在原本的 macOS 視窗裡輸入,kcwho 本身不讀取 Keychain 裡的機密資料。

我希望它能回答三個問題:

  1. 是哪支程式在跟我要權限?
  2. 它想存取什麼?
  3. 這跟我剛剛請 agent 做的事對得上嗎?

要不要授權,最後還是由我決定。

目前的辨識,還不能當成授權依據

做出旁邊那個面板,跟準確找出這次請求的來源,是兩件事。

測試裡就出現過:面板把較早的背景請求,誤認成眼前這個授權視窗的來源。查到某支程式正在執行,或查到它曾經存取過,也不足以證明這次就是它。

所以 kcwho 目前還在驗證辨識準確度。下面這張測試畫面,面板顯示的是 Requester not determined,也就是無法確認請求者。

測試用 Keychain 授權視窗旁,kcwho 以橘色面板顯示 Requester not determined,提醒正在執行的程式不足以確認視窗來源

即使面板列出程式名稱,也不代表已經證明它就是這個視窗的來源,更不能據此判斷它有沒有惡意。目前這個原型提供的是查詢線索,還不能單靠它決定要不要授權。

讓 agent 幫我做事時,我也想看清楚:這次按下允許,到底是在允許誰做什麼。


之前的血淚史〈掉了一台進口車的故事〉:https://medium.com/@dawson54068/%E6%8E%89%E4%BA%86%E4%B8%80%E5%8F%B0%E9%80%B2%E5%8F%A3%E8%BB%8A%E7%9A%84%E6%95%85%E4%BA%8B-609421ca2e09?sk=7cb053a2b19bb5671ad5ba5fa8358c6d kcwho 開源專案:https://github.com/andrew54068/kcwho Apple 鑰匙圈授權說明:https://support.apple.com/zh-tw/guide/keychain-access/kyca1243/mac