
maltrail v2.2
公開ブラックリスト、静的マルウェアトレイル、ヒューリスティック分析を活用し、DNS、HTTP、IPトラフィックにおける脅威を識別するリアルタイム悪意トラフィック検出システム。

Maltrail
Maltrailは、既知の悪意のあるインフラストラクチャとの通信を識別し、選択されたトラフィック異常を報告するネットワークトラフィック検出システムです。ネットワーク上で観測されたドメイン、URL、IPアドレス、IP:portペア、User-Agent値を、trails と呼ばれる一連のインジケータと照合します。
検出は、送信元、宛先、プロトコル、一致したtrail、分類、およびtrailソースを含む単一のイベントとして記録されます。```text "2026-08-07 09:14:22.117034" gw 10.13.13.2 57809 1.1.1.1 53 UDP DNS malware.bakewithdavid.com "asyncrat (malware)" (static)
Maltrailは、インジケータベースのネットワーク監視を目的として設計されています。そのヒューリスティック検出はトレイルマッチングを補完しますが、エンドポイントテレメトリや汎用の侵入防止システムの代替となるものではありません。
## 特徴
- 3,000以上のバンドルされた静的ファイル、42のパブリックフィード統合、およびオペレーターが提供する任意のトレイルを組み合わせた完全なトレイル構築。
- libpcapを使用したマルチスレッドのRustセンサー。オプションでLinuxの`PACKET_FANOUT`キャプチャワーカーをサポート。
- レポートインターフェース、イベント受信、HTTP APIを提供するPythonサーバー。
- レビューおよびバージョン管理が可能なプレーンテキストのカスタムトレイルとホワイトリスト。
- スキャン、DNS枯渇、DGA風のルックアップ、不審なダウンロード、プロキシプローブ、不審なUser-Agent値、および関連するネットワークアクティビティのヒューリスティック。
- ローカルイベントログ、リモートMaltrailログ、syslog経由のCEF、Logstash JSON出力。
- `maltrail-sensor -T`によるデプロイ検証と、オプションのPrometheusメトリクス。
## 目次
- [アーキテクチャ](#architecture)
- [パフォーマンス](#performance)
- [インストール](#installation)
- [インストーラー](#installer)
- [ソースからのビルド](#building-from-source)
- [Systemd](#systemd)
- [Docker](#docker)
- [設定](#configuration)
- [トレイル](#trails)
- [イベントとAPI](#events-and-api)
- [運用](#operations)
- [監視](#monitoring)
- [イベント保持](#event-retention)
- [ドキュメント](#documentation)
- [貢献](#contributing)
- [プロジェクト](#project)
- [ライセンス](#license)
- [メンテナー](#maintainers)
- [スポンサー](#sponsors)
- [プレゼンテーションと出版物](#presentations-and-publications)
- [派生ブラックリスト](#derived-blacklist)
- [サードパーティ統合](#third-party-integrations)
- [謝辞](#acknowledgements)
## アーキテクチャ
Maltrailは、同じホストまたは別々のホストで実行できる2つの独立したプロセスで構成されています。```text
┌──────────┐ events (UDP or file) ┌──────────┐
│ sensor │ ───────────────────────► │ server │ ◄── browser
└──────────┘ └──────────┘
Rust Python
libpcap + PACKET_FANOUT reporting UI + API
trail matching + heuristics
センサーはトラフィックをキャプチャし、トレイルマッチングとヒューリスティック分析を実行して、イベントを生成します。
イベントをローカルに書き込む(LOG_DIR)、リモートのMaltrailサーバーに送信する(LOG_SERVER)、またはその両方を行うことができます。
また、syslog経由でCEFを出力(SYSLOG_SERVER)、LogstashにJSONを出力(LOGSTASH_SERVER)することもできます。
サーバーはリモートイベントを受信して保存し、ローカルで利用可能なイベントログを提供し、WebインターフェースとAPIを提供します。
パフォーマンス
パフォーマンスは、プロセッサ、トラフィック構成、トレイルセットのサイズ、キャプチャドライバ、ネットワークインターフェースに依存します。以下の数値は、センサーのパケット処理パスを単独で測定したものであり、エンドツーエンドのライブキャプチャ測定ではありません。
AMD Ryzen 7 PRO 4750Uでヒューリスティックを有効にし、150万行のトレイルセットを使用した代表的な測定値:
| トラフィック | パケットあたりの時間 |
|---|---|
| ICMPエコー、58バイト | 101 ns |
| TCP SYN、70バイト | 302 ns |
| バルクTLS、1,473バイト | 402 ns |
| ウォームキャッシュを使用したDNSクエリ、93バイト | 452 ns |
| 混合トラフィック、平均866バイト | 552 ns |
| HTTPリクエスト、169バイト | 602 ns |
| 一意の名前を使用したDNSクエリ、93バイト | 1,102 ns |
同じ生成キャプチャ、構成、トレイルセットを使用したオフライン比較実行では、テストしたシステム全体で、廃止されたPythonセンサーと比較して、定常状態のパケットあたりのコストが14〜37倍低いことが測定されました。比較ツールは、トレイルの読み込みが短いリプレイを支配するため、プロセス全体の時間を別途報告します。また、イベント数を出力します。機能的な同等性は、パリティコーパスによって独立してテストされます。
ターゲットシステムで比較を実行するには、次のコマンドを使用します。```bash
python3 sensor/tools/bench_compare.py --packets 300000
--trails ~/.maltrail/trails.csv --repeat 3
キャプチャワーカーはデフォルトで1つ使用されます。ワーカーを追加するとキャプチャ容量を増やせますが、Linuxのフロー・ハッシングにより、ワーカー間で送信元ごとの状態が分割されるため、一部のスキャン・ヒューリスティックの感度が低下します。文書化されたテストでは、シングルワーカーのヒューリスティック・アラートの91%が2ワーカーで維持され、4ワーカーでは86%、8ワーカーでは65%でした。正確なトレイル・マッチングは変更されませんでした。キャプチャ・ドロップのメトリクスが必要であることを示す場合にのみ、`CAPTURE_FANOUT`を増やしてください。
ベンチマーク手法、ハードウェア結果、プロファイラ出力、メモリ測定、およびライブ・ファンアウトのチェックは、[`sensor/docs/REPORT.md`](https://github.com/stamparm/maltrail/blob/master/sensor/docs/REPORT.md)に文書化されています。
## インストール
### インストーラ
インストーラは、Debian、Ubuntu、Raspberry Pi OS、RHEL、Fedora、およびopenSUSEをサポートしています。```bash
curl -fsSL https://raw.githubusercontent.com/stamparm/maltrail/master/install.sh | sudo sh
依存関係をインストールし、/opt/maltrail 配下に管理されたチェックアウトを作成し、プリビルドされたセンサーのチェックサムを検証し、非特権の maltrail アカウントを作成し、systemd ユニットをインストールし、ログと状態のディレクトリを準備し、センサーとサーバーを起動します。インストーラーを再実行すると、管理されたチェックアウトがアップグレードされます。
昇格した権限で実行する前に、スクリプトを確認してください。既存のチェックアウトから、ドライランではシステムを変更せずにコマンドを表示します。```bash sh install.sh --dry-run
Common installer options:```bash
sh install.sh --role sensor # Install only the sensor
sh install.sh --ref 3.1.1 # Install a release tag instead of master
sh install.sh --no-service # Install without changing systemd
sh install.sh --dry-run # Print commands without applying them
sh install.sh --uninstall # Remove the managed installation; keep logs and state
ダッシュボードはインストール後、http://127.0.0.1:8338 で利用できます。同梱の
HTTP_ADDRESS は 0.0.0.0 であるため、ループバックだけでなくすべてのインターフェースから到達可能です。また、
デフォルトの認証情報は admin / changeme! です。ホストが信頼できないネットワーク上に置かれる前に、USERS を変更し、HTTP_ADDRESS を
127.0.0.1 に設定するか(またはTLS付きのリバースプロキシの背後にサーバーを配置するか)してください。
最初のトレイルビルドには数分かかることがあります。有効なトレイルセットが利用可能になるまで、センサーはトレイルマッチを検出しません。systemdユニットは起動前にセンサーの -T 検証を実行するため、権限の不足、書き込み不可能なログディレクトリ、または無効なトレイルセットがあると、起動が明示的に失敗します。
インストーラーのテストハーネスは、Ubuntu、Debian、Fedora、openSUSE、およびAlpineコンテナを対象としています。Alpine はmuslを使用しており、プリビルドされたglibcセンサーバイナリを使用しません。そこではソースからセンサーをビルドしてください。
ソースからのビルド
センサーにはRust 1.74以降、libpcap開発ヘッダー、およびシステムのケーパビリティツールが必要です。サーバーとトレイルアップデータにはPython 3.6以降が必要です。
ディストリビューションパッケージをインストールします。```bash
Debian / Ubuntu / Raspberry Pi OS
sudo apt-get install cargo libpcap-dev libcap2-bin python3
RHEL / Fedora
sudo dnf install cargo libpcap-devel libcap python3
openSUSE / SLES
sudo zypper install cargo rust libpcap-devel libcap-progs python311
次に、センサーをビルドして検証します。```bash
git clone --depth 1 https://github.com/stamparm/maltrail.git
cd maltrail
cargo build --release --manifest-path sensor/Cargo.toml
sudo setcap cap_net_raw,cap_net_admin=eip \
sensor/target/release/maltrail-sensor
sudo install -d -o "$USER" -g "$(id -gn)" -m 750 /var/log/maltrail
sensor/target/release/maltrail-sensor -T
sensor/target/release/maltrail-sensor
別のターミナルまたは別のホストでサーバーを起動します:```bash python3 server.py
プリビルドの`x86_64`および`aarch64`センサーバイナリは、SHA-256チェックサム付きで現在のリリースに添付されています。これらはglibc 2.28を対象としており、実行時にlibpcapが必要です。Alpine Linuxなどのmuslベースのシステムでは、ソースからビルドしてください。
廃止されたPythonセンサーは、比較ツールおよびパリティツールでのみ使用されます。これらのツールには、さらに`pcapy-ng`と、[`sensor/docs/INSTALL.md`](https://github.com/stamparm/maltrail/blob/master/sensor/docs/INSTALL.md)に記載されているPython開発ヘッダーが必要です。
### Systemd
同梱の`maltrail-server.service`および`maltrail-sensor.service`ユニットは、両方のプロセスを非特権ユーザー`maltrail`として実行します。Systemdは`/var/log/maltrail`と`/var/lib/maltrail`を作成し、ファイルシステムへのアクセスを制限し、センサーに`CAP_NET_RAW`と`CAP_NET_ADMIN`を付与します。
インストーラーはこれらのユニットを自動的に設定します。既存のソースインストールの場合は、[`sensor/docs/INSTALL.md`](https://github.com/stamparm/maltrail/blob/master/sensor/docs/INSTALL.md)の手動サービス手順に従ってください。
サービスの状態とログを確認するには、次のコマンドを使用します。```bash
systemctl status maltrail-sensor maltrail-server
journalctl -u maltrail-sensor -f
Docker
提供されたComposeデプロイメントを以下のコマンドで起動します:```bash docker compose -f docker/docker-compose.yml up -d
コンテナ設定、ストレージ、権限、およびヘルスチェックについては、
[`docker/README.md`](https://github.com/stamparm/maltrail/blob/master/docker/README.md) に記載されています。
## 設定
Maltrail は `maltrail.conf` を読み取ります。このファイルには、個別の `[Sensor]` セクションと `[Server]` セクションの設定が含まれています。インストーラーは、管理対象の設定を `/etc/maltrail.conf` に配置します。
よく使用されるセンサーオプションは次のとおりです。
| オプション | 目的 |
| --- | --- |
| `MONITOR_INTERFACE` | キャプチャインターフェース。`any` を指定すると、サポートされているすべてのインターフェースを選択します |
| `CAPTURE_FILTER` | BPF キャプチャフィルター |
| `CAPTURE_FANOUT` | Linux キャプチャソケットの数。デフォルトは 1 |
| `LOG_DIR` | ローカルイベントログディレクトリ |
| `TRAILS_FILE` | 生成されたトレイルデータベース |
| `LOG_SERVER` | リモート Maltrail イベントサーバー |
| `SYSLOG_SERVER` | CEF syslog の送信先(複数可) |
| `LOGSTASH_SERVER` | Logstash JSON の送信先(複数可) |
| `STATS_ADDRESS` | Prometheus メトリクスリスナー。設定されていない限り無効 |
| `UPDATE_PERIOD` | トレイル更新間隔 |
| `USER_WHITELIST` | アラートを発生させない運用者管理のインジケーター |
| `CUSTOM_TRAILS_DIR` | 運用者管理のトレイルディレクトリ |
`PROCESS_COUNT` は、廃止された Python センサーに適用されます。Rust センサーのキャプチャワーカーは、代わりに `CAPTURE_FANOUT` で設定してください。
設定を変更した後は、デプロイチェックを実行してください。```bash
sensor/target/release/maltrail-sensor -T
設定、トレイル、ホワイトリストエントリ、キャプチャフィルタ、権限、ログストレージ、更新サポート、ワーカー設定を検証します。チェックが成功すると、ファイルの存在を確認するだけでなく、トレイル数とホワイトリスト数が正の値として含まれます。
トレイル
トレイルはプレーンテキストのインジケータとして保存されます。```text trails/static/malware/ malware-related static trails trails/static/malicious/ malicious infrastructure trails/static/suspicious/ suspicious infrastructure and behavior trails/feeds/*.py public feed integrations
`CUSTOM_TRAILS_DIR` の下にローカルインジケータを追加します。アラートを生成すべきでないインジケータは `USER_WHITELIST` に追加します。カスタムデータを管理対象のチェックアウトの外に置くことで、アップグレードによる上書きを防げます。
アップデータは、有効なフィード、バンドルされた静的トレイル、カスタムトレイルから `TRAILS_FILE` を再構築します。新しいファイルは、ビルドが成功した後にのみアトミックに公開されます。空または失敗したフィードは報告されるため、実行中のデプロイメントが古いソースや廃止されたソースに静かに依存することはありません。
トレイルへの貢献には、インジケータ、分類、検証可能なソースを含める必要があります。プルリクエストを送信する前に [Contributing](#contributing) を参照してください。
## イベントとAPI
Maltrail は、検出ごとに1つの空白区切りのイベントを記録し、値にスペースが含まれる場合は CSV 引用符を使用します。```text
"<time>" <sensor> <src_ip> <src_port> <dst_ip> <dst_port> <proto> <type> <trail> "<info>" <reference>
type フィールドは、DNS、IP、IPORT、URL、PATH、HTTP、UA、PORT、CERT など、何が一致したかを識別します。info フィールドにはトレイルの分類が含まれ、reference はそれを生成した静的リスト、フィード、カスタムソース、またはヒューリスティックを識別します。
インジケータの検索
/check を使用して、1 つのドメイン、IP アドレス、または URL を照会します。```bash
curl 'http://127.0.0.1:8338/check?q=www.sub.evil.example'
I need the actual content of chunk 31 to translate it. Please provide the Markdown text you'd like translated from English to Japanese.```json
{
"query": "www.sub.evil.example",
"found": true,
"trail": "evil.example",
"info": "asyncrat (malware)",
"reference": "(static)"
}
サブドメインのルックアップは、リストされた親と一致する場合があります。URLルックアップは、ホスト単独をチェックする前にhost/pathをチェックします。サーバーはメモリマップされたトレイルデータベースを読み取り、再起動なしでトレイルの更新を監視します。
公開の静的トレイルとフィードトレイルは、リモートセンサーが使用する/trailsエンドポイントと一貫して、認証なしで利用できます。カスタムトレイルには認証済みセッションが必要です。認証されていないカスタム専用ルックアップはミスとして報告されます。イベントデータは認証されたままです。
運用
監視
デプロイメントおよび設定のゲートとしてmaltrail-sensor -Tを使用します。同梱のsystemdユニットは、これをExecStartPreとして実行します。
STATS_ADDRESSが設定されている場合は、少なくとも以下のPrometheusメトリクスを監視します:
| メトリクス | 運用上の意味 |
|---|---|
maltrail_up == 0 | キャプチャワーカーが実行されていない |
maltrail_capture_dropped_totalの増加 | キャプチャリングがパケットをドロップしている |
maltrail_local_log_errors_totalの増加 | イベントは生成されたがローカルに書き込めなかった |
maltrail_remote_log_errors_totalの増加 | イベントをリモートシンクに配信できなかった。DISABLE_LOCAL_LOG_STORAGEが設定されている場合は失われる |
maltrail_trail_generationが進まない | アクティブなトレイルセットが更新されていない |
maltrail_log_dir_free_bytes | ローカルイベントストレージの残り容量 |
maltrail_state_saturations_totalの増加 | ヒューリスティック状態の上限に達した |
maltrail_throttle_evictions_totalの増加 | イベントスロットルテーブルが上限に達したため、イベントが設定よりも早く集約されている |
状態の飽和は対応するヒューリスティックに影響します。正確なトレイルマッチングはアクティブなままです。
SIGHUPを送信するか、systemctl reload maltrail-sensorを使用してトレイルの再読み込みを要求します。別のプロセスによって更新されたトレイルファイルは自動的に検出され、センサーを再起動せずにワーカーに公開されます。
凝縮された観測可能ストア(USE_CONDENSED_STORAGE、meta.sqlite)は、サーバーの新規性ビューとレトロハントビューをサポートします。廃止されたセンサーとの互換性は、sensor/docs/COMPATIBILITY.mdに文書化されています。
イベント保持
Maltrailはイベントログをローテーションまたは削除しません。運用者は、ストレージ要件と組織のポリシーに従って、保持、アーカイブ、削除を定義する責任があります。
推奨されるプラクティス:
LOG_SERVER、SYSLOG_SERVER、またはLOGSTASH_SERVERを使用して、永続的なイベントコピーをリモートのMaltrailサーバーまたはSIEMに送信します。- 予想されるイベントレートに対して十分な余裕を持って
maltrail_log_dir_free_bytesにアラートを設定します。 - 外部ツールを使用して、ローカルの日次ログをローテーション、アーカイブ、または削除します。
- レポートインターフェースに必要なファイルは
LOG_DIRに圧縮せずに保持し、圧縮ファイルは別の場所にアーカイブします。
ログファイルシステムが満杯の場合、センサーはイベントを追加できません。イベントログには、一部の法域で個人データとして規制されているIPアドレスやドメインが含まれる場合があります。保持ポリシーは、該当する要件を考慮する必要があります。
ドキュメント
| ドキュメント | 内容 |
|---|---|
sensor/docs/INSTALL.md | インストール、権限、設定、トラブルシューティング |
sensor/docs/ARCHITECTURE.md | センサーの内部構造とデータフロー |
sensor/docs/COMPATIBILITY.md | 廃止されたPythonセンサーとの意図的な違い |
sensor/docs/REPORT.md | 測定、プロファイル、テスト結果 |
sensor/docs/ROADMAP.md | 未完了のセンサー作業 |
old/README.md | 廃止されたPythonセンサー。パリティオラクルとして保持 |
貢献
トレイルの追加、フィードのメンテナンス、バグ報告、ドキュメント、センサーの改善を歓迎します。トレイルの提出には信頼できるソースを含め、最も狭い適切な分類を使用する必要があります。
コードを提出する前に、関連するチェックを実行してください。完全なセンサーゲートは次のとおりです:```bash bash sensor/tools/check.sh
It runs formatting, Clippy with warnings denied, debug and release tests, and parity replay against
the retired Python sensor. Run the Python server suite with:```bash
bash tests/run.sh python3
プロジェクト
ライセンス
Maltrail は MIT ライセンスの下で配布されています。LICENSE を参照してください。
メンテナー
- Miroslav Stampar (@stamparm)
- Mikhail Kasimov (@MikhailKasimov)
スポンサー
プレゼンテーションと出版物
- 47th TF-CSIRT Meeting, Prague, 2016 (スライド)
- Detect attacks on your network with Maltrail, Linux Magazine, 2022 (記事)
- Best Cyber Threat Intelligence Feeds, Silent Push, 2022 (レビュー)
- Research on Network Malicious Traffic Detection System Based on Maltrail, Nanotechnology Perceptions, 2024 (論文)
派生ブラックリスト
trails/static/malware から派生したドメインのみのリストは、
maltrail-malware-domains.txt で公開されています。
これは DNS フィルタリングシステムへの入力として使用できますが、ブロックを有効にする前に運用者はレビューとテストを行う必要があります。
脅威インテリジェンスリストには、誤検知や、すべての環境に適しているとは限らないインジケータが含まれる場合があります。
サードパーティ統合
- FreeBSD Port
- OPNsense Gateway Plugin
- D4 Project
- BlackArch Linux
- Validin
- Maltrail Add-on for Splunk
- Maltrail decoder and rules for Wazuh
- GScan (trails のみ)
- MalwareWorld (trails のみ)
- oisd domain blocklist (trails のみ)
- NextDNS (trails のみ)
- NoTracking (trails のみ)
- OWASP Mobile Audit (trails のみ)
- Mobile Security Framework MobSF (trails のみ)
- pfBlockerNG-devel (trails のみ)
- Sansec eComscan (trails のみ)
- Palo Alto Networks Cortex XSOAR (trail コネクタ)
謝辞
- Thomas Kristner
- Eduardo Arcusa Les
- James Lay
- Ladislav Baco (@laciKE)
- John Kristoff (@jtkdpu)
- Michael Münz (@mimugmail)
- David Brush
- @Godwottery
- Chris Wild (@briskets)
- Keith Irwin (@ki9us)
- Simon Szustkowski (@simonszu)