关于linux:关于-eBPF-安全可观测性你需要知道的那些事儿

49次阅读

共计 4164 个字符,预计需要花费 11 分钟才能阅读完成。

许庆伟:龙蜥社区 eBPF 技术摸索 SIG 组 Maintainer & Linux Kernel Security Researcher。
本文是作者在 PODS 2022 大会上对于内核平安方面的一些思考和心得,本次分享将从监控和可观测性、eBPF 平安可观测性剖析、内核平安可观测性瞻望三个方面开展。

一、eBPF 平安可观测性的前景瞻望

从下图能够看到,监控只是可观测性的冰山一角,而大部分都暗藏在水面之下的深层次问题无奈简略通过监控解决。

监控(Monitoring) vs 可观测性(Observability)

目前监控也开始可视化,但绝大部分都是当时预约义参数,而后预先查看日志,进行剖析。监控的毛病包含:

1)可扩展性差,须要批改代码和编译;验证周期长;数据起源窄等问题。

2)可观测性是通过被动定制度量的收集和内核数据聚合,包含以下三种:

Logging

  • 实时或者预先特定事件信息
  • 分布式服务器集群的海量数据溯源图
  • 离散信息整顿各种异步信息

Tracing

  • 数据源:提供数据起源
  • 采集框架:往上对接数据源,采集解析发送数据,往下对用户态提供接口
  • 前端交互:对接 Tracing 内核框架,间接与用户交互,负责采集配置和数据分析

Metrics(度量)

这也是可观测性与监控最次要的区别。

零碎中某一类信息的统计聚合,比方 CPU、内存、网络吞吐、硬盘 I/O、硬盘应用等状况。当度量值触发异样阈值时,零碎能够收回告警信息或被动解决,比方杀死或隔离过程;

次要目标:监控(Monitoring)、预警(Alert)。

总结一下监控和可观测性的区别:

监控:收集和剖析零碎数据,查看零碎以后的状态,对可预感的问题进行剖析解决。

可观测性:通过观察零碎并掂量零碎的外部状态,从其内部输入的数据推断进去零碎此时处于某种程度的度量,特地是咱们所关怀的场景和事件。

二、eBPF 平安可观测性剖析

平安:指的是某种对象或者对象属性不受威逼的状态。

平安可观测性:

  • 通过观测整个零碎,从低级别的内核可见性到跟踪文件拜访、网络流动或能力(capability)变动,始终到应用层,涵盖了诸如对易受攻击的共享库的函数调用、跟踪过程执行或解析收回的 HTTP 申请。因而这里的平安是整体的概念。
  • 提供对各种内核子系统的可观测性,涵盖了命名空间逃逸、Capabilities 和特权降级、文件系统和数据拜访、HTTP、DNS、TLS 和 TCP 等协定的网络流动,以及零碎调用层的事件,以审计零碎调用和跟踪过程执行。
  • 从日志、跟踪及度量三个维度查看相干输入,进而来掂量零碎外部平安状态的能⼒。

eBPF 的平安可观测性体现为对内核来说其存在感极低但观测能力却异样弱小(药效好,副作用小):

  • 程序沙箱化:通过 eBPF 验证器爱护内核稳固运行。
  • 侵入性低:毋庸批改内核代码,且毋庸进行程序运行。
  • 透明化:从内核中通明收集数据,保障企业最重要的数据资产。
  • 可配置:Cilium 等自定义乃至自动化配置策略,更新灵活性高,过滤条件丰盛。
  • 疾速检测:在内核中间接解决各种事件,不须要回传用户态,使得异样检测不便和疾速。

其中 eBPF 程序沙箱化,更加离不开平安模式的 eBPF Verifier(其中最重要的是边界查看):

  • 领有加载 eBPF 程序的流程所需的特权
  • 无 crash 或其余异样导致系统解体的状况
  • 程序能够失常完结,无死循环
  • 查看内存越界
  • 查看寄存器溢出

eBPF 的可观测性利用场景次要有以下三类:

1. 云原生容器的平安可观测性

随着云网边端的急速倒退,人们的眼光越发的聚焦在目前最炽热的云原生场景上。Falco、Tracee、Tetragon、Datadog-agent、KubeArmor 是现阶段云原生场景下比拟风行的几款运行时防护计划。

这些计划次要是基于 eBPF 挂载内核函数并编写过滤策略,在内核层出现异常攻打时触发预置的策略,无需再返回用户层而间接收回告警甚至阻断。

以预防的形式在整个操作系统中执行安全策略,而不是对事件异步地做出反馈。除了可能为多个层级的访问控制指定容许列表外,还可能自动检测特权和 Capabilities 降级或命名空间提权(容器逃逸),并主动终止受影响的过程。

安全策略能够通过 Kubernetes(CRD)、JSON API 或 Open Policy Agent(OPA)等零碎注入。

2. 应用层平安可观测计划

此类解决方案是在应用程序和零碎调用层面上执行,并且可观测性计划也各不相同。它们都有一个用户空间代理,这个代理依赖于按定义收集的可观测性数据,而后对其作出反应,且无奈对内核级别的事件进行观测。

3. 内核层平安可观测计划

此类解决方案是间接在内核层面操作,次要针对运行时加强(runtime enforcement),观测能力较弱(甚至没有观测能力)。内置的内核零碎提供了十分多的策略执行选项,但内核在构建时却只重点提供访问控制的能力,而且十分难以扩大,例如内核是无奈感知到 Kubernetes 和容器的。尽管内核模块解决了可扩展性问题,但因为其产生的平安危险,在很多场景下往往不是一种理智的抉择。

