Gnx80s/Week_11_Project

GitHub: Gnx80s/Week_11_Project

一个基于 Python 的 IR 自动化演示平台,利用 Telegram 机器人实现威胁情报摄取、包捕获、剧本响应与可视化报告。

Stars: 0 | Forks: 0

# IR自动化 IR自动化是一个轻量级的事件响应自动化演示平台,结合了以下功能: - 外部威胁情报摄取 - 本地事件收集 - 实时数据包捕获 - 事件解析与验证 - 基于剧本的响应动作 - 高严重性事件的Telegram告警 - 用于远程IR操作的Telegram命令机器人 - 基于运行的数据报告、CSV导出和可视化图表 ## 功能 - 从AlienVault OTX和AbuseIPDB获取外部事件 - 从示例数据、观察列表IP和事件历史加载本地事件 - 为可配置的监控窗口捕获实时数据包 - 将被阻止IP的数据包命中转换为`blocked_ip_contact`事件 - 合并数据包事件与数据源和本地事件 - 在响应处理前解析、验证并去重事件 - 按事件类型运行事件响应剧本 - 模拟安全响应动作,如阻止IP和隔离文件 - 启用时发送Telegram告警 - 支持Telegram命令,用于状态、报告、数据包统计、被阻止IP管理和启动一次IR运行 - 为终端和Telegram触发的运行提供可重用的`run_ir_pipeline()`函数 - 以JSON和CSV格式维护事件历史 - 将日志、事件报告、摘要、处理后的JSON/CSV和图表写入带时间戳的运行文件夹 ## 流水线流程 主编排脚本按以下顺序运行: 1. 创建带时间戳的运行文件夹 2. 获取外部和本地事件 3. 默认情况下捕获15秒的实时数据包 4. 将数据包事件与数据源和本地事件合并 5. 解析、验证并去重事件 6. 运行IR引擎 7. 写入报告、图表和JSON/CSV导出 相同的流程封装在`app.main.run_ir_pipeline()`中,因此终端应用和Telegram的`/start_ir`命令运行相同的流水线逻辑。 ## 实时数据包捕获系统 - 数据包捕获通过`.env`设置控制: - `PACKET_CAPTURE_ENABLED` - `PACKET_CAPTURE_DURATION` - `PACKET_CAPTURE_LIMIT` - `PACKET_CAPTURE_FILTER` - `PACKET_CAPTURE_INTERFACE` - `BLOCKED_IPS_PATH` - 捕获成功时,数据包工件存储在每个运行文件夹中。 - 数据包捕获报告包括: - 捕获的数据包总数 - 被阻止IP命中数 - 目标IP排名 - 被阻止目标IP排名 - 协议分布 - 当数据包的目标IP匹配被阻止IP列表时,该数据包会成为一个事件。 在macOS和Linux上,实时数据包捕获可能需要提升权限: ``` sudo python3 -m app.main ``` ## API设置 ### AlienVault OTX - 访问:https://otx.alienvault.com - 创建账户 - 打开设置 - 复制你的API密钥 ### AbuseIPDB - 访问:https://www.abuseipdb.com - 创建账户 - 打开API设置 - 生成API密钥 ### 3. Telegram机器人告警 - 打开Telegram并使用BotFather创建机器人 - 复制机器人令牌 - 获取应接收告警的聊天ID - 将允许的Telegram用户作为逗号分隔的聊天ID添加到`ALLOWED_CHAT_IDS` - 当希望发送Telegram告警时,设置`TELEGRAM_ENABLED=true` ### 4. 创建`.env` ``` TELEGRAM_BOT_TOKEN=your_bot_token_here TELEGRAM_CHAT_ID=your_chat_id_here TELEGRAM_ENABLED=true TELEGRAM_COMMANDS_ENABLED=true ALLOWED_CHAT_IDS=123456789,987654321 OTX_API_KEY=your_otx_key_here ABUSEIPDB_API_KEY=your_abuseipdb_key_here ABUSEIPDB_TEST_IP=8.8.8.8 MAX_EXTERNAL_INCIDENTS=5 DEDUP_MINUTES=10 BRUTE_FORCE_REPEAT_THRESHOLD=3 LOCAL_TRAFFIC_MONITOR_ENABLED=true TRAFFIC_MONITOR_INTERVAL=5 TRAFFIC_MONITOR_SNAPSHOTS=3 BLOCKED_IP_ALERT_COOLDOWN=300 PACKET_CAPTURE_ENABLED=true PACKET_CAPTURE_DURATION=15 PACKET_CAPTURE_LIMIT=300 PACKET_CAPTURE_FILTER=ip PACKET_CAPTURE_INTERFACE= BLOCKED_IPS_PATH=data/blocked_ips.txt ``` ## 要求 - Python 3.8或更高版本 - 用于实时API获取的互联网连接 - 用于实时嗅探的数据包捕获权限 - 如果启用告警,需要Telegram机器人令牌和聊天ID - CSV支持不需要额外依赖,因为它使用Python标准库 ## 安装 ### 1. 克隆或打开项目文件夹 ``` cd "Week 11 Project/Codes" ``` ### 2. 创建虚拟环境 ``` python3 -m venv .venv source .venv/bin/activate ``` ### 3. 安装依赖 ``` pip install -r requirements.txt ``` ## 用法 从终端运行主编排脚本: ``` sudo python3 -m app.main ``` 如果操作系统需要,请在实时数据包捕获时使用提升权限: ``` sudo python3 -m app.main ``` 运行Telegram命令机器人: ``` sudo python3 -m app.telegram_bot ``` 仅当希望`/start_ir`在机器人内部执行实时数据包捕获且操作系统需要提升的捕获权限时,才使用`sudo`运行Telegram机器人。 ## Telegram命令机器人 Telegram命令机器人使用持久的回复键盘界面,并通过Telegram Bot HTTP API进行简单的长轮询。它仅响应`ALLOWED_CHAT_IDS`中列出的聊天ID。所有者`TELEGRAM_CHAT_ID`也会自动被允许以保持向后兼容。 主菜单: - `状态` - `统计` - `数据包统计` - `被阻止IP` - `运行IR` - `报告` - `取消` 被阻止IP子菜单: - `查看列表` - `添加IP` - `移除IP` - `返回` 报告子菜单: - `图表` - `最新图表` - `下载报告` - `返回` 支持的命令: - `/help` - 显示支持的命令 - `/status` - 显示系统状态 - `/blockedips` - 列出被阻止的IP - `/blockip` - 启动引导式被阻止IP添加流程 - `/blockip ` - 直接添加被阻止IP - `/unblockip` - 启动引导式被阻止IP移除流程 - `/unblockip ` - 直接移除被阻止IP - `/cancel` - 取消活跃的引导式流程 - `/recent` - 显示最近事件 - `/lastreport` - 显示最新运行摘要 - `/start_ir` - 运行一次IR流水线 - `/stats` - 显示快速事件统计 - `/packetstats` - 显示最新的数据包捕获统计 - `/charts` - 列出最新运行可用的图表类型 - `/chart ` - 发送一张图表图片 - `/latestcharts` - 发送关键图表 - `/downloadreport` - 压缩并发送最新的运行文件夹 图表关键词: - `incidents`(事件) - `severity`(严重性) - `actions`(动作) - `top_ips`(顶级IP) - `blocked_hits`(被阻止命中) - `processes`(进程) - `packet_destinations`(数据包目标) - `packet_protocols`(数据包协议) `/start_ir`命令在流水线运行时发送进度更新:

