Guidant AI 資安檢視總報告 · 連線清單

C25 檢測引擎 → 受檢主機/網段(掃描流量本身)

掃描真正打出去的那些封包——Nmap 從執行主機探整段網段、OpenVAS 從客戶的掃描器對目標做弱點測試、ZAP 對網站發攻擊流量。這條線不是我們的程式在連,是我們叫起來的工具在連;流量看起來就是攻擊,因為它本來就是。掃描六頁沒有一條落在它上面。這一頁回答:這條線怎麼來的、哪些功能走它、依特性可能有什麼威脅、我們要怎麼防、目前做到哪。

派掃描時 目標使用者填・流量即攻擊 可能手法 3 種 掃描命中 0 條

這一頁怎麼來的:DFD Level 0 把產品運作時的連線編成 C01~C25;STRIDE 六頁每一條問題都標了發生在哪幾條線。這條線零命中——它是第三方工具的流量,我們的程式只決定「掃誰、掃多重」。第四段寫的是依特性可能的手法,沒有掃描實例。

§1

一、連線圖

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#E2F0F1','primaryTextColor':'#14201F','primaryBorderColor':'#0E7C86','secondaryColor':'#EEF2F3','secondaryTextColor':'#14201F','tertiaryColor':'#FBFCFC','tertiaryTextColor':'#14201F','lineColor':'#4A5A5C','textColor':'#14201F','mainBkg':'#E2F0F1','nodeBorder':'#0E7C86','nodeTextColor':'#14201F','edgeLabelBackground':'#FBFCFC','titleColor':'#14201F','clusterBkg':'#FBFCFC','clusterBorder':'#E4EAEB'}}}%%
flowchart LR
    U(["👤 任務設定者<br/>填目標・選掃描方式"])
    API["guidant-api<br/>目標數上限 256"]
    subgraph AGENTBOX["🏢 客戶機房"]
        direction TB
        AG["evidence-agent"]
        NMAPH(["執行主機<br/>跑 nmap -sT/-sS/-sV"])
        OV(["OpenVAS 掃描器<br/>Full and fast"])
        ZAPD(["ZAP daemon<br/>spider+active scan"])
        AG -- "C23 SSH" --> NMAPH
        AG -- "C23a GMP" --> OV
        AG -- "C23a HTTP" --> ZAPD
    end
    subgraph TARGETS["掃描目標(使用者填)"]
        direction TB
        T1(["🖥 內網主機/網段"])
        T2(["🌐 網站(ZAP target_url)<br/>可以是任何網址"])
    end
    U -- "C02" --> API
    API -- "C20 派工" --> AG
    NMAPH == "C25 · 探測封包" ==> T1
    OV == "C25 · 弱點測試" ==> T1
    ZAPD == "C25 · 攻擊流量" ==> T2
    classDef ext fill:#FBFCFC,stroke:#9AA8AA,stroke-dasharray:3 2
    classDef open fill:#FDECEC,stroke:#C0392B
    class U,NMAPH,OV,ZAPD,T1,T2 ext
    class T2 open
C25 — 掃描流量。三種工具從三個地方打出去:Nmap 從客戶的執行主機、OpenVAS 從客戶的掃描器、ZAP 從客戶的 ZAP daemon。我們決定的只有「目標是誰」(使用者填)與「掃多重」(任務參數)。紅色:目標與強度都是使用者輸入,流量本質上是攻擊。
§2

二、這條線怎麼連

