VED (Vault Exploit Defense): 开源实现 June 16, 2022 | 4 min Read

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