
🐍 高性能、マルチスレッドのYARA & IOCスキャナー

Rust による Loki の再実装。単一バイナリで動作する、高性能・マルチスレッドの YARA & IOC スキャナです。
ステータス: ベータ版。動作はしますが、現在も活発に開発中です。
macOS でのプロセスメモリスキャンはベストエフォートであり、通常はデバッグエンタイトルメントまたは昇格した権限が必要です。これらがない場合、Loki-RS はファイルスキャンは行いますが、ほとんどのプロセスメモリを読み取ることができません。必要に応じて --no-procs を使用してプロセススキャンをスキップしてください。
Linux では、Loki-RS は /proc/<pid>/mem を読み取る前に、デバイスバックおよびカーネル特殊プロセスマッピングをスキップします。これにより、ドライバ管理の VMA による既知の不安定性を回避しながら、通常の匿名、ヒープ/スタック、通常のファイルバックメモリスキャンを保存します。それでも環境固有の問題が発生する場合は、--no-procs を使用してプロセススキャンを無効にしてください。
お使いのプラットフォーム向けのプリコンパイル済みバイナリを リリースページ からダウンロードしてください。
# 展開
tar -xzvf loki-linux-*.tar.gz
cd loki-linux-*
# シグネチャの更新 (推奨)
./loki-util update
# 実行
sudo ./loki --help
シグネチャはリリース時に同梱されますが、すぐに古くなります。loki-util update を実行して最新の YARA-Forge Core ルールを取得してください。
Loki-RS はデフォルトのシグネチャソースとして YARA Forge を使用します。Loki-RS には Core ルールセット (高精度、低誤検出、パフォーマンス最適化) が同梱され、更新されます。より広いカバレッジが必要な場合は、YARA Forge の Extended または Full セットと入れ替えることができます。
signatures/iocs/ 内の IOC ファイルは、オプションのローカル/カスタムコンテンツとして引き続きサポートされます。
# 基本スキャン (デフォルトで TUI 有効)
sudo ./loki
# 特定フォルダをスキャン
sudo ./loki --folder /tmp
# TUI を無効にして標準コマンドライン出力を使用
sudo ./loki --no-tui
# マウントされたイメージをスキャン (プロセススキャンをスキップ、全コア使用)
sudo ./loki --no-procs --folder ~/image1 --threads 0
# 低速かつ慎重にスキャン (低 CPU 制限、シングルスレッド)
sudo ./loki --cpu-limit 60 --threads 1
# スキャンしてリモート syslog にログを送信
sudo ./loki --remote syslog-host.internal:514 --remote-proto udp


