《戴世鑫--eBPF在安全领域的应用实践.pdf》由会员分享,可在线阅读,更多相关《戴世鑫--eBPF在安全领域的应用实践.pdf(29页珍藏版)》请在三个皮匠报告上搜索。
1、eBPF在安全领域的应用实践第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r a v e l.c o m中 国 西 安戴世鑫中兴通讯信息安全治理存在的挑战eBPF能解决的问题权限失败通用维测方案展望第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r a v e l.c o m中 国 西 安 Linux在各领域广泛应用,有近60%的嵌入式产品选择Linux作为操作系统。典型应用领域有路由器、汽车、机器人、智能终端等。信息安全治理存在的挑战第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f
2、t r a v e l.c o m安全威胁加剧随着万物互联时代的到来,设备从传统的单机向网联化、智能化扩展,信息安全日趋重要,设备上暴露的安全漏洞可能引发更加严重的后果。以5G电信设备为例:5G 网络实现了移动网络从面向人的连接向面向机器连接的演变,安全问题可能引发严重事故。电信设备面临基础设施、网管接口等方面的安全威胁。操作系统作为基站设备必要部分,是电信业务运行的基础,需提升安全性以应对上述威胁。另外,随着国际局势变化等影响,近年国内外运营商、政府等对电信设备的安全测试愈加严格。信息安全治理存在的挑战第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r
3、a v e l.c o m为应对安全威胁,对系统每个层面均进行信息安全治理。如漏洞处理、内核功能层的网络安全配置、用户组件层的鉴权认证、应用层的服务安全等。其中,应用操作系统提供的安全机制进行安全加固,是一个必要环节。信息安全治理存在的挑战第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r a v e l.c o m信息安全治理存在的挑战操作系统给产品提供多种安全机制。但加固后业务申请权限失败时,内核提供信息有限,业务很难及时定位原因。内核仅返回一个错误编号EXXX,业务侧原因是啥?为什么不允许?为什么参数无效?为什么权限不够?为引导用户更好地使用安全机制
4、,进行安全设计与安全部署。迫切需要一种高效的权限失败根因分析方案。第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r a v e l.c o m工具名功能优点缺点capable获取所有申请的能力与结果能力缺失的故障能够定位缺失的能力单能力缺失场景retsnoop获取特定函数集合的返回值能批量的对内核兴趣函数执行结果进行监控应用门槛高,需要知道函数清单eperm获取系统调用层面发生权限失败能监控系统调用层面发生的权限失败单系统调用场景audit日志获取SELinux等鉴权模块生成日志SELinux等少部分鉴权模块原生支持覆盖不全安全领域存在的问题社区现有解决
5、方案无法满足权限失败定位诉求,无完备的Linux权限失败分析工具及方案。第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r a v e l.c o m安全领域存在的问题应对权限失败,更完善的分析方案是?第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r a v e l.c o m第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r a v e l.c o meBPF能解决的问题eBPF是一种在Linux内核中实现的安全且高效的沙盒执行环境。能够在不修改源码或加载内核模块的情况下,注入
6、一段程序至系统几乎任意位置,且被安全地执行,最终达到对系统观测和流程修改的目的。eBPF广泛应用于安全审计、性能分析、网络过滤等领域。eBPF优势:1、高效。更专注于数据处理;数据采集与分析一体;统一的方法使用内核各种维测机制;便捷的数据通信机制,利于数据处理。2、安全。eBPF程序执行前会进行验证,确保其不会对系统造成破坏。3、维测模块与产品解耦,跨平台与跨版本。第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r a v e l.c o mkprobe/uprobe/ftrace/tracepoint/perf_event/USDT/user_event
7、/xdp/sock安全跨平台版本统一维测解耦便捷通信eBPF能解决的问题attach1、eBPF程序可协同的trace机制清单:动态插桩:以uprobe、kprobe为例。arch_uprobe_exception_notifynotifier_call_chain_atomic_notifier_call_chainatomic_notifier_call_chainnotify_diedo_int3int3 2、协同的基本原理:动态插桩、静态插桩。eBPF 程序需要挂载到某个内核路径(挂载点)才能被执行。kprobeperf_eventraw_tracepointtracepointupr
8、obetracecgrouplsmnetnsxdpfreplaceusdtksyscallnetfilternetkittcxeBPF能解决的问题第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r a v e l.c o m统一的方法使用内核各种维测机制。静态插桩:以tracepoint为例。_bpf_prog_run32trace_call_bpfperf_call_bpf_exit perf_syscall_exittrace_sys_exitsyscall_trace_exitel0_svc_commonel0_svc_handlerel0_svc1
9、、trace_pipe应用场景:仅需要获取特定内核函数参数等无需进一步处理的简单信息,比如删除文件时的文件路径是什么?2、共享数据 bss应用场景:需要在内核中采集数据,并在用户态进行处理。轮询机制。3、map应用场景:内核采集的数据类型为字典,即 键名k:键值v 的形式,比如特定进程PID调用某个函数的次数。4、pin_map应用场景:将map关联为一个文件,不同程序也能够通过该文件访问map。5、perf_event应用场景:基于事件驱动的通信方式perf_event。eBPF能解决的问题第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r a v e
10、l.c o m便捷的数据通信机制。eBPF程序为了保证安全,基于eBPF verifier,对程序做了约束:时间维度:有限步数内程序能安全完成。基于DFS的方式遍历BPF程序的所有指令执行分支,不能出现:程序最大执行步数大于阈值、指令流存在环(for/while/goto)、指令不可达(unreachable)、非法jmp(不能跳出BPF代码段范围)、调用了非法函数(要么inline,只能调用辅助函数,如调用了普通内核函数vfs_open)、数据不安全访问(stack溢出/索引值为变量/指针有效性/指针对齐/BPF helper函数参数类型检查).空间维度:函数堆栈限制。eBPF能解决的问题第
11、 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r a v e l.c o meBPF保证运行时安全。eBPF开发方案优点缺点推荐应用场景libbpf1、CORE。2、相对bcc效率高。NA支持CORE。bcc1、python接口,开发效率高。1、性能影响大。启动时编译。2、空间大。引入的clang+llvm库大。维测方案快速进行方案可行性验证。BPF汇编/cBPF1、易调优,执行效率高,1、汇编,晦涩,难维护。NA*还有社区eunomia-bpf、coolbpf等优秀的方案待探索eBPF能解决的问题第 二 届 中 国 e B P F 开 发 者 大 会W
12、W W.e b p f t r a v e l.c o meBPF开发方案。eBPF可方便满足以下用户态场景应用要求:1、函数参数读写2、函数局部变量读写3、全局变量读写4、函数返回值读写5、轻量级进程热补丁/函数流程修改6、漏洞攻击阻断eBPF能解决的问题第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r a v e l.c o m第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r a v e l.c o m一切准备就绪,如何实现权限失败定位?资源访问权限失败定义:存在一个函数调用链,底层函数以语句return-EP
13、ERM;或return-EACCES返回,称此时发生了一次权限失败。例如,/典型的一次错误码EPERM调用过程回溯 return-EPERM;cap_capable ns_capable_common capable_wrt_inode_uidgid generic_permission kretprobe_trampoline inode_permission lookup_open do_last path_openat do_filp_open do_sys_open _x64_sys_open-libc_fun1_xxx 0 x406000.func1-业务故定位包含“return-E
14、xxx”语句的底层函数是关键。怎么定位?第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r a v e l.c o m权限失败通用维测方案第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r a v e l.c o m依据权限失败场景,团队开发了三种定位算法策略,从三种维度定位权限失败原因:权限故障通用维测方案策略功能优点缺点审计鉴权函数监控鉴权相关的函数鉴权情况适用于90%场景权限失败定位,性能开销小鉴权函数难以提取全,低概率无法定位函数返回值回溯构建函数返回值的传递过程所有场景性能开销大,不适用商用环境函数执行流差异
15、函数执行流角度定位差异定位所有场景性能开销大,不适用商用环境用户态:权限故障表现,#mknod nod0 c 1 1mknod:nod0:不允许的操作#date-s 1date:无法设置日期:不允许的操作#mkdir/usr/sbin/dir0mkdir:无法创建目录“/usr/sbin/dir0”:权限不够#rm/proc/self/statusrm:无法删除/proc/self/status:不允许的操作审计鉴权函数法权限故障发生时,内核必定至少存在一次“return-Exxx”语句的执行,内核:某处必定存在函数包含一次return-Exxx执行如何找到所有可观测的兴趣函数?第 二 届 中
16、 国 e B P F 开 发 者 大 会W W W.e b p f t r a v e l.c o m审计鉴权函数法内核函数调用链视角下,遍历所有会导致权限故障的最底层函数,并使用eBPF对该函数清单进行观测。绿色:可观测函数。红色:内核未导出函数,不可观测。第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r a v e l.c o m演示:针对创建设备失败,提示无权限问题,该方案可识别到权限失败发生,并给出了失败原因与参考解决方案。审计鉴权函数法第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r a v e l.c
17、o m函数指针导致法1无法定位,可基于函数执行流对比法进行定位,基于eBPF获取目标业务进程状态,配合动静态构建的函数执行流可得到目标业务鉴权失败点。相同操作,2种不同的内核鉴权流程:执行流1:func1func2 DIFFfunc3func4func5执行流2:func1func2 DIFFfunc3func6func4func5函数执行流差异法第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r a v e l.c o m演示:业务删除文件失败,可得知故障点是由may_delete触发。函数执行流差异法第 二 届 中 国 e B P F 开 发 者 大
18、会W W W.e b p f t r a v e l.c o m调用堆栈能反馈函数在观测时刻的调用关系,函数返回值传递过程是否也能类似思路获取?动静态分析构建函数调用关系,并基于eBPF对涉及函数进行观测,分析函数调用过程中函数返回值的传递过程。函数返回值回溯法第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r a v e l.c o m演示:rm/proc/self/status失败,返回错误码-EPERM。可知鉴权失败与may_delete有关。函数返回值回溯法第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r a
19、 v e l.c o m第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r a v e l.c o m经实践验证,可降低约1/3权限失败定位耗时,有效帮助了用户更好地使用操作系统安全机制,利于安全设计与安全部署。权限故障通用维测方案第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r a v e l.c o mZealDoctor维测调优框架ZealDoctor维测调优框架采集与分析解耦:减少不必要的重复采集,减少性能消耗;策略复用,提高工具灵活度。精简依赖:基于eBPF、ftrace、kprobe等内核自带功能。标准化IO:精简代码,减少消耗,且容易按需扩展。跨平台:框架基于标准C开发,工具组件支持C、Python。可与SysOM对接,扩展边缘场景。展望01提高eBPF程序的可调试性02eBPF支持低版本内核第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r a v e l.c o m03eBPF安全问题第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r a v e l.c o m