FortiSIEMログのエクスポート方法

FortiSIEMログのエクスポート方法

SOC Prime Team
SOC Prime Team linkedin icon フォローする

FortiSIEMのRESTイベントクエリAPIを使用します。/phoenix/rest/query/eventQueryにXMLクエリをポストすると、クエリIDが返され、進捗が100になるまでポーリングし、その後イベントを取得します。結果はXMLとして返されます。各イベントの元のログ行はrawEventMsg属性に含まれているので、Pythonの数行を使えば結果を生ログに変換できます。Analyticsスクリーンからのエクスポートは、現在LogTotalが読み取れない形式で出力されます。 

FortiSIEMは、Fortinetがネットワークを運用する場所でよく使われており、ファイアウォールログ以上のものを保持することが多いです。Prime Coreには、FortiSIEM用に19,692の検出ルールがあり、664のMITRE ATT&CK技術にマッピングされています。以下に、イベントを抽出し、それらを消毒して、LogTotalで無料で調査する方法を示します。

無料で始める

始める前に

APIユーザー。 アナリティクスクエリを実行する権限を持つアカウントを使用します。APIはベーシック認証で認証され、ユーザー名には組織が含まれます: エンタープライズインストールではsuper/<user>、サービスプロバイダーインストールでは特定の組織の<org>/<user>。

保持。 オンラインイベントストレージには制限があります。古いイベントはアーカイブストレージに保存され、追加手順が必要です。 

属性名。 FortiSIEMクエリは独自の属性名を使用します。例えば、reptDevName(報告デバイス)、reptDevIpAddr、eventType、phRecvTimeなどです。まずAnalyticsでフィルターを作成します。

イベントクエリAPIでエクスポート

クエリをquery.xmlとして保存:

<?xml version=”1.0″ encoding=”UTF-8″?>
<Reports><Report><Name>LogTotal export</Name><Description/>
  <SelectClause><AttrList>phRecvTime,reptDevIpAddr,eventType,rawEventMsg</AttrList></SelectClause>
  <ReportInterval><Low>1792368000</Low><High>1792454400</High></ReportInterval>
  <PatternClause><SubPattern id=”1″ name=”Filter”>
    <SingleEvtConstr>reptDevName = “web-03″</SingleEvtConstr>
  </SubPattern></PatternClause>
</Report></Reports>

この間隔は2026-10-19 00:00 UTCから2026-10-20 00:00 UTCのエポック秒です。それを実行します:

FSM=”https://fortisiem.example.com”
AUTH=”super/apiuser:$FSM_PASS”

QID=$(curl -sS -u “$AUTH” -X POST -H ‘Content-Type: text/xml’ –data @query.xml “$FSM/phoenix/rest/query/eventQuery”)
until [ “$(curl -sS -u “$AUTH” “$FSM/phoenix/rest/query/progress/$QID”)” = “100” ]; do sleep 5; done
curl -sS -u “$AUTH” “$FSM/phoenix/rest/query/events/$QID/0/1000” > fsm_web03_1019.xml

最後の2つのパスセグメントは開始オフセットとカウントです。大きな結果を1,000ステップでページ送りします。その後、生のメッセージを引き出します:

import xml.etree.ElementTree as ET

root = ET.parse(“fsm_web03_1019.xml”).getroot()
with open(“fsm_web03_1019.log”, “w”) as out:
    for attr in root.iter(“attribute”):
        if attr.get(“name”) == “rawEventMsg” and attr.text:
            out.write(attr.text.strip() + “n”)

LogTotalでアップロード、消毒、レビュー

  1. アップロード。 開く logtotal.com ファイルをドロップインします。
  2. 消毒。
  3. レビュー。

実際のデータでこれがどのように見えるか。 

問題が発生した場合

症状考えられる原因Fix
401ユーザー名から組織が欠落しているsuper/<user> または <org>/<user> を使用
クエリがIDではなくエラーを返すXML構文または不明な属性名Analyticsでフィルタをテストし、属性名を確認
進捗が100に達しないクエリが広すぎる時間範囲とフィルタを絞る
rawEventMsgが空属性が選択されていないrawEventMsgをAttrListに追加
古いイベントが欠落しているアーカイブストレージにありますアーカイブオプションを確認

FAQ

なぜXML?

これはFortiSIEMのAPIが話すものです。Pythonステップはそれを元の生の行に変換し、それが通常アップロードしたいものです。

代わりにインシデントをエクスポートできますか?

インシデントには独自のAPIコールがあります。LogTotalのために、それらの背後のイベントをエクスポートします。

SOC PrimeのDetection as Codeプラットフォームに参加し ビジネスに最も関連性のある脅威に対する可視性を向上させましょう。開始して即座に価値をもたらすためには、今すぐSOC Primeの専門家とのミーティングを予約してください。