iT邦幫忙

2025 iThome 鐵人賽

DAY 12
0
Modern Web

AI 驅動的 Web 資安新時代系列 第 12

Day12 - 密碼與認證:AI Agent 協助 MFA 與弱密碼偵測

  • 分享至 

  • xImage
  •  

議題背景與重要性

  • 弱密碼缺少多因素驗證 (MFA) 是帳號外洩的常見原因。
  • 傳統檢查方式依賴人工:
    • 安全人員必須逐一檢查 Cookie / Headers 配置。
    • 容易遺漏、效率低下。
  • AI Agent 改善方式
    • 自動收集伺服器回應。
    • 交給 AI 分析弱點。
    • 自動生成「問題 → 原因 → 修正建議」,補足人力不足。

AI Agent 工作流

  1. 收集 → 從伺服器擷取 Response Headers / Cookie / Body
  2. 分析 → 整理回應,包含登入流程、Cookie 屬性
  3. AI 判斷 → Gemini 檢查問題點(弱密碼、缺少 MFA、不安全 Cookie)
  4. 回饋建議 → Gemini 輸出「問題 → 原因 → 修正建議」

Server – 模擬不安全網站

說明

  • 登入 API 缺乏 密碼強度檢查
  • 沒有 多因素驗證 (MFA)
  • Set-Cookie 缺少 HttpOnly / Secure / SameSite
  • 這些都是 AI Agent 要檢測的目標。
import express from "express";

const app = express();
app.use(express.json());

// 模擬登入 API:弱密碼 + 沒有 MFA + 不安全 Cookie
app.post("/login", (req, res) => {
   const { username, password } = req.body;

   // 沒有檢查密碼強度
   if (username === "admin" && password === "123456") {
      res.setHeader("Set-Cookie", "sessionId=abcd1234"); 
      // 缺少 HttpOnly / Secure / SameSite
      return res.send("登入成功 (示範不安全配置)");
   }
   return res.status(401).send("帳號或密碼錯誤");
});

app.listen(3000, () => {
   console.log("不安全伺服器啟動:http://localhost:3000");
});


Agent – 自動檢測

1、匯入套件與設定 API Key

import fetch from "node-fetch";
import "dotenv/config";
import { GoogleGenerativeAI } from "@google/generative-ai";

// === 初始化 Gemini ===
const API_KEY = process.env.GEMINI_API_KEY;
const genAI = new GoogleGenerativeAI(API_KEY);
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });

2、收集伺服器回應

  • 送出弱密碼登入請求。
  • 收集伺服器回應,包括:
    • 狀態碼
    • Headers
    • Response Body
const apiUrl = "http://localhost:3000/login";
const payload = { username: "admin", password: "123456" };

async function collectResponse() {
   const res = await fetch(apiUrl, {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify(payload),
   });

   return {
      status: res.status,
      headers: res.headers.raw(),
      body: await res.text(),
   };
}

3、使用 Gemini 檢查

  • 不使用 if/else 判斷,而是交由 Gemini 分析。
  • Prompt 規定輸出格式:
    • 問題 → 找到漏洞
    • 原因 → 為什麼有風險
    • 修正建議 → 如何改善
async function analyzeWithGemini(serverResponse) {
  const prompt = `
你是一個資安檢測 AI,請依照以下格式檢查伺服器回應:

問題 → 具體的安全問題  
原因 → 為什麼這是安全風險  
修正建議 → 如何修正

伺服器回應內容:
${JSON.stringify(serverResponse, null, 2)}
`;

  const result = await model.generateContent(prompt);
  return result.response.text();
}

4、主流程

async function main() {
  const response = await collectResponse();
  const report = await analyzeWithGemini(response);

  console.log("=== AI 安全檢測報告 ===");
  console.log(report);
}

main();

上一篇
Day11 - 減少人為配置錯誤:AI Agent 做自動化設定驗證
下一篇
Day13 - 我的 AI Agent 資安顧問:即問即答即執行
系列文
AI 驅動的 Web 資安新時代16
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言