VED (Vault Exploit Defense): 开源实现 June 16, 2022 | 4 最小读取

VED (Vault Exploit Defense): 开源实现

VED - Linux内核威胁检测与防护

VED的LKM版本终于开源了。

VED进化过程

赛博堡垒之前的文章中介绍了Linux内核安全的现状和挑战以及云原生和车联网方案中第三方Linux内核安全方案的场景。赛博堡垒致力于为运行(GNU)-Linux系统的平台和基础架构构建全栈安全方案,在这个过程中我们从PaX/GRsecurity中学习了很多东西,从2010年开始我们持续研究了不同场景下的Linux内核漏洞利用的方法,有些案例是公开的而有些则是并未公开,到2021年赛博堡垒(HardenedVault)成立后我们开始着手研究如何能在部署简易度,性能开销,稳定性以及安全性之间达到平衡,这也是VED目标,这也让VED从一开始就是针对企业生产环境而设计和实现的,比如:

  • 根据漏洞利用方法通用性进而判断是否应该减少某些代码模块的检测范围

  • VED和Linux内核对于企业生产环境来说是一个整体,我们也通过VaultFuzzer对生产环境应用高度依赖的Linux内核子系统进行压力测试以达到较高的代码覆盖率

  • 安全方案扮演业务系统守护者的角色,VED通过VSPP自防护特性加强了自身的防护能力以避免类似Tetragon事件的发生。

理论上讲,VED的特性可以兼容包括LKRGAKO甚至Linux内核rootkit在内的任意LKM框架,我们在LKM的版本最终选定基于开源并且长期维护的LKRG。我们针对公开的漏洞利用和客户提供的0day漏洞利用方法进行了分析。

漏洞 漏洞缓解阶段
CVE-2021-22555 Exploitation
CVE-2021-3573 Exploitation
CVE-2021-3490 Post-exploitation, situational hardening
CVE-2021-33909 Exploitation
CVE-2021-34866 Exploitation
CVE-2021-43267 Exploitation
CVE-2021-42008 Exploitation
CVE-2022-0185 Exploitation
CVE-2022-0492 Post-exploitation, situational hardening
CVE-2022-25636 Exploitation
CVE-2022-1015/CVE-2022-1015-1016 Exploitation
CVE-2022-23222 Post-exploitation
Tetragon bypass Exploitation

赛博堡垒制作了一个用于测试漏洞利用的AMI,读者有兴趣可以在AWS上进行测试,选择区域:US East (N.Virginia),之后进行搜索"vault exploit test":

alter-text

赛博堡垒也在AWS提供了代号为“超越合规“的安全加固版本Hardened Linux (Ubuntu for both x86_64 and arm64),这个版本提供默认的安全加固,通过CIS/STIG最佳实践更容易的帮助用户实现合规(比如PCI-DSS,GDPR等),也默认提供了ModSecurity(Web防火墙),VED(Vault Exploit Defense)社区版以及其他安全特性。

alter-text

检测类型:从赛博堡垒的视角

LKRG 特性

  1. 检查SMEP/SMAP的开启和关闭(p_ed_pcfi_cpu)
  2. pCFI(pSMEP/pSPC): 检测栈上返回地址是否为内核代码段, 以及栈的指针, 大小
  3. 提权检测: 检查credentials是否被数据污染,修改提权(p_ed_enforce_validation)
  4. 内核代码段完整性检测,模块加载检测
  5. addr_limit (针对老版本内核)
  6. 隐藏内核模块

VED 特性

  1. wCFI: 检查栈上返回地址是否为正确callsite
  2. wCFI: Callee可能被特定函数重用的检测(依赖于关闭tail-call优化和直接调用)
  3. VSPP (Vault self-protection): 检查kprobe是否被关闭, 检查关键 hook 点是否被关闭, 卸载 ved 模块函数的执行流检查
  4. 只读timer: 检查部分安全相关的只读数据有没有被污染, 导致安全特性被bypass

提权检测

kprobe point: native_write_cr4, commit_creds, override_creds, revert_creds, call_usermodehelper_exec, call_usermodehelper, set_current_groups, sys_set*id, sys_capset

触发点: 这些内核函数可以重用以进行权限提升,检查它们是否由可用的调用站点调用。

特性: L1 + L2 + V1 + L3 + (V2) 括号表示部分函数使用

VED自防护

kprobe point: disable_kprobe, p_exploit_detection_exit, text_poke

触发点: 被重用的代码路径。

特性: L1 + L2 + V1 + L3 + V1 + V3

后漏洞利用检测

kprobe point: mark_inode_dirty, sys_unshare, cap_task_prctl, sys_add_key, security_ptrace_access, generic_permission, security_bprm_committed_creds, security_bprm_committing_creds, wake_up_new_task, sys_ptrace

触发点: 提权发生后进行新建进程时、或运行时namespace/capability/credentials检测。

特性: L1 + L2 + V1 + V3

Timer & schedule

LKRG timer

kprobe point: schedule, lookup_fast, __queue_work, wake_up_new_task

触发点: 提升检测漏洞利用频率。

特性: L1 + L2 + V1 + L3 + L5 + L6 + V1

  • 间隔: 默认15秒

VED ro guard

只读数据: mmap_min_addr, kptr_restrict, kprobes_all_disarmed

触发点: cyclical check if these essential date was corrupted.

特性: L4 + V4

  • 间隔: 1秒

编译和使用

make && insmod ved.ko