正在运行IR流水线...

获取威胁情报...

分析流量...

处理事件...

生成报告...

生成图表...

然后返回一个简短的完成摘要并在可用时发送关键图表:


IR流水线完成

- 已处理事件:7

- 数据包捕获:已启用

- 被阻止IP命中:3

- 运行文件夹:run_YYYYMMDD_HHMMSS

- 生成的图表:6

示例命令回复:


IR自动化状态

- 机器人在线:ON

- Telegram告警:ON

- Telegram命令:ON

- 数据包捕获:ON

- 流量监控:ON

- 被阻止IP:12

- 事件历史条目:34


IR快速统计

- 总事件数:34

- 严重性:high=10, medium=14, low=8, critical=2

- 类型:blocked_ip_contact=12, malicious_ip=7, brute_force=9

- 被阻止IP:12

## 使用方法

- 在`data/sample_incidents.json`中添加本地示例事件
- 在`data/watchlist_ips.txt`中添加观察列表IP
- 在`data/blocked_ips.txt`中添加被阻止IP
- 在`.env`中配置API密钥和运行时设置
- 运行流水线
- 在`reports/`中查看最新的文件夹
- 检查生成的实例报告、摘要文件、处理后的JSON/CSV、图表和运行日志

## 事件类型

支持的事件类型:

- `malicious_ip`(恶意IP)
- `brute_force`(暴力破解)
- `port_scan`(端口扫描)
- `suspicious_file`(可疑文件)
- `blocked_ip_contact`(被阻止IP接触)

支持的严重性:

- `low`(低)
- `medium`(中)
- `high`(高)
- `critical`(严重)

## 项目结构


Week11_Project/

├── app/

│   ├── config.py

│   ├── engine.py

│   ├── logger.py

│   ├── main.py

│   ├── notifier.py

│   ├── parser.py

│   ├── playbook_manager.py

│   ├── responder.py

│   ├── run_context.py

│   ├── telegram_bot.py

│   ├── utils.py

│   └── validator.py

|

├── incident_sources/

│   ├── external_feed_loader.py

│   ├── local_packet_capture.py

