guan4tou2/REDLOG

GitHub: guan4tou2/REDLOG

红队操作员桌面工作台,被动记录渗透测试全过程的操作事件并生成防篡改时间线证据链。

Stars: 0 | Forks: 0

# RedLog 红队操作员工作台 —— 一款 Electron 桌面应用,可在渗透测试项目期间被动记录所有操作,并将其存入一个每个项目独立且防篡改的时间线数据库中。 ![Electron](https://img.shields.io/badge/Electron-33-47848F?logo=electron&logoColor=white) ![React](https://img.shields.io/badge/React-18-61DAFB?logo=react&logoColor=white) ![TypeScript](https://img.shields.io/badge/TypeScript-5-3178C6?logo=typescript&logoColor=white) ![SQLite](https://img.shields.io/badge/SQLite-WAL-003B57?logo=sqlite&logoColor=white) ![License](https://img.shields.io/badge/License-MIT-green) ## 功能 - **被动记录** — 自动捕获终端命令、剪贴板、屏幕截图、文件传输和网络事件 - **暂停 / 恢复** — 点击状态栏的录制指示器即可暂停事件捕获;再次点击即可恢复 - **7 泳道时间线** — shell、屏幕截图、剪贴板、文件传输、标记、loot、系统 — 具有动态泳道高度和实时事件点 - **证据链** — 仅追加的事件 ID 链,用于防篡改证据 - **范围监控** — 目标范围强制执行与 DNS 查询日志记录 - **Loot 检测器** — 基于正则表达式的凭据/机密扫描(AWS 密钥、JWT、密码哈希、flags 等) - **截图代理** — 空闲触发的捕获,具有双层去重功能(SHA-256 + pixelmatch) - **HTTP API** — 用于外部工具集成的 localhost REST API(仅限 127.0.0.1,Bearer token 认证) - **CLI 工具** — `redlog-cli`,用于 shell 脚本和代理集成 - **i18n** — 英语和繁体中文 (zh-TW) - **IP 悬浮窗** — 置于顶层的悬浮小组件,显示外部/内部 IP - **项目级隔离** — 每个项目都拥有独立的配置、数据库、屏幕截图和终端录制 ## 快速开始 ``` # 安装依赖项(原生模块需要 Node 20+、Python 3) npm install npm run rebuild # rebuild better-sqlite3 + node-pty for Electron # 开发 npm run dev # Production build npm run build ``` ## 架构 ``` Electron Main Process +-- ProjectManager per-engagement isolated storage (~/.redlog/projects//) +-- SQLite DB (WAL) events table + evidence chain table +-- EventBus pub/sub with pause/resume support +-- Services | +-- IPMonitor external IP polling, VPN status detection | +-- ClipboardMonitor 200ms polling, auto-redact credentials | +-- ScreenshotAgent idle-triggered capture, 2-tier dedup (SHA-256 + pixelmatch) | +-- ScopeMonitor target scope check + DNS query logging (UDP :15353) | +-- LootDetector regex-based credential/secret scanning | +-- FileTransferTracker ~/Downloads watcher with auto-hash | +-- EvidenceChain append-only chain of event IDs | +-- APIServer localhost HTTP API for external agents +-- IPC (contextBridge) renderer <-> main communication Renderer (React 18 + Tailwind CSS 3) +-- ProjectPicker project create/open/delete +-- Sidebar navigation with live badges +-- Dashboard stats + engagement info + keyboard shortcuts +-- Timeline custom swim-lane timeline (7 lanes, dynamic height) +-- ScreenshotsView thumbnail grid with lightbox +-- TargetView auto-cataloged targets with evidence drilldown +-- ScopeStatus violation log +-- LootPanel detected credentials/secrets +-- SearchPanel full-text search across all events +-- Settings YAML config editor +-- StatusBar recording toggle + VPN/scope/loot/uptime indicators +-- ErrorBoundary per-view crash recovery Overlay Window +-- IP status always-on-top widget (top-right corner) ``` ## 项目结构 ``` src/ main/ index.ts app entry, IPC handlers, service lifecycle windows.ts BrowserWindow creation (main + overlay) tray.ts system tray menu db/ index.ts SQLite init, schema, WAL mode events.ts insert/query/search events findings.ts QuickMarks CRUD services/ api-server.ts HTTP API (localhost:6660) clipboard-monitor.ts clipboard polling + redaction config.ts YAML config load/save event-bus.ts EventEmitter pub/sub with pause/resume evidence-chain.ts append-only event chain file-transfer-tracker.ts fs.watch on ~/Downloads ip-monitor.ts external IP check + VPN detection loot-detector.ts credential/secret pattern matching project-manager.ts per-project directory management scope-monitor.ts scope enforcement + DNS server screenshot-agent.ts screen capture + dedup pipeline target-extractor.ts command parser for target/transfer detection preload/ index.ts contextBridge API for main window overlay.ts contextBridge API for overlay renderer/ src/ App.tsx main app layout + routing OverlayApp.tsx IP overlay widget components/ all UI components i18n/ en.json + zh-TW.json locale files styles/index.css Tailwind + custom scrollbar env.d.ts TypeScript declarations for preload API cli/ redlog-cli.js CLI tool for external integration ``` ## 数据模型 所有数据都存储在 SQLite (`~/.redlog/projects//timeline.db`) 中: ### events 表 | 列名 | 类型 | 描述 | |---|---|---| | id | TEXT PK | UUID | | timestamp | INTEGER | Unix 毫秒时间戳 | | engagement_id | TEXT | 项目标识符 | | session_id | TEXT | 应用会话 UUID | | operator_id | TEXT | 操作员标识符 | | agent_type | TEXT | shell, screenshot, clipboard, file_transfer, marker, loot, system | | hostname | TEXT | 机器主机名 | | source_ip | TEXT | 源 IP(可为空) | | target_id | TEXT | 自动检测的目标(可为空) | | data | TEXT | JSON payload(因 agent_type 而异) | | hash | TEXT | 事件内容的 SHA-256 哈希值 | | created_at | INTEGER | Unix 毫秒时间戳 | ### 项目目录 ``` ~/.redlog/projects// config.yaml engagement config timeline.db SQLite database screenshots/ JPEG captures terminal/ asciicast v2 recordings (.cast) ``` ## HTTP API 打开项目时 API 服务器将启动(默认端口 6660,仅限 127.0.0.1)。 ``` TOKEN=$(cat ~/.redlog/api-token) PORT=$(cat ~/.redlog/api-port) curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:$PORT/api/status ``` | 方法 | Endpoint | 描述 | |---|---|---| | POST | /api/events | 插入事件 | | GET | /api/events | 查询事件(按 agent_type, target_id, limit, since 过滤) | | GET | /api/events/search?q=...&limit=N | 全文搜索 | | GET | /api/events/count | 事件计数 | | POST | /api/marker | 创建标记事件 | | POST | /api/loot/scan | 扫描文本以查找凭据 | | POST | /api/screenshot | 触发手动捕获 | | GET | /api/status | IP 状态、事件计数、违规情况 | | GET | /api/health | 健康检查(无需认证) | ## CLI ``` redlog-cli mark "Found SQLi in /api/users" --severity high --target api.example.com redlog-cli log terminal --data '{"subtype":"command","command":"nmap -sV 10.0.0.1"}' redlog-cli search "password" --limit 20 redlog-cli events --agent_type terminal --limit 10 redlog-cli loot "root:$6$...:..." redlog-cli screenshot redlog-cli status ``` ## 键盘快捷键 | 按键 | 操作 | |---|---| | Cmd+1..8 | 切换视图 | | Cmd+Shift+M | 快速标记 | | Cmd+/ | 搜索 | ## 配置 ``` engagement: id: pentest-2026-001 name: "Example Corp External Pentest" operator: id: op-1 name: "Operator" network: vpnIPs: ["203.0.113.42"] dailyIPs: ["114.24.97.0/24"] checkInterval: 10 scope: enforcement: warn # warn | log targets: ["*.example.com", "10.0.0.0/8"] excludeTargets: ["10.0.0.1"] ``` 更改会热重载 —— 无需重启。 ## 安全模型 - **沙盒**:`contextIsolation: true`、`nodeIntegration: false`、`sandbox: true` - **contextBridge**:显式 API 表面 — 渲染进程无法访问 Node.js - **路径验证**:在项目目录内验证屏幕截图读取 - **剪贴板脱敏**:密码、API 密钥、私钥自动脱敏 - **API 认证**:Bearer token(随机 32 字节),文件权限 0600 - **API 绑定**:仅限 127.0.0.1 — 不对外暴露于网络 ## 技术栈 - **Runtime**:Electron 33 + electron-vite - **数据库**:better-sqlite3(WAL 模式) - **UI**:React 18 + Tailwind CSS 3 - **时间线**:自定义 HTML/CSS 泳道(零依赖) - **屏幕截图去重**:pixelmatch + pngjs - **DNS 日志**:dns2 - **配置**:js-yaml - **i18n**:自定义 React context ## License MIT
标签:Electron, React, SQLite, Syscalls, 桌面应用, 自动化攻击, 证据记录