iT邦幫忙

2025 iThome 鐵人賽

DAY 11
1
Modern Web

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

Day11 - 減少人為配置錯誤:AI Agent 做自動化設定驗證

  • 分享至 

  • xImage
  •  

傳統上,系統配置大多依賴人工調整與檢查。

但人為失誤往往是資安漏洞的來源之一。

AI Agent 可以自動驗證配置,減少錯誤率,讓系統更穩定安全。
它不只是一個「檢查清單」,而是能結合 AI 的語意理解,自動判斷問題並提出修正方案。


為什麼會有人為配置錯誤?

  • 複雜度高 → 一個專案可能有 Nginx、Express、Redis、DB、前端 CSP 等多層設定
  • 標準不一致 → 開發者各自習慣不同,導致設定風格不統一
  • 疏忽 → 忙碌或趕進度時,容易漏掉安全細節(像 Cookie 沒有 HttpOnly
  • 環境差異 → Dev、Staging、Production 配置不同,容易產生落差

這些狀況往往導致「安全性配置缺失」,但又不容易在第一時間被發現。


工作流程 (AI Agent)

  1. Agent 收集 → 擷取伺服器回應的 HTTP Headers / Cookie
  2. 初步檢查 → 用規則(if/else)找出缺失
  3. 交給 Gemini → 讓 AI 做「語意判斷 + 修正建議」
  4. 回饋結果 → 以清單或報告輸出

最大的差別是:我們不用自己寫死 if/else 規則,AI 會根據上下文自動補充更多可能的漏洞(例如 CSP 缺失),避免人眼遺漏。


Server – 模擬不安全網站

import express from "express";
import cookieParser from "cookie-parser";

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

// 測試 API
app.get("/test", (req, res) => {
   // 故意只設部分 header,模擬「人為配置錯誤」
   res.setHeader("X-Powered-By", "Express"); // 應移除
   res.setHeader("Referrer-Policy", "unsafe-url"); // 太寬鬆

   // Cookie 測試
   res.cookie("sessionId", "abc123", {
      //  缺少 Secure、HttpOnly、SameSite
   });

   res.json({ msg: "Hello from server with weak headers" });
});

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

Agent– 自動檢測與建議

1、匯入套件與設定 API Key

  • node-fetch → 幫我們向目標伺服器發送請求,取得 Response Headers 與 Cookies。
  • dotenv/config → 自動讀取 .env 檔案裡的 GEMINI_API_KEY,避免把金鑰寫死在程式碼中。
  • GoogleGenerativeAI → 官方 Gemini SDK,用來呼叫指定模型(例如 gemini-1.5-flash),產生 AI 判斷與修正建議。
import fetch from "node-fetch";
import 'dotenv/config';
import { GoogleGenerativeAI } from "@google/generative-ai";

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

2、收集伺服器回應

  • 透過 fetch 發送 GET 請求,拿到伺服器回應。
  • 使用 Object.fromEntries(res.headers.entries()) 轉成一般物件,方便處理。
  • 另外抽取 Set-Cookie 標頭,交給 AI 檢測。
async function collectHeaders() {
   const res = await fetch(targetUrl, { method: "GET" });
   const headers = Object.fromEntries(res.headers.entries());
   const cookies = res.headers.get("set-cookie");
   return { headers, cookies };
}

3、使用 Gemini 做檢查 + 修正建議

  • prompt 中直接塞入收集到的 Headers / Cookies。
  • 指示 Gemini 依序輸出:問題 → 原因 → 修正建議
  • 讓 AI 自動補足「缺少的安全設定」,而不是只檢查明顯錯誤。
async function aiReview(headers, cookies) {
   const prompt = `
	你是一個資安檢測 Agent。
	以下是伺服器的 HTTP Headers 與 Cookies,請你幫我:
	
	1. 找出所有安全性問題
	2. 說明為什麼有問題
	3. 提供正確的修正建議(具體的 header 或 cookie 設定範例)
	4. 輸出時用條列清單,方便閱讀
	
	---
	HTTP Headers:
	${JSON.stringify(headers, null, 2)}
	
	Cookies:
	${cookies || "無"}
	---
	`;

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

4、主流成

  • collectHeaders() → 抓取伺服器回應。
  • aiReview() → 把結果交給 Gemini 分析。
  • 最後輸出報告,通常包含:
    • 問題清單
    • 原因說明
    • 修正建議(具體設定範例)
async function main() {
   const { headers, cookies } = await collectHeaders();
   const aiResult = await aiReview(headers, cookies);

   console.log("=== AI 驗證報告 ===");
   console.log(aiResult);
}

main();

上一篇
Day10 - API 安全:Agent 模擬攻擊 + 自動生成防護建議
下一篇
Day12 - 密碼與認證:AI Agent 協助 MFA 與弱密碼偵測
系列文
AI 驅動的 Web 資安新時代16
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言