Mutasem-mk4/gspy

GitHub: Mutasem-mk4/gspy

一款基于 eBPF 的 Go 二进制实时取证与威胁狩猎框架,解决无侵入协程级行为观测难题。

Stars: 0 | Forks: 0

# gspy — eBPF 取证检查器,用于 Go 二进制文件和恶意软件分析
gspy logo

Advanced eBPF-driven Digital Forensics and Incident Response (DFIR) framework for live Golang malware analysis and threat hunting.

[![License: GPL-2.0-only](https://img.shields.io/badge/License-GPL--2.0--only-blue.svg)](LICENSE) [![Go Version](https://img.shields.io/badge/Go-1.21+-00ADD8.svg?logo=go)](https://go.dev) [![Kernel](https://img.shields.io/badge/Kernel-5.8+-yellow.svg?logo=linux)](https://kernel.org) [![Go Reference](https://pkg.go.dev/badge/github.com/Mutasem-mk4/gspy.svg)](https://pkg.go.dev/github.com/Mutasem-mk4/gspy) [![Go Report Card](https://goreportcard.com/badge/github.com/Mutasem-mk4/gspy)](https://goreportcard.com/report/github.com/Mutasem-mk4/gspy) [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/Mutasem-mk4/gspy/badge)](https://securityscorecards.dev/viewer/?uri=github.com/Mutasem-mk4/gspy) [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/011c21fb8c095815.svg)](https://github.com/Mutasem-mk4/gspy/actions/workflows/build.yml) [![Coverage](https://img.shields.io/badge/coverage-check%20CI-brightgreen)](https://github.com/Mutasem-mk4/gspy/actions/workflows/build.yml)

**gspy** 是一款高度专业化的 Linux 网络安全工具,它使用 eBPF 探针(uprobes)和内核跟踪点(tracepoints)附加到正在运行的 Go 进程,将运行的协程映射到实时的系统调用和用户空间堆栈帧。它能够动态、静默且准确地隔离 Go 后门、C2 框架和生产服务器中的恶意或异常并发行为。专为安全运营中心(SOC)、逆向工程师和恶意软件分析师设计,gspy 为编译后的 Go 二进制文件提供了前所未有的可观测性。 无需重启进程(`execve`),无需暂停(`ptrace(ATTACH)` 开销),也绝对不对目标二进制文件的内存进行修改。 ## ⚡ 核心特性 - **✅ 零 `ptrace()` 暂停:** 使用 `process_vm_readv` 和 eBPF,完全绕过 `ptrace` 附加导致的暂停,确保目标进程性能严格不受影响。 - **✅ 跨架构支持:** 完全原生支持,对 `x86_64`(AMD64)和 `AArch64`(ARM64)系统进行 CO-RE 兼容编译。 - **✅ 粒度审计:** 回答关键事件响应问题:*“这个拥有 10,000 个线程的应用程序中,哪个特定的协程刚刚调用了 `execve` 或 `connect`?”* - **✅ 取证完整性模式:** 使用 `--readonly` 标志可保证进程的加密(SHA-256)指纹,并严格执行 0 写入操作保证。 ## 🚀 演示 ![gspy 演示](https://raw.githubusercontent.com/Mutasem-mk4/gspy/master/demo/demo.gif) (使用 `demo/` 中的可重现脚本生成) ## 🧠 技术架构 传统追踪工具(`strace`)通过线程 ID(TID)拦截系统调用,使响应者无法得知是哪个内部 Go 并发操作触发的。 `gspy` 通过将 eBPF 武器化以桥接操作系统与 Go 运行时,解决了这一问题: ``` graph TD classDef bpf fill:#f96,stroke:#333,stroke-width:2px; classDef user fill:#6495ED,stroke:#333,stroke-width:2px,color:#fff; classDef target fill:#4CAF50,stroke:#333,stroke-width:2px,color:#fff; A[gspy Userspace]:::user -->|Inject compiled map| BPF(eBPF VM):::bpf Target[Target Go Binary]:::target -->|Triggers| BPF BPF -->|uprobe on runtime.execute| C{Extract Goroutine ID} C -->|TID to GID Map| BPF_Map[(BPF Hash Map)]:::bpf BPF -->|raw_syscalls/sys_enter| D{Syscall Intercept} D -->|Lookup GID via TID| BPF_Map D -->|Emit Payload| RingBuf[(16MB BPF RingBuf)]:::bpf RingBuf -->|Poll| A A -->|process_vm_readv| Mem[Process Memory] Mem -->|Resolve Stack Symbols| TUI[Terminal UI]:::user ``` 1. **Uprobes:** 钩住 `runtime.execute` 以跟踪 Go 调度器上下文切换,从 `runtime.g` 结构中提取协程 ID(`goid`)。 2. **Tracepoints:** 拦截 `sys_enter`/`sys_exit`,将操作系统线程 ID(TID)与活动的协程映射关联。 3. **用户空间符号化:** 通过 `process_vm_readv` 遍历目标的 ELF 表,将原始指令指针映射为可读的 Go 函数名。 如需深入了解工程细节,请阅读:[**为何 ptrace 对 Go 取证已死**](docs/blog/why-ptrace-is-dead-for-go-forensics.md) ## 🚀 快速启动(演示) 无需手动设置即可查看 `gspy` 的运行效果: ``` # 克隆并运行自动化演示 git clone https://github.com/Mutasem-mk4/gspy cd gspy ./demo/demo.sh ``` 这将构建 `gspy`,启动一个“可疑”的目标进程并在后台运行,然后立即附加到它。 ## 📋 兼容性矩阵 gspy 严格追踪 Go 编译器的内部应用程序二进制接口(ABI)。 | Go 版本 | AMD64(`x86_64`) | ARM64(`aarch64`) | |---------|-------------------|--------------------| | **1.21.x** | ✅ 已验证 | ✅ 已验证 | | **1.22.x** | ✅ 已验证 | ✅ 已验证 | | **1.23.x** | ✅ 已验证 | ✅ 已验证 | | **1.24.x** | ✅ 已验证 | ✅ 已验证 | | *1.17 - 1.20* | ⚠️ 遗留/实验性 | ⚠️ 遗留/实验性 | ### Linux 内核约束 - Linux 内核 **>= 5.8**(BPF 环形缓冲区支持所必需) - `CONFIG_BPF_SYSCALL=y` - `CONFIG_DEBUG_INFO_BTF=y`(推荐用于 CO-RE 可移植性) ## 🛠️ 安装 ### 官方发行版(待审核) gspy 正在被打包以纳入以下核心仓库: * **BlackArch Linux**(PR #4916) * **Kali Linux**(Issue #Pending) * **Parrot OS**(Issue #Pending) ### 从源码编译 ``` git clone https://github.com/Mutasem-mk4/gspy cd gspy make generate # requires clang >= 14 & bpftool make build # requires go >= 1.21 sudo make install # installs securely to /usr/bin and generates manpages ``` ### 权限 授予 Linux 能力以安全运行,无需强制使用 `sudo`: ``` sudo setcap cap_bpf,cap_perfmon+ep /usr/bin/gspy ``` ## 💻 使用 ``` gspy # Show live goroutine→syscall mapping TUI gspy --top # Sort by total syscall volume (default) gspy --latency # Sort strictly by highest syscall response blockage gspy --filter # Subselect modes: io | net | sched | all gspy --readonly # Forensic compliance mode: strict zero-write, logs SHA256 of memory map gspy --json # Export data as newline-delimited JSON stream for SIEM / jq pipelines gspy --debug # Trace BPF verifier logs and map statistics gspy --version # Print release info ``` ## 🤝 贡献 我们积极欢迎 Pull Request,以解决与更新的 Go 测试版兼容性或强化 BPF C 代码。查看 [**贡献指南**](CONTRIBUTING.md) 和 [**行为准则**](CODE_OF_CONDUCT.md)。 ## 📄 许可证与法律 GPL-2.0-only。详见 [LICENSE](LICENSE) 完整文本。 eBPF 内核生态系统的交互要求遵守 GPL。所有源文件均明确包含 SPDX-License-Identifier 标头,以确保 Debian `licensecheck` 和企业开箱即用合规性。
标签:DAST, Docker镜像, EVTX分析, Golang, goroutine, Go语言, GPL-2.0-only, Hpfeeds, tracepoints, uprobes, 内核追踪, 安全渗透, 安全编程, 安全运营中心, 实时分析, 恶意软件分析, 数字取证, 无侵入, 日志审计, 生产环境监控, 目录遍历, 程序破解, 系统调用, 网络映射, 自动化脚本, 观测性