Guidant AI 資安檢視總報告 · 安全需求(SR)
裝在客戶機房的那台機器
代理程式(agent)裝在客戶機房,手上有客戶主機的維運帳密、能對內網發掃描流量。這一章 7 條是它特有的要求:誰能派工、資料面只對雲端開、證據的可信副本在雲端、規則包的信任根、容器隔離、受檢主機帳號、掃描前確認目標。2 條有掃描實例、5 條是標準做法。
代理程式與一般 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 | 掃描前明示目標,外部位址額外確認,文件說清掃描就是攻擊流量 | 標準做法 |
| 欄位 | 內容 |
|---|---|
| 要求 | 發動掃描、取消、重派、刪執行紀錄、測試連線這類會讓 agent 動手的操作,必須在 api 層就只放行「任務被指派人」與「專案管理者」;不得只確認呼叫者是專案成員就放行;守門必須在派工單寫進資料庫之前 |
| 為什麼 | 唯讀角色按「開始掃描」,派工單寫進資料庫,agent 下次心跳就領走並帶著客戶主機帳密連進正式機器;反覆取消再重派則讓正常檢測永遠跑不完、執行紀錄被改 |
| 適用連線 | C20 agent → 主系統前門、C21 api → agent 資料面(:8443) |
| 對應威脅 | C20 T3 從畫面那頭發動——不該動手的人派出帶帳密的掃描 🟡、C21 T4 不該動手的人取消或干擾正在跑的掃描 🟡 |
| 驗證方式 | 以專案唯讀成員身分對發動、取消、重派、刪紀錄各端點送請求,必須全被拒且資料庫不得出現新派工單;以非被指派人的一般成員取消他人的掃描必須被拒;被指派人與專案管理者同樣操作必須成功 |
| 來源 | 掃描驗證:C21 D4(實例 M03-14);標準做法:C20 D5◇ |
| 欄位 | 內容 |
|---|---|
| 要求 | 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◇ |
| 欄位 | 內容 |
|---|---|
| 要求 | 掃描完成的回報一到,雲端必須立即經資料面取回證據檔、計算 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◇ |
| 欄位 | 內容 |
|---|---|
| 要求 | 規則包完整性必須有信任根: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◇ |
| 欄位 | 內容 |
|---|---|
| 要求 | 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◇ |
| 欄位 | 內容 |
|---|---|
| 要求 | 受檢主機上必須使用 agent 專用帳號,不得用一般維運帳號;該帳號的 sudoers 只能白名單必要的二進位(如 oscap、nmap 等實際用到的);安裝與客戶部署文件必須指引客戶這樣建立帳號 |
| 為什麼 | 帳號權限過大時,目標主機一被入侵或 agent 一被冒充,攻擊者拿到的是客戶能 sudo 的維運帳密,可登進真正的主機做任何事;最小權限讓後果縮小到那幾支二進位 |
| 適用連線 | C23 agent → 受檢主機 |
| 對應威脅 | C23 T1 連到哪由呼叫者填——代理程式替人敲遍內網 🟡、C23 T3 受檢主機被入侵後,反過來打代理程式(無掃描實例) |
| 驗證方式 | 以 agent 帳號登入受檢主機,執行白名單外的特權指令(例如 sudo bash)必須被拒;檢查 sudoers 內容只含必要二進位;檢查部署文件必須有建立專用帳號與 sudoers 範例 |
| 來源 | 標準做法:C23 D6◇ |
| 欄位 | 內容 |
|---|---|
| 要求 | 掃描前畫面必須明示「將對以下 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。