本卡屬 FR-186(Agent 本體資安掃描第二輪),第 3 批 C3:Nmap connector+SSH 主機金鑰(Agent repo,2 檔/約 790 行)。只掃不修。工作坊用
.claude/workshop-prompts/dispatch-<本卡號>.md當開場 prompt 直接啟動掃描。
用 Claude Code 官方 claude-security plugin 掃 Guidant AI Agent(repo evidence-agent)的「Nmap connector+SSH 主機金鑰」,找出資安問題,寫成 PM 與新手工程師都看得懂的報告。只找問題、不修問題。
FR-177 掃過(舊卡 CM-3527),之後有改動;這次重掃要回答兩件事:上次修的有沒有守住、新改的程式有沒有新洞。 範圍按業務模組垂直切(入口→流程→資料),權限漏洞常在層與層的接縫上。
guidant_agent/scan/adapters/connectors/nmap.py
guidant_agent/scan/adapters/connectors/ssh_host_keys.py
檔數 2、約 790 行。驗檔數:git ls-files -- guidant_agent/scan/adapters/connectors/nmap.py guidant_agent/scan/adapters/connectors/ssh_host_keys.py | grep -v /tests/ | wc -l 應為 2。scope 外的檔不要當發現報;為核對呼叫端翻範圍外的檔可以,報告標「只為查證」。
首腦標的思考起點,不是檢查清單。掃完後 runner 逐條對一遍:工具沒報的,開檔看一眼寫「人工查過:成立/不成立/為什麼」。FR-177 的人工補查抓到的問題不比工具少。(以下沿用 FR-177 舊卡的重點,行號是舊版、以檔名與函式名為準。)
:535-552 遠端指令字串:[_NMAP_BIN, scan_flag, "-oX", quote(remote_report)] + ["-p", quote(port_range)] + [quote(t) for t in targets] 再 " ".join——scan_flag 有沒有 quote、來源是 scan_type(:633)對照表還是原值;_resolve_port_range :283 回的字串有驗格式嗎(:140/:157 註解說 quote 是防線、格式驗只是早點報錯——那 quote 後 nmap 收到 -p '1-65535;id' 會怎樣:shell 層安全,但 nmap 自己的參數解析有沒有 --script= 這類可被 targets 元素夾帶的形式,例如 target 字串 -iL /etc/passwd 或 --script http-put 被 quote 後仍是 nmap 的一個 argv 元素,nmap 會把它當選項;要看有沒有 -- 分隔或 target 字元白名單)。:549 sudo {nmap_cmd}:use_sudo 由誰決定、sudo 密碼怎麼送(-S 從 stdin?寫在指令裡?);_SCAN_TYPES_REQUIRING_ROOT 只有 syn,其他 scan_type 配 sudo 會不會也放行。:231 _connect(settings) 與 :210 私鑰寫記憶體暫存檔供 key_filename:暫存檔路徑(/dev/shm?)、權限、finally 刪除有沒有覆蓋所有例外路徑;密碼登入時 paramiko 的 look_for_keys/allow_agent 關了沒(否則會拿 Agent 容器自己的 SSH 金鑰去試)。ssh_host_keys.py:46-60 _RememberFirstPolicy:第一次連線記住主機金鑰(TOFU)——記在哪個檔、權限、同一 IP 第一次連到攻擊者機器就永遠信它;:81 不符時的錯誤訊息回給使用者含什麼。這是刻意設計(:4 註解),報告要寫清楚取捨而不是當漏洞報。:297-300 _exec_with_cancel 邊跑邊收避免 paramiko 死鎖:stdout/stderr 上限多少(遠端送 1GB 輸出會不會把 Agent 記憶體吃掉);:599 用完 rm -f 遠端報告,失敗時報告留在客戶機器上誰看得到。:625-635 hosts/targets 兩個鍵都收(_normalize_hosts):hosts 是 SSH 跳板、targets 是 nmap 目標——清冊檢查(allowed_targets 的 TARGET_PARAM_KEYS 含兩者)對兩者都做了嗎;跳板主機是不是也該在清冊內。:676-692 測試連線 probe:raw_host 來自哪、只做 command -v nmap(:701)嗎;錯誤訊息把 paramiko 例外原文回給使用者會不會洩內網資訊。FR-177 25 棒報告在 Agent repo docs/security-scan/FR-177/scan-*.md,已登記的 22 條在主系統 repo docs/features/security-scan-consolidated/README.md §3.1 第 219~240 項(全部已修)。已修而且修法成立的不重報;修法不完整、或同一族換個欄位又出現,才報並註明對應項次。