項目 現況
誰 → 誰 不是我們的程式。三種工具各自從它跑的地方打出去:Nmap 從客戶指定的「執行主機」(agent SSH 登進去跑,C23);OpenVAS 從客戶自架的掃描器(agent 經 GMP 叫它建 task,C23a);ZAP 從客戶自架的 ZAP daemon(agent 經 API 叫它掃)。主機型工具(CINC/OpenSCAP)沒有這條線——它們登進目標後在目標上跑,不對外發流量
協定/埠 依工具與掃描方式:Nmap 原生 TCP/SYN 探測(-sT connect、-sS SYN 需 root、-sV 版本探測);OpenVAS 依 scan config(預設 Full and fast,GVM 官方 UUID)與 port list 對目標做數萬項弱點測試;ZAP 對目標網站 spider 爬站+active scan(注入測試、路徑暴力、參數竄改——真實攻擊流量)
目標誰決定 使用者在任務參數填:Nmap targets(位址或網段)、OpenVAS hosts、ZAP target_url。雲端對 Nmap/OpenVAS 的主機數設上限 DETECTION_SCAN_TARGET_MAX_HOSTS(預設 256,detection_job_binding_handler.py 綁定時檢查);目標位址本身不限制(裁定:掃描目標是客戶自己的機器,哪台合法由客戶管)。ZAP 的 target_url 沒有主機數概念,一個網址
強度誰決定 任務參數:Nmap scan_type(connect/syn/version)與 port_range;OpenVAS scan_config_id/port_list_id(可選,預設 Full and fast);ZAP scan_mode 與 ajax spider 開關
怎麼驗身分 無——這是掃描,對方不會認你。Nmap 的 SYN 掃描需要執行主機上的 sudo(sudoers 白名單 NOPASSWD: /usr/bin/nmap)
何時存在 派網路型掃描時

依據:agent repo core/task_executor_connectors/nmap.py:143-149(掃描方式對照、SYN 需 root)、openvas.py:43-46,140-146(預設 scan config/port list)、zap.py:178-183,433-470(target_url、ajax spider、active scan);套件 jedi_detection/app/service/detection_job_binding_handler.py:105-118(目標數上限);主專案 config/config.py:219;DFD Level 0 §2.6。

§3

三、哪些功能會走這條線

群 功能 對威脅的意義
① 網路探測 Nmap 掃網段:哪些主機活著、開哪些埠、跑什麼服務版本 流量溫和但量大(一個 /24 × 全埠);SYN 掃描需要 root
② 弱點掃描 OpenVAS Full and fast:對每台目標跑數萬項測試 有些測試會讓老舊設備(印表機、IoT、工控)當機——這是 OpenVAS 文件自己警告的
③ 網站攻擊測試 ZAP active scan:對網站每個參數試注入、對路徑暴力猜測 這就是攻擊。打錯對象(生產系統、第三方網站)等於真的攻擊了它
§4

四、依這條線的特性可能的攻擊手法(無掃描實例)

這條線零命中。依特性——目標與強度由使用者填、流量本質是攻擊、位址不設白名單——可能的手法有三種。風險欄寫「—(無掃描實例)」。

# 風險 威脅 駭客怎麼打 得手什麼 STRIDE 實例
T1 —(無掃描實例) 拿客戶的掃描器當武器打第三方 ① 有權設任務的人(或 C02 守門漏掉時任何人);② ZAP 任務 target_url 填競爭對手或任何外部網站;Nmap targets 填外部 IP 段;③ 派掃描——客戶的 ZAP daemon/執行主機對外發攻擊流量;④ 被掃的一方看到來源是客戶的 IP,報警、列黑名單、甚至追究法律責任 讓客戶變成攻擊來源;法律與聲譽後果落在客戶頭上 E 權限提升 —
T2 —(無掃描實例) 掃描流量打掛內網脆弱設備 ① 任務目標填一整段內網(256 台上限內);② 選 OpenVAS Full and fast 或 ZAP active scan;③ 網段裡的印表機、網路設備、工控系統、老舊 Windows 收到弱點測試封包當機或重啟;④ 或 Nmap SYN 掃描全埠讓老防火牆連線表爆滿 內網服務中斷——而且是「我們的產品」造成的 D 讓服務停擺 —
T3 —(無掃描實例) 掃描流量觸發客戶自己的防禦,agent 被封 ① 正常派掃描;② 客戶的 IDS/EDR 看到執行主機或掃描器對內網大量探測,判定為橫向移動攻擊;③ 自動封鎖來源——執行主機被隔離、掃描器被下線,連帶 agent 連不到它們;④ 掃描全部失敗,客戶資安團隊接到告警開始調查 檢測功能自我停擺;客戶資安團隊的信任 D 讓服務停擺 —

