juanmcristobal/text2ioc
GitHub: juanmcristobal/text2ioc
从非结构化文本中自动提取各类失陷指标的Python库,覆盖IP、域名、哈希、CVE及MITRE ATT&CK ID等多种指标类型,内置启发式规则降低误报。
Stars: 1 | Forks: 0
# text2ioc
`text2ioc` 从非结构化文本(如文章、报告、日志和威胁情报笔记)中提取失陷指标。
从 PyPI 安装:
```
pip install text2ioc
```
## 用法
```
import json
from text2ioc.ioc import extract_iocs
text = (
"Download https://dpaste[.]com/9MQEJ6VYR.txt from 77.221.158[.]154, "
"contact ops[at]example.org, and review T1059.001 linked to TA0002."
)
iocs = extract_iocs(text)
print(json.dumps(iocs, indent=2))
```
预期输出:
```
{
"filepath": [],
"file": [],
"url": [
"https://dpaste[.]com/9MQEJ6VYR.txt"
],
"domain": [],
"email": [
"ops[at]example.org"
],
"ipv4": [
"77.221.158[.]154"
],
"ipv6": [],
"md5": [],
"sha1": [],
"sha256": [],
"cve": [],
"expressions": [],
"attack_technique_id": [
"T1059.001"
],
"attack_tactic_id": [
"TA0002"
],
"registry_key": [],
"cwe": [],
"ghsa": [],
"capec": []
}
```
## 字段语义
提取器优先使用正则表达式,然后通过明确的启发式规则移除误报。它不解析域名,不验证可达性,也不判断指标是否为恶意的。它仅返回与当前解析规则匹配的字符串。
- `filepath`:Unix、Windows、UNC 和相对路径。它会修剪末尾标点符号,保留带引号的路径,并丢弃没有扩展名的纯基本文件名、不像 Linux 根目录的路径,以及未出现在类路径上下文中的以斜杠开头的字符串。
- `file`:文件名和可疑扩展名,包括诸如 `cmd[dot]exe` 的去风险化形式。它排除了明显的域名、类版本号标记、`e.g` / `i.e`,以及看起来更像命名空间而不是文件的具有许多段的点分标识符。
- `url`:带有显式协议、可选端口和可选路径的 URL。它接受常规和去风险化分隔符,以及 IPv4 主机。它不保留格式错误的协议、格式错误的端口或没有协议的纯主机名。
- `domain`:纯域名、子域名、通配符域名、去风险化域名和 `.onion` 地址。它排除了具有无效或不支持的 TLD、文件扩展名、`README.md`、权限式名称、反向域名标识符、EC2 实例类型、Azure 命名空间、`ANY.RUN`、诸如 `EndpointRequest.to()` 的代码符号、标记/CMS 片段,以及当周围上下文看起来更像组织名称而非与网络相关时的法人实体字符串(如 `Co.LTD`)。
- `email`:标准和去风险化的电子邮件地址。域名部分必须以有效的 TLD 结尾,且不能看起来像文件扩展名。作为电子邮件一部分的类域名片段被刻意不在 `domain` 下重复生成。
- `ipv4`:标准和去风险化的 IPv4 地址。它排除了无效的八位字节、部分四元组和在咨询/产品上下文中的类版本号四元组,包括带有前导零八位字节的情况(如 `16.03.08.12`)或带有括号括起构建后缀的情况(如 `1.2.0.14(408)`)。
- `ipv6`:标准和压缩的 IPv6 形式,如 `::1` 和 `2001:db8::1`。它排除了具有无效十六进制组或无效双重压缩的格式错误地址。
- `md5`:刚好 32 个十六进制字符。
- `sha1`:刚好 40 个十六进制字符。
- `sha256`:刚好 64 个十六进制字符。
- `cve`:匹配 `CVE-YYYY-NNNN...` 的标记。
- `expressions`:`${...}` 形式的类模板表达式。
- `attack_technique_id`:MITRE ATT&CK 技术 ID,如 `T1059` 或 `T1059.001`。它不会从 ATT&CK URL 路径(如 `/T1059/001/`)中合成 ID。
- `attack_tactic_id`:MITRE ATT&CK 战术 ID,如 `TA0001`。
- `registry_key`:以已知配置单元(如 `HKLM`、`HKCU` 或 `HKEY_LOCAL_MACHINE`)为根,并包含一个或多个子键的 Windows 注册表路径。它避免误捕获尾部的命令参数。
- `cwe`:匹配 `CWE-N` 的标记。
- `ghsa`:GitHub 安全公告 ID,如 `GHSA-v63m-x9r9-8gqp`。
- `capec`:匹配 `CAPEC-N` 的标记。
目前已编码实现的常规过滤规则:
- 对结果进行去重处理,并丢弃完全包含在较长匹配中的较短匹配。
- 提取器使用公共后缀列表进行域名和电子邮件 TLD 验证,并在后缀列表无法获取或解析时提供内置的备用集合。
- 对于 `domain`,如果混合出现去风险化/常规候选域名,代码会保留显式类似域名的候选项,并避免重新生成噪声片段。
## 支持与联系
* ⭐ 如果您觉得它有用,请**给本仓库加星**
* ☕ **支持我:** 请我喝杯咖啡以表感谢
* 💼 **开放合作:** [https://www.linkedin.com/in/jmcristobal/](https://www.linkedin.com/in/jmcristobal/)
标签:DNS解析, IOC提取, pip包, Python, 失陷标示器, 威胁情报, 开发者工具, 开源项目, 情报处理, 数据解析, 文本分析, 无后门, 沙箱逃逸分析, 网络安全, 自动化提取, 逆向工具, 防御框架, 隐私保护