DEV Community

Tutty
Tutty

Posted on

1

RAGLog: Log Anomaly Detection using Retrieval Augmented Generation

選定理由

RAGを使用した異常検知という珍しいアプローチ。先行研究で引用されているLogPromptも LLM を活用した zero-shot classification によるログ異常検知である。

Paper: https://arxiv.org/abs/2311.05261
Code: N/A

概要

【技術課題】
システムログからの異常検知はサイバー攻撃への対策に不可欠であるが、異なるシステムやコンポーネントのログが多種多様で変化も早いため、効率的な分析が難しい。

【従来技術】
前処理としてログのパージング、分割を必要とする多段処理なアプローチがあったが前処理の時点での Out of vocabulary(OOV) に基づくエラーを後段で修正できない。又、教師あり、教師なし学習に基づくアプローチもあったが、クラス間不均衡や新しいフォーマットのログが常に生まれ続けることを考慮すると適用が困難。

【提案】
RAGと通常のログを集めたベクトルデータベースを利用してログから異常を検知するアプローチを提案。Q&Aのパイプラインを使用して、システムログの異常を特定する。

【効果】
オープンデータの実験にて従来手法より高精度となった。サイバー調査やデジタルフォレンジックスにおいて、従来の手法では難しかった異常なログエントリの検知が zero-shot classification のアプローチで可能となった。

RAGによるシステムログの異常検知

Retrieval Augmented Generative(RAG)を用いて通常のログエントリのサンプルを格納したベクトルデータベースにクエリを実行し、ログエントリを分析する。複雑な多段階のログ処理パイプラインを必要とせず、どんなログにも適したエンドツーエンドのモデルが構築できる。

fig1

Question and Answer prompt には分析対象となるログエントリがベクトルデータベースから回収されたログリストと比較して異常かそうでないかを判断させるようなプロンプトを記述した。(詳細は論文に記述されていない)

 実験

データセットはBGLとThunderbirdを使用した。これはログ解析における定番のデータセットである。RAGの実装にはLangchain、言語モデルはベクトル化にはOpenAI Embedding、チャットモデルにGPT-3.5を用いた。又、temperatureは0.1に設定した。

ct3

Thunderbirdの方が精度が高くなった。これは分散が小さく、このデータセットが簡単だったためであると思われる。又、どちらのデータセットでもランダム選択よりもクラスタリングして同じクラスタのサンプルを取得した方が当然であるが性能は高くなった。

tb1

従来手法との比較でもF1スコアで大幅に改善した。課題として1ログづつRAGで解析するため、時間と費用のコストがかかる点があり、この点はfuture workとしている。

Hostinger image

Get n8n VPS hosting 3x cheaper than a cloud solution

Get fast, easy, secure n8n VPS hosting from $4.99/mo at Hostinger. Automate any workflow using a pre-installed n8n application and no-code customization.

Start now

Top comments (1)

Collapse
 
nepos22579 profile image
nepos
Comment hidden by post author

Some comments have been hidden by the post's author - find out more

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay