Day 279
電腦突然跳出要密碼,你知道是誰在要嗎?
現在我常常讓 agent(能幫我操作電腦、執行工作的 AI)替我做事。做到一半,時不時就會跳出要存取 macOS Keychain(鑰匙圈)、或要其他系統權限的請求。
其中我會特別提防的,是 Keychain 的存取請求。裡面放的是密碼、金鑰這類機密資料。
但授權視窗跳出來時,我想先知道:到底是誰在跟我要?這是剛剛請 agent 做的事,還是某支我不認識的程式?
所以我就跟 AI 討論,能不能在授權的時候,把背後的來源顯示出來。於是做了一個叫 kcwho 的小工具,在系統授權視窗旁邊補充來源線索。kcwho 已經開源,連結放在文末。
Keychain 的請求,我會特別停一下
以前我寫過一篇〈掉了一台進口車的故事〉,是自己遇過的血淚史。連結放在文末。
現在讓 agent 幫忙操作電腦,接觸到的工具、腳本和背景程式更多,授權請求也跟著出現。當下很容易把它跟正在做的工作連在一起:應該是剛剛那個任務需要吧?
但光是時間剛好接近,還不足以確認是哪支程式在要求存取。
尤其 Keychain 的授權有範圍差別。Apple 官方說明裡,選擇「開放一次」(視窗上的 Allow),下次存取相關密碼時還會再問;選擇「永遠允許」(Always Allow),那個 App 往後存取相關密碼時,就不必再詢問。
按下去之前,我希望看得到足夠的資訊,判斷這次請求跟我正在做的事有沒有關係。
看到 security,還是不知道背後是誰
像這張截圖,系統告訴我:security 想存取 Keychain 裡的 Chrome Safe Storage。

security 是 macOS 內建的工具,其他程式或腳本都可以呼叫它。看到這個名字,仍然不知道是哪支程式在背後呼叫。
我需要的資訊是:誰發起這次請求、想存取什麼,以及它跟我正在做的事有沒有關係。
即使確認是系統顯示的授權視窗,也還得確認背後發起請求的程式。系統替它詢問,不代表那支程式就值得信任。
把來源線索放在授權視窗旁
kcwho 想做的事很單純:授權視窗出現時,在旁邊多放一個面板,把查到的線索顯示出來,讓我在同一個畫面裡判斷。
目前它會查看本機的程式資訊,以及部分系統紀錄,嘗試追查背後的呼叫來源。像是哪支背景服務、經過哪些程式,或命令裡指定要查哪個 Keychain 項目。
像下面這張,面板列出 com.dawson.claude-creds-sync 想存取 Claude Code-credentials,還有 security ← bash ← bash ← launchd 這條呼叫路徑。

面板不會替我按允許,也不會接收我輸入的密碼。密碼還是在原本的 macOS 視窗裡輸入,kcwho 本身不讀取 Keychain 裡的機密資料。
我希望它能回答三個問題:
- 是哪支程式在跟我要權限?
- 它想存取什麼?
- 這跟我剛剛請 agent 做的事對得上嗎?
要不要授權,最後還是由我決定。
目前的辨識,還不能當成授權依據
做出旁邊那個面板,跟準確找出這次請求的來源,是兩件事。
測試裡就出現過:面板把較早的背景請求,誤認成眼前這個授權視窗的來源。查到某支程式正在執行,或查到它曾經存取過,也不足以證明這次就是它。
所以 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



