tanmacs/cyber-transformer-rag

GitHub: tanmacs/cyber-transformer-rag

从零构建网络安全领域专用 Transformer 与 RAG 管线,配合自研 IOC 感知分词器,确保 CVE、IP、哈希等安全指标在分词过程中完整保留,提升安全文本理解的准确性。

Stars: 0 | Forks: 0

<<<<<<< HEAD # 自定义网络安全 IOC 分词器 **面向网络安全文本的领域专用 BPE 分词器** 一个专为网络安全文本设计的领域分词器,它将关键的安全指标 (IOC) 作为原子的、不可拆分的 token 进行保留。使下游模型能够维护诸如 CVE ID、IP 地址、文件路径和加密哈希等网络安全制品的完整性。 ## 📋 概述 ### 问题 标准分词器(如 GPT-2 或基础 BPE)在分词过程中会拆分关键的网络安全指标,导致: - `CVE-2023-36884` → `['CVE', '-20', '23', '-36', '884']` ❌ - `192.168.1.1` → `['192', '.', '168', '.1', '.1']` ❌ - `d41d8cd98f...` → 多个片段 ❌ 这破坏了对安全分析至关重要的结构信息。 ### 解决方案 对以下内容进行**原子分词**: - ✅ CVE ID:`CVE-YYYY-NNNNN[N[N]]` - ✅ IPv4/IPv6 地址:完整 IP 范围 - ✅ 加密哈希:SHA-256, SHA-1, MD5 - ✅ 文件路径:Windows (`C:\...`) 和 Unix (`/...`) - ✅ 十六进制字符串:`0xDEADBEEF` 偏移量 - ✅ 域名:安全 TLD (`.onion`, `.gov` 等) - ✅ 端口:`:443`, `:8080` 等 ## 🗂️ 项目结构 ``` tokenizer/ ├── pretokenizer.py # Step 1: Regex IOC patterns & validation ├── train_tokenizer.py # Step 2: BPE training pipeline ├── preprocess.py # Step 3: Pre-processing interface ├── validate_tokenizer.py # Comprehensive test suite ├── tokenizer.json # ✅ DELIVERABLE: Trained tokenizer ├── validation_report.json # ✅ DELIVERABLE: Test results (JSON) ├── validation_report.html # ✅ DELIVERABLE: Test results (HTML) └── README.md # This file ``` ## 📦 交付物 ### 1. **tokenizer.json** 训练好的 Byte-Level BPE 分词器,具有以下特性: - 555 个词汇 token(从 1 万份网络安全文档中学习获得) - 4 个特殊 token:`<|endoftext|>`,`<|context|>`,`<|query|>`,`<|answer|>` - 预分词器:基于空白字符并具备 IOC 感知能力 - 后处理器:用于结构化文本的基于模板的处理 **文件大小:** ~25 KB **用法:** ``` from tokenizers import Tokenizer tokenizer = Tokenizer.from_file("tokenizer.json") tokens = tokenizer.encode("text").tokens ``` ### 2. **validation_report.json** 全面的验证结果,显示: - 9 种 IOC 类型的 16 个测试用例 - 100% 通过率(16/16 测试通过) - 每个测试用例的 token 级别分析 - 词汇表存在性检查 **关键指标:** - CVE ID:3/3 保留 ✓ - IPv4:3/3 保留 ✓ - IPv6:1/1 保留 ✓ - SHA-256:1/1 保留 ✓ - MD5:1/1 保留 ✓ - Windows 路径:2/2 保留 ✓ - Unix 路径:2/2 保留 ✓ - 十六进制字符串:2/2 保留 ✓ - 域名:1/1 保留 ✓ ### 3. **validation_report.html** 可视化的 HTML 报告(在浏览器中打开),包含格式化的结果和汇总统计信息。 ### 4. **正则表达式预处理脚本 (preprocess.py)** 完整的预处理接口: ``` from preprocess import SwiftSafeTokenizer tokenizer = SwiftSafeTokenizer("tokenizer.json") # 在保留 IOC 的情况下进行 Tokenize tokens = tokenizer.tokenize( "Malware at 192.168.1.1 with hash d41d8cd98f00b204e9800998ecf8427e" ) # 返回:['Malware', 'at', '192.168.1.1', 'with', 'hash', # 'd41d8cd98f00b204e9800998ecf8427e'] # 包含类型信息 results = tokenizer.tokenize_text_with_types(text) # 每个 token 包含类型:'CVE_ID', 'IPV4', 'MD5', 'text' 等。 ``` ## 🚀 快速开始 ### 安装 ``` cd tokenizer/ pip install tokenizers # Required dependency ``` ### 基本用法 ``` # 加载 tokenizer from tokenizers import Tokenizer tokenizer = Tokenizer.from_file("tokenizer.json") # 编码文本 text = "Patch CVE-2023-36884 affecting 192.168.1.1" tokens = tokenizer.encode(text).tokens print(tokens) # ['Patch', 'CVE-2023-36884', 'affecting', '192.168.1.1'] # 访问 special tokens print(tokenizer.token_to_id("<|system|>")) # 0 print(tokenizer.token_to_id("<|query|>")) # 2 ``` ### 使用预处理脚本 ``` # 从命令行 Tokenize 文本 python preprocess.py "Host 10.0.0.55 compromised." --types # 从文件 Tokenize python preprocess.py --file security_logs.txt # 或者在 Python 中 from preprocess import SwiftSafeTokenizer tokenizer = SwiftSafeTokenizer() tokens = tokenizer.tokenize("text") ``` ### 验证 ``` # 运行完整验证套件 python validate_tokenizer.py # 输出:16/16 测试通过 ✓ ``` ## 🔍 正则表达式模式 所有 IOC 模式都在 `pretokenizer.py` 中定义,并强制执行原子分词: | 模式 | 示例 | 正则表达式 | |---------|---------|-------| | **CVE ID** | `CVE-2024-12345` | `CVE-\d{4}-\d{4,7}` | | **IPv4** | `192.168.1.1` | 严格的八位组验证 (0-255) | | **IPv6** | `2001:0db8::1` | 完整 + 压缩形式 | | **SHA-256** | 64 个十六进制字符 | `\b[0-9a-fA-F]{64}\b` | | **MD5** | 32 个十六进制字符 | `\b[0-9a-fA-F]{32}\b` | | **SHA-1** | 40 个十六进制字符 | `\b[0-9a-fA-F]{40}\b` | | **Win 路径** | `C:\Users\...` | `[A-Za-z]:\\...` 排除空格 | | **Unix 路径** | `/usr/bin/...` | `(? - id=0 - System/context boundaries <|context|> - id=1 - IOC context snippets <|query|> - id=2 - Query/search markers <|endoftext|> - id=3 - Sequence terminator ``` 用法示例: ``` <|system|> Analyze <|context|> CVE-2023-36884 <|query|> patch status <|endoftext|> ``` ## ⚙️ 技术细节 ### 分词器规格 - **类型:** Byte-Level BPE (Byte Pair Encoding) - **词汇表大小:** 555 个子词单元 + 4 个特殊 token - **预分词器:** 基于空白字符 - **后处理器:** 基于模板的 TemplateProcessing - **训练数据:** 10,000 份合成网络安全文档 - **编码:** UTF-8 ### IOC 保留策略 使用一个**后处理安全层**: 1. 使用正则表达式扫描文本输入以查找 IOC 模式 2. 在分词期间将 IOC 标记为边界 3. 编码器遵守这些边界,原子性地保留 IOC 4. 子词片段仅应用于非 IOC 文本 ### 词汇表统计 - 单字节 token:~256 - 常见词汇:security,malware,access,data 等 - IOC 模式:在频率允许的情况下作为完整单元学习 - 特殊 token:4 个保留 token ## 📝 示例工作流 ### 工作流 1:安全日志 ``` from preprocess import SwiftSafeTokenizer tokenizer = SwiftSafeTokenizer("tokenizer.json") log = "Intrusion detected at 10.0.0.55 (hash: d41d8cd...)" tokens = tokenizer.tokenize(log) # 即使在大型 token 流中,IOC 也能被保留 ``` ### 工作流 2:CVE 分析 ``` text = """ CVE-2023-36884 affects Windows systems. Patch available for C:\Windows\System32\cmd.exe SHA-256: 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08 """ results = tokenizer.tokenize_text_with_types(text) for item in results: if 'IOC' in item['type']: print(f"Found {item['type']}: {item['token']}") ``` ### 工作流 3:与模型集成 ``` # 用于 LLM fine-tuning tokenizer = SwiftSafeTokenizer("tokenizer.json") examples = [ "Patch CVE-2023-36884 on 192.168.1.1", "File /etc/passwd compromised", ] for text in examples: tokens = tokenizer.tokenize(text) token_ids = [tokenizer.tokenizer.token_to_id(t) for t in tokens] # Pass token_ids to LLM for embeddings ``` ## 🧪 测试 ### 运行预分词器测试 ``` python pretokenizer.py # Runs 14 validation tests python pretokenizer.py --verbose # Show all token splits ``` ### 训练分词器 ``` python train_tokenizer.py --vocab-size 32000 --output tokenizer.json --validate ``` ### 生成完整报告 ``` python validate_tokenizer.py # 生成:validation_report.json, validation_report.html ``` ## 📋 局限性与未来工作 ### 当前局限性 - 由于使用合成训练数据,词汇表较小(555 个 token) - 仅支持单行分词 - 某些复合 IOC 模式可能需要额外的正则表达式调整 ### 未来增强 1. 在更大的真实安全语料库上进行训练 2. 将词汇表增加到完整的 32,000 个 token 3. 为完全未知的序列添加字节回退机制 4. 与 transformers 库集成 5. 多语言 IOC 支持 6. 批处理的 GPU 加速 ## 📞 支持与文档 - **验证报告:** 详见 `validation_report.json` 获取详细测试结果 - **架构细节:** 详见各个模块的 docstrings - **CLI 帮助:** `python preprocess.py --help` ## 📜 许可证 SwiftSafe 网络安全分词器项目的一部分。 **状态:** ✅ 完成 **最后更新:** 2026-03-30 **验证:** 16/16 测试通过 (100%)
标签:BPE, CVE, DLL 劫持, IOC, IP地址, NLP安全应用, RAG, Tokenizer, Transformer, 人工智能, 加密哈希, 域名, 大语言模型, 失陷标示符, 安全大模型, 数字签名, 文本预处理, 检索增强生成, 用户模式Hook绕过, 算法实现, 系统调用监控, 网络威胁情报, 网络安全, 自主智能体, 自定义分词器, 逆向工具, 隐私保护, 领域专用模型