│   ├── local_source_loader.py

│   ├── local_traffic_monitor.py

│   └── source_manager.py

|

├── playbooks/

│   ├── blocked_ip_contact.json

│   ├── brute_force.json

│   ├── malicious_ip.json

│   ├── port_scan.json

│   └── suspicious_file.json

|

├── data/

│   ├── blocked_ips.txt

│   ├── incident_history.csv

│   ├── incident_history.json

│   ├── quarantined_files.txt

│   ├── sample_incidents.json

│   └── watchlist_ips.txt

|

├── reports/

├── .env

├── README.md

└── requirements.txt

## 预期控制台输出


======================================================================

IR自动化引擎启动

======================================================================

[INFO] 开始实时数据包捕获窗口(15秒)...



事件ID:IR-2026-SAMPLE-001

类型:brute_force

严重性:high

状态:resolved

采取的操作:



- 事件 IR-2026-SAMPLE-001 已保存到历史记录

- IP已被阻止:192.168.1.55

- 已更新事件 IR-2026-SAMPLE-001 的报告

Telegram告警结果:Telegram发送成功:message_id=123

======================================================================

已创建运行文件夹:reports/run_YYYYMMDD_HHMMSS

事件报告:reports/run_YYYYMMDD_HHMMSS/incident_report.txt

摘要JSON:reports/run_YYYYMMDD_HHMMSS/run_summary.json

处理后的事件JSON:reports/run_YYYYMMDD_HHMMSS/processed_incidents.json

处理后的事件CSV:reports/run_YYYYMMDD_HHMMSS/processed_incidents.csv

图表文件夹:reports/run_YYYYMMDD_HHMMSS/charts

运行日志:reports/run_YYYYMMDD_HHMMSS/ir_engine.log

处理的事件总数:1

### 输出产物

执行后,系统生成:

- `incident_report.txt`
- `run_summary.txt`
- `run_summary.json`
- `processed_incidents.json`
- `processed_incidents.csv`
- `ir_engine.log`
- `charts/` 目录下的图表图片
- 数据包捕获成功时的数据包捕获JSON和文本报告
- 数据包捕获成功时的 `packet_capture_summary.json`
- 数据包捕获成功时的 `packet_capture_report.txt`
- 仅当Telegram命令出错时,`reports/telegram_bot.log`
- 仅当可重用的流水线在运行文件夹完成前失败时,`reports/ir_pipeline_error.log`

长期事件历史保存在:

- `data/incident_history.json`
- `data/incident_history.csv`

## 说明

- `block_ip` 通过将IP写入 `data/blocked_ips.txt` 模拟。
- `quarantine_file` 通过将文件路径写入 `data/quarantined_files.txt` 模拟。
- 仅对高或严重事件发送Telegram告警。
- 仅当 `TELEGRAM_COMMANDS_ENABLED=true` 时启用Telegram命令。
- Telegram命令仅响应 `ALLOWED_CHAT_IDS` 中的批准聊天ID。
- 添加多个Telegram用户,使用逗号分隔的聊天ID,然后重启机器人。
- `/start_ir` 直接调用 `run_ir_pipeline()` 而非启动子进程。
- JSON是主要的结构化事件格式;CSV用于分析和更简单的导出。
- 每个时间戳的运行日志以 `ir_engine.log` 形式写入各自的报告文件夹。
- 项目不再创建或写入单独的根 `logs/` 文件夹。
- 外部API加载器在密钥缺失时安全跳过。
- 如果当前终端没有嗅探权限,数据包捕获会安全报告错误。

## 免责声明

IR自动化仅严格用于教育和防御性网络安全目的。

本项目旨在演示事件摄取、响应剧本、告警、数据包捕获、报告和安全分析工作流,在受控且合法的环境中。

您不得使用本项目:

- 执行未经授权的扫描或拦截
- 针对您不拥有或未经明确许可测试的系统
- 进行任何恶意活动
- 违反适用法律、法规或组织策略

威胁情报数据可能不完整、陈旧或不准确。本系统生成的告警和检测不应被视为权威性,而应在验证后使用。

作者以原样提供本项目,不提供任何形式的保证,并对误用、损害或法律后果不承担任何责任。

使用本项目即表示您同意负责任地、道德地仅在授权环境中使用它。
标签:AbuseIPDB, AMSI绕过, ETW劫持, FTP漏洞扫描, Homebrew安装, IP封锁, JSON存储, Playbook响应, Telegram Bot, 事件响应自动化, 去重验证, 告警通知, 命令控制, 图表分析, 外部威胁情报, 威胁检测, 安全分析平台, 安全编排, 开源安全工具, 数据采集, 文件隔离, 日志记录, 时间戳化存储, 管道编排, 终端应用, 网络安全, 自动化响应, 自动化运维, 逆向工具, 逆向工程平台, 隐私保护