
كشف الصدفة العكسية باستخدام التعلم الآلي
ديميتريجس تريزنا · لوكا ديميتريو · باتيستا بيجيو · فابيو رولي
تستغل الصدفات العكسية (reverse shells) من نوع living-off-the-land (LOTL) في لينكس الثنائيات الشرعية (bash, python, nc, …) لإنشاء اتصالات صادرة خفية، مما يجعل الكشف القائم على التوقيعات غير موثوق به تجاه المتغيرات الجديدة ومحاولات التهرب. يعالج QuasarNix فجوتين مفتوحتين في هذا المجال:
يولّد الإطار مجموعة تدريبية قوامها مليون أمر من 34 قالبًا للصدفات العكسية، ويقيّم 14 بنية نموذجية عند نقطة تشغيل FPR = 10⁻⁶ — مما يعكس قيود إرهاق التنبيهات الحقيقية في أنظمة SIEM.
الأداء على مجموعة الاختبار المحجوزة عبر خطوط الأساس الكشفية وبنى QuasarNix. يتم الإبلاغ عن TPR كمتوسط ± انحراف معياري عبر عشر عمليات تدريب مستقلة عند FPR = 10⁻⁶. العريض يشير إلى أفضل نتيجة؛ بينما تميز العلامة النجمية (*) النماذج التي نوقشت في الورقة.
الخلاصة: يحقق GBDT TPR بنسبة 60% عند FPR = 10⁻⁶ — أي أعلى بـ 18 مرة من التوقيعات (3.37%) — مع تدريب يستغرق 14 ثانية على أجهزة تجارية.
يسرد الجدول أدناه تقنيات هروب الصدفة في لينكس من عدة أدوات المهاجم. يشير العمود الثالث إلى ما إذا كانت التقنية تصمد أمام تطبيع تليمترية نواة auditd — فقط الإدخالات الأربعة بالعريض تُنتج سجل EXECVE مميزًا وتشكل سطح الهجوم الفعلي.
فقط 4 من 15 تقنية تصمد أمام التطبيع على مستوى النواة وتُستخدم كفضاء للهجمات العدائية.
يتم تقييم ثلاث عائلات هجمات — حقن محتوى حميد، واضطرابات هروب الصدفة، وهجين من الاثنين:
إلى جانب التهرب في زمن الاستدلال، نقوم بتقييم الهجمات في زمن التدريب:
تلويث قلب التسميات (قلب 0–20% من تسميات التدريب): تتدهور النماذج بأناقة؛ يُظهر GBDT مقاومة ذاتية عبر التصويت الجماعي، ويبقى فعالًا عند نسب تلوث عالية.
هجوم الباب الخلفي (نسبة تسميم 0.01–1%، محفزات من 2 إلى 10 رموز): تفشل المحفزات القصيرة (2–4 رموز) في تثبيت أبواب خلفية موثوقة بسبب انتشارها في الحركة الحميدة. يتطلب التثبيت الأمثل للباب الخلفي محفزات من 6 إلى 10 رموز عند نسبة تسميم ≥0.03%.
الخلاصة: تتطلب هجمات التسميم حقن بيانات كبيرًا يمكن اكتشافه إحصائيًا لتحقيق النجاح. توفر آلية التصويت الجماعي في GBDT متانة ذاتية دون أي تكلفة تدريب عدائي.
بعد نشر هذا العمل، نشرت Google نظام إنتاج متوافقًا مفاهيميًا في CAMLIS 2025 (arXiv:2512.08802): خط أنابيب من مرحلتين YARA + ML منتشر عبر عشرات الآلاف من الأنظمة، يعالج حتى 250 مليار حدث يوميًا. يتحقق ذلك النظام بشكل مستقل من صحة نموذج التعلم الآلي الهجين لكشف SIEM وحلقة التغذية الراجعة النشطة المقترحة هنا، مما يثبت جدواه على النطاق الصناعي.
| Resource | Link | Details |
|---|---|---|
| Dataset | dtrizna/QuasarNix | 1,003,122 commands · train 533k / test 470k · Apache-2.0 |
| Pre-trained Models | dtrizna/QuasarNix | GBDT, Random Forest, MLP, 1D-CNN, … |
from datasets import load_dataset
ds = load_dataset("dtrizna/QuasarNix")
src/
augmentation.py rule-based and generative data synthesis
evasion.py white-box / black-box adversarial attacks
models.py model definitions (CNN, LSTM, Transformer, XGBoost, …)
preprocessors.py tokenisers and feature builders
scoring.py evaluation metrics at fixed FPR
experiments/
ablation_*.py ablation studies (tokenizer, vocab size, embedding)
adversarial_*.py attack and adversarial-training pipelines
train_release_models.py end-to-end training script
logs_*/ TensorBoard runs, CSV metrics, model checkpoints
data/
signatures/ Sigma rules generated by evolutionary search
nix_shell/ raw benign command corpus
powershell/ cross-platform command samples
img/ publication-ready plots
uv venv # creates .venv (add --python 3.11 for a specific interpreter)
source .venv/bin/activate
uv sync # installs dependencies from 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}
}
| Architecture | Params | TPR @ FPR=10⁻⁶ | F1 | Accuracy | AUC | Training |
|---|
| Signatures (Sigma) | 184 | 3.37% | 6.52% | 51.68% | 51.68% | N/A |
| One-Class SVM (on legit) | 1K | 0.00% | 82.87% | 79.33% | 79.33% | 10s |
| One-Class SVM (on malicious) | 1K | 0.00% | 40.14% | 25.20% | 25.20% | 10s |
| 1D-CNN (non-aug., imbalanced) | 1K | 0.00% | 80.29% | 77.91% | 87.44%* | 15m |
| 1D-CNN (non-aug., balanced) | 1K | 0.06% | 82.38% | 79.33% | 88.12%* | 29m |
| SLP (non-aug.) | 1K | 0.00% | 0.00% | 50.00% | 91.58% | 1h 12m |
| Architecture | Params | TPR @ FPR=10⁻⁶ | F1 | Accuracy | AUC | Training |
|---|
| Random Forest | 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 (No Embedding) | 264K | 54.16 ± 2.14%* | 94.00% | 94.34% | 99.80% | 18m |
| Architecture | Params | TPR @ FPR=10⁻⁶ | F1 | Accuracy | AUC | Training |
|---|
| MLP (Embedding) | 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 (Mean Pooling) | 335K | 0.00 ± 0.00% | 83.39% | 86.07% | 98.78% | 1h 18m |
| Transformer (CLS Token) | 335K | 0.00 ± 0.00% | 78.55%* | 82.67% | 99.38% | 1h 30m |
| Transformer (Attn. Pooling) | 335K | 0.00 ± 0.00% | 87.82% | 89.41% | 98.85% | 1h 24m |
| Manipulation | Functional Example | Preserved by auditd |
|---|
' | ba's'h -i | No |
" | ba"s"h -i | No |
\ | ba\s\h -i | No |
$@ | ba$@sh -i | No |
[char] | ba[s]h -i | No |
{form} | {bash,-i} | No |
| IFS variable | bash${IFS}-i | No |
| Empty variable | bas${u}h -i | No |
| Fake command | bas$(u)h -i | No |
| Base64 | echo c2ggLWk= | base64 -d | sh | No |
| Hex | echo \x73\x68 \x20\x2d\x69 | sh | No |
| Flag tampering | bash -x -li | Yes |
| Decimal IP | ping 2130706433 | Yes |
| Binary rename | cp bash a; a -i | Yes |
| Futile code | mkfifo a; id; cat a | Yes |