iT邦幫忙

2025 iThome 鐵人賽

DAY 17
0
Modern Web

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

Day17 - 紅隊 Agent:模擬駭客攻擊

  • 分享至 

  • xImage
  •  

在資安領域中,紅隊 (Red Team) 主要扮演「駭客」的角色,模擬真實的攻擊行為。

透過 AI Agent,我們可以自動化這個過程:

  • 自動產生惡意 Payload
  • 向伺服器發送攻擊請求
  • 收集回應並交給 AI 分析
  • 輸出攻擊成功與否及改善建議

這樣,即使是一人開發團隊,也能擁有「紅隊演練」的能力。


AI Agent工作流程

  1. 模擬不安全伺服器 (server.js)
    • 建立一個簡單的 Express 伺服器
    • 提供一個容易被攻擊的 API (登入驗證)
  2. 紅隊 Agent (agent.js)
    • 準備惡意 Payload (SQL Injection、XSS 等)
    • 自動發送攻擊請求到伺服器
    • 收集回應後交給 Gemini AI 分析
    • 判斷是否存在漏洞 + 給修補建議

server - 模擬不安全 API

1、建立伺服器與模擬資料庫

建立一個簡單的 Express 應用程式,並用一個陣列模擬「使用者資料表」。

import express from "express";
import bodyParser from "body-parser";

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

// 模擬資料庫 (明碼存放,不安全)
const users = [{ username: "admin", password: "123456" }];

2、不安全的登入 API

  • query 這一行模擬「不安全的 SQL 語法」:直接把輸入拼接進去。
  • 駭客只要輸入特定字串 (如 "' OR 1=1 --") 就能繞過驗證。
// 不安全的登入 API (可能被 SQL Injection 利用)
app.post("/api/login", (req, res) => {
   const { username, password } = req.body;

   // 模擬 SQL 查詢 (危險做法:直接拼接字串)
   const query = `SELECT * FROM users WHERE username = '${username}' AND password = '${password}'`;

   console.log("執行查詢:", query);

   const user = users.find(u => u.username === username && u.password === password);
   if (user) {
      res.send("登入成功");
   } else {
      res.status(401).send("登入失敗");
   }
});

3、啟動伺服器

伺服器運行在 http://localhost:3000,我們的紅隊 Agent 會對 /api/login 發動攻擊。

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

AI Agent - 自動檢測與建議

1、惡意 Payload 測試清單

  • 第一個 Payload 嘗試 SQL Injection,繞過密碼檢查。
  • 第二個 Payload 嘗試 XSS 攻擊,測試伺服器是否直接回傳未過濾的輸入。
const payloads = [
   { username: "admin", password: "' OR 1=1 --" }, // SQL Injection
   { username: "<script>alert(1)</script>", password: "123" } // XSS
];

2、發送攻擊請求

這裡使用 fetch 模擬駭客發送 POST 請求,把惡意 Payload 當作登入資訊送到 /api/login

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

   const text = await res.text();
   return { payload, status: res.status, response: text };
}

3、Gemini分析伺服器回應

  • 把伺服器的回應交給 Gemini AI 判斷。
  • AI 會告訴我們:
    1. 攻擊是否成功
    2. 是否存在漏洞
    3. 建議如何修補 (例如使用參數化查詢、輸入驗證)。
async function analyze(result) {
   const prompt = `
		目標 API 回應:
		狀態碼:${result.status}
		回應內容:${result.response}
		
		請判斷此攻擊是否成功,是否存在漏洞?
		並提供修補建議。`;

   const analysis = await model.generateContent(prompt);
   console.log("=== AI 分析結果 ===");
   console.log(analysis.response.text());
}

4、主流程

async function main() {
   for (const payload of payloads) {
      console.log("=== 測試 Payload ===", payload);
      const result = await attackApi(payload);
      await analyze(result);
   }
}

main();

上一篇
Day16 - 程式碼安全審查:AI Agent 在 CI/CD Pipeline 裡守門
下一篇
Day18 - 藍隊 Agent:自動修補與防禦建議
系列文
AI 驅動的 Web 資安新時代18
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言