Guidant AI 資安檢視總報告 · 連線清單
掃描真正打出去的那些封包——Nmap 從執行主機探整段網段、OpenVAS 從客戶的掃描器對目標做弱點測試、ZAP 對網站發攻擊流量。這條線不是我們的程式在連,是我們叫起來的工具在連;流量看起來就是攻擊,因為它本來就是。掃描六頁沒有一條落在它上面。這一頁回答:這條線怎麼來的、哪些功能走它、依特性可能有什麼威脅、我們要怎麼防、目前做到哪。
這一頁怎麼來的:DFD Level 0 把產品運作時的連線編成 C01~C25;STRIDE 六頁每一條問題都標了發生在哪幾條線。這條線零命中——它是第三方工具的流量,我們的程式只決定「掃誰、掃多重」。第四段寫的是依特性可能的手法,沒有掃描實例。
%%{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
| 項目 | 現況 |
|---|---|
| 誰 → 誰 | 不是我們的程式。三種工具各自從它跑的地方打出去: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。
| 群 | 功能 | 對威脅的意義 |
|---|---|---|
| ① 網路探測 | Nmap 掃網段:哪些主機活著、開哪些埠、跑什麼服務版本 | 流量溫和但量大(一個 /24 × 全埠);SYN 掃描需要 root |
| ② 弱點掃描 | OpenVAS Full and fast:對每台目標跑數萬項測試 | 有些測試會讓老舊設備(印表機、IoT、工控)當機——這是 OpenVAS 文件自己警告的 |
| ③ 網站攻擊測試 | ZAP active scan:對網站每個參數試注入、對路徑暴力猜測 | 這就是攻擊。打錯對象(生產系統、第三方網站)等於真的攻擊了它 |
這條線零命中。依特性——目標與強度由使用者填、流量本質是攻擊、位址不設白名單——可能的手法有三種。風險欄寫「—(無掃描實例)」。
| # | 風險 | 威脅 | 駭客怎麼打 | 得手什麼 | 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 讓服務停擺 | — |
三種手法的共同點:這條線的「威脅」不是有人攻擊我們,是我們的產品被當成攻擊工具、或我們的產品本身造成損害。三種都不是技術漏洞——是「掃描就是攻擊」這個事實在授權、範圍、強度三個維度上的後果。產品能做的是:確認填目標的人有權(授權)、讓目標範圍可審核可追溯(範圍)、預設強度保守並讓重的選項要明示(強度)。
零命中的線沒有「直接對應掃描手法」的防線,五條全部是依連線特性補的標準防線,全標 ◇。「目前」欄寫程式裡實際有的機制;⚠️ 表示沒有機制。
| # | 防線 | 擋哪種威脅 | 目前做到哪 |
|---|---|---|---|
| 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 最常見的誤用,也是資安問卷「掃描範圍控制」的標準答案。
依據: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。