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でアップロード、消毒、レビュー
- アップロード。 開く logtotal.com ファイルをドロップインします。
- 消毒。
- レビュー。
実際のデータでこれがどのように見えるか。
問題が発生した場合
| 症状 | 考えられる原因 | Fix |
|---|---|---|
| 401 | ユーザー名から組織が欠落している | super/<user> または <org>/<user> を使用 |
| クエリがIDではなくエラーを返す | XML構文または不明な属性名 | Analyticsでフィルタをテストし、属性名を確認 |
| 進捗が100に達しない | クエリが広すぎる | 時間範囲とフィルタを絞る |
| rawEventMsgが空 | 属性が選択されていない | rawEventMsgをAttrListに追加 |
| 古いイベントが欠落している | アーカイブストレージにあります | アーカイブオプションを確認 |
FAQ
なぜXML?
これはFortiSIEMのAPIが話すものです。Pythonステップはそれを元の生の行に変換し、それが通常アップロードしたいものです。
代わりにインシデントをエクスポートできますか?
インシデントには独自のAPIコールがあります。LogTotalのために、それらの背後のイベントをエクスポートします。