关于Minderbinder
Minderbinder是一款基于eBPF的进程安全测试工具,在该工具的帮助下,广大研究人员可以通过注入噪声来测试目标进程的安全性。
Minderbinder 是一款使用 eBPF 将故障注入正在运行的进程的工具。当前版本的Minderbinder 可以通过将 kprobes 附加到系统调用处理程序来将故障注入系统调用,并通过将流量过滤器附加到 Linux 的流量控制子系统来将故障注入传出网络流量。
功能介绍
Minderbinder 旨在让将故障注入到进程中变得简单。我们可以编写一个 config.yaml 来描述要注入的故障以及要将其注入到的进程,然后启动 minderbinder,看看会发生什么。
运行机制
当前版本的Minderbinder运行机制如下:
1、用户空间应用程序读取配置文件,附加必要的探测器,并将配置写入syscall_target_configeBPFoutgoing_network_config映射;
2、kprobe execve会捕获新进程的启动。在找到与映射中的目标匹配的进程后_config,它们会将 PID 数据添加到目标配置并更新相应的_target映射。例如,匹配的元素syscall_target_config会导致将 PID+目标配置添加到syscall_targets;
3、然后,负责每个模块的 eBPF 会触发其特定的钩子,并在其映射中找到相关条目后_targets,“中断”相应正在考虑的操作;
工具要求
Go运行时环境
工具安装
由于该工具基于Go开发,因此我们首先需要在本地设备上安装并配置好最新版本的Go环境。
接下来,广大研究人员可以直接使用下列命令将该项目源码克隆至本地:
https://github.com/scottgerring/minderbinder.git
工具使用
Minderbinder 支持两种不同的干预措施 -syscall和outgoing_network:
agents_of_chaos: syscall: # Stop curl from using `openat` - name: break_curl_openat syscall: openat ret_code: -2 # NOENT / no such file or directory targets: - process_name: curl delay_ms: 100 # Milliseconds to wait after the process starts. For openat, this gives the process a chance to start properly. failure_rate: 100 outgoing_network: - name: break_wget_network targets: - process_name: wget delay_ms: 100 # Milliseconds. In this case, 100ms should be enough to get a DNS request through for the endpoint, before breaking the actual transfer to the HTTP server failure_rate: 100
要运行 minderbinder,您需要指定配置文件,并且如果您正在使用outgoing_network,还要指定要附加的接口:
sudo ./minderbinder --interface enp67s0 config.yaml
除此之外,我们还可以使用Minderbinder为现有的单元测试框架提供后端,以便我们可以编写组件测试,以有趣的、与混乱相关的方式轻松破坏被测代码:
func TestYourAPIHandler_DownstreamFailure(t *testing.T) { // Create a new request req := httptest.NewRequest(http.MethodGet, "/your-api-endpoint", nil) // Record the response rec := httptest.NewRecorder() // Failure configuration cfg := FailureConfig{ OutgoingNetwork: [] OutgoingNetworkFailure { { Protocol: "TCP", DestPort: 443, FailureRate: 100 } } } // Wrap the actual handler call with Minderbinder. Because Minderbinder is injecting // failures into this process using eBPF, we don't need to elaborately craft stubs here; // we can setup the minderbinder := &Minderbinder{} minderbinder.WithFailures(cfg, func() (*http.Response, error) { // Call the API handler YourAPIHandler(rec, req) return nil }) // We should get a 502 / bad gateway back assert.Equal(t, http.StatusBadGateway, rec.Code) assert.Equal(t, "Downstream service failedn", rec.Body.String()) }
工具运行演示
许可证协议
本项目的开发与发布遵循Apache-2.0开源许可协议。
项目地址
Minderbinder:【GitHub传送门】
参考资料
1.本站内容仅供参考,不作为任何法律依据。用户在使用本站内容时,应自行判断其真实性、准确性和完整性,并承担相应风险。
2.本站部分内容来源于互联网,仅用于交流学习研究知识,若侵犯了您的合法权益,请及时邮件或站内私信与本站联系,我们将尽快予以处理。
3.本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
4.根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
5.本站是非经营性个人站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途
暂无评论内容