跳到主要內容

PhishForge

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

已結案2024.03 – 2024.09後端 · AI 工程
PhishForge
第 29 屆大專校院資訊應用服務創新競賽
資安應用組第一名
同競賽資訊應用組 IP-06
佳作
國科會大專學生研究計畫
113 年度通過並結案

在解什麼問題

我原本以為資安演練沒用是因為員工不夠警覺。後來發現不是——問題出在樣本。範本式的模擬信件用過幾次之後,員工學會的不是「怎麼辨識釣魚」,而是「怎麼辨識公司寄的演練信」。訓練變成儀式,真正的攻擊還是打得進來。

真實的社交工程會針對職位、部門、近期專案客製化內容。要模擬它,就得用同樣的成本產生同樣客製的內容——那正好是 LLM 最擅長的事,也正好是它最危險的地方。這個專案有一半的工作是在處理後面那半句。

架構決策

  1. 01 2024.04

    用 Gemini 而不是 OpenAI。

    沒選的
    OpenAI API(團隊其他專案的預設選擇)
    為什麼
    這個題目的內容本身踩在內容政策邊界上。實測下來,兩家對「生成釣魚郵件」這類請求的拒答行為不同,Gemini 在有明確研究情境的 prompt 下更穩定。
    代價
    團隊多維護一套 SDK 與一組 prompt 慣例,兩邊的行為差異要各自記住。
  2. 02 2024.06

    每一次演練都跑在獨立的容器裡,用 AWS ECS 而不是共用主機。

    沒選的
    共用一台 VM 開多個站台
    為什麼
    這個系統會生成仿冒網站並收集受測者的互動行為。一旦環境沒有隔離乾淨,演練資料和真實憑證就有機會混在同一個檔案系統裡。這是不能賭的一件事。
    代價
    部署複雜度整個上一階,而且成本從固定變成隨演練次數浮動。
  3. 03 2024.06

    只記錄行為事件,不記錄輸入內容。

    沒選的
    完整記錄受測者在仿冒頁面上打的字
    為什麼
    「有沒有點開」「有沒有填欄位」「花了多久」已經足夠評估資安意識。記下實際輸入的密碼,對訓練效果沒有增益,卻讓這個系統本身變成一個資安風險。
    代價
    沒辦法做「弱密碼分析」這類延伸報告,而評審確實問過這件事。

資料怎麼流

  1. 01

    目標設定

    輸入受測組織的部門結構與近期情境,不需要真實個資。

  2. 02

    郵件生成

    LangChain 編排 Gemini,依情境產生客製化郵件內容與寄件人樣態。

    生成內容會過一層規則檢查,避免產出可直接用於真實攻擊的素材。

  3. 03

    仿冒站台生成

    依郵件內容生成對應的登入頁,打包成容器映像。

  4. 04

    隔離部署

    推上 AWS ECS,每次演練一個獨立任務,結束後銷毀。

  5. 05

    寄送

    透過 SMTP 服務寄出,記錄寄送與開信事件。

  6. 06

    行為收集

    只收事件(開信、點擊、表單提交),不收輸入內容;寫入 PostgreSQL,即時統計走 Redis。

  7. 07

    報告

    產出組織層級的資安意識報告,回饋給訓練負責人。

PhishForge 畫面 1PhishForge 畫面 2

得獎

  • 2024.11第 29 屆大專校院資訊應用服務創新競賽 資安應用組 - 第一名
  • 2024.11第 29 屆大專校院資訊應用服務創新競賽 資訊應用組 IP-06 - 佳作

技術

  • Vue.js
  • FastAPI
  • LangChain
  • Gemini API
  • PostgreSQL
  • Redis
  • Docker
  • AWS ECS