像 LSM-eBPF 这样年老的内核子系统性能十分弱小,也十分有前景,只是须要依赖最新的内核(≥5.7)。

三、内核平安可观测性瞻望

上面从传统内核平安、Android 内核平安、KRSI 等几个方面展开讨论。

1. 传统内核平安计划:

正如 Linus Torvalds 已经说过的,大多数平安问题都是 bug 造成的,而 bug 又是软件开发过程的一部分,是软件就有 bug。

至于是平安还是非安全漏洞 bug,内核社区的做法就是尽可能多的测试,找出更多潜在破绽这样近似于黑名单的做法。

内核代码提交走的流程比拟繁琐,利用到具体内核版本上,又存在周期长以及版本适配的问题,所以导致内核在平安方面倒退的速度显著慢于其余模块。同时,随着智能化、数字化、云化的飞速发展,寰球基于 Linux 零碎的设施数以百亿计,而这些设施的平安保障次要取决于主线内核的安全性和健壮性,当某一内核 LTS 版本被发有破绽,这样相干的机器都会面临被攻破利用的场面,损失难以估计。

2.Android 内核平安

现如今,世界上越来越多的智能终端包含手机、TV、SmartBox 和 IoT、汽车、多媒体设施等等,均深度应用 Android 零碎,而 Android 的底层正是 Linux 内核,这也让 Linux 内核的安全性对 Android 产生重大影响。

因为历史起因,Google 在 Android 内核开源的问题上,理念和 Linux 内核社区不是非常的匹配,这也导致了 Android 对内核做了大量的针对性批改,然而无奈合入到 Upstream 上。这也导致了 Android 内核在平安侧有局部不同于 Linux 内核,侧重点也存在不同。

在操作系统级别,Android 平台不仅提供 Linux 内核的平安性能,而且还提供平安的过程间通信 (IPC)机制,以便在不同过程中运行的利用之间平安通信。操作系统级别的这些平安性能旨在确保即便是原生代码也要受利用沙盒的限度。无论相应代码是自带利用行为导致的后果,还是利用利用破绽导致的后果,零碎都能避免违规利用危害其余利用、Android 零碎或设施自身。

Android 内核平安个性:

  • HWAddressSanitizer
  • KASAN
  • Top-byte Ignore
  • KCFI
  • ShadowCallStack

3. 内核平安可观测性利器 -KRSI

KRSI (Kernel Runtime Security Instrumentation)的原型通过 LSM (Linux security module)模式实现,能够将 eBPF program 挂载到 kernel 的 security hook(平安挂钩点)上。内核的安全性次要包含两个方面:Signals 和 Mitigations,这两者密不可分。

  • Signals:意味着零碎有一些异样流动的迹象、事件
  • Mitigations:在检测到异样行为之后所采取的告警或阻断措施

KRSI 基于 LSM 来实现,这也就使其可能进行拜访控制策略的决策,但这不是 KRSI 的工作重心,次要是为了全面监视系统行为,以便检测攻打(最重要的利用场景,但目前次要还是只做检测居多,因为贸然做阻断解决可能会比拟危险)。从这种角度来看,KRSI 能够说是内核审计机制的扩大,应用 eBPF 来提供比目前内核审计子系统更高级别的可配置性。

1)KRSI 容许适当的特权用户将 BPF 程序挂载到 LSM 子系统提供的数百个钩子中的任何一个下面。

2)为了简化这个步骤,KRSI 在 /sys/kernel/security/bpf 上面导出了一个新的文件系统层次结构——每个钩子对应一个文件。

3)能够应用 bpf()零碎调用将 BPF 程序 (新的 BPF_PROG_TYPE_LSM 类型) 挂载到这些钩子上,并且能够有多个程序挂载到任何给定的钩子。

4)每当触发一个平安钩子时,将顺次调用所有挂载的 BPF 程序,只有任一 BPF 程序返回谬误状态,那么申请的操作将被回绝。

5)KRSI 可能从函数级别做阻断操作,相比过程具备更细粒度,危险水平也会小得多。

4. 后续打算

  • 内核平安问题是个非常复杂的话题,牵一发而动全身,防御机制、加固配置、破绽利用等等挑战性的技术。在进行加固进攻的过程中,又会产生性能或者零碎稳定性相干的影响。
  • 从 eBPF + LSM 的角度能够更加可视化、数据丰盛的观测内核平安状况,进而在内核 Livepatch、破绽检测以及进攻提权相干攻打伎俩上,有着进一步的倒退空间。

内核平安问题,牵一发而动全身,尤其是在运行时平安方面。通过上述 eBPF 新型 program 类型,为 signals 和 mitigation 提供对立 API 的策略,并优化内核 LSM 框架和现有机制容易失落零碎调用的问题,从阻断一个函数调用运行的角度,来实现更细粒度,也更正当的检测计划,同时在内核 Livepatch、破绽检测以及进攻提权相干攻打伎俩上,有着进一步的倒退空间。eBPF 联合 LSM 的计划还在继续演进,性能和性能逐步欠缺。

欢送各位感兴趣的敌人退出龙蜥社区 eBPF 技术摸索 SIG(Special Interest Group)(钉钉群号:44866635),一起探讨分享本人对 eBPF 技术的认识和解决方案,和 SIG 组成员一起开启 eBPF 的神奇之旅!

eBPF 技术摸索 SIG 链接地址:https://openanolis.cn/sig/ebp…

—— 完 ——

正文完
 0