gautampatwa18/ATIARS

GitHub: gautampatwa18/ATIARS

ATIARS 是一个基于 Wazuh 和 FortiGate 的全自动化威胁情报分析系统,能够实时监控终端网络活动、多源情报评分并一键封禁恶意域名与 IP。

Stars: 0 | Forks: 0

# ATIARS — 自动化威胁情报与主动响应系统 ![Python](https://img.shields.io/badge/Python-3.12-blue) ![Wazuh](https://img.shields.io/badge/Wazuh-4.x-red) ![FortiGate](https://img.shields.io/badge/FortiGate-v7.4-orange) ![Flask](https://img.shields.io/badge/Flask-3.0-black?logo=flask) ![APIs](https://img.shields.io/badge/Threat_Intel_APIs-7-blueviolet) ![Status](https://img.shields.io/badge/Status-Active-brightgreen) ![License](https://img.shields.io/badge/License-MIT-green) ## 什么是 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, 应用安全, 网络安全, 自动化响应, 自动化威胁情报, 防火墙集成, 隐私保护