canay/threat-xai-action
GitHub: canay/threat-xai-action
LEAF 是一个面向企业防火墙策略条件化执行审计的可解释 AI 研究复现包,通过感知泄漏的评估协议和监督式机器学习模型系统分析防火墙执行决策的特征依赖与时序稳定性。
Stars: 1 | Forks: 0
# 策略条件化防火墙执行审计可复现性包
以下手稿的公开可复现性工件:
**LEAF:一种面向策略条件化防火墙执行的感知泄漏、可解释审计框架**
框架名称:
`LEAF`(Leakage-aware, Explainable Audit Framework,感知泄漏的可解释审计框架)
代码仓简称:
`threat-xai-action`
GitHub URL:
`https://github.com/canay/threat-xai-action`
## 相关研究
本代码仓支持 LEAF 研究,该研究使用真实企业的 Palo Alto 威胁日志对五类操作防火墙执行进行了审计。该研究使用监督式机器学习模型作为可比较的测量工具,纳入了感知泄漏的评估协议中,并测试了当控制直接策略字段、威胁描述符、重复签名、时间和策略上下文时证据如何变化。
目标类别:
- Allow
- Block
- Drop
- Reset-Both
- Reset-Server
## 关键词
- enterprise firewall logs
- policy-conditioned firewall enforcement
- leakage-aware evaluation protocol
- security management
- analyst triage
- explainable AI
## 作者与联系方式
作者顺序:
1. **Özkan Canay**,通讯作者
2. **Cem Özkurt**
3. **Fatmir Garri**
Özkan Canay
- 信息系统与技术系
- 计算机与信息科学学院
- 萨卡里亚大学
- 邮箱:canay@sakarya.edu.tr
- ORCID:0000-0001-7539-6001
Cem Özkurt
- 数据科学与分析系
- 计算机与信息科学学院
- 萨卡里亚大学
- 邮箱:cemozkurt@sakarya.edu.tr
- ORCID:0000-0002-1251-7715
Fatmir Garri
- 信息技术系
- 萨卡里亚应用科学大学
- 邮箱:fatmirgarri@subu.edu.tr
- ORCID:0009-0005-6762-6846
GitHub:
https://github.com/canay
本代码仓是相关手稿的由作者管理的代码和输出复现包。`main` 分支是当前的公开包。
## 代码仓内容
- `code/`:受控数据转换入口点以及手稿中使用的所有评估、解释、验证和图表渲染脚本(`02`--`21`)
- `scripts/create_public_sample.py`:用于生成经隐私审计的公开样本的唯一保留辅助脚本
- `data/processed/`:受控数据访问与 schema 说明、聚合处理清单,以及包含审计的 1,000 行匿名公开冒烟测试样本
- `results/`:CSV/JSON 聚合评估输出、可复现的解释工件以及额外的验证输出
- `requirements.txt`:可移植的最低兼容依赖项
- `requirements-lock-primary-linux-aarch64.txt`:规范 Linux/aarch64 VPS 证据的完整精确解析
- `requirements-lock.txt`:仅出于溯源目的保留的带平台标签的 Windows x86-64 诊断环境
- `SEED_MANIFEST.json`:显式随机种子与重采样范围
- `CITATION.cff`:本工件的引用元数据
- `MANIFEST.md`:发布合同以及公开/受控内容检查清单
- `TRACEABILITY.md`:手稿证据到脚本/输出的映射,包括用于授权重运行的受控已处理文件校验和
原始企业防火墙导出**不会**在本代码仓中再次分发。除非明确的机构授权确认在隐私和安全审查后允许分发,否则不会包含完整的事件级已处理数据集。包含 1,000 行匿名样本仅用于 schema 检查和冒烟测试;它不用于报告手稿指标。
## 数据
受控已处理数据集路径:
- `data/processed/threat_five_class.csv`
上述文件是授权完整复现的预期本地路径,但该公开工件中不包含完整文件。该数据衍生自机构防火墙日志,即使在处理后也可能暴露特定于组织或安全敏感的运营上下文。日历日期 2026 年 5 月 14 日经作者批准有意披露;组织身份、拓扑、策略名称、原始导出和事件级记录仍受保护。
聚合队列流:
- 原始威胁日志行:186,271
- 排除的仅检测 `alert` 行:9,115
- 映射的五类行:177,156
- 观察窗口:高流量工作日的 6 小时 30 分钟 26 秒
- 聚合审计:`data/processed/threat_dataset_processing_manifest.json`
行数:
- 177,156 行带标签的威胁日志记录
用于授权重运行的受控已处理文件标识:
- 事件行:177,156
- 表头行:1
- 大小:44,929,133 字节
- SHA-256:`1BE9896A996DD58A582D94319180405A8559AB5193EF692BD8D2D2D614693724`
标签语义:此校验和标识了原始的规范实验文件,其中原始的 `block` 存储在内部别名 `Deny` 下。面向发布的代码、表格、图表和公开样本使用 `Block`;仅标签的字节往返检查确认,类别成员资格和报告的指标保持不变。
类别计数:
- Drop:160,788
- Block:10,187
- Reset-Both:2,903
- Allow:2,502
- Reset-Server:776
公开匿名冒烟测试样本:
- 文件:`data/processed/public_anonymized_sample_1000.csv`
- 审计:`data/processed/public_anonymized_sample_1000.audit.json`
- 行数:1,000
- SHA-256:`68672057A80CA70D5B52301E3BB9ED00D8A41D707C50EFFC8B53217A345253DD`
- 类别计数:Drop 731,Block 93,Reset-Both 62,Allow 61,Reset-Server 53
此样本保留了 27 列的已处理文件 schema 和所有五个目标类别,但未保留原始时间戳、原始防火墙操作、策略名称、区域、接口、端口、应用程序、威胁名称、国家/地区、源行标识符、原始行顺序或其他事件级值。除 `target` 外,事件级值在各列内被脱敏或映射为稳定的通用 token,如 `application_001`、`source_zone_001` 和 `rule_context_001`;在分配 2026-01-01 的合成连续时间戳之前,会对采样的行进行洗牌。该样本仅适用于检查文件格式、解析器行为和执行轻量级脚本。它无法复现报告的指标。
隐私说明:
本包默认排除了原始企业日志导出和完整的事件级已处理 CSV。在内部复现期间,受控已处理文件中非缺失的 `Rule` 值已被转换为稳定的匿名规则上下文标识符,而公开的冒烟测试样本在发布前应用了更强的逐列 token 化。只有在相关机构批准确切文件及任何要求的数据使用协议后,才能公开发布完整的已处理文件。
详细的 event-level review-queue 记录被排除在公开工件之外。`code/09_operational_review_and_context_audit.py` 默认仅写入聚合及化名的每上下文输出。授权用户可以请求使用 `--private-records-out` 获取事件级队列;该脚本拒绝在此公开代码仓内的任何此类目标位置。
公开 schema 辅助:
- `data/processed/schema.csv` 记录了每个字段的预期列、建模角色和公开发布说明。
- `data/processed/public_anonymized_sample_1000.csv` 是派生自真实行但经过深度匿名化的样本,仅用于 schema 检查和冒烟测试。
- `data/processed/public_anonymized_sample_1000.audit.json` 记录了样本种子、源校验和、输出校验和、类别计数和匿名化规则。
- `data/processed/threat_dataset_processing_manifest.json` 记录了聚合目标构建计数和受控已处理文件校验和。
- `TRACEABILITY.md` 将手稿表格和验证声明映射到生成脚本和聚合输出文件。
## 主要证据快照
核心留出基准:
- 领先的两种错误概况:LightGBM,CatBoost 和 XGBoost
- 领先概况准确率:0.999944
- 领先概况平衡准确率:0.999312
- 领先概况 macro-F1:0.998373
- 领先概况 weighted-F1:0.999944
- 下游 XGBoost 参考:两个 reset 边界错误
- XGBoost 准确率:0.999944
- XGBoost 平衡准确率:0.999312
- XGBoost macro-F1:0.998373
- XGBoost weighted-F1:0.999944
核心五折交叉验证 macro-F1:
- LightGBM:0.996674 +/- 0.001951
- CatBoost:0.996630 +/- 0.001930
- XGBoost:0.996343 +/- 0.002282
- Extra Trees:0.995018 +/- 0.002547
不含直接威胁描述符的感知泄漏消融实验:
- 移除字段:`Threat/Content Name`,`Threat/Content Type`,`Severity`
- LightGBM 留出 macro-F1:0.993126
- XGBoost 留出 macro-F1:0.990091
无威胁描述符交叉验证:
- XGBoost CV macro-F1 平均值:0.986870
- LightGBM CV macro-F1 平均值:0.985312
- Extra Trees CV macro-F1 平均值:0.981459
- CatBoost CV macro-F1 平均值:0.976976
额外的 XGBoost 验证检查:
- Minimal-context 分层留出 macro-F1:0.982091
- 核心按时间顺序留出 macro-F1:0.866740
- 无威胁描述符按时间顺序留出 macro-F1:0.836739
- 核心按时间顺序留出 ECE,10 个分箱:0.004593
- 在重复分层样本上的 SHAP top-10 特征重叠度:1.000000
- 规范的 SHAP 重运行以 0.998373 macro-F1 和两个错误复现了选定的 XGBoost 留出结果。
- 64 条记录的诊断在 0.00000882 最大绝对误差内重建了原始裕度,概率误差在 0.00000012 内。
- 公开的 XAI 版本包含聚合的 SHAP 证据和三个去标识化的手稿图表;未发布行级别的 LIME 表。
模型无关的策略动作熵审计:
- 输出位于 `results/policy_action_entropy_audit/` 中。
- 规则上下文的主导动作比例(按记录加权):0.992758。
- 规则上下文的归一化熵(按记录加权):0.017669。
- 规则 + 威胁类型 + 方向的主导动作比例(按记录加权):0.997217。
- 在 0.80 主导动作阈值下的低纯度规则上下文行:1,248。
- 在输出工件中,规则值默认被匿名化为 `rule_context_*`。
强化检查:
- 特征组消融结果位于 `results/strengthening/` 中。
- 特征组审计中的按时间顺序核心 macro-F1:0.866740。
- 特征组审计中的按时间顺序无威胁描述符 macro-F1:0.836739。
- 按时间顺序无应用上下文 macro-F1:0.941499。
- 基于置信度的按时间顺序核心转介保留了 97.45% 的记录,其中包含 9 个保留集错误,macro-F1 为 0.9829。
- 这些时间序列结果是日内前移应力测试,不是长期时间序列验证。
感知重复的分组划分应力测试:
- 对精确的特征签名进行分组,使得相同的结构化特征向量不会同时出现在训练集和测试集中。
- 核心特征签名:47,047 个唯一签名;151,361 行重复行(85.44%)。
- 无威胁描述符分组划分 macro-F1:0.983299 +/- 0.004429。
- Minimal-context 分组划分 macro-F1:0.977351 +/- 0.006797。
- 核心分组划分 macro-F1:0.996657 +/- 0.000804(范围 0.9953--0.997)。
留出策略上下文应力测试:
- `Rule` 仅用作留出的分组变量,不作为预测因子包含在内。
- 在至少包含 50 条记录的七个命名规则上下文中,核心模型达到了 0.804460 的支持加权准确率和 0.653076 的支持加权观察类别 macro-F1。
- 无威胁描述符和 Minimal-context 设置分别达到了 0.378214 和 0.372487 的支持加权观察类别 macro-F1。
- 这些结果是对局部策略上下文敏感性的压力审计,不是跨组织泛化的证据。
操作审查与未见上下文审计:
- 输出位于 `results/operational_review_context_audit/` 中。
- 保存的操作审查聚合是使用 300 棵树的选定模型配置(`--n-estimators 300`)生成的,因此其模型日志不一致计数与选定模型验证表相匹配。
- 聚合队列摘要和化名的每上下文结果是公开的;不分发详细的事件级队列记录。
- 在分层核心设置中,由 reset 相关记录或最低 1% 置信度记录触发的审查队列将 35,432 条测试记录中的 941 条(2.66%)路由到审查,并包含了所有的模型日志不一致。
- 在无威胁描述符设置中,同一审查规则路由了 920 条记录(2.60%),并包含了全部 15 个模型日志不一致。
- 使用模型日志不一致、最低 5% 置信度或 reset 相关记录的更广泛规则路由了 1,802 条核心记录(5.09%)和 2,231 条无威胁描述符记录(6.30%)。
- 探索性的未见上下文留出审计表明,当训练中完全缺少高支持度的分类值时,性能可能会急剧下降。请将此视为部署边界的压力测试,而不是独立的外部验证。
Q1 审计修订检查:
- 输出位于 `results/q1_audit_revision/` 中。
- 在分层留出下,训练多数类的 macro-F1 为 0.190312,在按时间顺序留出下为 0.181301。
- 非规则、非直接描述符的应用-方向-区域上下文查找在分层 macro-F1 上达到了 0.953460,但在按时间顺序排列下降至 0.748216。
- 更丰富的最小操作上下文查找达到了 0.976840 的分层 macro-F1 和 0.620468 的按时间顺序 macro-F1。
- 一个包含 20 个特征的公平精确签名查找仅达到 0.511682 的分层 macro-F1 和 0.225351 的按时间顺序 macro-F1,因为未匹配的高基数签名会回退到训练多数类动作;因此,学习模型的性能无法通过精确签名记忆来复现。
- 来自保存的固定模型 XGBoost 输出的测试记录自助法区间得出的按时间顺序核心 macro-F1 为 0.866740,95% 区间为 0.8537--0.8792。
- 对应的按时间顺序无威胁描述符 macro-F1 为 0.836739,95% 区间为 0.8224--0.8508。
第 9 轮修订实验:
- 输出位于 `results/q1_audit_revision/` 中。全部使用 300 棵树、seed-42 的选定模型 pipeline。基准和每个依赖于模型的选定模型检查均在同一个锁定的 Linux/aarch64 VPS 环境下生成,以便报告的 XGBoost 行共享相同的预处理、库、划分和模型契约。
- `classweight_sensitivity.csv`:添加逆频样本权重使核心 macro-F1 保持不变,为 0.9984;在无威胁描述符设置中,macro-F1 从 0.9901 升至 0.9907,平衡准确率从 0.9928 升至 0.9967,且同样具有 15 个错误。选定模型的结论在此测试的加权变化下是稳定的。
- `sourceport_nearduplicate_ablation.csv`:`Source Port` 具有高基数(10,345 个不同值);通过排除 `Source Port` 的签名对记录进行分组(这合并了 14,678 个签名组,并将重复行的比例从 0.854 提高到 0.923),仍然产生了 0.9932 的中位核心 macro-F1(范围 0.924--0.997),因此当从分组中移除突发级别的源端口变化时,重构证据并没有崩溃。
- `forward_chaining_chronological.csv`:扩展窗口按时间顺序折叠(训练最早的 60/70/80/90 百分比,测试接下来的 10 百分比)表明,日内的时序性能是依赖于切点的,而不是单个值,这与记录在案的 80/20 切分的类别混合偏移一致。
- `category_code_order_sensitivity_summary.csv`:在规范的众数类别插补和固定的转换特征顺序下,五个类别映射排列在核心设置中最多使选定模型的 macro-F1 改变 0.0016,在无威胁描述符下改变 0.0017。
## 实验环境
企业数据基准、其依赖于模型的验证和解释分析,以及公开的 UCI schema 迁移实例化,均在配置了 4 个 OCPU、24 GB RAM 和 Python 3.12.3 的 Oracle Cloud Ampere Linux aarch64 虚拟专用服务器上运行,未使用专用加速器。已注册的规范证据包为 `2026-07-13_codex_vps_selected_model_canonicalization`;在接受相关联的阵列之前,它复现了原始的 XGBoost 基准概况。未评估推理延迟、吞吐量和实时部署性能。
确切的完整 Python 3.12.3 Linux/aarch64 环境记录在 `requirements-lock-primary-linux-aarch64.txt` 中,并针对规范证据包进行了逐字节重新验证。`requirements-lock.txt` 仅出于溯源目的保留了较晚的 Windows 诊断环境,而 `requirements.txt` 仍然是可移植的最低版本安装程序。
## 使用授权的已处理数据进行复现
以下脚本要求受控已处理数据集位于 `data/processed/threat_five_class.csv`。默认情况下,此公开工件不包含该文件。只有在将经机构批准的已处理数据集副本放置在该路径下之后,才使用这些命令。
安装依赖项:
```
python -m pip install -r requirements.txt
```
为了对报告的输出进行确切检查,请使用带平台标签的 Linux/aarch64 lock。Windows lock 是历史诊断溯源;这两个 lock 文件都不是跨平台安装程序。
构建受控的五类数据集并写入聚合清单(所有受控路径必须保留在此公开代码仓之外):
```
python code/02_build_threat_dataset.py --input --output --manifest
```
在公开匿名样本上对 schema 和解析器进行冒烟测试:
```
python code/03_benchmark_baseline.py --dataset threat --feature-set core --models "Decision Tree" --sample-per-class 20 --data-override data/processed/public_anonymized_sample_1000.csv --tag public_sample_smoke --output-dir results/public_sample_smoke
```
上述命令是受支持的公开样本冒烟测试。其他脚本需要受控的已处理数据集,因为公开样本特意对敏感的数值进行了 token 化;请勿重命名或替换公开样本来重新生成手稿指标或解释工件。
运行核心留出基准:
```
python code/03_benchmark_baseline.py --dataset threat --feature-set core --models "Decision Tree,Random Forest,Extra Trees,XGBoost,LightGBM,CatBoost" --tag baseline --output-dir results
```
运行无威胁描述符消融实验:
```
python code/03_benchmark_baseline.py --dataset threat --feature-set core --models "Decision Tree,Random Forest,Extra Trees,XGBoost,LightGBM,CatBoost" --exclude-features "Threat/Content Name,Threat/Content Type,Severity" --tag no_threat_descriptors --output-dir results
```
运行无威胁描述符的顶级模型 CV:
```
python code/03_benchmark_baseline.py --dataset threat --feature-set core --models "Extra Trees,XGBoost,LightGBM,CatBoost" --exclude-features "Threat/Content Name,Threat/Content Type,Severity" --cv --tag no_threat_descriptors_top_cv --output-dir results
```
运行匹配的核心顶级模型 CV:
```
python code/03_benchmark_baseline.py --dataset threat --feature-set core --models "Extra Trees,XGBoost,LightGBM,CatBoost" --cv --tag top_cv --output-dir results
```
运行包含策略的上限比较:
```
python code/03_benchmark_baseline.py --dataset threat --feature-set with_policy --models "Decision Tree,Random Forest,Extra Trees,XGBoost,LightGBM,CatBoost" --tag with_policy --output-dir results
```
生成用于手稿图表的 SHAP 和 LIME 解释工件:
```
python code/04_xai_explanations.py --data data/processed/threat_five_class.csv --outdir results/xai
```
XAI 渲染器在正常字重下对轴和 colorbar 轴标题使用 8 号 Lato Regular,并在正常字重下对轴刻度/特征标签使用 8 号 Inter Regular;没有内部加粗标签。当这些字体无法通过宿主字体注册表发现时,请将 `LEAF_LATO_REGULAR` 和 `LEAF_INTER_REGULAR` 设置为显式的字体文件路径。解析出的文件名、SHA-256 散列和锁定的大小记录在 `xai_generation_summary.json` 中。锁定的证据环境使用 SHAP 0.51.0 和 XGBoost 3.2.0;不支持无法解析 XGBoost 多类向量基础分数的旧版 SHAP。
运行额外的验证检查:
```
python code/05_q1_validation_extensions.py --data data/processed/threat_five_class.csv --outdir results/extensions
```
运行强化检查:
```
python code/06_strengthening_validation.py --data data/processed/threat_five_class.csv --outdir results/strengthening
```
如果安装了带有 CUDA 支持的 XGBoost:
```
python code/06_strengthening_validation.py --data data/processed/threat_five_class.csv --outdir results/strengthening --device cuda
```
运行感知重复的分组划分鲁棒性测试:
```
python code/07_duplicate_group_robustness.py --data data/processed/threat_five_class.csv --outdir results/duplicate_group_robustness
```
运行策略上下文留出鲁棒性测试:
```
python code/08_policy_context_robustness.py --data data/processed/threat_five_class.csv --outdir results/policy_context_robustness
```
在不拟合模型的情况下,从保存的聚合 CSV 渲染留出的命名规则审计图表:
```
python code/21_render_heldout_context_audit.py --aggregate results/policy_context_robustness/policy_context_heldout_aggregate.csv --output results/policy_context_robustness/fig_heldout_policy_context_audit.png --metadata results/policy_context_robustness/fig_heldout_policy_context_audit.metadata.json
```
留出上下文图表保留了三个报告的设置、它们的支持加权准确率和观察类别 macro-F1 值,以及它们的错误计数。渲染器 v2.0 使用与其他验证图表相同的视觉系统:蓝色准确率圆圈、蓝绿色 macro-F1 方块、珊瑚色错误标记、灰色连接线、交替的行带和虚线网格。面板和轴排版使用 Lato,而未加粗的内部文本使用 Inter;显式的大小锁定将轴标题保持在 8 磅,将刻度/类别保持在 7 磅。
运行操作 review-queue 和未见上下文审计:
```
python code/09_operational_review_and_context_audit.py --data data/processed/threat_five_class.csv --outdir results/operational_review_context_audit --n-estimators 300 --max-contexts-per-column 6
```
运行模型无关的策略动作熵审计:
```
python code/10_policy_action_entropy_audit.py --data data/processed/threat_five_class.csv --outdir results/policy_action_entropy_audit
```
运行 Q1 审计修订基线和自助法区间:
```
python code/11_q1_audit_revision_checks.py --data data/processed/threat_five_class.csv --outdir results/q1_audit_revision --confusions results/extensions/q1_validation_confusions.csv --fit-xgb --bootstrap-iters 1000
```
如果受控已处理数据集不可用,并且仅需聚合混淆单元 CI 输出:
```
python code/11_q1_audit_revision_checks.py --outdir results/q1_audit_revision --confusions results/extensions/q1_validation_confusions.csv --confusion-only
```
运行额外的鲁棒性和审计实验:
公开的 UCI Internet Firewall 数据集未在本代码仓中重复。从官方的 [UCI Internet Firewall Data 页面](https://archive.ics.uci.edu/dataset/542/internet+firewall+data)(DOI:[10.24432/C5131M](https://doi.org/10.24432/C5131M);CC BY 4.0)下载 `log2.csv`,将其放置在 `data/uci_internet_firewall/log2.csv`,并保留所需的 UCI 署名。规范的输入 SHA-256 为 `0b42e7eb9a4d7c314f65810c447ebf7f09d5e3e106ec14d36950a9ebac61e9c0`。本地的 `data/uci_internet_firewall/` 目录已被忽略,以防止意外的数据提交。
```
python code/12_repeated_seed_robustness.py --data data/processed/threat_five_class.csv
python code/13_classweight_sensitivity.py --data data/processed/threat_five_class.csv
python code/14_sourceport_nearduplicate_ablation.py --data data/processed/threat_five_class.csv --outdir results/q1_audit_revision
python code/15_forward_chaining_chronological.py --data data/processed/threat_five_class.csv --outdir results/q1_audit_revision
python code/16_uci_leaf_instantiation.py --data data/uci_internet_firewall/log2.csv --outdir results/uci_leaf_instantiation --seed 42
python code/17_category_code_order_sensitivity.py --data data/processed/threat_five_class.csv --outdir results/q1_audit_revision
python code/18_full_feature_lookup_baseline.py --data data/processed/threat_five_class.csv --outdir results/q1_audit_revision
```
从保存的聚合证据中渲染面向手稿的描述性、留出/CV 和特征组图表:
```
python code/19_render_manuscript_figures.py --processing-manifest data/processed/threat_dataset_processing_manifest.json --core-holdout results/baseline_benchmark_threat_core_baseline.csv --no-threat-holdout results/baseline_benchmark_threat_core_no_threat_descriptors.csv --core-cv results/baseline_benchmark_threat_core_top_cv_cv_summary.csv --no-threat-cv results/baseline_benchmark_threat_core_no_threat_descriptors_top_cv_cv_summary.csv --strengthening results/strengthening/strengthening_summary.csv --outdir results/manuscript_figures
```
描述性、留出/CV 和特征组渲染器在正常字重下使用 Lato Regular 作为轴标签,并将解析出的字体散列记录在 `manuscript_figure_render_metadata.json` 中。在面向手稿的类别分布和组合的留出/CV 图表中,轴标题被锁定为 8 磅,轴刻度/类别标签被锁定为 7 磅;特征组图表保留了其先前的大小。可以使用 `LEAF_LATO_REGULAR` 提供显式的字体路径。
从聚合队列清单渲染手稿方法论工作流:
```
python code/20_render_methodology_workflow.py --processing-manifest data/processed/threat_dataset_processing_manifest.json --outdir results/manuscript_figures
```
工作流渲染器将 Lato Bold 用于阶段和框标题,并将 Liberation Sans Regular 用于单行框摘要。所有八个框共享一个 8.6 磅的标题大小和一个 7.8 磅的摘要大小。虚线阶段 I、II 和 III 带使用了中性灰填充的微妙递进,而其内部框分别保留了极浅的蓝色、黄色和绿色填充;酒红色的阶段标签、海军蓝的框标题、紫色的摘要和中性连接线保持了高对比度的一致性。发布图表在 `methodology_workflow_render_metadata.json` 中记录了解析出的文件名、SHA-256 散列、大小和调色板;精确的像素复现需要那些记录的字体。渲染器应用了具有 12 像素安全边距的内容感知型 600-dpi PNG 裁剪。
## 公开包维护
`main` 分支是当前的公开包。在更新它之前:
- 确认 GitHub URL 与公开代码仓匹配。
- 确认 `TRACEABILITY.md` 仍然将手稿表格和图表映射到最终的公开输出。
- 确认受控已处理文件校验和未更改,或者更新 `README.MD`、`MANIFEST.md`、`TRACEABILITY.md` 和 `data/processed/README.md` 中的校验和。
- 确认 `data/processed/public_anonymized_sample_1000.csv` 与其审计校验和匹配,并且仅包含匿名化的样本值。
- 确认 `data/processed/` 不包含完整的事件级防火墙 CSV,除非已获得机构公开发布授权。
- 确认其中不包含任何原始企业日志、手稿草稿、私人审查记录或本地凭据。
- 保持手稿的数据可用性声明与本代码仓的实际公开内容和受控数据边界保持一致。
## 许可证
本项目的代码和聚合输出工件基于 MIT 许可证(见 `LICENSE`)发布。公开的匿名 1,000 行样本作为 schema 检查和冒烟测试的有限可复现性辅助工具包含在内,而不是通用的基准数据集。原始完整的事件级已处理企业防火墙数据不受此许可证涵盖,并保持为受控访问的机构材料,如数据可用性部分所述。
标签:Apex, 可解释AI, 机器学习, 逆向工具, 防火墙策略