要怎麼讀這篇這篇只有三大表,是昨天那張流程圖的每個節點(node)功能與主要動線(edge)的說明,以及每條動線的解譯。請兩兩對照,先了解從[Start]開始經過的每個node去了解整個運作原理,光是這樣就很燒腦,明天再繼續把有用到的每個Node的設定與為什麼這麼設定分好幾篇做說明,沒辦法,功能強大設計用心,我也想讓整個過程更簡單,但偏偏技術活的簡化有極限,至少讓各位不用寫程式,不用K英文,不用學新技術,只要拖拉填值就能完成受控管的自動化了。
節點型別的完整設定方式請看各節點篇,這裡只列「這一格在本流程裡怎麼設、為什麼」。順序依流程走向。
| # | 畫面名稱 | 節點型別 | 這一格的設定重點 | 為什麼這樣設 |
|---|---|---|---|---|
| 1 | 開始 | 開始(Start) | 無設定。一條出線到「情報摘要」。 | 案件由事件接收程序建立,從這裡進入流程。 |
| 2 | 情報摘要 | 寫入欄位(OpFieldWrite) | 目標欄位 intel_summary;內容為「24小時內同源事件 ${f.od_repeat_count} 件,本案聚合 ${f.od_event_count} 件,該 IP 歷史封鎖 ${f.od_history_block_count} 次;風險分數 ${f.risk_score},建議處置 ${f.recommended_action}。」 | 把分散的數字組成一句話寫進表單,簽核者不必自己翻原始事件。放在分流之前,所有案件都有。 |
| 3 | 嚴重度分流 | 分支(Branch) | 三條互斥規則:${f.severity_id} >= 4 →「高危-簽核」與「高危-SLA 計時」兩條出線;== 3 →「中危」;<= 2 →「低危」。fallback 為指定出線「中危」。 | 高危規則一次勾兩條出線,形成並行雙軌。fallback 指向人工,缺值時交給人而不是歸檔。 |
| 4 | 低危歸檔註記 | 寫入欄位 | 目標欄位 intel_summary;內容「低危事件(severity ${f.severity_id})自動歸檔,未進入人工簽核。」 | 低危不佔用人力,但要留下可追溯的註記,說明這件案子沒有人看過。 |
| 5 | 一線簽核(高危) | 簽核(FormAdapter) | 簽核者:角色「資安人員」。啟用自定義決策選項,傳出變數名稱 soc_decision。四個決策:封鎖攻擊來源(值 block)、放行(可接受風險)(allow)、升級二線(escalate)、誤判結案(false_positive),各配一條出線。備註最少字數 10。未啟用簽核逾時。 | 決策值寫進流程變數,計時軌靠它判斷「有沒有人簽過」。最少 10 個字,避免打兩個字就算完成處置意見。 |
| 6 | 一線簽核(中危) | 簽核 | 與上一格完全相同的簽核者、決策與字數設定,傳出變數同為 soc_decision;四條出線是另外四條,目的地相同。 | 分成兩個節點,是因為只有高危那一個要與計時軌並行;中危靠處置中心清單的 60 分鐘顯示。 |
| 7 | 二線處置 | 簽核 | 簽核者:角色「資安主管」。傳出變數 l2_decision。兩個決策:處置完成-封鎖(block)、處置完成-結案(closed)。備註最少字數 10。 | 二線指向專責角色而不是企業管理員,把管理員從每日執行鏈裡拉出來,也避免單一帳號成為瓶頸。 |
| 8 | 寫入封鎖決策 | 防禦決策(DecisionWriter) | 動作「封鎖 (block)」;目標型別 ip;目標值 ${f.actor_ip};嚴重度 high;TTL 秒 3600;執行點 nftables 與 edl;決策來源「人工決策 (human)」;理由範本「SOC 處置 ${wi.exec_code}:${f.finding_title}(rule ${f.finding_rule_id})」。封鎖保護清單維持預設(命中時視為節點錯誤)。 | 封鎖只有這一個出口。期限 1 小時:有人在線,隨時可以再延長,誤封也會自己解除。決策來源明確指定,是因為並行分支下自動推斷不可靠。 |
| 9 | 寫入放行決策 | 防禦決策 | 動作「放行 (allow)」;目標值 ${f.actor_ip};嚴重度 info;不設 TTL;執行點只有 edl;決策來源「人工決策 (human)」;理由範本「SOC 判定可接受風險 ${wi.exec_code}:${f.finding_title}」。 | 放行也是一個決定,要和封鎖一樣留下紀錄。放行只支援 edl 執行點,其餘執行端不認得放行動作。 |
| 10 | 封鎖完成通報 | 緊急廣播(AlertBroadcast) | 廣播代碼 SOC-BLOCK-DONE;標題「資安處置:已封鎖 ${f.actor_ip}」;對象為指定角色:資安人員與資安主管;不需確認。 | 讓同班與主管知道有一筆封鎖生效。不要求逐件確認,避免某一個人變成瓶頸。 |
| 11 | SLA 計時 15 分 | 暫停(Delay) | 延遲 15 分鐘(設定值 delay_minutes: 15)。 | 高危案件的處理時限。時間到才醒來檢查,期間不佔任何資源。 |
| 12 | 檢查是否已簽核 | 分支 | 規則一「已簽核」:${v.soc_decision} 不為空 →「已簽」;規則二「逾時未簽核」:${v.soc_decision} 為空 →「逾時」。fallback 指定出線「已簽」。 | 兩條規則對同一個變數一正一反,必有一條成立;fallback 只在規則評估本身出錯時用到,選擇不催辦。 |
| 13 | 準時完成 | 設定變數(OpSet) | 把流程變數 sla_track 設為 signed_in_sla。沒有出線。 | 計時軌的收尾點之一。不能接到「結束」,理由見第 6 節 (i)。 |
| 14 | SLA 逾時催辦 | 緊急廣播 | 廣播代碼 SOC-SLA-WARN;標題「SLA 逾時:${f.finding_title}」;內文含案件編號 ${wi.exec_code} 與「已超過 15 分鐘無人簽核」;對象資安人員;不需確認。 | 第一層提醒,發給能處理的那一群人。 |
| 15 | 再等 15 分 | 暫停 | 延遲 15 分鐘。 | 給被催辦的人反應時間。 |
| 16 | 二次檢查 | 分支 | 與第 12 格相同的兩條規則,出線為「已簽」與「仍未簽」;fallback 指定出線「已簽」。 | 同上。無法判定時不升級通報。 |
| 17 | 催辦後完成 | 設定變數 | sla_track = signed_after_warn。沒有出線。 | 計時軌收尾點之二。 |
| 18 | 升級通報主管 | 緊急廣播 | 廣播代碼 SOC-SLA-ESCALATE;標題「案件無人處理:${f.finding_title}」;內文含「經催辦後仍超過 30 分鐘無人簽核,請主管介入」;對象資安主管;需要確認。 | 這一則要確認:主管必須留下「我看過了」的紀錄。 |
| 19 | 已升級通報 | 設定變數 | sla_track = escalated。沒有出線。 | 計時軌收尾點之三。計時軌的任務到此為止,處置權仍在人手上。 |
| 20 | 結束 | 結束(End) | 結束模式「分離執行模式 (Detach)」,等待 3 秒後結束流程。六條出線匯入:兩個誤判、二線結案、封鎖完成通報、放行決策、低危歸檔。 | 正常完工用分離執行;還在倒數的暫停節點到期時會被取消。 |
流程的設計意圖大多不在節點裡,而在線怎麼拉。以下十組是討論這個流程時最值得停下來看的地方。
為什麼這樣拉:先寫情報摘要、再分流,所有案件(包含高危)在簽核者打開的那一刻就有判斷依據:這個來源今天出現過幾次、以前封鎖過幾次、風險分數多少。寫入欄位不會讓流程等待,放在主幹上沒有成本。
如果不這樣拉:把摘要放在某一條分支之後(標準版就是只有中危那一條有),結果是最需要判斷依據的高危案件反而資訊最少,值班人員得自己去翻原始事件。
為什麼這樣拉:這兩條出線屬於同一條規則。分支節點的規則可以勾選多條目標路徑,命中時全部一起往下走,這就是並行,不需要專用的並行節點。只有高危開計時軌,是因為計時軌的產出是全員廣播:高危案件 15 分鐘沒人動值得打斷所有人,中危不值得。
如果不這樣拉:把計時軌接在簽核節點後面,它要等人簽完才會開始,失去意義。若寫成兩條條件相同的規則,效果一樣,但日後調整嚴重度門檻時要改兩個地方,漏改其中一條就會出現「有簽核沒計時」的案件。若中危也開計時軌,廣播數量會多到沒有人再看廣播。
為什麼這樣拉:嚴重度缺值或不是數字時,三條規則的比較都視為不成立。fallback 設為「指定出線」並指向中危簽核,意思是不知道多嚴重,就交給人看。
如果不這樣拉:分支節點的 fallback 只有「指定出線」會往下走,其餘設定一律不推進任何出線,案件會停在分流節點之後:流程顯示進行中,卻沒有任何人收到任務,也不會報錯。若指向低危歸檔,資料品質有問題的事件會被無聲丟棄;若指向高危,則每一筆壞資料都會觸發全員催辦。
為什麼這樣拉:低危事件量最大,不應該佔用任何人的注意力;但「沒有人看過」本身是一項需要留下的事實。中間放一個寫入欄位節點,案件表單上就有一行註記說明它是自動歸檔的。
如果不這樣拉:直接從分流接到結束,事後查這件案子時只看得到「已完成」,分不出是有人判斷過還是流程自己結的。若讓低危也進簽核,清單會被雜訊淹沒,真正的高危案件更容易被漏看,與這個流程的目的相反。
為什麼這樣拉:四個決策各有一條專屬出線,簽核者按哪一顆按鈕,流程就只走那一條。封鎖與放行都接防禦決策節點,因為兩者都是對這個來源位址下的判斷:放行決策會留在決策紀錄裡,而且黑名單產生時,同一個位址上較新的放行會壓過較早的封鎖。誤判則是對「這筆告警」的判斷,與來源位址無關,所以不寫決策、直接結束。
如果不這樣拉:放行若直接接到結束,這個位址曾經被人判定為可接受風險的事實只留在簽核意見裡,決策列表查不到;先前對同一位址的封鎖也不會因為這次放行而解除。
附帶說明:「誤判結案」這顆按鈕是紅色的,但因為它接了出線,簽核紀錄上記的是「核准」,案件終態也是「已完成」而不是「已退回」。真正的決策要看流程變數 soc_decision 與處置意見。詳見簽核節點的出線行為。
為什麼這樣拉:二線的「封鎖」回接到一線用的同一個防禦決策節點,而不是另外拉一個。封鎖期限、執行點、保護清單的處理方式、後面的通報,都只有一個設定點;三個簽核節點(高危一線、中危一線、二線)的封鎖出線全部匯到這裡。
如果不這樣拉:每個簽核節點各配一個封鎖決策節點,日後把期限從 1 小時改成 4 小時,就得改三個節點;漏改一個,同一種決策就會因為是誰按的而有不同期限,而且畫面上看不出來。
為什麼這樣拉:通報放在決策寫入之後:防禦決策節點若失敗(例如目標命中封鎖保護清單),流程會停在那一格,通報不會發出,不會出現「廣播說已封鎖、實際上沒有」的情況。通報只接在封鎖這條路上,因為封鎖會影響線上流量,值得讓同班與主管知道;放行與誤判不改變任何現況,不需要打斷別人。
如果不這樣拉:通報放在決策之前,它就變成「有人按了封鎖」而不是「封鎖已寫入」;每一種結案都發通報,則會稀釋廣播的訊號價值。
為什麼這樣拉:計時軌是一條純線性的路,每一段都是「等、看、決定要不要出聲」。它判斷「有沒有人簽」的方式是看流程變數 soc_decision 是不是空的:這個變數由簽核動作在按下按鈕的當下寫入,值就是所選決策(block、allow、escalate、false_positive)。兩次檢查之間隔一則催辦與一段等待,先提醒能處理的人,再通知能調度的人。
fallback 為什麼指向「已簽」:兩條規則一正一反,正常情況下必有一條成立;fallback 只在規則評估本身出錯時才會用到。那種情況下選擇不出聲:漏催一次的代價是多等一段時間,誤催的代價是全員被打斷,而且會讓人開始忽略廣播。
如果不這樣拉:用暫停節點直接接廣播、不檢查,就變成不管有沒有人處理都會催辦。若改用簽核節點自己的「簽核逾時」,語意完全不同:那是時間到就替人選一個決策並往下走,等於讓流程代替人處置,違反這個版本的核心前提。
為什麼這樣拉:「結束」是流程級的:任何一條分支走到它,整個流程就結束。計時軌不能碰它。沒有出線的節點會讓該分支安靜結束,不報錯、也不影響另一條分支,所以計時軌的三個收尾點都用一個沒有出線的設定變數節點。順帶把 sla_track 設成不同的值,留下這條計時軌最後停在哪裡的標記。
如果不這樣拉:把計時軌接到結束,情境丙(30 分鐘沒人簽)的結果會是:通報主管之後,案件立刻被結掉,終態是「已完成」,而那個還沒有人處理的高危案件從進行中清單消失。這是這張圖上最容易犯、後果也最嚴重的錯誤。
使用 sla_track 做統計前請先讀:這個標記只在計時軌「真的醒來檢查」時才會寫入。依第 4 節的情境甲,準時簽完且流程已結束的案件,暫停節點是被取消的,不會留下 signed_in_sla。所以沒有 sla_track 的高危案件多數就是準時完成的案件,不能把「有標記的筆數」當成全部。
為什麼這樣設:人工處置軌走到結束時,計時軌的暫停節點多半還在倒數。結束模式有三種:「分離執行模式 (Detach)」直接結束、終態為已完成;「取消/終止模式 (Cancel)」會主動取消未完成的節點,但它的語意是中止,流程與表單都會記成「已取消」;「嚴格等待模式 (Strict)」要等所有節點完成才結束,案件會被暫停節點拖到 15 或 30 分鐘後才結案。正常處置完的案件應該是「已完成」,所以用分離執行。
還在倒數的暫停節點會怎樣:它留在等待狀態直到到期;到期時執行器先檢查流程狀態,發現已經結束,就把這個節點標為取消,後面的檢查與廣播都不會執行。也就是說,簽完之後不會在 15 分鐘後跳出一則沒有意義的催辦。
如果不這樣設:用「取消/終止模式」來「順便清掉計時軌」,所有正常處置完的案件都會顯示為已取消,事後統計與稽核會全部失真。
為什麼這樣拉:防禦決策節點有兩種一定會失敗的輸入:來源位址是空的(目標值替換後為空),或來源位址命中封鎖保護清單(內建就包含所有私有網段;偵測器架在反向代理後面時,看到的來源常常是代理自己的內網位址)。失敗的節點會讓案件停在那一格、永遠顯示「進行中」,而且沒有人有待辦。所以三條封鎖出線先匯入一個分支:位址非空且是公網位址才往決策節點走,其餘走 fallback 到一個寫入欄位節點把原因寫回表單,再交給一個新的簽核節點讓人確認處置方式。分支的正規表示式刻意對齊平台內建的保護清單範圍,兩邊一致,才不會有案件通過檢查卻在決策節點失敗。
如果不這樣拉:三條封鎖出線直接接決策節點(本流程的前一版就是這樣),簽核者按了封鎖、以為已經封鎖,實際上沒有;案件卡在進行中,沒有人有待辦,計時軌也因為 soc_decision 已有值而不會出聲。這是最難發現的一種失敗。
附帶說明:「人工封鎖確認」的兩個決策都直接到結束、不寫防禦決策。真的要封鎖某個內網位址,正當做法是在「封鎖保護清單」頁設定豁免項目後重新處置;分支的正規表示式不會讀豁免清單,所以設了豁免的內網位址仍會走到人工封鎖確認(見第 9 節)。