大家好!歡迎來到鐵人賽第二十二天。
前面的流程主要是處理 Wazuh、漏洞與主機告警,今天我們把 SOAR 的範圍延伸到釣魚郵件分析。
當員工收到可疑郵件時,可以直接轉寄到資安通報信箱,再由 n8n 自動接收郵件、交給 Gemini 分析,最後將結果透過 LINE 通知資安人員。
今天的流程如下:
Gmail Trigger
↓
Gemini AI
↓
LINE HTTP Request
首先在 n8n 建立新的 Workflow,加入 Gmail Trigger。
設定 Google 帳號授權後:
Message Received
這樣當有新的可疑郵件進入指定信箱時,Workflow 就會自動觸發。
我們需要的資料主要有:
例如:
寄件者:attacker@example.com
主旨:【緊急】您的帳號即將停用
內容:請立即點擊連結重新設定密碼,否則帳號將於 24 小時內停用。
接著加入 Google Gemini 節點,讓 AI 判斷郵件是否具有釣魚特徵。
System Message 可以設定:
你是一位企業資安威脅分析師,專精於社交工程與釣魚郵件防禦。
請分析以下電子郵件,判斷是否具有釣魚特徵,例如:
1. 製造急迫感
2. 要求提供帳號或密碼
3. 可疑網址或網域
4. 異常的行動呼籲
請使用繁體中文回答,並在開頭標示:
【高風險】、【中風險】或【低風險】。
最後用100字以內說明判斷原因。
再將 Gmail Trigger 的資料傳給 Gemini:
【可疑郵件資訊】
寄件者:{{ $json.from.value[0].address }}
信件主旨:{{ $json.subject }}
信件內容:
{{ $json.textAsHtml || $json.snippet }}
這樣 AI 就能根據郵件內容進行初步風險判斷。
完成 AI 分析後,加入 HTTP Request 節點,把結果透過 LINE Messaging API 傳給資安人員。
設定:
Method:POST
URL:
https://api.line.me/v2/bot/message/push
Body 使用 JSON:
{
"to": "你的_LINE_群組_ID",
"messages": [
{
"type": "text",
"text": "🎣【釣魚郵件通報】\n\n📫 寄件者:{{ $('Gmail Trigger').item.json.from.value[0].address }}\n📝 主旨:{{ $('Gmail Trigger').item.json.subject }}\n\n🤖 AI 分析結果:\n{{ $json.text }}"
}
]
}
完成後,整個自動化流程就串起來了:
員工轉寄可疑郵件
↓
Gmail Trigger
↓
擷取寄件者、主旨、內容
↓
Gemini AI
↓
判斷釣魚風險
↓
LINE HTTP Request
↓
資安人員收到分析結果
接下來直接測試整個流程。
先讓 Workflow 進入監聽狀態,再使用另一個信箱寄送測試郵件,例如:
主旨:【緊急】您的帳號即將停用
內文:
您的帳號存在異常登入行為,
請立即點擊以下連結重新設定密碼,
否則帳號將於24小時內停用。
如果流程正常執行,n8n 會依序完成 Gmail → Gemini → LINE。
最後 LINE 會收到類似:
🎣【釣魚郵件通報】
📫 寄件者:attacker@example.com
📝 主旨:【緊急】您的帳號即將停用】
🤖 AI 分析結果:
【高風險】
郵件透過「帳號即將停用」製造急迫感,
並要求使用者立即重新設定密碼,
符合常見的釣魚郵件特徵。
目前 Gemini 主要依靠郵件內容進行判斷。
如果要提高分析準確度,可以在 Gemini 前面加入 URL 擷取流程,將郵件中的網址取出後,串接前面 Day 19 實作的 VirusTotal 情資查詢。
最後再把:
郵件內容
+
URL 情資
+
AI 分析
整合在一起,就能讓釣魚郵件分析不只是「看文字」,也能加入實際的威脅情報。
今天完成了第一個郵件型 SOAR 自動化流程:
Gmail → Gemini → LINE
從原本需要人工閱讀的可疑郵件,到現在可以自動觸發、分析並通知資安人員,整個流程已經可以串接起來。
明天將繼續處理自動化流程中的誤報與例外情況,讓 SOAR 不只是會執行,也能針對特定情況進行判斷與豁免。