| オプション | デフォルト | 説明 |
|---|---|---|
-f, --folder <PATH> | / | スキャンするフォルダ。スペースを含むパスは引用符で囲んでください(例: -f "J:\SteamLibrary\steamapps\common\SpaceCraft beta") |
Loki-RS はスキャンからファイルやフォルダを除外するための複数のメカニズムを提供します。
デフォルトでは、Loki-RS は以下を自動的に除外します:
システムディレクトリ (Linux/macOS):
/proc, /dev, /sys/kernel/debug, /sys/kernel/slab, /sys/kernel/tracing, /sys/devices/run, /var/runクラウドストレージディレクトリ (--scan-all-drives が指定されていない場合):
ネットワークおよびマウント済みドライブ (--scan-all-drives が指定されていない場合):
/media, /volumes 下の外部メディアプログラムディレクトリ:
既知の正常なファイルをハッシュで除外できます。これは、誤検出を引き起こす正当なファイルをホワイトリストに登録するのに便利です。
設定:
signatures/iocs/ 内にファイル名に hash と falsepositive の両方を含むファイルを作成します
例: hash-falsepositive-custom.txt
ハッシュ (MD5、SHA1、または SHA256) とオプションの説明を追加します:
# 書式: HASH;説明
d41d8cd98f00b204e9800998ecf8427e;空ファイル - 既知の正常
a7f5f35426b927411fc9231b56382173;正当なシステムユーティリティ
これらのハッシュに一致するファイルはスキャン中に静かにスキップされます。
署名 IOC を signatures/iocs/filename-iocs.txt に追加する際、3 列目で誤検出除外の正規表現を指定できます:
# 書式: REGEX;SCORE;FALSE_POSITIVE_REGEX
#
# これはすべての .ps1 ファイルに一致しますが、SysInternals ディレクトリ内のものは除外します
(?i)\\procdump(64)?\.(exe|zip);50;(?i)(SysInternals\\)
ファイルがメインパターンと誤検出正規表現の両方に一致する場合、報告されません。
config/excludes.cfg ファイルは正規表現ベースのパス除外をサポートしています:
# システムディレクトリを除外
^/proc/.*
^/dev/.*
^/sys/.*
# 一時ファイルを除外
.*\.tmp$
.*\.temp$
.*\.swp$
# 特定のディレクトリを除外
.*node_modules.*
.*/\.git/.*
注意: パス除外パターンは、ファイルの完全なパスに対して正規表現を使用して照合されます。# で始まる行はコメントです。
# すべてのドライブ (ネットワーク、クラウド、マウント) を含めてスキャン
sudo ./loki --scan-all-drives
# 実行可能ファイルやスクリプトだけでなく、すべてのファイルタイプをスキャン
sudo ./loki --scan-all-files
# 小さいファイルのみ (10MB 未満) をスキャン
sudo ./loki --max-file-size 10000000
# プロセススキャンをスキップ (マウントイメージに便利)
sudo ./loki --no-procs --folder /mnt/image
ターミナルインターフェイスはデフォルトで有効になっており、スキャン中にリアルタイムで監視できます。
sudo ./loki --folder /path/to/scan


Loki-RS はスキャン終了後に自動的にスタイル付き HTML レポートを生成します。レポートは JSONL ログファイルとともに作成され、すべての検出結果の視覚的なサマリーを提供します。
レポートには以下が含まれます:

