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绕过, 算法实现, 系统调用监控, 网络威胁情报, 网络安全, 自主智能体, 自定义分词器, 逆向工具, 隐私保护, 领域专用模型