Guidant AI 資安檢視總報告 · 安全需求(SR)

SR-09 代理程式專章

裝在客戶機房的那台機器

代理程式(agent)裝在客戶機房,手上有客戶主機的維運帳密、能對內網發掃描流量。這一章 7 條是它特有的要求:誰能派工、資料面只對雲端開、證據的可信副本在雲端、規則包的信任根、容器隔離、受檢主機帳號、掃描前確認目標。2 條有掃描實例、5 條是標準做法。

7 條 掃描驗證 2 標準做法 5

讀法見總表。每條六欄:要求/為什麼/適用連線/對應威脅/驗證方式/來源。現況不在這裡,看符合性矩陣。

§1

這一章管什麼

代理程式與一般 web 後端不同:它在客戶的內網裡,所以被冒充的後果不是資料外洩而是「替攻擊者打內網」;它手上有明文維運帳密,所以它的環境(容器、暫存、主機帳號)要一併守;它產出的證據要進稽核,所以可信副本不能只留在它自己的磁碟。身分驗證、傳輸安全這類通用要求(如機器身分、憑證驗證)仍歸通用章,本章只放代理程式特有的。

# 要求 來源
SR-09.1 誰能派工、取消、重派、刪紀錄在畫面那頭就守住 掃描驗證
SR-09.2 資料面 :8443 只對雲端開,demo 模式不得進正式部署 標準做法
SR-09.3 證據的可信副本在雲端;agent 側 S3 不誇稱不可竄改 標準做法
SR-09.4 規則包完整性有信任根,url 型與 file 型走同一條路 掃描驗證
SR-09.5 agent 容器非 root、能力全拿掉、有資源上限;沙箱 image 有版本有簽章 標準做法
SR-09.6 受檢主機用 agent 專用最小權限帳號,sudoers 只白名單 標準做法
SR-09.7 掃描前明示目標,外部位址額外確認,文件說清掃描就是攻擊流量 標準做法

§2

SR-09.1 誰能派工、取消、重派、刪紀錄在畫面那頭就守住

欄位 內容
要求 發動掃描、取消、重派、刪執行紀錄、測試連線這類會讓 agent 動手的操作,必須在 api 層就只放行「任務被指派人」與「專案管理者」;不得只確認呼叫者是專案成員就放行;守門必須在派工單寫進資料庫之前
為什麼 唯讀角色按「開始掃描」,派工單寫進資料庫,agent 下次心跳就領走並帶著客戶主機帳密連進正式機器;反覆取消再重派則讓正常檢測永遠跑不完、執行紀錄被改
適用連線 C20 agent → 主系統前門、C21 api → agent 資料面(:8443)
對應威脅 C20 T3 從畫面那頭發動——不該動手的人派出帶帳密的掃描 🟡、C21 T4 不該動手的人取消或干擾正在跑的掃描 🟡
驗證方式 以專案唯讀成員身分對發動、取消、重派、刪紀錄各端點送請求,必須全被拒且資料庫不得出現新派工單;以非被指派人的一般成員取消他人的掃描必須被拒;被指派人與專案管理者同樣操作必須成功
來源 掃描驗證:C21 D4(實例 M03-14);標準做法:C20 D5◇
§3

SR-09.2 資料面 :8443 只對雲端開,demo 模式不得進正式部署

欄位 內容
要求 agent 資料面 :8443必須只對雲端開:客戶防火牆只放行雲端來源 IP,安裝文件必須明寫;demo 模式(AGENT_AUTH_MODE=none,裸 http、不驗任何東西)不得出現在正式部署,必須由啟動期檢查擋下(正式設定下偵測到 none 即拒絕啟動)
為什麼 同一內網的人(或客戶不慎把 8443 開到公網)連得到 :8443 時,若再配上 demo 模式,就能直接叫 agent 替他敲內網任何主機、取走暫存的掃描報告
適用連線 C21 api → agent 資料面(:8443)
對應威脅 C21 T1 冒充雲端打進客戶機房 🔴
驗證方式 從非雲端來源 IP 連 :8443 必須被防火牆擋下;在正式設定下設 AGENT_AUTH_MODE=none 啟動 agent,必須拒絕啟動並輸出明確錯誤;檢查安裝文件必須有「只放行雲端來源 IP」的明文步驟
來源 標準做法:C21 D6◇、C21 D7◇
§4

SR-09.3 證據的可信副本在雲端;agent 側 S3 不誇稱不可竄改

欄位 內容
要求 掃描完成的回報一到,雲端必須立即經資料面取回證據檔、計算 sha256 並落庫,之後 agent 側的檔只是備份;取回失敗必須告警;agent 側 S3 若要對客戶宣稱證據不可竄改,必須開 Object Lock(COMPLIANCE 模式)加版本控制並在寫入時設 retention,桶本身的刪除也要擋;未開時文件必須誠實,不得宣稱 WORM 或不可刪,要說清楚「可信副本在雲端、agent 側是暫存」
為什麼 在 agent 主機上拿到 root 的人(客戶自己的維運或入侵者)可以覆寫報告把「3 個高風險」改成「0 個」,沒有版本與鎖時覆寫不留舊版、刪除不留紀錄;若雲端還沒取回,取回時算的 sha256 錨的就是假檔;稽核場景裡期望落差比技術漏洞更傷
適用連線 C22 agent → SeaweedFS
對應威脅 C22 T1 主機擁有者或拿到主機 root 的人,改掉或刪掉證據,不留痕(無掃描實例)
驗證方式 觸發一次掃描完成,在 agent 回報後的短時間內,雲端資料庫必須已有該檔的 sha256 且檔案可由雲端下載;模擬取回失敗必須產生告警;若宣稱 WORM,對已寫入的物件執行覆寫與刪除必須被拒;若未開 Object Lock,全部對外文件不得出現「不可竄改」「WORM」字樣
來源 標準做法:C22 D3◇、C22 D2◇、C22 D5◇
§5

