PoisonXploIT/Gravity-SOC

GitHub: PoisonXploIT/Gravity-SOC

基于 Go 的轻量级分布式安全运营中心,通过 Windows Sysmon 终端监控与 Linux DNS 网络哨兵的跨节点实时关联,实现低成本的端到端威胁检测与事件响应。

Stars: 1 | Forks: 0

# Gravity-SOC 轻量级分布式 Go 语言 SOC 平台。采用客户端-服务器架构,用于实时安全监控和事件响应。 ![Go](https://img.shields.io/badge/Go-%3E%3D1.22-00ADD8?style=flat&logo=go) ![License](https://img.shields.io/badge/License-MIT-green) ![Platform](https://img.shields.io/badge/Platform-Windows%20%7C%20Linux%20%7C%20ARM-blue) 分布式、轻量级且非对称的安全运营中心 (SOC)。 ## 1. 总体架构 Gravity SOC 采用基于 L2/L1 客户端-服务器的架构运行,其设计理念是最小化资源消耗以及在内存中超快地传递变量,尽可能地避免依赖像 C (CGO) 这样的语言进行交叉编译。 它由**两个主要的代码仓库或模块**组成: ### A. Gravity SOC Agent (L1 层 - 传感器) Gravity SOC Agent 是一个用 `Go` 编写的多态可执行文件,它能够静默地适应部署它的操作系统。 - **Windows (L1 主机)**:它干净地挂接到 Windows 注册表,并抽象出连接到 `ETW (Event Tracing for Windows)` 注册表的所有复杂逻辑。借助 `wevtutil`,Agent 以循环和反向的方式读取由 Sysmon (Sysinternals) 生成的事件,避开了 Go 运行时中不兼容的二进制文件。专门用于捕获: - 进程创建和命令 (`EventID: 1`)。 - 内部网络连接和到外部域名的连接 (`EventID: 3`)。 - 系统变异 / 远程内存注入 (`EventID: 8`)。 - 对大文件的读取 / 主机的 DNS 记录。 - **Linux (网络 L1 / Raspberry Pi Zero 2 W)**:作为企业/家庭网络中的静默哨兵,Agent 拦截本地 DNS 服务器(如 Unbound)暴露解析记录的易失性日志。如果某台设备尝试搜索 "malicious.com"(无论是伪装的、突发流量还是僵尸网络),Agent 会依靠其健壮的异步读取功能瞬间捕获该数据包。 **弹性发送:** 两种 Agent 都采用事件总线(内存通道),将内存占用限制为最多保留 1000 个并发事件。一个循环发送器将通过加密的 `POST` 请求发送所有事件,并配备最长可达 1 分钟的自动指数退避重试机制,以防止 L2 服务器发生冻结或全面宕机。 ### B. Gravity SOC Server (L2 层 - 大脑与关联器) 通常部署在稍大型的系统上(例如 Raspberry Pi 5 或本地服务器),“大脑”负责接收网络中所有 L1 节点的持续遥测数据。 - **SQLite 引擎**:使用专用的 PRAGMA 配置来实现事务性性能(`WAL` 和 `Synchronous = NORMAL`),在本地磁盘数据库中保留历史记录,该数据库能够以最小的*锁*开销容忍极其频繁的写入流。 - **秒级实时关联**:使用实时交叉数学查询将孤立的部分匹配起来。路由器捕获到的 `dns_alert` 和 Windows 中由 Sysmon 生成的 `network_dns` 通过域名和时间线(最大时间差约 10 秒)结合起来,从而证明“网络中的哪台机器引发了全局触发”。 - **PDF 报告生成器**:每天自动生成并渲染(借助 *GoFPDF* 包)表格化的执行摘要,并将其保存为 `/reports/` 文件夹中的平面文件,以此通报当天的情况(全局数据摄取和已确认的匹配)。 ## 2. 危机历史与技术演进 (缺陷墙) 在 Windows 生态系统中进行密集的实际部署和交叉测试阶段,我们发现由于 Windows API 的残酷特性,Agent 在处理和可靠性方面存在严重问题,这迫使进行了多次设计迭代: 1. **UTF-16 杀手 (Windows Sysmon XML)**:Shell 和 Windows 原生 `Event Log API` 偶尔会抛出 16 位 *little-endian* 垃圾数据(或注入空字节 `0x00`)。为了解决这个问题,Agent 集成了环境中**最干净且最具破坏性的处理程序之一(白名单歼灭过滤器)**,它从根本上解构所有字节,并在数学验证的 `UTF-8` 编码中进行重构。 2. **L1 层连接崩溃与本地冻结**:我们发现当 Agent 无法联系服务器时会发生完全崩溃,填满内存总线并导致无法读取 `wevtutil`。随后 Agent 进行了改进,所有进程都修改为 Go 的“零阻塞”标准(`select/default`),丢弃或忽略多余的事件,以确保永远不会危及宿主机的功能状态。 3. **幽灵主机名 (接口泄漏)**:原始的变量和标记(带有内存泄漏的 `os.Open`)迫使在 *Runtime* 之前通过持久化缓存来抽象化 `AgentID` 的计算,从而节省了文件句柄。应用了将数据保存在磁盘内存中并使用伪缓存(`.gravity-checkpoint`)的方法,以便在 Windows 重启后生存下来,而不会重新触发大量旧告警。 4. **SQL 弹性 (大脑失明)**:在执行 SQL 比较以在关联表中交叉事件(网络 Agent VS Windows Agent)时,Go 的 `database/sql` 由于孤立的 SQLite 单元格(`NULL`)而遭受了无声的“心跳停止”问题。此问题已通过使用 `TrimSpace`、纯 SQL 注入中的 `COALESCE`、放宽区域指标以及为每个 Agent 使用独立变量得以修复。 ## 3. 部署与执行步骤 *前提是你需要拥有 `Go >= 1.22` 以及管理员权限,以便在希望运行二进制文件时能够挂接到磁盘和网络。* ### 编译并启动 Agent (授权终端) ``` # 进入 Agente 文件夹 cd gravity-soc-agent # 下载所需模块 go mod tidy # 1. 编译 LINUX (Sensor PI) $env:GOOS="linux"; $env:GOARCH="arm" # (o "arm64" dependiendo de kernel) go build -o gravity-agent-linux # 2. 编译 WINDOWS (Endpoint) $env:GOOS="windows"; $env:GOARCH="amd64" go build -o gravity-agent.exe # 运行 Agent Win (在管理员 Powershell/CMD 中) .\gravity-agent.exe ``` ### 编译并启动 L2 Server ``` # 进入 Server 文件夹 cd gravity-soc-server go mod tidy go build -o gravity-server.exe # 简单执行 (将启动 WebServer) # 将在 /api/v1/events 接收 POSTS .\gravity-server.exe ``` *注意:如果你要在 Windows 上测试主机 Agent,请确保 `wevtutil` 可正常运行且 Microsoft Sysmon 已正确配置。* ## 4. 快速流程图 1. **Pi Zero (Tailer.go)** 静默读取 Unbound 日志文件。发现有人请求 `botnet-server.ru`。由于匹配了严重级别的正则表达式,它将其打包为 `dns_alert` 并通过 HTTP 发送到 L2 Server Pi 5。 2. **Windows 11 (Sysmon_windows.go)**:在 wevtutil 循环中提取出 Microsoft Edge 请求了 `botnet-server.ru` 的 DNS 并产生了一个线程。对其进行过滤、去除杂质并打包为 `network_dns`。发送到 L2 Pi 5。 3. **L2 Server (Pi 5)**:当 SQL 窗口到期(`ABS <= 10 秒`)时,`correlator` 会将域名 `botnet-server.ru` 进行配对。显示 Windows 的 `source_ip`,并在干净的 PDF 报告中确认违规行为。 ## License MIT License -- 详情请参阅 [LICENSE](LICENSE)。
标签:ARM架构, Conpot, DNS监控, ETW, Go语言, HTTP工具, incident响应, IP 地址批量处理, LangChain, SOC平台, Sysmon, URL发现, Windows安全, 分布式系统, 响应大小分析, 安全检测, 安全运营中心, 实时安全监控, 客户端-服务端架构, 工具集, 异常行为监控, 日志审计, 日志收集, 程序破解, 网络映射, 网络连接监控, 轻量级