
Wazuh + Suricata SOCラボは、実際のエクスプロイト(CVE-2011-2523)やブルートフォース攻撃を検出し、デフォルトのIDSシグネチャのギャップを補うカスタム検出ルールを備えています。
あえて脆弱性のあるターゲットに対して実際の攻撃手法を検知するために構築された、自己ホスト型セキュリティ運用センター(SOC)ラボ。Wazuh を SIEM、Suricata をネットワークベースの IDS センサーとして使用。ツールの導入だけでなく、検知エンジニアリングのスキルを示すために設計されている。
現代の SOC 活動は、「SIEM をインストールしてダッシュボードを見る」だけではない。なぜ検知のギャップが存在するのかを理解し、それを埋める方法を知ることが重要だ。このラボは、小規模で現実的な環境をシミュレートしている。攻撃者ボックス、ネイティブのログ機能を持たないレガシー/脆弱なターゲット、そしてその制約を回避するためにネットワーク層の可視性を利用し、ホストエージェントに頼らない SIEM スタックから構成される。
主要なアーキテクチャ上の判断: ターゲット(Metasploitable 2)は、最新の Wazuh エージェントやインターネットアクセス可能な syslog フォワーダーをサポートするには古すぎる OS を実行している。これを障害と捉えるのではなく、プロジェクトは Suricata による完全なネットワークベースの検知に方向転換する。これは、直接計装できないレガシー、IoT、OT 資産にとって現実的なパターンである。
┌─────────────┐ attacks ┌──────────────────────┐
│ Kali VM │ ────────────────────────▶│ Metasploitable 2 │
│ (attacker + │ │ (unmonitored victim, │
│ Suricata │ │ no agent, no │
│ sensor + │ │ internet access) │
│ Wazuh agent│ └──────────────────────┘
└──────┬──────┘
│ eve.json (Suricata alerts/events)
│ forwarded via Wazuh agent
▼
┌─────────────────────┐
│ Wazuh Manager │
│ (Amazon Linux 2023)│
│ Indexer + Dashboard│
└─────────────────────┘
3つのVMはすべてVirtualBox上で動作し、NATネットワークで192.168.0.0/24に接続されている。

| コンポーネント | 役割 | OS |
|---|---|---|
| Wazuh Manager | SIEM: インデクサー、ダッシュボード、ルールエンジン | Amazon Linux 2023 |
| Kali Linux | 攻撃者 + Suricata ネットワークセンサー + Wazuh エージェント | Kali (Debianベース) |
| Metasploitable 2 | 脆弱なターゲット、監視なし | Ubuntu 8.04 (レガシー) |
Suricata は攻撃者とターゲット間のトラフィックを可視化する必要がある。プロミスキャス/ミラーポートを持つ専用のセンサーVM を用意するか、トラフィックパス上にある2台のホストのいずれかにセンサーを配置するかの2つの選択肢がある。Wazuh マネージャー(Amazon Linux 2023)は EPEL をサポートしておらず、Suricata のインストールが現実的ではなかった。また、ターゲットはエージェントを全く実行できないため、Suricata は Kali ボックス上で直接実行される。これにより、プロミスキャスモードやスパンポートを必要とせず、自身のインターフェイスで攻撃トラフィックの100%を確認でき、すでに Kali に登録されている Wazuh エージェントを介してイベントをマネージャーに送信する。
攻撃:
nmap -sV -A 192.168.0.138

検知: Suricata の Emerging Threats ルールセットは、スキャンが各オープンポートに触れるたびに、Metasploitable の露出した UnrealIRCd サービス(ET CHAT IRC USER command)へのトラフィックを含む、複数のスキャン関連およびプロトコル異常シグネチャをリアルタイムでフラグ付けした。
結果: スキャン完了から数秒以内に、Wazuh の脅威ハンティングビューで ids, suricata ルールグループの下に 132 以上の IDS イベントが生成され、適切に分類された。

攻撃:
msf6 > use exploit/unix/ftp/vsftpd_234_backdoor
msf6 > set RHOSTS 192.168.0.138
msf6 > set LHOST 192.168.0.200
msf6 > run

Metasploitable の vsftpd 2.3.4 には、不正な FTP ログイン文字列によってトリガーされるバックドアが含まれており、TCP ポート 6200 で root シェルを起動する。エクスプロイトは正常に実行され、root として Meterpreter セッションが返された。
検知: Suricata の GPL ATTACK_RESPONSE id check returned root シグネチャ(SID 2100498)が、シェルが起動してから11秒後に発火した。これは、シェルのコマンド出力内の平文 uid=0(root) 文字列がポート6200を介してネットワーク上を通過する際に一致したもの。
"signature": "GPL ATTACK_RESPONSE id check returned root",
"signature_id": 2100498,
"src_ip": "192.168.0.138",
"src_port": 6200,
"dest_ip": "192.168.0.200",
"direction": "to_client"

なぜこれが重要なのか: これは、ホストベースのログがまったくない資産に対するルート権限奪取の成功をネットワーク層で確認したものであり、このアーキテクチャが処理するために設計されたまさにそのシナリオである。
攻撃:
hydra -l msfadmin -P /tmp/quicklist.txt -t 4 ftp://192.168.0.138

Hydra は複数の FTP ログインを迅速に試行し、数回の失敗後、有効な認証情報ペア msfadmin:msfadmin を正しく特定した。
検知状況: Suricata の FTP プロトコルパーサーは、個々の USER/PASS コマンドとサーバー応答コードをすべて eve.json(event_type: ftp)にキャプチャし、マネージャーの生イベントアーカイブに存在することが確認された:
{"event_type":"ftp","src_ip":"192.168.0.200","dest_ip":"192.168.0.138",
"dest_port":21,"ftp":{"command":"PASS","command_data":"root",
"completion_code":["530"],"reply":["Login incorrect."]}}

Suricata のデフォルトルールセットには FTP ブルートフォース専用のシグネチャはない。これは既知の悪意のある文字列ではなくプロトコルパターンであるためだ。このギャップを埋めるために、カスタムの Wazuh 相関ルールが設計された:
<group name="suricata,ftp,brute_force,">
<rule id="100100" level="5">
<if_sid>86600</if_sid>
<field name="event_type">^ftp$</field>
<field name="data.ftp.command">^PASS$</field>
<description>Suricata: FTP password attempt detected on $(data.dest_ip)</description>
</rule>
<rule id="100101" level="10" frequency="4" timeframe="60">
<if_matched_sid>100100</if_matched_sid>
<description>Suricata: Possible FTP brute force attack detected - multiple password attempts within 60 seconds</description>
<mitre>
<id>T1110</id>
</mitre>
</rule>
</group>
状況: 進行中 — 基盤となるイベントデータがマネージャーに到達していること、ルール構文が wazuh-logtest で検証されていることは確認済みだが、相関ルール(100101)はまだエンドツーエンドで確実に発火していない。次のデバッグ手順は、実際のサンプルに対して wazuh-logtest を使用して、パース時にネストされた Suricata FTP フィールドに割り当てられるデコーダフィールドパスを確認すること。以下、将来の作業として追跡中。
archives.log/archives.json はデフォルトでは有効になっていない(logall/logall_json は初期設定で no)。そして、これらは SIEM が実際に何を受信し、何をアラートとして選択したかをデバッグするために不可欠である。usermap_script RCE(CVE-2007-2447)を追加する| 手法 | ID | 状況 |
|---|---|---|
| アクティブスキャニング | T1595 | ✅ 検出 |
| 公開アプリケーションへのエクスプロイト | T1190 | ✅ 検出 |
| ブルートフォース | T1110 | 🔶 進行中 |