三種手法的共同點:這條線的「威脅」不是有人攻擊我們,是我們的產品被當成攻擊工具、或我們的產品本身造成損害。三種都不是技術漏洞——是「掃描就是攻擊」這個事實在授權、範圍、強度三個維度上的後果。產品能做的是:確認填目標的人有權(授權)、讓目標範圍可審核可追溯(範圍)、預設強度保守並讓重的選項要明示(強度)。

§5

五、我們要怎麼防、目前做到哪

零命中的線沒有「直接對應掃描手法」的防線,五條全部是依連線特性補的標準防線,全標 ◇。「目前」欄寫程式裡實際有的機制;⚠️ 表示沒有機制。

# 防線 擋哪種威脅 目前做到哪
D1 ◇ 誰能設掃描目標要守住:派工只放行被指派人與專案管理者;目標變更要留紀錄 T1 ✅ 八支派工/取消端點換成 assert_job_operator(C02 D1)。⚠️ 任務參數(含目標)的修改歷史有沒有留,沒查
D2 ◇ 目標範圍可審核:掃描前畫面明示「將對以下 N 台/網址發送掃描流量」;目標清單進稽核日誌;外部位址(非 RFC1918)要額外確認 T1、T2 ✅ 主機數上限 256。⚠️ 刻意不設位址白名單(裁定:哪台算合法由客戶管);⚠️ 沒有「外部位址要確認」的機制——ZAP target_url 填 https://www.example.com 照掃;⚠️ 掃描目標有沒有逐筆進稽核日誌沒查(測試連線有記,正式派工不確定)
D3 ◇ 預設強度保守,重的要明示:Nmap 預設 connect 不預設 SYN;OpenVAS 預設不選「會打掛設備」的 config;ZAP active scan 要勾選才開 T2 ✅ Nmap SYN 需 use_sudo 明示開啟,否則報錯指路。⚠️ OpenVAS 預設 Full and fast——GVM 官方預設,對一般主機合理,對 IoT/工控段偏重;⚠️ ZAP 預設 scan_mode 含 active scan(文件寫「預設」)——這是 DAST 的本意,但畫面有沒有警告「這會對目標發攻擊流量」沒看 FE
D4 ◇ 文件與畫面說清楚「掃描就是攻擊流量」:客戶要先跟自己的資安團隊、網管協調(IDS 白名單、掃描窗口);外部目標要有書面授權 T1、T3 ⚠️ 工具設定指引(setup_guide)寫的是「怎麼裝」,沒有「掃描前要協調什麼」。資安問卷與客戶合約裡有沒有「掃描授權」條款,不在本報告範圍
D5 ◇ 掃描可即時取消、有逾時 T2、T3 的止損 ✅ 取消經 C21 /detection/cancel 真中斷子行程(Nmap 透過 SSH 連線關閉讓 sshd 送 SIGHUP;OpenVAS stop_task;ZAP 逐階段查 cancel_event);✅ 各工具有逾時(OpenVAS 預設 3 小時)

最該補的一步:D2 的「外部位址要確認」。位址不設白名單是合理裁定(內網哪台合法產品管不到),但內網與外網是分得出來的——目標落在非 RFC1918 段時多一步「你確認要對外部目標發掃描流量嗎」,擋掉 T1 最常見的誤用,也是資安問卷「掃描範圍控制」的標準答案。

§6

六、依這些防線,掃描還沒看過的地方

  • 這條線整個不在掃描範圍:它是第三方工具的行為,六頁 STRIDE 零條。
  • 目標參數的稽核(D1、D2):正式派工的目標清單進不進日誌、改動留不留歷史,沒查。
  • 外部位址的處置(D2):沒有機制,也沒有文件說該不該有。
  • FE 的強度警告(D3):ZAP active scan、OpenVAS Full and fast 在畫面上有沒有提示,沒看 FE。
  • 掃描窗口:有沒有「只在某時段掃」的排程限制——避開營業時間,沒查。

依據:agent repo core/task_executor_connectors/nmap.py/openvas.py/zap.py、套件 jedi_detection/app/service/detection_job_binding_handler.py、主專案 config/config.py、DFD Level 0 §2.4/§2.6。