Ahmedredda2020/SIREN-Smart-Incident-Response-Event-Notifier

GitHub: Ahmedredda2020/SIREN-Smart-Incident-Response-Event-Notifier

一个基于Node.js全栈架构的轻量级安全运营中心工具,提供进程监控、文件完整性扫描、IOC威胁狩猎、行为异常检测和事件响应的一体化终端安全防护方案。

Stars: 0 | Forks: 0

# Sentinel — 安全运营中心 一个用于进程监控、文件完整性扫描、IOC 威胁狩猎、行为异常检测和事件响应的全栈 SOC 工具。 ## 开始之前你需要准备什么 你的机器上需要安装 **3 样东西**: | 工具 | 用途 | 安装 | |:-----|:----|:--------| | **Node.js v20+** | 运行服务端并构建客户端 | [nodejs.org](https://nodejs.org) 或 `sudo apt install nodejs npm` | | **MongoDB** | 存储用户、告警、异常和基线数据 | [mongodb.com](https://www.mongodb.com/try/download/community) 或 `sudo apt install mongodb` | | **Git** | 克隆代码仓库 | `sudo apt install git` | ### 验证是否已安装 ``` node -v # Should print v20.x.x or higher mongosh # Should open the MongoDB shell (type 'exit' to close) git --version ``` ## 循序渐进:本地运行(最简单的方法) ### 1. 克隆项目 ``` git clone cd SIERN_EX ``` ### 2. 启动 MongoDB 确保 MongoDB 正在后台运行: ``` # 在基于 systemd 的 Linux 上: sudo systemctl start mongod # 验证它正在运行: sudo systemctl status mongod # 应显示 "active (running)" ``` **替代方案:使用 Docker 运行 MongoDB**(无需在系统中安装): ``` sudo docker run -d \ --name mongodb \ -p 27017:27017 \ -v mongodb_data:/data/db \ mongo ``` 这将在容器中启动 MongoDB 并监听 `localhost:27017`。常用命令: ``` docker ps # Verify it's running docker stop mongodb # Stop it docker start mongodb # Start it again docker rm mongodb # Remove the container docker volume rm mongodb_data # Delete all data ``` ### 3. 创建 `.env` 文件 复制模板并填入你的密钥: ``` cp .env.example server/.env ``` 现在编辑 `server/.env`: ``` PORT=3000 DATABASE_URL=mongodb://localhost:27017/sentinel NODE_ENV=development AUTH_STRATEGY=email JWT_SECRET=change_this_to_a_random_64_char_string REFRESH_TOKEN_SECRET=change_this_to_another_random_64_char_string CLIENT_URL=http://localhost:5173 ``` ### 4. 安装所有依赖 在项目根目录下运行: ``` npm install npm run postinstall ``` 这将自动安装根目录依赖,以及 `shared/`、`client/` 和 `server/` 的依赖。 ### 5. 启动开发服务器 ``` npm run dev ``` 这将**同时启动 3 个服务**: - `shared` — TypeScript 监听器(更改时重新构建共享类型) - `client` — 位于 **** 的 Vite 开发服务器 - `server` — 位于 **** 的 Express API ### 6. 打开应用 打开浏览器并访问: ``` http://localhost:5173 ``` 你将被重定向到**登录**页面。 ## 首次设置:创建用户 由于这是一个全新的数据库,你需要进行注册: 1. 导航到 `http://localhost:5173/register` 2. 输入邮箱和密码 3. 点击 **Register** 4. 你将自动登录并被重定向到仪表板 ## 如何测试每一个功能 登录后,使用侧边栏进行导航。以下是每个页面的测试方法: ### 1. 仪表板 (`/`) **功能描述:** 显示系统概览 — 活跃进程数、过去 24 小时的告警数、系统状态。 **测试方法:** - 登录后打开仪表板。 - 你应该会看到实时统计数据(进程数是从你的实际机器上拉取的)。 - 在你触发扫描之前,告警数将是 `0`。 ### 2. 进程监控 (`/processes`) **功能描述:** 列出机器上所有正在运行的进程及其风险评分。 **测试方法:** - 从侧边栏导航到 **Process Monitor**。 - 你应该会看到一个包含所有正在运行进程的表格(Firefox、node、bash 等)。 - 在可疑路径(如 `/tmp/`)中的进程将具有更高的风险评分。 - **终止测试:** 找到一个非关键进程(例如,在终端中运行 `sleep 9999 &`),然后点击其上的 **Kill**。验证它是否消失。 ### 3. 文件完整性扫描器 (`/scanner`) **功能描述:** 对文件进行哈希处理 (SHA256),并与存储的基线进行比较,以检测未经授权的更改。 **测试方法:** 1. **创建一个测试目录:** mkdir -p /tmp/sentinel_test echo "hello world" > /tmp/sentinel_test/file1.txt echo "secret data" > /tmp/sentinel_test/file2.txt 2. 在 Scanner 页面中,输入路径:`/tmp/sentinel_test` 3. 勾选 "Include Subdirectories" 并点击 **Create Baseline**。 4. 现在**修改一个文件:** echo "HACKED" >> /tmp/sentinel_test/file1.txt 5. 在启用 **Scan with Compare Against Baseline** 的情况下运行扫描。 6. 你应该会看到 `file1.txt` 被标记为 **MODIFIED**,并附带风险等级。 ### 4. IOC 威胁狩猎 (`/ioc-hunt`) **功能描述:** 在运行中的进程和文件系统中搜索恶意的入侵指标(哈希、IP、域名)。 **测试方法:** 1. 导航到 **IOC Hunt**。 2. 输入一个已知的哈希(例如,从扫描器测试中获取的 `file1.txt` 的 SHA256): sha256sum /tmp/sentinel_test/file1.txt 3. 粘贴该哈希值,将范围设置为 **Filesystem**,搜索路径设置为 `/tmp/sentinel_test`。 4. 点击 **Start Hunt**。 5. 如果哈希匹配,你将看到一个 **Critical** 级别的命中。 **进程测试:** 输入一个进程名(如 `node`)作为域名类型的 IOC,范围设置为 **Processes**,然后运行狩猎。它应该会匹配到你正在运行的 node 服务器。 ### 5. 行为检测 (`/behavioral`) **功能描述:** 使用内置规则检测可疑的进程行为。 **测试方法:** 1. 导航到 **Behavioral Detection**。 2. 初始状态的异常表格将是空的。 3. 点击 **View Rules** 查看 3 条检测规则 (BR-001, BR-002, BR-004)。 4. 点击任意规则旁的 **Simulate**。 5. 模拟的异常应立即出现在表格中。 6. 刷新页面 — 异常应该持续存在(它已存储在 MongoDB 中,不再是模拟数据)。 ### 6. 响应中心 (`/response`) **功能描述:** 跟踪遏制操作(终止、隔离、隔离区)及完整的审计历史。 **测试方法:** 1. 导航到 **Response Center**。 2. 初始状态下,两个选项卡(Active Containments,Action History)都将为空。 3. 若要填充数据,请从 **Process Monitor** 页面终止一个进程 — 这将创建一条遏制操作记录。 4. 返回 Response Center — 你应该会在历史记录中看到该终止操作。 5. 测试活动遏制上的 **Undo** 按钮。 ### 7. 设置 (`/settings`) **功能描述:** 用户偏好和主题切换。 **测试方法:** 切换深色/浅色模式并验证其在重新加载后是否保持不变。 ## 测试认证系统 ### 登录/登出流程 1. 在 `/register` **注册**一个新用户。 2. **登出**(应重定向到 `/login`)。 3. 使用相同的凭证再次**登录**。 4. 关闭浏览器标签页,重新打开一个访问 `http://localhost:5173` 的标签页 — 你应该仍然处于登录状态(token 持久化在 localStorage 中)。 ### Token 刷新测试 1. 成功登录。 2. 等待或手动从 `localStorage` 中删除 `accessToken`(DevTools → Application → Local Storage)。 3. 导航到任何受保护的页面。 4. 应用应自动使用 `refreshToken` 刷新并继续工作。 5. 如果两个 token 都被删除,你应该会被重定向到 `/login`。 ## 快速检查清单:一切正常吗? | # | 功能 | 测试 | 预期 | |:--|:--------|:-----|:---------| | 1 | MongoDB 连接 | 检查终端输出 | `MongoDB Connected: localhost` | | 2 | 用户注册 | POST 到 `/register` | 账户已创建,自动登录 | | 3 | 仪表盘统计 | 打开 `/` | 活跃进程数 > 0 | | 4 | 进程列表 | 打开 `/processes` | 真实操作系统进程表格 | | 5 | 进程终止 | 终止一个测试进程 | 进程消失 | | 6 | 扫描器基线 | 在 `/tmp/sentinel_test` 上创建基线 | "Baseline created" 消息 | | 7 | 扫描器检测 | 修改文件,重新扫描 | 显示 MODIFIED 状态 | | 8 | IOC 狩猎 (哈希) | 狩猎已知 SHA256 | 发现匹配及严重程度 | | 9 | IOC 狩猎 (进程) | 狩猎 "node" | 在运行进程中匹配 | | 10 | 行为模拟 | 点击 BR-001 上的 Simulate | 异常出现在表格中 | | 11 | 行为持久化 | 模拟后刷新页面 | 异常依然可见 | | 12 | 响应中心 | 终止一个进程,检查历史记录 | 操作记录在审计轨迹中 | | 13 | 认证 token 刷新 | 删除 accessToken,导航 | 自动刷新,未登出 | | 14 | 深色/浅色模式 | 在 Settings 中切换 | 主题改变并保持 | ## 故障排除 | 问题 | 解决方案 | |:--------|:---------| | `Error: DATABASE_URL variables in .env missing` | 你忘记创建 `server/.env` 了。运行 `cp .env.example server/.env` | | `MongoServerError: connect ECONNREFUSED` | MongoDB 未运行。使用 `sudo systemctl start mongod` 启动它 | | Processes 页面为空 | `ps-list` 包需要 Linux 或 macOS。在没有原生访问权限的 Windows WSL 上无法工作。 | | 浏览器控制台出现 CORS 错误 | 确保你的 `.env` 中包含 `CLIENT_URL=http://localhost:5173` | | `Cannot find module` TypeScript 错误 | 运行 `npm run postinstall` 安装所有依赖 | ## 攻击模拟测试 两个脚本模拟了**真实的攻击者攻击链**,以触发 Sentinel 的每一个检测功能。它们是完全安全的 — 它们只创建临时文件,生成无害进程,并在最后清理所有内容。 ### 在 Linux 上运行 ``` # 确保 Sentinel 正在首先运行 npm run dev # 在第二个终端中: chmod +x test-attack-linux.sh ./test-attack-linux.sh ``` ### 在 Windows 上运行 ``` # 确保 Sentinel 正在首先运行 (START-SENTINEL.bat 或 npm run dev) # 右键点击 test-attack-windows.ps1 > "使用 PowerShell 运行" # 或者打开 PowerShell 并运行: PowerShell -ExecutionPolicy Bypass -File test-attack-windows.ps1 ``` 这两个脚本会要求输入你的**邮箱 + 密码**,然后自动运行 6 个攻击阶段。 ### 攻击阶段 | 阶段 | 攻击 | 描述 | |:------|:-------|:-------------| | 1 | 初始访问 | 投放伪造的恶意软件文件(`dropper.exe`、`beacon.dll`、webshell) | | 2 | 持久化 | 创建文件基线,然后篡改配置文件(启用 root 登录,禁用防火墙) | | 3 | 执行 | 生成编码命令、临时目录进程、netcat 监听器 (Linux) / certutil 滥用 (Windows)、C2 回调 | | 4 | 检测 | 调用 Sentinel 行为扫描 + 模拟所有 3 条规则 (BR-001, BR-002, BR-004) | | 5 | 狩猎 | 狩猎植入的恶意软件哈希、C2 IP (192.168.13.37) 和 evil.com 域名 | | 6 | 报告 | 打印摘要并等待你在清理前审查 Sentinel UI | ### 你将在 Sentinel 中看到的内容 **仪表板:** - 告警数跃升至 **6 条以上的严重/警告告警** - 告警列表显示 `Encoded Command Execution`、`Temp Directory Spawning`、`Process Injection` **进程监控:** - Linux:`nc`、`curl`、`wget` 出现并带有**高风险评分** - Windows:`certutil.exe`、`powershell.exe` 被标记为高/中风险 **完整性扫描器:** - 将路径设置为攻击测试目录,并勾选 "Compare against baseline" 进行扫描 - Linux:`/tmp/sentinel_attack_test/etc` — `sshd_config` 显示为 **MODIFIED** - Windows:`C:\temp\sentinel_attack_test\config` — `firewall.conf` 显示为 **MODIFIED** - 新的后门文件显示为 **NEW** **IOC 狩猎:** - 粘贴脚本打印出的 SHA256 哈希 - 搜索攻击目录 — `dropper.exe` 匹配为 **Critical** - 在进程中搜索 `192.168.13.37` — C2 回调进程匹配 **行为检测:** - **BR-001**:编码命令执行 (base64 / `-encodedcommand`) - **BR-002**:临时目录生成 (`/tmp` 或 `%TEMP%`) - **BR-004**:进程注入签名(模拟) **响应中心:** - 每个严重检测都会在队列中创建一个遏制操作 - 点击 **Undo** 解除它们 ### 清理 在出现提示时按 **Enter** — 脚本将自动终止所有生成的进程并删除所有临时文件。 ## Windows ( / 10 / 11) 设置 本项目完全支持 Windows。请按照以下步骤操作,而不是上述 Linux 的步骤。 ### 一键设置(最简单的方法) 只需双击项目文件夹中的 **`START-SENTINEL.bat`**。它将会: 1. ✅ 检查 Node.js 是否已安装 2. ✅ 启动 MongoDB(Docker 或 Windows 服务) 3. ✅ 使用自动生成的密钥创建 `server\.env`(如果不存在) 4. ✅ 安装所有依赖 5. ✅ 启动开发服务器 6. ✅ 在浏览器中打开 `http://localhost:5173` ### 手动设置(循序渐进) ### 1. 安装前置条件 下载并安装这些(均使用默认设置): | 工具 | 下载 | |:-----|:---------| | **Node.js v20+** | [nodejs.org/en/download](https://nodejs.org/en/download) — 选择 **Windows Installer (.msi)** | | **Git for Windows** | [git-scm.com/download/win](https://git-scm.com/download/win) | | **MongoDB Community** | [mongodb.com/try/download/community](https://www.mongodb.com/try/download/community) — 选择 **Windows x64 MSI** | ### 2. 验证安装 打开 **PowerShell** 或 **Command Prompt** 并运行: ``` node -v # Should print v20.x.x or higher git --version # Should print git version x.x.x mongosh # Should open MongoDB shell (type 'exit' to close) ``` 如果 `mongosh` 失败,可能是 MongoDB 服务未运行。启动它: ``` # PowerShell (以管理员身份): net start MongoDB ``` **替代方案:使用 Docker Desktop 运行 MongoDB:** 如果你安装了 [Docker Desktop](https://www.docker.com/products/docker-desktop/): ``` docker run -d --name mongodb -p 27017:27017 -v mongodb_data:/data/db mongo ``` ### 3. 克隆并设置 ``` git clone cd SIERN_EX ``` ### 4. 创建 `.env` 文件 ``` copy .env.example server\.env ``` 在记事本(或任何编辑器)中编辑 `server\.env`: ``` PORT=3000 DATABASE_URL=mongodb://localhost:27017/sentinel NODE_ENV=development AUTH_STRATEGY=email JWT_SECRET=paste_a_random_64_char_string_here REFRESH_TOKEN_SECRET=paste_another_random_64_char_string_here CLIENT_URL=http://localhost:5173 ``` 在 PowerShell 中生成随机密钥: ``` -join ((65..90) + (97..122) + (48..57) | Get-Random -Count 64 | % {[char]$_}) ``` 运行两次 — 将一个用于 `JWT_SECRET`,另一个用于 `REFRESH_TOKEN_SECRET`。 ### 5. 安装依赖 ``` npm install npm run postinstall ``` ### 6. 启动开发服务器 ``` npm run dev ``` 这将启动共享类型监听器、客户端(运行在 `http://localhost:5173` 的 Vite)和服务器(运行在 `http://localhost:3000` 的 Express)。 ### 7. 打开应用 在浏览器中打开: ``` http://localhost:5173 ``` 在 `/register` 注册一个新账户,然后你将看到仪表板。 ### Windows 特定说明 | 功能 | Windows 行为 | |:--------|:-----------------| | **进程监控** | 列出所有 Windows 进程(`.exe` 文件)。终止操作使用 `taskkill /PID /F`。 | | **文件扫描器** | 适用于 Windows 路径(例如 `C:\Users\YourName\Documents`)。请使用反斜杠。 | | **IOC 狩猎** | 搜索 Windows 进程和文件系统。使用诸如 `C:\temp\test` 的路径。 | | **行为检测** | 检测 Windows 特定的威胁:`svchost.exe`、`lsass.exe` 注入、`%TEMP%` 目录生成、编码的 PowerShell 命令。 | ### Windows 故障排除 | 问题 | 解决方案 | |:--------|:---------| | 无法识别 `mongosh` | 将 MongoDB 的 `bin` 文件夹添加到你的 PATH 中:`C:\Program Files\MongoDB\Server\7.0\bin` | | `net start MongoDB` 失败 | 打开服务 (`services.msc`),找到 "MongoDB Server",右键点击 → 启动 | | `npm install` 因 Python 错误而失败 | 安装 Windows Build Tools:`npm install -g windows-build-tools`(以管理员身份运行) | | 终止进程时权限被拒绝 | 以**管理员身份**运行终端 | | 端口 3000 已被占用 | 找到并终止它:`netstat -ano \| findstr :3000` 然后 `taskkill /PID /F` | ## 项目结构 ``` SIERN_EX/ ├── client/ # React Frontend (Vite) │ ├── src/ │ │ ├── api/ # Axios API clients │ │ ├── components/ # UI components (Shadcn/Radix) │ │ ├── contexts/ # Auth context provider │ │ ├── pages/ # Route pages │ │ └── App.tsx # Router definition │ └── vite.config.ts # Dev server + API proxy config ├── server/ # Express Backend │ ├── config/ # DB connection │ ├── models/ # Mongoose schemas │ ├── routes/ # API route handlers │ ├── services/ # Business logic │ ├── utils/ # JWT helpers │ └── server.ts # Entry point ├── shared/ # Shared TypeScript types ├── .env.example # Environment template └── package.json # Root monorepo scripts ``` ## 许可证 ISC
标签:Docker, EDR, GNU通用公共许可证, HTTP/HTTPS抓包, IOC狩猎, MITM代理, MongoDB, Node.js, osquery, Web安全, 子域名变形, 子域名枚举, 安全运营中心, 安全防御评估, 库, 应急响应, 态势感知, 无线安全, 端点安全, 系统安全, 网络安全, 网络安全审计, 网络映射, 脆弱性评估, 自动化攻击, 蓝队分析, 行为异常检测, 补丁管理, 请求拦截, 运维安全, 隐私保护