PhishForge
演練信一看就是假的,員工學會的是辨識公司寄的信,不是辨識釣魚。所以我讓 AI 把信寫到你分不出來——再用行為數據告訴企業,到底有多少人點了。
已結案2024.03 – 2024.09後端 · AI 工程

- 第 29 屆大專校院資訊應用服務創新競賽
- 資安應用組第一名
- 同競賽資訊應用組 IP-06
- 佳作
- 國科會大專學生研究計畫
- 113 年度通過並結案
在解什麼問題
我原本以為資安演練沒用是因為員工不夠警覺。後來發現不是——問題出在樣本。範本式的模擬信件用過幾次之後,員工學會的不是「怎麼辨識釣魚」,而是「怎麼辨識公司寄的演練信」。訓練變成儀式,真正的攻擊還是打得進來。
真實的社交工程會針對職位、部門、近期專案客製化內容。要模擬它,就得用同樣的成本產生同樣客製的內容——那正好是 LLM 最擅長的事,也正好是它最危險的地方。這個專案有一半的工作是在處理後面那半句。
架構決策
01 2024.04
用 Gemini 而不是 OpenAI。
- 沒選的
- OpenAI API(團隊其他專案的預設選擇)
- 為什麼
- 這個題目的內容本身踩在內容政策邊界上。實測下來,兩家對「生成釣魚郵件」這類請求的拒答行為不同,Gemini 在有明確研究情境的 prompt 下更穩定。
- 代價
- 團隊多維護一套 SDK 與一組 prompt 慣例,兩邊的行為差異要各自記住。
02 2024.06
每一次演練都跑在獨立的容器裡,用 AWS ECS 而不是共用主機。
- 沒選的
- 共用一台 VM 開多個站台
- 為什麼
- 這個系統會生成仿冒網站並收集受測者的互動行為。一旦環境沒有隔離乾淨,演練資料和真實憑證就有機會混在同一個檔案系統裡。這是不能賭的一件事。
- 代價
- 部署複雜度整個上一階,而且成本從固定變成隨演練次數浮動。
03 2024.06
只記錄行為事件,不記錄輸入內容。
- 沒選的
- 完整記錄受測者在仿冒頁面上打的字
- 為什麼
- 「有沒有點開」「有沒有填欄位」「花了多久」已經足夠評估資安意識。記下實際輸入的密碼,對訓練效果沒有增益,卻讓這個系統本身變成一個資安風險。
- 代價
- 沒辦法做「弱密碼分析」這類延伸報告,而評審確實問過這件事。
資料怎麼流
- 01
目標設定
輸入受測組織的部門結構與近期情境,不需要真實個資。
- 02
郵件生成
LangChain 編排 Gemini,依情境產生客製化郵件內容與寄件人樣態。
生成內容會過一層規則檢查,避免產出可直接用於真實攻擊的素材。
- 03
仿冒站台生成
依郵件內容生成對應的登入頁,打包成容器映像。
- 04
隔離部署
推上 AWS ECS,每次演練一個獨立任務,結束後銷毀。
- 05
寄送
透過 SMTP 服務寄出,記錄寄送與開信事件。
- 06
行為收集
只收事件(開信、點擊、表單提交),不收輸入內容;寫入 PostgreSQL,即時統計走 Redis。
- 07
報告
產出組織層級的資安意識報告,回饋給訓練負責人。


得獎
- 2024.11第 29 屆大專校院資訊應用服務創新競賽 資安應用組 - 第一名
- 2024.11第 29 屆大專校院資訊應用服務創新競賽 資訊應用組 IP-06 - 佳作
技術
- Vue.js
- FastAPI
- LangChain
- Gemini API
- PostgreSQL
- Redis
- Docker
- AWS ECS