---
title: C25 檢測引擎 → 受檢主機／網段
eyebrow: Guidant AI 資安檢視總報告 · 連線清單
h1: C25 檢測引擎 → 受檢主機／網段（掃描流量本身）
lede: 掃描真正打出去的那些封包——Nmap 從執行主機探整段網段、OpenVAS 從客戶的掃描器對目標做弱點測試、ZAP 對網站發攻擊流量。這條線**不是我們的程式在連**，是我們叫起來的工具在連；流量看起來就是攻擊，因為它本來就是。掃描六頁沒有一條落在它上面。這一頁回答：這條線**怎麼來的**、**哪些功能走它**、依特性**可能有什麼威脅**、我們**要怎麼防、目前做到哪**。
chips:
  - { text: "派掃描時", kind: plain }
  - { text: "目標使用者填・流量即攻擊", kind: warn }
  - { text: "可能手法 3 種", kind: accent }
  - { text: "掃描命中 0 條", kind: plain }
---

> **這一頁怎麼來的**：[DFD Level 0](../DFD/dfd-level0.html#c25) 把產品運作時的連線編成 C01～C25；[STRIDE 六頁](../STRIDE/S-spoofing.html)每一條問題都標了發生在哪幾條線。**這條線零命中**——它是第三方工具的流量，我們的程式只決定「掃誰、掃多重」。第四段寫的是依特性可能的手法，沒有掃描實例。

## 一、連線圖

```{.mermaid cap="C25 — 掃描流量。三種工具從三個地方打出去：Nmap 從客戶的執行主機、OpenVAS 從客戶的掃描器、ZAP 從客戶的 ZAP daemon。我們決定的只有「目標是誰」（使用者填）與「掃多重」（任務參數）。紅色：目標與強度都是使用者輸入，流量本質上是攻擊。"}
%%{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](C23-agent-to-target-host.html)）；OpenVAS 從客戶自架的掃描器（agent 經 GMP 叫它建 task，[C23a](C23a-agent-to-tool-servers.html)）；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](C02-frontdoor-to-api.html) 守門漏掉時任何人）；② ZAP 任務 `target_url` 填競爭對手或任何外部網站；Nmap `targets` 填外部 IP 段；③ 派掃描——客戶的 ZAP daemon／執行主機對外發攻擊流量；④ 被掃的一方看到來源是客戶的 IP，報警、列黑名單、甚至追究法律責任 | 讓客戶變成攻擊來源；法律與聲譽後果落在客戶頭上 | [E 權限提升](../STRIDE/E-elevation-of-privilege.html) | — |
| T2 | —（無掃描實例） | **掃描流量打掛內網脆弱設備** | ① 任務目標填一整段內網（256 台上限內）；② 選 OpenVAS Full and fast 或 ZAP active scan；③ 網段裡的印表機、網路設備、工控系統、老舊 Windows 收到弱點測試封包當機或重啟；④ 或 Nmap SYN 掃描全埠讓老防火牆連線表爆滿 | 內網服務中斷——而且是「我們的產品」造成的 | [D 讓服務停擺](../STRIDE/D-denial-of-service.html) | — |
| T3 | —（無掃描實例） | **掃描流量觸發客戶自己的防禦，agent 被封** | ① 正常派掃描；② 客戶的 IDS／EDR 看到執行主機或掃描器對內網大量探測，判定為橫向移動攻擊；③ 自動封鎖來源——執行主機被隔離、掃描器被下線，連帶 agent 連不到它們；④ 掃描全部失敗，客戶資安團隊接到告警開始調查 | 檢測功能自我停擺；客戶資安團隊的信任 | [D 讓服務停擺](../STRIDE/D-denial-of-service.html) | — |

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

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

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

| # | 防線 | 擋哪種威脅 | 目前做到哪 |
|---|---|---|---|
| D1 ◇ | **誰能設掃描目標要守住**：派工只放行被指派人與專案管理者；目標變更要留紀錄 | T1 | ✅ 八支派工／取消端點換成 `assert_job_operator`（[C02](C02-frontdoor-to-api.html) 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](C21-api-to-agent-dataplane.html) `/detection/cancel` 真中斷子行程（Nmap 透過 SSH 連線關閉讓 sshd 送 SIGHUP；OpenVAS `stop_task`；ZAP 逐階段查 cancel_event）；✅ 各工具有逾時（OpenVAS 預設 3 小時） |

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

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

- **這條線整個不在掃描範圍**：它是第三方工具的行為，六頁 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。*
