guan4tou2/REDLOG
GitHub: guan4tou2/REDLOG
红队操作员桌面工作台,被动记录渗透测试全过程的操作事件并生成防篡改时间线证据链。
Stars: 0 | Forks: 0
# RedLog
红队操作员工作台 —— 一款 Electron 桌面应用,可在渗透测试项目期间被动记录所有操作,并将其存入一个每个项目独立且防篡改的时间线数据库中。





## 功能
- **被动记录** — 自动捕获终端命令、剪贴板、屏幕截图、文件传输和网络事件
- **暂停 / 恢复** — 点击状态栏的录制指示器即可暂停事件捕获;再次点击即可恢复
- **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, 桌面应用, 自动化攻击, 证据记录