Linux living-off-the-land (LOTL) 反向shell滥用合法二进制文件(bash、python、nc等)建立隐蔽的出站连接,使得基于签名的检测在面对新型变体和逃避尝试时不可靠。QuasarNix 解决了该领域的两个空白:
该框架从34个反向shell模板合成了一个100万命令的训练语料库,并在FPR = 10⁻⁶的操作点上评估了14种模型架构——反映了真实SIEM告警疲劳约束。
在保留测试集上,跨基线启发式方法和QuasarNix架构的性能。TPR报告为在FPR = 10⁻⁶下十次独立训练运行的均值±标准差。粗体标记最佳结果;星号(*)突出显示论文中讨论的模型。
要点: GBDT 在 FPR=10⁻⁶ 时实现了 60% 的 TPR——比签名(3.37%)高 18 倍——同时在商用硬件上仅需 14 秒训练。
下表列出了攻击者工具包中的 Linux shell 逃避技术。第三列指示该技术是否能在 auditd 内核遥测标准化后存活——只有四个粗体条目会产生独特的 EXECVE 记录,构成真正的攻击面。
只有 15 种技术中的 4 种 能通过内核级标准化,并被用作对抗攻击空间。
评估了三种攻击家族——良性内容注入、shell 逃避扰动以及两者的混合:
除了推理时逃避,我们还评估了训练时攻击:
标签翻转污染(0–20% 的训练标签被翻转):模型性能逐渐下降;GBDT 通过集成投票表现出固有的抵抗力,在高污染比例下仍保持功能。
后门攻击(0.01–1% 投毒比例,2–10 个令牌触发器):短触发器(2–4 个令牌)因在良性流量中普遍存在而无法安装可靠后门。最佳后门安装需要 ≥0.03% 投毒比例下的 6–10 个令牌触发器。
要点: 投毒攻击需要大量、统计上可检测的数据注入才能成功。GBDT 的集成机制无需对抗训练成本即可提供内在鲁棒性。
本工作发布后,Google 在 CAMLIS 2025 发布了一个概念上一致的生产系统(arXiv:2512.08802):一个两阶段 YARA + ML 流水线,部署在数万个系统上,每天处理高达 2500 亿事件。该系统独立验证了本文提出的混合 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 |
| 一类SVM(基于合法) | 1K | 0.00% | 82.87% | 79.33% | 79.33% | 10s |
| 一类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 + 注意力 | 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 | 否 |
| 十六进制 | echo \x73\x68 \x20\x2d\x69 | sh | 否 |
| 标志篡改 | bash -x -li | 是 |
| 十进制 IP | ping 2130706433 | 是 |
| 二进制重命名 | cp bash a; a -i | 是 |
| 无效代码 | mkfifo a; id; cat a | 是 |