AIを活用したログ解析による脆弱性検出方法【Part1】

ログ解析は脆弱性を検出するために必要不可欠な業務です。 しかし、毎回手作業で行うことは、時間と労力がかかる上に、人為的ミスのリスクも伴います。 AIを活用したログ解析は、脆弱性を早期に検出し、セキュリティインシデントを未然に防ぐために効果的です。

本記事では、Azure OpenAIで静的なログファイルを解析・要約し、その結果をスプレッドシートに自動出力する仕組みの構築手順について説明します。

手順

今回は、GAS(Google Apps Script)を使用していきます。

まず、Googleドライブにフォルダを作成し、その中に解析するログファイルと出力先のスプレッドシートを配置します。今回は、スプレッドシート(外部共有用)とログファイルを複数配置することを想定し、フォルダで管理します。

次に、スプレッドシートを開き、拡張機能からApps Scriptを使用します。ここに、今回使用するログ解析・要約処理のコードを記述していきます。 スクリプトを実行をすることでスプレッドシートに解析結果の要約が出力されます。

コーディング

ログ解析・要約処理のコードについて解説していきます。

まず、Googleドライブから該当のログファイル情報を取得します。今回は、フォルダ内の全ログファイル情報を取得することを想定してコードを記述しました。

const folderId= '該当フォルダのID'; 
const folder= DriveApp.getFolderById(folderId);
files= folder.getFiles();

次に、Azure OpenAIに投げる質問内容などを設定します。今回は複数のログファイルを解析するため、whileでループさせています。user部分でAzure OpenAIに投げる質問内容を変更できます。

while(files.hasNext()){
  logContent = file.getBlob().getDataAsString('UTF-8');

  const payload = {
        messages: [
          { role: "system", content: "あなたはログ解析のアシスタントです" },
          { role: "user", content: "以下のログを解析し、その解決策を教えてください:\n"+logContent }
        ],
        max_tokens: 1000, // 出力文字数は自由に設定
        temperature: 0.5, 
        top_p: 1
      };
...

}

次に、Azure OpenAIのAPIに送るリクエストを作成します。

const apiKey = 'Azure OpenAIのAPIキー';
const options = {
      method: "post",
      contentType: "application/json",
      headers: {
        "api-key": apiKey
      },
      payload: JSON.stringify(payload),
      muteHttpExceptions: true
    };

最後に、解析結果の取得と該当シートへの出力を行います。

const sheetName = 'シート名';
const endpoint = 'Azure OpenAIのエンドポイント';

try {
      const response = UrlFetchApp.fetch(endpoint, options);
      const raw = response.getContentText();
      const json = JSON.parse(raw);

      // 解析結果の取得
      const answer = json.choices?.[0]?.message?.content || "No response content";

      // シートを取得
      const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
      if (!sheet) {
        throw new Error("Sheet named "+ sheetName + "not found.");
      }

      // 日付、解析したログファイル名、返答をシートに出力
      const currentDate = new Date();
      sheet.appendRow([currentDate, fileName, answer]); 


      Logger.log("送った質問:以下のログを解析し、その解決策を教えてください:\n"+logContent);
      Logger.log("回答:" + answer);

    } catch (err) {
      Logger.log("Error: " + err);
    }

実行結果

簡易的なログファイルをフォルダ内に配置させた解析結果の例を提示します。

このようにログの内容(メッセージ)と解説、解決策を提示してくれます。また、今回は解析結果だけでなく、解析した日時とログファイル名も出力されます。

GASの実行自動化

定期的にスクリプトを動かしたいときには、トリガーを使用します。 左のメニューの時計マーク「トリガー」をクリックし、右下の「トリガーを追加」から設定します。

例えば、毎日始業時間(9:00頃)に通知を受け取りたい場合は、以下のような設定をします。

まとめ

今回はAzure OpenAIを用いた簡易的なログ解析の手順について解説をしました。

次回は、サーバーからログファイルを自動取得し、ログ解析を実行する方法について解説したいと思います。