検知ルール情報取得 / Suricata

NexusのBlack IPをSuricataへ取り込み、攻撃元との通信や危険なIPへの接続を検知できます。

利用プランと取得頻度

プランリスト取得
Standard取得成功から7日後に再取得可能
Professional取得成功から24時間後に再取得可能
Enterprise / Developer取得回数の制限なし

回数は契約(組織・Nexus)単位で合算します。複数キーを作っても増えません。既存REST APIのEnterprise限定とは別の配信機能です。

Freeでもこの案内ページをご覧いただけます。配信の取得には有効なNexus有料契約とAPIキーが必要です。

脅威情報取得 / STIXへ

1. APIキーを準備

契約管理モーダルの「Nexus APIキー」でキーを発行します。発行直後だけ表示されるため保存してください。同じキーをSuricata配信に使用できます。

curl --fail --show-error   -H "Authorization: Bearer $SENDA_API_KEY"   "http://nexus.senda-lab.jp/api/v1/feeds/suricata/senda.list" -o senda.list

正常時はIPv4・IPv6のIPアドレスを1行1件で返します。制限中は429とRetry-After(秒)を返します。認証失敗・データ生成失敗では回数を消費しません。200で空リストを返した場合も正常取得です。

2. Suricataを設定

以下は検知(alert)用です。既存のsuricata.yamlへ項目を統合してください。カテゴリ番号1が使用済みなら、空いている1〜60の番号を使い、更新設定のcategory_idも合わせます。

# /etc/suricata/iprep/categories.txt に追加
1,SENDA_BLACK,Senda Nexus Black IP

# suricata.yaml
reputation-categories-file: /etc/suricata/iprep/categories.txt
default-reputation-path: /etc/suricata/iprep
reputation-files:
  - senda.reputation

# 既存のrule-filesに追加
rule-files:
  - senda.rules
# /etc/suricata/rules/senda.rules(SIDが既存ルールと重複しないこと)
alert ip any any -> $HOME_NET any (msg:"SENDA Black IP source"; iprep:src,SENDA_BLACK,>,0; sid:9900001; rev:1;)
alert ip $HOME_NET any -> any any (msg:"SENDA Black IP destination"; iprep:dst,SENDA_BLACK,>,0; sid:9900002; rev:1;)

HOME_NETを監視対象ネットワークに設定してください。最初は空のsenda.reputationを作成し、suricata -T -c /etc/suricata/suricata.yamlで設定を確認します。カテゴリや設定の初回変更時はSuricataを再起動します。

3. 自動取得・再読み込み

更新スクリプト(Python 3)をダウンロードし、/usr/local/sbin/update_senda_suricata.pyへ配置します。

# /etc/suricata/senda-feed.json
{
  "url": "http://nexus.senda-lab.jp/api/v1/feeds/suricata/senda.list",
  "api_key": "発行したAPIキー",
  "directory": "/etc/suricata/iprep",
  "category_id": 1,
  "service": "suricata"
}

sudo chmod 600 /etc/suricata/senda-feed.json
sudo python3 /usr/local/sbin/update_senda_suricata.py

キーはコマンド引数に出しません。取得・形式検証が成功してからファイルを置換し、SuricataへUSR2を送信します。初回のカテゴリ登録は再起動が必要です。

# rootのcron。判定はNexus側で行うため、プラン変更後も同じ設定を使えます。
# Standard / Professionalは上限中429となり、既存ファイルを保持します。
0 * * * * /usr/bin/python3 /usr/local/sbin/update_senda_suricata.py >> /var/log/senda-suricata.log 2>&1

# 取得済みファイルを再適用する場合(API回数を消費しません)
sudo python3 /usr/local/sbin/update_senda_suricata.py --apply-only

API取得に成功した後でローカルの適用に失敗した場合は、保存したsenda.download.txtを--apply-onlyで再適用できます。USR2送信成功後のエンジン側エラーはSuricataログでも確認してください。Docker等でSuricataを実行する場合は、サービス名や再読み込み方法を環境に合わせます。

配信データについて

既存Black IP APIと同じhony_intelを使用し、初期設定は直近7日の観測です。明示的に無効・期限切れのIP、非公開アドレス、重複は除外します。取得時点のスナップショットなので、Standardは次の取得まで更新情報を反映できません。

本番の配信URLはHTTPSを使用してください。APIキーはログや公開ファイルへ掲載しないでください。

Suricata公式:設定・再読み込み / 配信形式 / iprepルール