关于BoesFS
BoesFS,全称为Based on eBPF Sandboxing File System。BoesFS是一个面向最新计算场景,面向最新技术前沿,将eBPF技术和内核文件系统相融合,专注文件安全、具有优秀的细粒度访问控制能力、面向特权和非特权用户、能够提供接入多种实际运用场景的、用户使用友好的、高性能的沙盒文件系统。
BoesFS项目,创新的将可堆叠文件系统层WrapsFS、eBPF、ACL多种技术相结合,为文件安全和文件操作审计提供了一套解决方案。BoesFS项目还提供了多维度的性能测试方法、功能测试、和访问控制方法的方法,验证其良好的性能和优秀的访问控制能力。
关于BoesFS-FaaS
BoesFS-FaaS Platform是BoesFS沙盒和Serverless模式结合形成的拓展衍生应用之一,是一个满足高并发、高密部署、细粒度访问控制、自定义的动态安全检查、可信文件系统沙盒环境的高性能FaaS平台。基于BoesFS沙盒的轻量级FaaS平台,BoesFS-FaaS取得比基于容器的FaaS的更优秀的性能优势。
- 非受信函数服务的高性能安全运行需求
安全始终是伴随信息技术发展永恒的话题。不可信程序的运行往往需要提供一个可靠的运行环境。
FaaS,Function as a Service,是新一代的无服务器架构模式。开发者无需关注服务器细节,而是将业务函数托管到FaaS平台,由托管的FaaS平台负责实时创建和销毁函数实例,从按需为客户提供业务服务。
随着新的Serverless模式—FaaS的发展,成千上万的函数被交付给FaaS平台,激增了对非受信函数服务的高性能安全运行需求。
举例一个实际场景,一个云服务商为用户提供函数计算服务,例如神经网络训练模型,或者一些加密运算服务,这些未知的不可信代码可能还需要访问包括数据库在内的某些文件。这些大批量的不可信代码可能会是恶意代码,恶意操作服务器上的数据库或者文件。
在FaaS场景中,FaaS平台负责运行开发者部署的不可信的函数服务,需要一个高性能的、可自定义规则的、细粒度的可信沙盒运行环境来保障平台系统的安全,使得能在FaaS 环境中安全运行非受信第三方代码,并能满足FaaS高并发,高密部署的需求。
- 传统的安全方式无法较好满足现有需求
安全访问控制技术一直在不断发展。但随着云计算和容器化技术的发展,传统的安全访问控制技术已经无法满足当下业务场景的需求。
在传统的安全访问控制手段中,他们往往无法满足或者同时满足:①细粒度访问控制的需求。例如Linux的DAC策略只能精确到用户级别,无法提供进程级别的粒度访问控制能力。②面向文件安全和文件请求的控制和审计。例如SCI是从系统调用的角度来做的安全控制操作,Falco则是以系统调用审计的角度为出发点。③具备高性能。SCI的方式依赖于ptrace实现,fuse用户态文件系统也能实现访问控制但带来超高性能的开销。④允许普通用户制定自己的控制规则。传统的安全访问控制方式如MAC需要超级权限。⑤制定安全检查规则太过于繁琐。例如seccomp-bpf需要很高的bpf门槛,Capsicum方式又需要修改原代码,是不透明的。⑥不支持动态制定检查规则的特性。传统的方式往往均不支持运行时检查。⑦面向和接入丰富上层应用场景的能力。传统的安全访问控制方式无法灵活的使用于。⑧模块化设计,支持动态安装和卸载。
面对大批量的不可信代码的运行需求,又希望能提供一个可靠的能够保证文件安全的高性能沙盒运行环境,并且这种安全策略能够很简单的自定义实现,并且可以在进程级别控制粒度和VFS抽象对象访问粒度实现。很遗憾,传统的访问控制技术难以实现,现阶段也并不存在类似成熟项目。但BoesFS在这方面开始做探索和尝试。BoesFS项目拟面向serverless场景创新的提供一种现有安全访问控制技术无法解决的接入需求。
- eBPF技术兴起,但文件系统结合较少
eBPF由于其用户态内核态数据交互、优秀的采集监测能力以及运行时特性等优势,其已经广泛运用于网络监测等领域,但目前eBPF与文件系统方向结合仍然较少。为数不多的优秀项目例如,falco,其基于eBPF实现了对系统调用的检测功能。但在和文件系统结合方面,和文件访问控制方面,还没有成熟的项目做这方面的尝试。为数不多的sandfs提供了eBPF和文件系统结合的雏形思路,但并没有真正付之实践。eBPF和ACL结合方面,在业内,例如字节跳动也有相关的项目,但其还是运用于网络过滤层面。
在Linux,一切皆文件,文件安全格外重要。但当下缺乏面向文件安全和文件请求控制和审计的、细粒度、动态访问控制、高性能的成熟项目,这也是BoesFS项目诞生的一个初衷。
因此本项目将eBPF、文件系统、文件访问控制模型三者结合起来,是一种以创新的角度突破传统eBPF使用的场景。
- 目标1:使用 eBPF 技术实现 serverless场景的文件系统沙盒
- 目标2:提供 fine-grained 的访问控制
- 目标3:允许动态 (programmatic) 的自定义安全检查
- 目标4:具备低性能开销
- 目标5:安全且高性能的FaaS环境
- 行动项1:开发环境编译。在4.11内核版本,Debian 9发行版上编译内核,对内核做特定的定制,搭建BoesFS项目开发环境。
- 行动项2:BoesFS文件系统的设计与实现。基于内核文件系统,实现可结合eBPF技术的内核驱动层BoesFS-in-Kernel,采集VFS API参数,允许模块化等。
- 行动项3:BoesFS代理端的设计与实现。初赛采用熟悉的C语言快速实现用户代理层BoesFS-Agent(C),向用户提供自定义检查的客户端。决赛采用Go语言进行重构BoesFS-Agent(Go)。
- 行动项4:BoesFS的eBPF支持的设计与实现。结合eBPF技术到BoesFS文件系统,定制BoesFS项目的eBPF字节码类型和帮助函数。
- 行动项5:BoesFS的eBPF字节码的设计与实现。结合eBPF的限制和特性,设计eBPF字节码,实现ACL和RBAC两种访问控制模型,支持20个VFS API,支持API参数匹配,为自定义安全规则提供支持。设计eBPF Map,根据上述需求以及优化逻辑,设计内核字节码BoesFS-Check-Module和BoesFS-Agent的交互数据结构eBPF Maps。
- 行动项6:更优秀的安全审计系统实现。增强BoesFS-in-Kernel层,添加文件请求数据采集输出,达到一定拒绝次数关闭程序的功能实现。增加Boes-Agent,实现进程运行时动态替换安全检查规则,优秀的动态性。
- 行动项7:BoesFS项目测试。对BoesFS进行文件系统角度的文件请求测试,对BoesFS沙盒的性能测试,对BoesFS沙盒进行访问能力控制测试。
- 行动项8:BoesFS应用实现,BoesFS-FaaS Platform的设计与实现。提供支持BoesFS沙盒环境的FaaS平台,满足自定义安全规则,高并发,高密集等FaaS需求。
- 行动项9:面向BoesFS-FaaS Platform,提供一组基本的通用的自定义访问控制策略。提供一组基于BoesFS自定义安全检查的ACL和RBAC模式的规则文件,用以保护FaaS场景下的系统安全。
- 行动项10:BoesFS-FaaS项目测试。对BoesFS-FaaS从FaaS服务的相关指标进行测试,并和业内和原生性能指标进行对比。
实现内容 | 对应目标 |
---|---|
行动项1 | 目标1 |
行动项2 | 目标1、目标2、目标4 |
行动项3 | 目标3 |
行动项4 | 目标1、目标3 |
行动项5 | 目标3 |
行动项6 | 目标3 |
行动项7 | 目标4 |
行动项8 | 目标5 |
行动项9 | 目标2,目标3,目标5 |
行动项10 | 目标4,目标5 |
- 展望1:将BoesFS(Flexible)移植到Debian 11发行版,内核5.10上,实现BoesFS(Normal),跨平台移植。
- 展望2:接入更多的实际运用场景,包括但不限于:1.安全检测功能。2.复杂场景下的智能IO请求控制。3.网络和文件设备保护的深入探索。4.构建文件请求的数据集,提供异常检测算法。
- 展望3:面向Serverless,探索更多和容器融合的方式,或许不是取代容器,相辅相成,实现更安全的容器。
- 在4.11内核版本,Debian 9发行版上搭建BoesFS(Flexible)项目开发环境
- 实现4.11支持BoesFS项目模块化的实现
- BoesFS-in-Kernel模块实现内核驱动层BoesFS的7个API的参数采集
- BoesFS-in-Kernel模块实现BoesFS的eBPF类型注册和帮助函数实现
- BoesFS-Agent模块的C语言版本快速实现
- BoesFS-Check-Module模块的实现,访问控制模型ACL的简单实现
- 对eBPF Map进行了简单设计,以满足区域赛需求
- BoesFS项目简单的文件系统性能测试
- BoesFS项目简单的访问控制能力测试
- 覆盖所有文件请求的BoesFS沙盒实现。在BoesFS-in-Kernel,调研Linux内核全部VFS API,确定并实现内核驱动层BoesFS的20个API的参数采集。对应的,对BoesFS-Agent做了拓展和支持。初赛仅支持7个
- 完整实现BoesFS-Check-Module访问控制模型。完善初赛的简单ACL,实现参数匹配功能,实现RBAC访问控制模型。根据上述需求,设计eBPF Map,并实现了eBPF字节码。初赛仅实现简单的ACL。
- BoesFS-Agent双语言实践。BoesFS-Agent(C)的Golang版本移植BoesFS-Agent(Go)的实现,Go语言便于进程管理优秀,简洁且便于后续维护,容易接入FaaS。初赛使用C语言快速开发。
- 更优秀的安全审计系统实现,动态,日志,终止。增加Boes-Agent,实现进程运行时动态替换安全检查规则,优秀的动态性。增强BoesFS-in-Kernel层,添加文件请求数据采集输出,达到一定拒绝次数关闭程序的功能实现。初赛没有实现类似功能,或者功能实现的demo有误。
- BoesFS系统性能优化。使用perf定位分析系统瓶颈,BoesFS-in-Kernel的优化实现,BoesFS-Check-Module的字节码查询优化实现。初赛的性能开销为24%左右,决赛的性能开销为5%-7%左右。
- BoesFS应用实现,BoesFS-FaaS Platform的设计与实现。提供支持BoesFS沙盒环境的FaaS平台,满足自定义安全规则,高并发,高密集等FaaS需求。
- BoesFS项目测试。实现对BoesFS进行文件系统角度的文件请求测试,对BoesFS沙盒的性能测试,对BoesFS沙盒进行访问能力控制测试。初赛仅基于filebench做简单的一次测试,决赛基于多种方法filebench,内核源码压缩解压编译(extfuse和sandfs论文方法),top性能监测等多个维度展示了BoesFS项目性能。初赛功能测试仅对初赛的实现点测试,决赛的功能测试涵盖项目全部实现点。
- BoesFS-FaaS项目测试。对BoesFS-FaaS从FaaS服务的相关指标进行测试,并和业内和原生性能指标进行对比。
- 更多使用方向和应用场景的探索的进行时。在探索未来展望,比如有在开展网络和设备保护的调研和学习。
预期内容 | 预期时间 |
---|---|
项目初步调研:可行性、实现方向、项目框架、技术栈 | 3.29-4.1 |
项目深度调研:已有项目代码、论文、复现、完全弄懂实现逻辑,思考改进方式,ebpf学习 | 4.2-4.14 |
开发环境搭建、架构设计、模块设计、模块接口商定、初赛目标设定 | 4.16-4.22 |
BoesFS各个模块:BoesFS-in-Kernel、Boes-Agent、BoesFS-Check-Module的并行开发工作,输出开发文档 | 4.22-5.10 |
模块对接,调试bug,跑起整个项目,验证预期功能 | 5.10 - 5.20 |
初赛简单的性能测试、初赛简单的访问控制测试 | 5.20 - 5.31 |
初赛文档准备、仓库建设、初赛资料准备 | 6.1 - 6.7 |
和项目导师取得联系,讨论决赛实现内容,定制决赛工作计划,确定决赛行动项。 | 6.7 - 6.14 |
完善初赛阶段的BoesFS遇到的问题,增强性能。实现动态替换规则。FaaS相关项目调研。 | 6.14 - 6.30 |
重构Agent,实现BoesFS-Agent(Go)。完成内核20个API的采集。完成字节码查询优化。 | 7.1 - 7.15 |
实现参数匹配功能。深度调研FaaS及其开源项目。 | 7.15 - 7.22 |
调研其他安全技术手段,如seccomp-bpf。实现BoesFS-FaaS。 | 7.23 - 8.07 |
项目测试,对BoesFS进行测试,对BoesFS-FaaS做测试。准备决赛资料,准备决赛文档,认真准备项目场景,认真准备决赛答辩。 | 8.07 - 8.17 |
项目实现目标上,
实现内容 | 完成情况 | 说明 |
---|---|---|
目标1 | 全部完成 | ①结合eBPF技术和可堆叠文件系统,实现了覆盖全部Linux VFS的函数请求(20个API)的沙盒文件系统,BoesFS-in-Kernel。 |
目标2 | 全部完成 | ①主体上,该文件系统沙盒能实现进程级别的细粒度访问控制。 ②客体上,实现在VFS最底层对象(dentry等)级别的细粒度上对文件请求进行访问控制。 |
目标3 | 全部完成 | ①支持三种自定义模式:原生字节码、ACL模式、RBAC模式。(均支持参数匹配) ②支持两种代理模式:提供交互和非交互两种模式。 ③支持完全动态性。即使沙盒程序正在运行,也能进行安全检查规则的切换。 |
目标4 | 全部完成 | ①对BoesFS进行多维度的性能测试,BoesFS的性能开销仅在5%-7%以内。 |
目标5 | 全部完成 | ① 实现了以BoesFS沙盒为函数运行环境的BoesFS-FaaS,支持自定义安全规则。 ②对BoesFS-FaaS进行并发测试,满足高性能,高并发,高密部署的FaaS需求。 |
项目实现内容上,
实现内容 | 完成情况 | 说明 |
---|---|---|
行动项1 | 完成 | 项目开发环境的搭建,难点在于BoesFS对应的内核定制与编译。 |
行动项2 | 完成 | 设计好了整个驱动层,阅读和调研了VFS所有API,确定和实现了20个VFS API的沙盒,覆盖全部VFS接口。 |
行动项3 | 完成 | 实现了两语言版本的BoesFS-Agent,并将BoesFS-Agent(Go)成功接入FaaS。 |
行动项4 | 完成 | 注册了新类型的eBPF字节码,实现项目字节码需求。 |
行动项5 | 完成 | 实现支持ACL、RBAC、参数匹配的eBPF字节码,设计了model map,dir map,file map,args map四种eBPF Map。 |
行动项6 | 完成 | 实现完全动态,数据采集输出,关闭异常进程功能。 |
行动项7 | 完成 | 对BoesFS进行了多维度的性能测试,filebench文件系统测试,实际场景下的性能测试。对BoesFS完成功能测试、访问能力控制测试。 |
行动项8 | 完成 | 实现了基于BoesFS沙盒的FaaS平台。 |
行动项9 | 完成 | 根据业内权威网站ATT&CK,构建FaaS场景下的威胁模型,根据威胁模型设计安全规则 |
行动项10 | 完成 | 根据FaaS场景的需求,对BoesFS-FaaS平台进行了多维度测试。 |