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语言安全, 供应链攻击防御, 依赖管理, 允许列表生成, 包级别最小特权, 安全防护, 客户端加密, 恶意依赖防护, 日志审计, 权限控制, 策略执行工具, 软件供应链安全, 运行时监控, 运行时策略执行, 远程方法调用, 违规阻止