superham/ACI
GitHub: superham/ACI
基于 NLP 语义分析和公开情报数据对勒索软件团伙进行行为可信度量化评分的分析框架。
Stars: 1 | Forks: 0
# 攻击者可信度指数 (ACI)
**版本 1.1** | 由 Alex Kaariainen 创建
一个用于对勒索软件团伙进行行为可信度评分的定量框架。ACI 从公开来源收集运营数据,使用 NLP 提取行为信号,并基于三个行为轴(每个范围 0-1)得出每个团伙的可信度分数(ACI,0-10 分制)。专为需要评估威胁行为者的承诺和威胁究竟有多大可信度的事件响应人员、勒索谈判团队和威胁情报分析师而设计。
## ACI 衡量什么
分数基于三个轴进行计算(每个范围 0-1):
- **R(可靠性,Reliability)** -- 他们是否在收到付款后提供可用的解密器?衡量解密证明的提供率、密钥交付信号以及功能性付款到解密流程的证据。
- **T(威胁兑现,Threat Follow-Through)** -- 他们是否会将泄露威胁付诸行动?衡量实际发生被威胁的数据发布的比率,以及泄露威胁在谈判中出现的频率。
- **I(诚信度,Integrity)** -- 他们是否遵守付款后的承诺?反向衡量二次勒索行为、数据转售供认以及受害者对违背承诺的指控。
**综合得分:** `ACI = (0.4 x R + 0.3 x T + 0.3 x I) x 10`
ACI 越高 = 威胁行为者越可信(因此也越危险)。
**数据来源:** [ransomware.live](https://www.ransomware.live)(声明 + 谈判聊天记录),[ransomwhere.re](https://ransomwhe.re)(加密货币支付)
## 前置条件
- Python >= 3.10
- ransomware.live API 密钥(可在 获取)
- 在首次运行时,会自动下载 `all-MiniLM-L6-v2` sentence-transformer 模型(约 80 MB)。这需要 PyTorch,它会作为依赖项被安装。
## 安装
```
pip install -e ".[dev]" # editable install with test deps
export RLIVE_API_KEY="" # get one at https://www.ransomware.live/api
```
## 快速开始 -- 一条命令
```
# 完整 pipeline: 收集 -> 提取特征 -> 评分
aci run --since 2024-01-01
# 相同操作,但输出为 JSON
aci run --since 2024-01-01 --format json
# 复用之前收集的数据(跳过 API 调用)
aci run --skip-collect --format table
```
## 分步使用
```
# 1. 收集原始数据
aci collect --since 2024-01-01
# 2. 从谈判 chats 中提取语义特征
aci chat-features
# 3. 计算 ACI 分数
aci compute-aci
aci compute-aci --format table # print to terminal
aci compute-aci --format json --out reports/scores.json
aci compute-aci --by-year # year-by-year breakdown
aci compute-aci --as-of-year 2023 # cumulative up to 2023
```
## 查询单个团伙
```
aci query lockbit
aci query "black basta" --by-year
aci query conti --format json
```
## 输出格式
| 标志 | 描述 |
|------|-------------|
| `--format csv` | CSV 文件(默认) |
| `--format json` | JSON 记录数组 |
| `--format table` | 美观打印的终端表格 |
所有命令都使用合理的默认路径(`data/raw/`、`data/processed/`、`reports/`)。可根据需要使用 `--out`、`--claims`、`--chat-features`、`--payments` 进行覆盖。
## 工作原理
1. **收集** -- 从 ransomware.live API 拉取勒索软件受害者声明和完整的谈判聊天记录,以及来自 ransomwhere.re 的加密货币支付数据。原始数据以 JSONL 文件的形式保存在 `data/raw/` 中。
2. **提取特征** -- 使用 sentence-transformer 模型(`all-MiniLM-L6-v2`)对每条谈判聊天消息进行嵌入,并通过余弦相似度与手工制作的行为类别原型句子进行比较:解密证明提供、密钥交付、泄露威胁、删除承诺、二次勒索信号等。这会生成每个聊天的特征标志,并保存到 `data/processed/chat_features.csv`。
3. **评分** -- 将从聊天中得出的行为比率聚合到团伙级别,然后与声明级别统计(发布率、截止日期遵守情况)和支付数据相结合。三个轴分数(R、T、I)计算为其各组成部分的加权平均值,然后组合成最终的 ACI 综合分数。每个分数都包含一个置信度指标和一个低数据量标志。
## 评分方法
### 可靠性 (R)
加权平均值:
| 组件 | 权重 | 来源 | 描述 |
|-----------|--------|--------|-------------|
| `sample_offer_rate` | 0.4 | 聊天语义 | 该团伙提供免费测试解密的频率 |
| `key_delivery_rate` | 0.4 | 聊天语义 | 他们提及发送解密器/密钥的频率 |
| `has_payment_data` | 0.2 | ransomwhere.re | 是否存在已确认的付款(作为功能性支付流程的代理指标) |
### 威胁兑现 (T)
加权平均值:
| 组件 | 权重 | 来源 | 描述 |
|-----------|--------|--------|-------------|
| `publish_rate` | 0.5 | 声明数据 | 最终导致数据发布的声明所占比例 |
| `leak_threat_rate` | 0.5 | 聊天语义 | 泄露威胁在谈判聊天中出现的频率 |
| `on_time_publish_rate` | 0.2 | 声明数据 | 在规定截止日期或之前发布的加分项(如果有数据的话) |
### 诚信度 (I)
`I = 1 - bad_score`,其中 `bad_score` 是以下各项的加权平均值:
| 组件 | 权重 | 来源 | 描述 |
|-----------|--------|--------|-------------|
| `violation_claim_rate` | 0.4 | 聊天语义 | 受害者对违背承诺的指控 |
| `reextortion_behavior_rate` | 0.4 | 聊天语义 | 付款后二次勒索的信号 |
| `data_resale_admission_rate` | 0.2 | 聊天语义 | 承认出售或共享被盗数据 |
### 置信度
基于数据量的启发式置信度分数(0-1):
- **聊天置信度** -- 在每个团伙 10+ 次谈判聊天时达到饱和
- **声明置信度** -- 在每个团伙 50+ 份声明时达到饱和
- **组件覆盖率** -- R、T、I 中非 NaN 分量的比例
混合公式为:`confidence = 0.4 x chat_conf + 0.3 x claim_conf + 0.3 x coverage`
谈判聊天记录少于 2 次的团伙将被标记为 `low_data=1`。
所有计算都是 NaN 安全的:缺少的组件会被跳过,权重会在可用数据上重新进行归一化。
## Web 仪表盘
ACI 分数会发布到使用 React 构建的交互式 Web 仪表盘中。该仪表盘允许用户探索分数、按置信度进行筛选、深入查看单个团伙以及查看同比趋势。
### 月度数据流
GitHub Actions 工作流(`.github/workflows/monthly-update.yml`)在每月 1 日运行:
1. **收集** -- 从 API 获取最新的声明、谈判聊天记录和支付数据
2. **评分** -- 运行完整流水线(`aci web-export`)以生成 `dashboard.json`
3. **推送** -- 将更新后的 `dashboard.json` 提交到 `aci-web` 仓库的 `public/data/dashboard.json` 处
Web 仪表盘在运行时加载此静态 JSON 文件——无需后端 API。如果需要临时刷新,也可以通过 `workflow_dispatch` 手动触发该工作流。
### 导出命令
```
# 生成供 web frontend 使用的、适用于 dashboard 的 JSON
aci web-export --since 2020-01-01 --out dashboard.json
```
`--out` 路径默认为 `reports/dashboard.json`;每月的 GitHub Action 会将其覆盖,以便将 `dashboard.json` 写入仓库根目录,从而复制到 Web 仓库中。
导出时会应用包含标准(团伙需要具备 2 年以上的数据,且每年 1 份以上的谈判记录),因此仪表盘上只会出现记录足够详尽的团伙。输出内容包括概览统计、按团伙划分的 R/T/I 分解、年度趋势、置信度数据和结果指标。
## 数据流
```
ransomware.live API
/ \
v v
claims.jsonl negotiations.jsonl
| |
| sentence-transformers
| (all-MiniLM-L6-v2)
| |
| v
| chat_features.csv
| |
v v
+--------------------------------------+
| Feature Aggregation |<-- ransomwhere.jsonl <-- ransomwhere.re API
| (group-level rates) |
+------------------+-------------------+
|
v
+-------------------+
| ACI Scoring |
| R, T, I -> ACI |
+--------+----------+
|
+---------+---------+
| |
v v
reports/aci_scores.csv dashboard.json
|
(monthly GitHub Action)
|
v
aci-web/public/data/
dashboard.json
|
v
React web dashboard
```
## 项目结构
```
aci_tool/
├── cli.py # CLI entry point (6 subcommands)
├── config.py # API keys, default paths
├── schemas.py # Pydantic models: Claim, Payment, Negotiation
├── compute.py # Feature aggregation (chat/claims/payments -> group-level)
├── scoring.py # ACI scoring algorithm (R, T, I, confidence)
├── chat_semantic.py # Sentence-transformer feature extraction
├── web_export.py # Dashboard JSON generation for aci-web
├── utils.py # Shared helpers
├── collectors/
│ ├── ransomware_live.py # ransomware.live API client (claims)
│ ├── ransomwhere.py # ransomwhere.re API client (payments)
│ └── negotiations.py # Negotiation chat fetcher
└── prototypes/
└── chat_semantic_proto.py # Prototype sentences for semantic classification
```
## 开发
```
pip install -e ".[dev]"
pytest tests/ -v
```
测试覆盖了评分算法、特征聚合和语义提取模块。
## 许可证
本项目采用 MIT 许可证授权。详情请参见 [LICENSE](LICENSE)。
标签:API集成, Hugging Face, NLP, Python, PyTorch, sentence-transformers, 凭据扫描, 加密货币支付, 勒索软件, 勒索软件谈判, 可观测性, 威胁情报, 威胁猎杀, 安全评估框架, 开发者工具, 攻击者信誉评估, 无后门, 私有化部署, 网络威胁分析, 网络犯罪, 逆向工具, 防御规避