chains-project/goleash

GitHub: chains-project/goleash

GoLeash 是一个基于 eBPF 的工具,用于在运行时执行策略以防御 Go 应用的软件供应链攻击。

Stars: 19 | Forks: 0

# other attributes, but the instruction specifies to keep technical jargon in English. GoLeash 是一个基于 eBPF 的运行时策略执行工具,旨在防御 Go 应用程序遭受软件供应链攻击。它在包级别实施最小权限原则,识别并阻止通过受损依赖引入的未授权或恶意行为。 GoLeash 在运行时监控系统调用以: - 检测 Go 包何时使用了其不应使用的系统能力(例如,建立网络连接、修改文件)。 - 减轻恶意或过度权限的第三方依赖带来的影响。 - 即使在高级代码混淆技术下也保持有效。 **操作模式** - **分析模式**:通过观察系统调用和堆栈跟踪,自动分析合法的运行时行为,以生成细粒度的、按包划分的允许列表。 - **执行模式**:在运行时,根据先前生成的策略验证系统调用,阻止并记录违规行为。 参见论文:[GoLeash: Mitigating Golang Software Supply Chain Attacks with Runtime Policy Enforcement](https://arxiv.org/pdf/2505.11016) ## 系统要求 - llvm - clang - libbpf-dev - gcc-multilib ## 可运行示例:FRP (Fast Reverse Proxy) 我们提供了一个使用 FRP (Fast Reverse Proxy) 的可运行示例来展示 GoLeash 的实际效果。FRP 是一个用 Go 编写的反向代理。此示例演示了如何对 FRP 的 ```frpc```(客户端)和 ```frps```(服务器)二进制文件进行分析、生成和执行包级能力策略。 ### 设置目标应用 首先,克隆仓库: ``` git clone https://github.com/fatedier/frp.git ``` GoLeash 使用 Go 符号信息进行堆栈解析。要启用此功能: - 在 FRP 的 ```Makefile``` 中,从编译规则中移除 ```-ldflags "$(LDFLAGS)"```。 - 或者更通用地,移除 ```-w -s``` 标志,这些标志会剥离调试信息。 仍在 Makefile 中,设置 ``` CGO_ENABLED=1 ``` 最后,编译服务器和客户端二进制文件: ``` cd frp make ``` 可选:您可以通过修改 ```concurrency``` 参数来增加 ```/hack/run-e2e.sh``` 中的测试并行度。 ### 配置并编译 GoLeash 编辑 GoLeash 中的 ```config.toml``` 文件,告知它需要监控哪些二进制文件: ``` [targets] binaries = [ "frpc", "frps" ] binary_paths = [ "..frp/bin/frps", "..frp/target/bin/frpc" ] ``` 编译 GoLeash ``` cd goleash make ``` ### 运行分析与执行 在 GoLeash 监控执行以构建策略的同时,运行 FRP 的端到端测试。 首先,以分析模式运行 GoLeash。 ``` make build ``` 然后,在另一个 shell 中,运行端到端测试: ``` cd frp make e2e ``` 您可以多次运行此命令以改善策略的覆盖率。完成后,停止 goleash (CTRL+C),策略将保存在当前目录中 (```trace\store.json```). 要模拟违规,可以手动从 ```tracestore.json``` 中为任意包移除一项能力。然后在执行模式下启动 GoLeash,再次运行端到端测试。 ``` cd goleash make cap-enforce ``` **注意**:更多可运行示例,请参见 ```execute_target.md```
标签:Docker镜像, eBPF工具, eBPF应用, Go应用保护, Go语言安全, 供应链攻击防御, 依赖管理, 允许列表生成, 包级别最小特权, 安全防护, 客户端加密, 恶意依赖防护, 日志审计, 权限控制, 策略执行工具, 软件供应链安全, 运行时监控, 运行时策略执行, 远程方法调用, 违规阻止