SR-09.4 規則包完整性有信任根,url 型與 file 型走同一條路

欄位 內容
要求 規則包完整性必須有信任根:file 型必須帶 sha256、對帳不符即失敗;url 型必須由 agent 端比對雲端下發的指紋,且 url 型也走 agent 自己的下載器(不得交給 cinc-auditor 自己去抓),流程與 file 型同一條:下載 → sha256 對帳 → 安全解壓 → 餵目錄給引擎
為什麼 規則包是 InSpec 的 Ruby DSL,載入即執行。攻擊者在 agent 下載路徑上換掉規則包(或網址主人事後換內容),agent 就在客戶內網以容器身分執行任意程式碼,並用客戶主機帳密跑假檢查、報告一起造假;雲端下發了指紋而 agent 不比,等於沒有
適用連線 C23b agent 本機程序、C24 agent → 規則包網址;推及:C19 api → 規則包網址(雲端側下發指紋)
對應威脅 C23b T1 規則包裡藏程式,在 agent 容器裡以 root 執行(無掃描實例)、C24 T1 在下載路徑上換掉規則包——不加密連線不用破解,加密連線也沒人比指紋 🟡、C24 T2 網址的主人事後換內容——雲端看到的是 A、agent 跑的是 B(無掃描實例)
驗證方式 對 file 型規則包改一個位元組後派工,agent 必須在對帳階段失敗且不執行;對 url 型規則包在雲端抽取後換掉網址上的內容,派工後 agent 必須因指紋不符而中止;以抓包確認 url 型規則包是由 agent 下載器取得而非 cinc-auditor 直接連網址
來源 掃描驗證:C24 D2(實例 M03-5);標準做法:C23b D1◇
§6

SR-09.5 agent 容器非 root、能力全拿掉、有資源上限;沙箱 image 有版本有簽章

欄位 內容
要求 agent 容器必須以非特權帳號執行(USER 非 root)、cap_drop: ALL、no-new-privileges、設記憶體與 pids 上限;沙箱 image 是出貨包的一部分,必須有版本與簽章,啟動前必須驗簽
為什麼 容器是 root 時,規則包裡的程式碼拿到的是整個容器(含所有憑證與 S3 金鑰),再拿憑證冒充這台 agent;沒有記憶體上限時,超大源碼或炸彈讓其他掃描與心跳一起死;image 沒有簽章則供應鏈被換掉無從察覺
適用連線 C23b agent 本機程序、C08 worker → 沙箱(拆檔)
對應威脅 C23b T1 規則包裡藏程式,在 agent 容器裡以 root 執行(無掃描實例)、C23b T3 特製壓縮包或巨型 repo 把 agent 主機撐爆(無掃描實例)
驗證方式 在 agent 容器內執行 id 必須非 root;檢查容器設定必須有 cap_drop: ALL、no-new-privileges 與記憶體、pids 上限;以未簽章或被改過的沙箱 image 啟動必須被拒
來源 標準做法:C23b D2◇、C08 D6◇
§7

SR-09.6 受檢主機用 agent 專用最小權限帳號,sudoers 只白名單

欄位 內容
要求 受檢主機上必須使用 agent 專用帳號,不得用一般維運帳號;該帳號的 sudoers 只能白名單必要的二進位(如 oscap、nmap 等實際用到的);安裝與客戶部署文件必須指引客戶這樣建立帳號
為什麼 帳號權限過大時,目標主機一被入侵或 agent 一被冒充,攻擊者拿到的是客戶能 sudo 的維運帳密,可登進真正的主機做任何事;最小權限讓後果縮小到那幾支二進位
適用連線 C23 agent → 受檢主機
對應威脅 C23 T1 連到哪由呼叫者填——代理程式替人敲遍內網 🟡、C23 T3 受檢主機被入侵後,反過來打代理程式(無掃描實例)
驗證方式 以 agent 帳號登入受檢主機,執行白名單外的特權指令(例如 sudo bash)必須被拒;檢查 sudoers 內容只含必要二進位;檢查部署文件必須有建立專用帳號與 sudoers 範例
來源 標準做法:C23 D6◇
§8

SR-09.7 掃描前明示目標,外部位址額外確認,文件說清掃描就是攻擊流量

欄位 內容
要求 掃描前畫面必須明示「將對以下 N 台/網址發送掃描流量」並列出完整目標;目標含外部位址(非 RFC1918)時必須額外確認;文件與畫面必須說清楚「掃描就是攻擊流量」,客戶要先與自己的資安團隊與網管協調(IDS 白名單、掃描窗口),掃外部目標要有書面授權
為什麼 ZAP 或 Nmap 的目標填成競爭對手或第三方網站時,客戶變成攻擊來源,法律與聲譽後果落在客戶頭上;掃描流量也可能被客戶自己的 IDS/EDR 判成橫向移動而封鎖執行主機,檢測自我停擺
適用連線 C25 掃描引擎 → 目標
對應威脅 C25 T1 拿客戶的掃描器當武器打第三方(無掃描實例)、C25 T2 掃描流量打掛內網脆弱設備(無掃描實例)、C25 T3 掃描流量觸發客戶自己的防禦,agent 被封(無掃描實例)
驗證方式 送出含外部位址的掃描任務,畫面必須顯示完整目標清單與二次確認,未確認不得派工;目標全為內網時必須仍顯示目標清單;檢查使用手冊必須有「掃描就是攻擊流量、須與資安團隊協調」的明文段落
來源 標準做法:C25 D2◇、C25 D4◇

來源:連線頁的防線(D);去重對照在 requirements/_drafts/D-to-SR.md。