# SentinelBlue
**Repository Path**: uniomo/SentinelBlue
## Basic Information
- **Project Name**: SentinelBlue
- **Description**: SentinelBlue · 蓝鲸之眼
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-10-07
- **Last Updated**: 2026-10-07
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# SentinelBlue
## 蓝方实时威胁监测与自动化响应平台
> 当警报响起,蓝方最宝贵的不是工具,而是**时间线**。
> SentinelBlue 让每一次进程生灭、每一条异常外连、每一次阻断动作,都留下可回溯、可取证、可复盘的电子痕迹——并在命中规则的那一刻,给出可执行、可确认的处置方案。
---
### 一、它解决什么问题
红方的攻击是**一条有时间顺序的链路**:投递 → 落地 → 执行 → 反弹 → 驻留。
传统防守最大的痛点是"看见了却没记全、记全了却来不及断"。
SentinelBlue 把这件事做成一条**实时闭环**:
```
监测(monitor) → 记录(recorder) → 分析(analyzer) → 阻断(responder) → 报告(report)
↑ │
└────────────────────── 全程留痕 / 可溯源 ─────────────────────┘
```
- **记录**:SQLite 结构化事件库 + JSONL 导出,所有行为可追溯;
- **分析**:规则引擎对进程名、命令行、高危端口、资源占用、文件完整性做实时研判;
- **阻断**:对命中项自动生成处置方案(kill / 封 IP / 隔离文件),含三种安全模式;
- **实时**:逐 tick 打印执行流,新进程、异常连接即时上屏;
- **报告**:运行结束一键生成 Markdown 战报 + HTML 态势图。
---
### 二、架构与目录结构
```
sentinelblue/
├── config.yaml # 作战参数(端口/进程名/阈值/响应模式/基线/告警)
├── requirements.txt # 依赖(psutil、PyYAML)
├── main.py # 主程序:run / baseline-build / rollback 三个子命令
├── core/
│ ├── __init__.py # 包声明
│ ├── recorder.py # 审计记录(SQLite 全程留痕 + 回滚快照表)
│ ├── monitor.py # 监测引擎(进程/网络/文件快照,含学习期基线)
│ ├── rules.py # 检测规则引擎 + Finding 数据模型
│ ├── analyzer.py # 分析引擎(攻击链回溯、完整性校验、进程生灭)
│ ├── responder.py # 响应阻断(kill/封IP/隔离文件 + 回滚)
│ ├── report.py # 报告生成(Markdown / HTML)
│ ├── baseline.py # 安全基线哈希(可执行文件完整性校验)
│ └── notifier.py # 邮件 / Webhook 实时告警推送
└── logs/ # 运行期生成:audit.db、baseline.json、报告、隔离区
```
| 模块 | 职责 | 关键类 / 函数 |
|------|------|----------------|
| `monitor.Monitor` | 每个 tick 采集进程、网络连接、关键目录文件事件;首个快照登记"学习期基线进程名" | `snapshot()`、`_collect_processes()`、`_collect_connections()`、`_collect_fs()` |
| `rules.RuleEngine` | 按规则产出结构化 `Finding`(含严重等级与处置建议) | `evaluate()`、`Finding` |
| `analyzer.Analyzer` | 组装上下文、判新进程/消亡进程、补全攻击链与完整性信息、广度扫描篡改 | `analyze()`、`_attack_chain()`、`_enrich_findings()`、`_integrity_findings()` |
| `responder.Responder` | 把处置建议落地为 kill / 封 IP / 隔离文件,阻断前自动快照、支持回滚 | `handle()`、`_kill()`、`_block_ip()`、`_quarantine()`、`rollback()` |
| `recorder.EventStore` | 事件与回滚记录的写入/查询/导出 | `record()`、`query()`、`save_rollback()`、`get_rollback()`、`list_rollbacks()`、`export_jsonl()` |
| `baseline.BaselineManager` | 对系统二进制建立 SHA-256 基线并做 mtime 优先的篡改校验 | `build()`、`load()`、`check()` |
| `notifier.Notifier` | 命中发现的 SMTP 邮件 / Webhook 推送,含等级过滤与节流 | `should_alert()`、`alert_finding()` |
---
### 三、安装与快速开始
```bash
# 1. 安装依赖
pip install -r requirements.txt
# 2. 建立完整性基线(可选,首次 run 若缺失且 auto_build=true 会自动建立)
sudo python main.py -c config.yaml baseline-build
# 3. 试运行(dry_run:只记录,不真正执行阻断;跑 60 秒后出报告)
python main.py -c config.yaml run --mode dry_run -d 60 --report logs/ops
# 4. 正式值守(需 root 才能 kill 他人进程 / 写 iptables)
sudo python main.py -c config.yaml
```
> ⚠️ 阻断动作(终止进程、iptables 封 IP)需要 **root 权限**;
> 没有 root 时平台会自动降级(仅能看到自身进程连接),不会崩溃。
---
### 四、命令参考
主程序 `main.py` 的可用子命令如下(`-c/--config` 为全局参数,默认 `config.yaml`):
| 命令 | 参数 | 说明 |
|------|------|------|
| `run`(默认) | `-d/--duration 秒`(0=持续,直到 Ctrl+C)
`-m/--mode dry_run\|manual\|auto`(覆盖配置中的 mode)
`--report 路径前缀`(运行结束生成 `.md` 与 `.html`) | 启动实时监测闭环;不写子命令时默认进入 `run` |
| `baseline-build` | 无 | 立即建立/重建可执行文件完整性基线 |
| `rollback` | ``(回滚记录自增 id,整数) | 按回滚快照逆向恢复一次处置(撤销封禁 / 移回文件 / 重启进程) |
```bash
# 误杀后回滚(示例 id=7)
sudo python main.py -c config.yaml rollback 7
```
---
### 五、三种响应模式
| 模式 | 行为 | 适用场景 |
|------|------|----------|
| `dry_run` | 仅记录、打印动作,不执行任何阻断 | 试运行、规则调优、教学演示 |
| `manual` | 每个阻断动作交互确认(`y/N`) | 正式值守、人工把关(默认) |
| `auto` | 自动执行;当 `require_confirm: true` 时关键动作仍需确认 | 高置信规则下的无人值守 |
所有动作无论成功/失败/跳过/拒绝,都会写入审计库 —— **哪怕阻断失败,也有据可查**。
每一条成功执行的阻断动作都会带上 `rollback_id`,可在报告"可回滚快照"章节查看。
---
### 六、四大扩展能力(已内置)
1. **进程树关联(攻击链回溯)**:每个进程快照采集父进程 PID(`ppid`),命中发现时 `analyzer._attack_chain()` 自动从可疑进程沿 `ppid` 向上回溯到根进程(如 `systemd → sshd → bash → xmrig`)后反向呈现,在告警与报告中输出完整攻击链。
2. **安全基线哈希(完整性校验)**:对 `/bin`、`/sbin`、`/usr/bin`、`/usr/sbin` 等可信二进制目录建立 SHA-256 基线(`baseline-build` 或 `auto_build` 自动建立),运行期对进程可执行文件做篡改校验;基线内文件被替换/删除时由 `_integrity_findings()` 产出 `INTEGRITY-TAMPER`(高危)告警。`check()` 先比 `mtime`、仅在变化时重新哈希,运行期开销极低。
3. **邮件 / Webhook 实时告警推送**:命中发现即时经 SMTP 邮件或 Webhook(企业微信 / 钉钉 / Slack / 自研平台,POST JSON)推送;支持 `min_severity` 最小严重等级过滤与 `min_interval` 同规则节流,避免告警风暴;推送全部走标准库(`smtplib` / `urllib`),失败静默降级,绝不阻断主链路;`dry_run` 试运行默认不推送(可由 `alert_in_dry_run` 开启)。
4. **回滚式处置(误杀可恢复)**:每次阻断(kill / 封 IP / 隔离文件)真正改系统前自动把原状态快照入库(`recorder.rollbacks` 表,仅非 `dry_run` 模式留痕);误杀后执行 `rollback ` 即可撤销 iptables 封禁、移回被隔离文件、或按原命令行重启进程。
---
### 七、检测规则一览
规则引擎(`core/rules.py`)内置以下规则,命中即产出 `Finding` 并驱动响应:
| 规则 ID | 严重级 | 类别 | 触发条件 |
|---------|--------|------|----------|
| `PROC-SUSPECT-NAME` | high | process | 进程名命中 `suspicious_names`(xmrig/miner/hydra/sqlmap…) |
| `PROC-SUSPECT-CMD` | high | cmdline | 命令行命中 `suspicious_cmd_keywords`(`/dev/tcp/`、`bash -i`、`nc -e`…) |
| `NET-SUSPECT-PORT` | high | network | 到 `suspicious_ports`(4444/1337/31337…)的 **已建立** 连接 |
| `NET-CONN-FLOOD` | medium | network | 单进程外连数超过 `max_connections`(默认 200) |
| `RES-CPU` | medium | resource | 单进程 CPU 占用 ≥ `cpu_alert_pct`(默认 85%,挖矿特征) |
| `RES-MEM` | low | resource | 单进程内存占用 ≥ `mem_alert_pct`(默认 80%) |
| `INTEGRITY-TAMPER` | high | integrity | 基线内系统二进制哈希变化或文件消失(需开启 `baseline`) |
#### 如何扩展检测能力
新增一条规则,只需在 `core/rules.py` 里加一个 `_check_xxx` 方法,并在 `evaluate()` 中登记一行,平台其余部分无需改动(开闭原则):
```python
def _check_my_rule(self, ctx):
out = []
for pid, p in ctx["processes"].items():
if "evil" in (p.get("name") or "").lower():
out.append(Finding(
rule_id="PROC-EVIL",
title=f"命中自定义规则:{p.get('name')}",
severity="high", category="process", target=str(pid),
evidence={"name": p.get("name")},
recommendation=f"终止进程 PID={pid}",
))
return out
```
---
### 八、配置说明(`config.yaml`)
| 段 | 字段 | 默认值 | 说明 |
|----|------|--------|------|
| `monitor` | `interval` | 2 | 轮询间隔(秒) |
| | `enable_process` / `enable_network` / `enable_filesystem` | true | 三类采集开关 |
| `fs_watch_paths` | — | `/tmp /etc /home /var/www` | 重点盯防目录,文件创建/变更即记录 |
| `rules` | `cpu_alert_pct` / `mem_alert_pct` | 85 / 80 | 资源告警阈值 |
| | `max_connections` | 200 | 单进程外连数阈值 |
| | `suspicious_ports` | 见文件 | 高危 / 反弹 Shell / 矿池 / C2 端口 |
| | `suspicious_names` | 见文件 | 可疑进程名关键字 |
| | `suspicious_cmd_keywords` | 见文件 | 命令行可疑特征 |
| `response` | `mode` | manual | `dry_run`/`manual`/`auto` |
| | `kill_process` / `firewall_block` / `quarantine_file` | true | 三类动作开关 |
| | `require_confirm` | true | 自动模式下关键操作是否仍需确认 |
| `baseline` | `enabled` | true | 启用完整性校验 |
| | `paths` | `/bin /sbin /usr/bin /usr/sbin` | 参与校验的可信二进制目录 |
| | `excludes` | `*.pyc` | 跳过(fnmatch 通配) |
| | `algo` | sha256 | 哈希算法 |
| | `auto_build` | true | 首次运行且基线缺失时自动建立 |
| | `file` | `baseline.json` | 基线文件(相对 `log.dir` 或绝对路径) |
| `alerting` | `enabled` | false | 告警总开关 |
| | `min_severity` | medium | 仅推送 ≥ 该等级(info/low/medium/high/critical) |
| | `min_interval` | 60 | 同一 `rule_id` 最小推送间隔(秒) |
| | `alert_in_dry_run` | false | `dry_run` 试运行是否也推送 |
| | `email.*` / `webhook.*` | 见文件 | SMTP 与 Webhook 凭据(默认关闭) |
| `log` | `dir` / `level` | `logs` / `INFO` | 审计库、报告、隔离文件存放目录与日志级别 |
---
### 九、安全机制(避免误杀与系统瘫痪)
代码内置多重防护,确保阻断动作本身不会反噬系统:
- **保护关键进程**:`_kill` 拒绝终止 PID 0/1(调度器/init)、本进程及其父进程,避免系统或自身崩溃。
- **拒绝隔离系统二进制**:`_quarantine` 拒绝移动 `/bin`、`/sbin`、`/usr/bin`、`/usr/sbin`、`/lib`、`/lib64`、`/usr/lib`、`/usr/libexec`、`/usr/local/bin` 下的文件,避免误隔离导致系统瘫痪。
- **IP 合法性校验**:`_block_ip` 先用 `ipaddress.ip_address()` 校验格式,非法 IP 不下发 iptables 规则。
- **非 root 自动降级**:无 root 时 `psutil.net_connections()` 抛 `AccessDenied` 会被捕获,仅看到自身进程连接,平台不崩溃。
- **回滚兜底**:破坏性动作执行前先快照,误杀可即时恢复(见第六·4 节)。
---
### 十、合规与安全声明
本工具**仅面向蓝方 / 防守方**,用于授权环境下的资产监测、入侵检测与应急处置。
使用者须确保其对该系统拥有合法授权。阻断动作具有破坏性(终止进程、封禁 IP),
请在生产环境前先用 `dry_run` 验证规则,并妥善保管 `logs/audit.db` 审计记录与 `logs/baseline.json` 基线。