Dmitrijs Trizna · Luca Demetrio · Battista Biggio · Fabio Roli
Linuxの既存ツール悪用(Living-off-the-Land, LOTL) リバースシェルは、正規のバイナリ(bash、python、ncなど)を悪用して隠密な送信接続を確立するため、シグネチャベースの検出は新たな亜種や回避試行に対して信頼性が低くなります。QuasarNixは、この分野における2つの未解決のギャップに対処します。
本フレームワークは、34のリバースシェルテンプレートから100万コマンドの訓練コーパスを合成し、FPR = 10⁻⁶ の動作点で14のモデルアーキテクチャを評価します。これは実際のSIEMアラート疲労制約を反映しています。
ベースラインヒューリスティックとQuasarNixアーキテクチャ全体での、保持テストセットにおける性能。TPRは、FPR = 10⁻⁶ における10回の独立した訓練実行の平均±標準偏差として報告されます。太字は最良の結果を示し、アスタリスク(*)は論文で議論されたモデルを強調します。
要点: GBDTは FPR = 10⁻⁶ で60%のTPR を達成 — シグネチャ(3.37%)の18倍 — しかも汎用ハードウェア上で14秒の訓練で実現。
以下の表は、攻撃者のツールキットに含まれるLinuxシェルエスケープ手法を一覧にしたものです。3列目は、その手法が auditd カーネルテレメトリ正規化を生き残るかどうかを示します。太字の4つのエントリのみが、異なる EXECVE レコードを生成し、真の攻撃対象領域を構成します。
カーネルレベルの正規化を生き残るのは 15手法中わずか4 であり、これらが敵対的攻撃空間として使用されます。
3つの攻撃ファミリーが評価されました — 良性コンテンツ注入、シェルエスケープ摂動、およびそのハイブリッドです。
推論時の回避に加えて、訓練時の攻撃も評価します。
ラベル反転汚染(訓練ラベルの0~20%を反転):モデルは徐々に性能が低下します。GBDTはアンサンブル投票により固有の耐性を示し、高い汚染率でも機能し続けます。
バックドア攻撃(毒比率0.01~1%、トリガートークン2~10):短いトリガー(2~4トークン)は、良性トラフィックでの出現頻度が高いため、信頼性の高いバックドアの埋め込みに失敗します。最適なバックドア埋め込みには、0.03%以上の毒比率で6~10トークンのトリガーが必要です。
要点: 毒入れ攻撃が成功するには、統計的に検出可能な大規模なデータ注入が必要です。GBDTのアンサンブルメカニズムは、敵対的訓練コストなしで固有のロバスト性を提供します。
本研究の公開後、GoogleはCAMLIS 2025(arXiv:2512.08802)において、概念的に一致するプロダクションシステムを発表しました。これは、数万のシステムに展開され、1日あたり最大2500億イベントを処理する2段階のYARA + MLパイプラインです。このシステムは、本稿で提案されたハイブリッドML-for-SIEM検出パラダイムと能動学習フィードバックループを独立に検証し、産業規模での実現可能性を示しています。
| リソース | リンク | 詳細 |
|---|---|---|
| データセット | dtrizna/QuasarNix | 1,003,122 コマンド · 訓練533k / テスト470k · Apache-2.0 |
| 学習済みモデル | dtrizna/QuasarNix | GBDT, ランダムフォレスト, MLP, 1D-CNN, … |
from datasets import load_dataset
ds = load_dataset("dtrizna/QuasarNix")
src/
augmentation.py ルールベースおよび生成的なデータ合成
evasion.py ホワイトボックス/ブラックボックス敵対的攻撃
models.py モデル定義(CNN, LSTM, Transformer, XGBoost, …)
preprocessors.py トークナイザーと特徴量ビルダー
scoring.py 固定FPRでの評価指標
experiments/
ablation_*.py アブレーション研究(トークナイザー、語彙サイズ、埋め込み)
adversarial_*.py 攻撃および敵対的訓練パイプライン
train_release_models.py エンドツーエンド訓練スクリプト
logs_*/ TensorBoard実行、CSVメトリクス、モデルチェックポイント
data/
signatures/ 進化的探索によって生成されたSigmaルール
nix_shell/ 生の良性コマンドコーパス
powershell/ クロスプラットフォームコマンドサンプル
img/ 出版品質のプロット
uv venv # .venvを作成(特定のインタプリタを指定するには --python 3.11 を追加)
source .venv/bin/activate
uv sync # pyproject.tomlから依存関係をインストール
@article{trizna2025quasarnix,
author = {Trizna, Dmitrijs and Demetrio, Luca and Biggio, Battista and Roli, Fabio},
title = {Robust Large-Scale Detection of Living-Off-the-Land Reverse Shells via Data Synthesis},
journal = {ACM Transactions on Privacy and Security},
year = {2025},
doi = {10.1145/3807450},
url = {https://dl.acm.org/doi/10.1145/3807450}
}
| アーキテクチャ | パラメータ数 | TPR @ FPR=10⁻⁶ | F1 | 精度 | AUC | 学習時間 |
|---|
| シグネチャ(Sigma) | 184 | 3.37% | 6.52% | 51.68% | 51.68% | N/A |
| One-Class SVM(正規のみ) | 1K | 0.00% | 82.87% | 79.33% | 79.33% | 10s |
| One-Class SVM(悪性のみ) | 1K | 0.00% | 40.14% | 25.20% | 25.20% | 10s |
| 1D-CNN(非拡張、不均衡) | 1K | 0.00% | 80.29% | 77.91% | 87.44%* | 15m |
| 1D-CNN(非拡張、均衡) | 1K | 0.06% | 82.38% | 79.33% | 88.12%* | 29m |
| SLP(非拡張) | 1K | 0.00% | 0.00% | 50.00% | 91.58% | 1h 12m |
| アーキテクチャ | パラメータ数 | TPR @ FPR=10⁻⁶ | F1 | 精度 | AUC | 学習時間 |
|---|
| ランダムフォレスト | 1K | 42.23 ± 6.27% | 96.07% | 96.21% | 99.84% | 18s |
| GBDT(XGBoost) | 1K | 60.20 ± 8.22% | 89.92% | 90.84% | 99.89% | 14s |
| MLP(埋め込みなし) | 264K | 54.16 ± 2.14%* | 94.00% | 94.34% | 99.80% | 18m |
| アーキテクチャ | パラメータ数 | TPR @ FPR=10⁻⁶ | F1 | 精度 | AUC | 学習時間 |
|---|
| MLP(埋め込みあり) | 297K | 10.76 ± 17.32% | 67.70% | 75.60% | 89.15% | 18m |
| LSTM | 318K | 21.52 ± 23.66% | 64.16% | 74.05% | 99.75% | 24m |
| 1D-CNN | 301K | 46.42 ± 32.67%* | 85.97% | 88.20% | 99.99% | 29m |
| 1D-CNN + LSTM | 316K | 20.48 ± 22.08% | 58.92% | 71.06% | 98.21% | 29m |
| 1D-CNN + LSTM + Attention | 402K | 17.19 ± 22.59% | 62.53% | 73.08% | 98.46% | 26m |
| Transformer(平均プーリング) | 335K | 0.00 ± 0.00% | 83.39% | 86.07% | 98.78% | 1h 18m |
| Transformer(CLSトークン) | 335K | 0.00 ± 0.00% | 78.55%* | 82.67% | 99.38% | 1h 30m |
| Transformer(注意プーリング) | 335K | 0.00 ± 0.00% | 87.82% | 89.41% | 98.85% | 1h 24m |
| 操作手法 | 機能例 | auditdで保存されるか |
|---|
' | ba's'h -i | いいえ |
" | ba"s"h -i | いいえ |
\ | ba\s\h -i | いいえ |
$@ | ba$@sh -i | いいえ |
[char] | ba[s]h -i | いいえ |
{form} | {bash,-i} | いいえ |
| IFS変数 | bash${IFS}-i | いいえ |
| 空変数 | bas${u}h -i | いいえ |
| 偽コマンド | bas$(u)h -i | いいえ |
| Base64 | echo c2ggLWk= | base64 -d | sh | いいえ |
| Hex | echo \x73\x68 \x20\x2d\x69 | sh | いいえ |
| フラグ改ざん | bash -x -li | はい |
| 10進IP | ping 2130706433 | はい |
| バイナリリネーム | cp bash a; a -i | はい |
| 無駄コード | mkfifo a; id; cat a | はい |