HTML レポートは JSONL 出力と同じベースファイル名を共有します (例: loki_hostname_2025-01-08.html)。レポート生成を無効にするには --no-html を使用します。
loki-util を使用して、既存の JSONL ファイルから HTML レポートを生成できます:
# 単一の JSONL ファイルから HTML レポートを生成
./loki-util html --input scan_results.jsonl --output report.html
# 複数の JSONL ファイルから結合 HTML レポートを生成
./loki-util html --input "*.jsonl" --combine --output combined_report.html
# グロブパターンを使用して複数ファイルにマッチ
./loki-util html --input "/path/to/scans/*.jsonl" --combine --output combined.html
オプション:
--input <file|glob> - 入力 JSONL ファイルまたはグロブパターン (必須)--output <file.html> - 出力 HTML ファイル (省略時は入力ファイル名に .html 拡張子を付けたもの)--combine - 複数の JSONL ファイルを 1 つのレポートに結合 (ホスト名でグループ化)--title <str> - レポートタイトルを上書き--host <str> - レポート内のホスト名を上書き結合レポートモードは、複数のホストや期間からのスキャン結果を 1 つのビューに集約し、ソースホスト名ごとに検出結果をグループ化するのに便利です。
git clone https://github.com/Neo23x0/Loki-RS.git
cd Loki-RS
cargo build --release
./target/release/loki-util update
sudo ./target/release/loki
Rust ツールチェーンが必要です。クロスコンパイルについては docs/BUILD.md を参照してください。
Loki RS はサイドプロジェクトです。実用的なトリアージと実験のために作られた高速で単一バイナリのスキャナであり、アイデアが試されたり削除されたりするにつれて急速に変化する可能性があります。
サポートはコミュニティベースでベストエフォートです。SLA はなく、応答時間の保証もなく、すべてのエッジケースが完全に処理されるという約束もありません。本番環境で実行する場合は、そのことを念頭に置いて行ってください。
予測可能なサポートとより広範で十分にテストされた機能セットを備えた企業環境やインシデント対応作業には、Nextron Systems が THOR (および THOR Lite) を維持しています。THOR は、広範なアーティファクトカバレッジ、より多くのモジュールとフォーマット、ベンダーサポートを備えたプロフェッショナルスキャナです。THOR Lite は、範囲を縮小した無料のエントリーバージョンです。
GNU General Public License v3.0。 LICENSE を参照してください。
Copyright (c) 2025 Florian Roth
| オプション | デフォルト | 説明 |
|---|
--no-procs | false | プロセスメモリスキャンをスキップ |
--no-fs | false | ファイルシステムスキャンをスキップ |
--no-archive | false | アーカイブ内 (ZIP) のスキャンをスキップ |
--scan-all-drives | false | マウント/ネットワーク/クラウドドライブを含むすべてのドライブをスキャン |
--scan-all-files | false | 拡張子/種類に関係なくすべてのファイルをスキャン |
| オプション | デフォルト | 説明 |
|---|
-l, --log <FILE> | 自動 | プレーンテキストログファイル |
--no-log | false | プレーンテキストログ出力を無効化 |
-j, --jsonl <FILE> | 自動 | JSONL 出力ファイル |
--no-jsonl | false | JSONL 出力を無効化 |
--no-html | false | HTML レポート生成を無効化 |
--no-tui | false | TUI を無効にして標準コマンドライン出力を使用 |
-r, --remote <HOST:PORT> | なし | リモート syslog 送信先 |
-p, --remote-proto <PROTO> | udp | リモートプロトコル (udp/tcp) |
--remote-format <FMT> | syslog | リモートフォーマット (syslog/json) |
| オプション | デフォルト | 説明 |
|---|
--alert-level <SCORE> | 80 | ALERT のスコアしきい値 |
--warning-level <SCORE> | 60 | WARNING のスコアしきい値 |
--notice-level <SCORE> | 40 | NOTICE のスコアしきい値 |
--max-reasons <NUM> | 2 | 検出ごとに表示するマッチ理由の最大数 |
-m, --max-file-size <BYTES> | 64000000 | スキャンする最大ファイルサイズ (64MB) |
--yara-timeout <SECONDS> | 10 | 各ファイルまたはプロセスメモリバッファに対する YARA スキャンの最長時間 (最小 1 秒) |
-c, --cpu-limit <PERCENT> | 100 | CPU 使用率上限 (1-100) |
--threads <NUM> | -2 | スレッド数 (0=全、-1=全-1、-2=全-2) |
| オプション | デフォルト | 説明 |
|---|
--version | - | バージョンを表示して終了 |
-d, --debug | false | デバッグ出力を表示 |
--trace | false | 詳細なトレース出力を表示 |
--show-access-errors | false | ファイル/プロセスアクセスエラーを表示 |
| オプション | 説明 |
|---|
--scan-all-drives | マウント済みドライブ、ネットワークドライブ、クラウドストレージを含める |
--scan-all-files | ファイルタイプ/拡張子に関係なくすべてのファイルをスキャン (デフォルトでは関連するファイルタイプのみスキャン) |
-m, --max-file-size <BYTES> | このサイズより大きいファイルをスキップ (デフォルト: 64MB) |
--no-procs | プロセスメモリスキャンを完全にスキップ |
--no-fs | ファイルシステムスキャンを完全にスキップ |
--no-archive | アーカイブファイル (ZIP) 内のスキャンをスキップ |
| キー | アクション |
|---|
q | 終了 |
p | 一時停止/再開 |
s | 現在のアイテムをスキップ |
t | スレッドオーバーレイの切り替え |
+ / - | CPU 制限の調整 |
| 矢印キー | ログのスクロール |