傳統的安全檢測與弱點掃描,輸出結果往往充滿技術細節:
AI Agent 可以同時滿足 技術人員 和 管理者 的需求:
express
建立一個非常輕量的本地測試 API。/api/scan/result
回傳模擬的弱點掃描結果陣列(每筆包含 cve, desc, cvss, system, poc
),方便本地 Agent 或測試腳本抓取並產生報告。import express from "express";
const app = express();
app.get("/api/scan/result", (req, res) => {
res.json([
{
cve: "CVE-2025-12345",
desc: "Apache Struts Remote Code Execution",
cvss: 9.8,
system: "支付系統 API 伺服器",
poc: "POST /api/payment {payload...}"
},
{
cve: "CVE-2024-56789",
desc: "弱 TLS 配置",
cvss: 6.5,
system: "後台管理系統",
poc: "SSL Labs 測試報告"
}
]);
});
app.listen(3000, () => console.log("伺服器啟動中:http://localhost:3000"));
這裡載入 node-fetch
用來呼叫 API,dotenv
用來讀取 .env
裡的金鑰,並初始化 Gemini API client。
import fetch from "node-fetch"; // 發送 HTTP 請求
import dotenv from "dotenv"; // 載入 .env 檔案
import { GoogleGenerativeAI } from "@google/generative-ai"; // Google Gemini SDK
dotenv.config(); // 啟用 .env 環境變數
從 .env
讀取金鑰,並建立模型實例。
這裡示範使用 gemini-2.5-flash
(速度快、成本低),若要更精準可改成 gemini-2.5-pro
。
const API_KEY = process.env.GEMINI_API_KEY;
const genAI = new GoogleGenerativeAI(API_KEY);
// 建立模型物件
const model = genAI.getGenerativeModel({ model: "gemini-2.5-flash" });
generateReport
流程:
/api/scan/result
的掃描結果。async function generateReport() {
// 向本地伺服器拿掃描結果
const res = await fetch("http://localhost:3000/api/scan/result");
const vulns = await res.json();
// 組合 Prompt,請求模型同時輸出技術與管理報告
const prompt = `
以下是掃描結果,請輸出兩種報告:
1. 技術報告:列出漏洞細節(CVE、描述、CVSS、PoC、修補建議)。
2. 管理摘要:用表格呈現 Top 風險、受影響系統、修補優先度、業務影響。
掃描結果:
${JSON.stringify(vulns, null, 2)}
`;
利用 model.generateContent()
呼叫 LLM,並將結果印出。若發生錯誤則會捕捉並顯示錯誤訊息。
try {
const result = await model.generateContent(prompt);
console.log("=== AI 報告 ===");
console.log(result.response.text()); // 印出 AI 產生的報告
} catch (err) {
console.error("產生報告失敗:", err.message);
}
}
最後呼叫函式 generateReport()
,啟動整個流程。
generateReport();
Day22 - AI 日誌事件分析(Log Analyzer Agent)