iT邦幫忙

2026 iThome 鐵人賽

DAY 24
0
AI Security

30 天打造 AI 輔助 SOC 資安事件分析平台系列 第 24 篇

Day 24|打造 AI Analysis Panel:讓資安事件分析更清楚、更直覺

  • 分享至 

  • xImage
  •  

一、前言
在前幾天的實作中,我們已經逐步將 Gemini AI 分析功能整合到 AI SOC Dashboard。
從一開始只能查看資安事件,到後來可以透過 Gemini 產生事件摘要、可能風險、建議處置,以及 MITRE ATT&CK 技術對應,整個系統已經不再只是單純的事件紀錄平台。
不過 Day 23 的 AI 分析結果主要還是透過文字方式呈現。雖然可以讀取資訊,但當分析欄位逐漸增加時,所有內容集中顯示,閱讀起來就不夠直覺。
因此今天要將 AI 分析結果整理成真正的 AI Analysis Panel,讓使用者可以快速掌握事件嚴重度、事件摘要、可能風險、MITRE ATT&CK 對應,以及建議處置。
修改 React App.jsx
將舊的 AI 分析區塊替換成新的 AI Analysis Panel

{aiAnalysis && aiAnalysis.ai_analysis && (
  <div className="ai-panel">
    <div className="ai-panel-header">
      <div>
        <h2>AI Security Analysis</h2>
        <p>Security Event Intelligence</p>
      </div>
      <span className="analysis-status">
        Analysis Complete
      </span>
    </div>

    <div className="ai-event-info">
      <div className="ai-event-top">
        <h3>{aiAnalysis.event.event_type}</h3>

        <span
          className={`severity-badge ${
            String(aiAnalysis.event.severity).toLowerCase() === "high" ||
            aiAnalysis.event.severity === 1
              ? "severity-high"
              : String(aiAnalysis.event.severity).toLowerCase() === "medium" ||
                aiAnalysis.event.severity === 2
              ? "severity-medium"
              : "severity-low"
          }`}
        >
          {aiAnalysis.event.severity === 1
            ? "High Risk"
            : aiAnalysis.event.severity === 2
            ? "Medium Risk"
            : aiAnalysis.event.severity === 3
            ? "Low Risk"
            : `${aiAnalysis.event.severity} Risk`}
        </span>
      </div>

      <p>
        <strong>Source IP:</strong>
        {aiAnalysis.event.src_ip}
      </p>
      <p>
        <strong>Destination IP:</strong>
        {aiAnalysis.event.dest_ip}
      </p>
    </div>

    <div className="ai-section">
      <h3>事件摘要 Summary</h3>
      <p>{aiAnalysis.ai_analysis.summary}</p>
    </div>

    <div className="ai-section">
      <h3>攻擊類型 Attack Type</h3>
      <p>{aiAnalysis.ai_analysis.attack_type}</p>
    </div>

    <div className="ai-section">
      <h3>可能風險 Risk</h3>
      <p>{aiAnalysis.ai_analysis.risk}</p>
    </div>

    <div className="ai-section">
      <h3>建議處置 Recommendation</h3>
      <p>
        {aiAnalysis.ai_analysis.recommendation ||
          "目前沒有建議處置資訊"}
      </p>
    </div>

    <div className="ai-section">
      <h3>MITRE ATT&CK</h3>
      <p>
        <strong>Technique ID:</strong>
        {aiAnalysis.ai_analysis.mitre_technique_id ||
          "未提供"}
      </p>
      <p>
        <strong>Technique Name:</strong>
        {aiAnalysis.ai_analysis.mitre_technique_name ||
          "未提供"}
      </p>
      <small>
        AI 提供的技術對應仍需人工確認。
      </small>
    </div>

    <div className="human-decision">
      <strong>Human Decision</strong>
      <p>
        AI 分析結果僅供參考,
        最終風險判斷與處置仍由 SOC 分析人員確認。
      </p>
    </div>
  </div>
)}

nano src/App.css
加入

/* Day 24 - AI Analysis Panel */

.ai-panel {
  margin-top: 32px;
  padding: 28px;
  background: white;
  border-radius: 14px;
  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);
}

.ai-panel-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  flex-wrap: wrap;
  gap: 12px;
  margin-bottom: 24px;
}

.ai-panel-header h2 {
  margin: 0;
  color: #1f2937;
}

.ai-panel-header p {
  color: #6b7280;
  margin-top: 6px;
}

.analysis-status {
  background: #dcfce7;
  color: #166534;
  padding: 8px 12px;
  border-radius: 20px;
  font-size: 13px;
  font-weight: bold;
}

.ai-event-info {
  background: #f8fafc;
  padding: 20px;
  border-radius: 10px;
  margin-bottom: 20px;
}

.ai-event-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 12px;
}

.ai-event-top h3 {
  margin: 0;
}

.severity-badge {
  padding: 7px 14px;
  border-radius: 20px;
  font-size: 13px;
  font-weight: bold;
}

.severity-high {
  background: #fee2e2;
  color: #991b1b;
}

.severity-medium {
  background: #fef3c7;
  color: #92400e;
}

.severity-low {
  background: #dcfce7;
  color: #166534;
}

.ai-section {
  padding: 18px 0;
  border-bottom: 1px solid #e5e7eb;
}

.ai-section h3 {
  margin: 0 0 12px;
  color: #1f2937;
  font-size: 17px;
}

.ai-section p {
  color: #374151;
  line-height: 1.8;
  overflow-wrap: anywhere;
}

.ai-section small {
  color: #6b7280;
}

.human-decision {
  margin-top: 24px;
  padding: 18px;
  border-radius: 10px;
  background: #eff6ff;
  border-left: 4px solid #2563eb;
}

.human-decision strong {
  color: #1e40af;
}

.human-decision p {
  color: #374151;
  line-height: 1.7;
  margin-bottom: 0;
}

@media (max-width: 600px) {
  .ai-panel {
    padding: 16px;
  }
}

https://ithelp.ithome.com.tw/upload/images/20261008/201777546Kbyx01AFB.png
今天的實作主要是改善 AI SOC Dashboard 的 AI 分析結果呈現方式。
在 Day 23,我們已經能夠將 Gemini 的分析結果顯示在 React 前端,但當事件摘要、攻擊類型、風險、建議處置及 MITRE ATT&CK 等資訊全部集中在一起時,閱讀上仍然不夠直覺。
因此,今天透過 React 與 CSS,將原本的分析結果整理成獨立的 AI Analysis Panel,並加入 Severity 風險標籤,讓不同嚴重程度的事件能夠透過顏色快速區分。
另外,也將 MITRE ATT&CK 與建議處置整理成獨立區塊,並保留 Human Decision 提示,強調 AI 的分析結果只是協助資安人員判斷的參考資訊,不能直接取代人工決策。
透過今天的實作,我也發現開發 SOC Dashboard 不只是把資料成功顯示出來,更重要的是如何讓使用者快速理解資訊。良好的介面設計能夠降低閱讀負擔,讓分析人員更容易掌握事件重點。


上一篇
Day 23|把 AI 分析接回 Dashboard:加入 Analyze with AI
系列文
30 天打造 AI 輔助 SOC 資安事件分析平台 共 24 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言