gautampatwa18/ATIARS
GitHub: gautampatwa18/ATIARS
ATIARS 是一个基于 Wazuh 和 FortiGate 的全自动化威胁情报分析系统,能够实时监控终端网络活动、多源情报评分并一键封禁恶意域名与 IP。
Stars: 0 | Forks: 0
# ATIARS — 自动化威胁情报与主动响应系统







## 什么是 ATIARS?
ATIARS 是一个完全自动化的网络安全 pipeline,能够实时监控 Windows 终端的 DNS 查询和出站网络连接,通过多个威胁情报平台分析所有观察到的域名和 IP 地址,并支持一键防火墙封禁——所有操作均在 10 秒内完成,无需人工调查。
该系统建立在 **Wazuh SIEM** 和 **Microsoft Sysmon** 之上,使用 **7 个威胁情报 API** 动态评估威胁,生成专业的 **PDF 报告**,并与 **FortiGate 防火墙** 集成以实现自动封禁。
## 解决的问题
| 未使用 ATIARS | 使用 ATIARS |
|----------------|-------------|
| 每个域名需人工查询 15–30 分钟 | 跨 7 个 API 自动化查询仅需 5–8 秒 |
| 分析师需手动核查 5 个以上平台 | 发送包含 PDF 的单一综合警报邮件 |
| 当攻击者更换服务器时,基于 IP 的封禁会失效 | FQDN 封禁在 IP 轮换后依然有效 |
| SIEM 与防火墙之间没有桥梁 | 通过邮件实现一键 FortiGate 封禁 |
| 数百个事件导致警报疲劳 | 仅 MEDIUM(中危)及以上威胁才会触发警报 |
## 架构概述
```
Windows Endpoint (Sysmon)
│
│ Sysmon Event ID 22 (DNS Query)
│ Sysmon Event ID 3 (Network Connection)
▼
Wazuh Agent → Wazuh Manager (port 1514)
│
│ Rule 61650 / 100201 fires
│ Active Response triggered
▼
Bash AR Scripts (auto_reputation_dns / auto_reputation_network)
│
│ Domain / IP extracted + filtered
▼
Python Analysis Engine (auto_reputation.py)
│
├──► domain_analysis.py → 7 APIs queried → Dynamic Score → PDF → Email
│
└──► ip_analysis.py → 4 APIs queried → Dynamic Score → Email
│
▼
Flask Approval Server (port 5002)
│
│ Analyst clicks BLOCK in email
▼
FortiGate REST API
│
├──► FQDN address object (for domains)
└──► ipmask /32 object (for IPs)
│
▼
Kavayah-BlockList group → Deny Policy enforced
```
## 四层 Pipeline
### 第一层 — 检测
- **Microsoft Sysmon** 运行在 Windows 终端上
- **Event ID 22** 捕获每一次 DNS 查询(域名、进程、用户)
- **Event ID 3** 捕获每一次出站网络连接(目标 IP、端口、进程)
- **Wazuh Agent** 从 Windows Event Log 读取 Sysmon 事件并将其转发给 manager
### 第二层 — 分析
- **Wazuh 规则引擎**匹配规则 61650 (DNS) 和 100201 (网络)
- **Active Response** 在 manager 上执行 bash 脚本 (`location=server`)
- Bash 脚本提取域名/IP,应用预过滤,调用 Python
- Python 同时查询 7 个威胁情报 API
- **动态 TIP 评分引擎**计算 0–100 的综合分数
### 第三层 — 报告与决策
- 如果分数 ≥ 25 (MEDIUM):生成 PDF 报告,发送警报邮件
- 邮件包含风险详情、agent 名称、分数明细以及两个按钮
- **BLOCK** (封禁) 按钮 → 一次性 HMAC-SHA256 签名批准链接
- **IGNORE** (忽略) 按钮 → 将 token 标记为已使用,不对防火墙进行更改
### 第四层 — 响应
- Flask 服务器(端口 5002)接收分析师的点击
- 验证 token(一次性使用,24小时过期)
- 调用 FortiGate REST API 创建地址对象
- 添加到封禁组 → 由已存在的 deny 策略强制执行
## 动态 TIP 评分引擎
与静态评分(每次检测给予固定分数)不同,ATIARS 评估了反映每个信号实际质量和置信度的 10 项因素。
| 因素 | 来源 | 最高分 |
|--------|--------|-----------|
| VT 检出率 | VirusTotal | 40 |
| 威胁类别乘数 | VirusTotal | 15 |
| 域名年龄惩罚 | VirusTotal | 15 |
| OTX Pulse 时效性 | AlienVault OTX | 30 |
| OTX 恶意软件样本 | AlienVault OTX | 12 |
| AbuseIPDB 置信度 + 数量 | AbuseIPDB | 15 |
| URLScan 实际分数 | URLScan.io | 8 |
| Shodan CVE 严重性 | Shodan | 15 |
| GreyNoise 分类 | GreyNoise | ±15 |
| 来源趋同奖励 | 所有来源 | 5 |
**风险阈值:**
| 分数 | 风险等级 | 发送警报 |
|-------|-----------|-----------|
| 0 | CLEAN (无风险) | 否 |
| 1 – 24 | LOW (低危) | 否 |
| 25 – 49 | MEDIUM (中危) | 是 |
| 50 – 74 | HIGH (高危) | 是 |
| 75 – 100 | CRITICAL (严重) | 是 |
## 使用的威胁情报 API
| 平台 | 提供的内容 |
|----------|-----------------|
| VirusTotal | 94 引擎域名/IP 扫描、检出率、域名年龄、SSL 证书 |
| AlienVault OTX | 带有时间戳的社区威胁 pulse、关联的恶意软件样本 |
| AbuseIPDB | 社区 IP 滥用报告、置信度分数、报告数量 |
| URLScan.io | 基于浏览器并带有数字评分的历史扫描记录 |
| Shodan | 解析 IP 上的开放端口、CVE 及其 CVSS 严重性 |
| GreyNoise | 互联网噪音分类 — 恶意 / 良性 / RIOT |
| IPInfo | 地理位置、ASN、组织、hostname |
## FQDN 封禁与 IP 封禁的对比
**为什么针对域名的 FQDN 封禁更好:**
- FortiGate 创建一个域名地址对象
- FortiGate 会自行定期解析该域名
- 该域名当前解析到的所有 IP 都将被自动封禁
- 如果攻击者转移到新的服务器,封禁仍然有效
- 托管更改时无需手动更新
**IP 封禁**用于直接 IP 连接(Event ID 3 / 不涉及 DNS):
- 针对特定 IP 创建一个 ipmask /32 地址对象
## Token 安全性
每封警报邮件包含两个一次性批准链接:
- 使用 **HMAC-SHA256** 生成 — 没有服务器密钥就无法伪造
- **单次使用** — 点击 BLOCK 会将 token 标记为已使用;第二次点击将被拒绝
- **24小时过期** — 旧的邮件链接会自动失效
- **持久化到磁盘** — 待处理的批准在 Flask 服务器重启后依然保留
- **受信任的主机** — FortiGate API token 被限制为仅允许 Wazuh 服务器 IP 访问
## 预过滤器(杜绝误报噪音)
在进行任何 API 查询之前,bash 脚本会静默丢弃:
- 单标签 hostname:`wpad`、`isatap`、机器 hostname
- 内部 TLD:`.local`、`.lan`、`.arpa`、`.internal`、`.corp`
- 已知安全的域名:`microsoft.com`、`google.com`、`cloudflare.com`、`azure.com` 及其他
- 私有 IP 范围:`10.x`、`192.168.x`、`172.16.x`、`127.x`、`169.254.x`
## 项目文件结构
```
ATIARS/
│
├── auto_reputation.py # Entry point — routes IP vs domain
├── fortigate_block_approver.py # Flask server + FortiGate API + token system
├── fortigate_setup.py # One-time FortiGate initialisation
├── requirements.txt # Python dependencies
├── .env.example # Environment variable template
├── .gitignore
│
├── tools/
│ └── analysis/
│ ├── domain_analysis.py # Domain intel + PDF + email
│ ├── ip_analysis.py # IP intel + email
│ └── process_tracer.py # Attack chain reconstruction
│
├── active-response/
│ ├── auto_reputation_dns # Bash script — Sysmon Event 22
│ └── auto_reputation_network # Bash script — Sysmon Event 3
│
├── wazuh-config/
│ ├── local_rules.xml # Wazuh custom rules 61650 + 100201
│ └── ossec_conf_snippet.xml # Active response config blocks
│
└── systemd/
└── kavayah-flask.service # Systemd service for Flask auto-start
```
## 技术栈
| 组件 | 技术 |
|-----------|-----------|
| SIEM | Wazuh 4.x |
| 终端监控 | Microsoft Sysmon |
| 服务器操作系统 | Ubuntu 24.04 LTS |
| 终端操作系统 | Windows 10 |
| 防火墙 | FortiGate v7.4.x |
| 编程语言 | Python 3.12 |
| PDF 生成 | ReportLab |
| Web 框架 | Flask |
| HTTP Client | Requests |
| 进程管理器 | systemd |
## 快速设置
```
# 克隆仓库
git clone https://github.com/yourusername/ATIARS.git
cd ATIARS
# 创建虚拟环境并安装依赖
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
# 配置环境
cp .env.example .env
nano .env # fill in your API keys and settings
# 运行 FortiGate 一次性设置
python3 fortigate_setup.py
# 启动 Flask 审批服务器
python3 fortigate_block_approver.py --server
# 手动测试 pipeline
python3 auto_reputation.py chemsentinel.com
```
## 测试
```
# 测试 FortiGate API 连通性
python3 fortigate_block_approver.py --test-auth
# 手动测试 domain 分析
python3 auto_reputation.py chemsentinel.com
# 手动测试 IP 分析
python3 auto_reputation.py 45.33.32.156
# 检查 Flask 服务器健康状况
curl http://192.168.50.12:5002/health
```
## 免责声明
本项目仅供教育和授权的安全研究目的使用。仅在您拥有或获得明确监控权限的网络和系统上进行部署。在部署前,请确保遵守适用的法律和组织政策。
## 开源许可
MIT License — 详情请参阅 LICENSE 文件。
标签:IP 地址批量处理, Wazuh, 应用安全, 网络安全, 自动化响应, 自动化威胁情报, 防火墙集成, 隐私保护