色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一文詳解內核安全配置

Linux閱碼場 ? 來源:內核功守道 ? 作者:許慶偉 ? 2022-09-19 09:12 ? 次閱讀

作者簡介:許慶偉:龍蜥社區eBPF技術探索SIG組 Maintainer & Linux Kernel Security ResearcherCSDN博客:內核功守道

一、知識背景 正如Linus Torvalds曾經說過的,大多數安全問題都是bug造成的,而bug又是軟件開發過程的一部分,是軟件就有bug。至于是安全還是非安全漏洞BUG,內核社區的做法就是盡可能多的測試,找出更多潛在漏洞這樣近似于黑名單的做法。Greg Kroah-Hartman說:“一旦我們修復了它,我們就將它放到我們的棧分析規則中,以便于以后不再重新出現這個bug。”如果沒有2015年11月5號華盛頓郵報的一篇關于內核安全性的爆炸性專題報道《Net of insecurity the kernel of the argument》,內核社區應該仍會固守“A bug is bug”的理念(雖然如今也沒有改變太多)。這篇文章狠狠的批評了內核社區對內核安全的態度,批評Linux “沒有一個系統性的機制能在黑客之前發現和解決安全問題,或引入更新的防御技術”,“甚至Linux內核開發社區都沒有一個首席安全官”等等。 我們都知道內核社區的傳統就是相對安全性更側重于性能和功能(這也是各大廠商最關注的部分),在需要犧牲性能來改善內核安全性時并不愿意折衷處理。其實從另一個角度來看,也不是內核社區不想合入有用的安全Patch,從LKML里面關于LSM或者其他Security相關的訂閱人數、世界上獨立的內核安全公司數量來看,除了一些內核安全機制有相應大公司或大社區維護(SELinux (NSA)、AppArmor (OpenSuSE/Ubuntu)、PaX / grsecurity (Spender)),以及PaX / grsecurity和內核社區的歷史淵源,所以在全球范圍內,真實有效的內核安全開發者是少之又少。 再加上內核代碼提交走的流程比較繁瑣,應用到具體內核版本上,又存在周期長以及版本適配的問題,如下圖,所以導致內核在安全方面發展的速度明顯慢于其他模塊。
  • 一個Linux內核漏洞的修復從Upstream到發行版內核(生產環境)的鏈條過長,因為實際情況是沒有人會真正意義上使用"Upstream"的內核;
  • 內核穩定分支以及發行版社區難以跟進每一個安全修復的分析,回歸測試以及防御手段,甚至會出現漏掉的情況;
  • Linux內核社區堅持"Security through obscurity"哲學,這意味著內核社區從來不主動申請CVE漏洞編號,即使如此,2021年1月到8月,有CVE編號的內核漏洞超過110個
  • 漏洞軍火商有自己的生態,他們并不關心是否有CVE的存在而只關注漏洞的成因以及漏洞利用的方法

    55495ae4-37b0-11ed-ba43-dac502259ad0.jpg

隨著智能化、數字化、云化的飛速發展,全球基于Linux系統的設備數以百億計,而這些設備的安全保障主要取決于主線內核的安全性和健壯性。當某一內核LTS版本被發有漏洞,這樣相關的機器都會面臨被攻破利用的局面,損失難以估計。
Critical&HighCVElifetimes

556422b6-37b0-11ed-ba43-dac502259ad0.png

基于以上歷史原因,內核自防護項目KSPP(Kernel Self Protection Project)應運而生。KSPP是由Linux基金會旗下的CII(基礎架構聯盟)管理,其吸納了來自諸多大廠商(Google, RedHat,Intel,ARM等)的工程師進行聯合工作,旨在緩解Linux內核自身安全缺陷,增強對內核漏洞的防御,主要參考了主要工作是參考PaX / grsecurity的實現來移植或者重新實現類似的功能然后推進到Linux內核主線。 第一個加固內核安全的Patch合并到了主線Linux 4.6上,自此,KSPP開始了自己的使命,不限于對以下幾點,對內核安全性做了增強和優化:
  1. 縮小攻擊面
  2. 限制內核的內存使用權限
  3. 只讀數據和可執行代碼不可寫
  4. 函數指針和重要變量不可寫
  5. User space和Kernel space內存分離
  6. 過濾無用系統調用
  7. 內存完整性
  8. KASLR

二、加固內核Config文件配置

從KSPP項目角度出發,以上所有內核安全方案的基礎,都在于對內核Config文件的加固配置。下面從通用配置、GCC配置、命令行調試配置、ARM和X86的32位以及64位體系架構,這幾個涵蓋面最廣的角度來分別講解具體推薦配置,這些配置不僅用于加固內核安全,更可以用在內核穩定性和性能優化上,具體大家可以在實驗環境下驗證效果。

  1. 內核通用配置
  2. GCC編譯器
  3. 命令行調試配置
  4. X86_32
  5. X86_64
  6. ARM
  7. ARM64

三、內核通用配置 #Debug開關,以便調試
CONFIG_BUG=y
#內核頁表安全配置
CONFIG_DEBUG_KERNEL=y (4.11版本之前)
CONFIG_DEBUG_RODATA=y (4.11版本)
CONFIG_STRICT_KERNEL_RWX=y (4.11至最新版本)
#報告危險內存權限情況(注:不是所有平臺都適用)
CONFIG_DEBUG_WX=y
#啟用直接物理內存訪問
CONFIG_STRICT_DEVMEM=y
CONFIG_IO_STRICT_DEVMEM=y
#SYN 防護
CONFIG_SYN_COOKIES=y
#多重加固驗證常見的結構體異常
CONFIG_DEBUG_CREDENTIALS=y
CONFIG_DEBUG_NOTIFIERS=y
CONFIG_DEBUG_LIST=y
CONFIG_DEBUG_SG=y
CONFIG_BUG_ON_DATA_CORRUPTION=y
CONFIG_SCHED_STACK_END_CHECK=y
#使能seccomp BPF
CONFIG_SECCOMP=y
CONFIG_SECCOMP_FILTER=y
#使能用戶層Ptrace保護機制
CONFIG_SECURITY=y
CONFIG_SECURITY_YAMA=y
#使能usercopy邊界檢查,并禁止fallback,以獲得完整的白名單執行CONFIG_HARDENED_USERCOPY=y
#CONFIG_HARDENED_USERCOPY_FALLBACK is not set
#CONFIG_HARDENED_USERCOPY_PAGESPAN is not set
#隨機分配空閑列表,加固meatadata
CONFIG_SLAB_FREELIST_RANDOM=y
CONFIG_SLAB_FREELIST_HARDENED=y
#High-order頁分配空閑列表
CONFIG_SHUFFLE_PAGE_ALLOCATOR=y
#使能Slub分配器檢查
CONFIG_SLUB_DEBUG=y
#當Higher-level分配的內存釋放后立即擦除,需要使能page_poison=1
CONFIG_PAGE_POISONING=y
CONFIG_PAGE_POISONING_NO_SANITY=y
CONFIG_PAGE_POISONING_ZERO=y
#使能內核棧保護
CONFIG_VMAP_STACK=y
#使能引用計數檢查
CONFIG_REFCOUNT_FULL=y
#在構建時和運行時檢查str*()和mem*()函數中可能溢出結構的內存拷貝
CONFIG_FORTIFY_SOURCE=y
#避免通過dmesg暴露內存地址
CONFIG_SECURITY_DMESG_RESTRICT=y
#使能系統調用入口上的隨機內核棧偏移量計算(5.13版本后)
CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT=y
#使能內存溢出檢測,類似于KASAN,但是開銷幾乎為0,可以全環境復現問題時是使用
CONFIG_KFENCE=y
#使能編譯警告,便于調試 (5.15版本后)
CONFIG_WERROR=y
#強制IOMMU TLB失效,使設備永遠無法訪問過時的數據內容CONFIG_IOMMU_DEFAULT_DMA_STRICT=y#在退出函數時,擦除所有調用者使用的寄存器痕跡,以防止ROP攻擊CONFIG_ZERO_CALL_USED_REGS=y#禁止物理內存直接寫入
#CONFIG_ACPI_CUSTOM_METHOD is not set
#禁止基于brk的ASLR
#CONFIG_COMPAT_BRK is not set
#禁止內核內存直接寫入
#CONFIG_DEVKMEM is not set
#禁止內核Kcore布局圖
#CONFIG_PROC_KCORE is not set
#禁止VDSO ASLR
#CONFIG_COMPAT_VDSO is not set
#建議4.1版本之前關閉此選項,阻斷堆內存攻擊
#CONFIG_INET_DIAG is not set
#關閉傳統PTY接口
#CONFIG_LEGACY_PTYS is not set
#使能SELinux運行時調整功能
#CONFIG_SECURITY_SELINUX_DISABLE is not set
#出現內核oops時,立即重啟
CONFIG_PANIC_ON_OOPS=y
CONFIG_PANIC_TIMEOUT=-1
#關閉Root用戶通過加載模塊來修改內核內存
#CONFIG_MODULES is not set
#如果的確需要使用Root權限來操作內核,在使能CONFIG_MODULE=y后,建議打開如下配置:CONFIG_DEBUG_SET_MODULE_RONX=y
CONFIG_STRICT_MODULE_RWX=y
CONFIG_MODULE_SIG=y
CONFIG_MODULE_SIG_FORCE=y
CONFIG_MODULE_SIG_ALL=y
CONFIG_MODULE_SIG_SHA512=y
CONFIG_MODULE_SIG_HASH=“sha512”
CONFIG_MODULE_SIG_KEY=“certs/signing_key.pem”

四、GCC #使能GCC Plugins
CONFIG_GCC_PLUGINS=y
#使能-fstack-protector-strong (gcc 4.9+) 以全范圍覆蓋檢測Stack Canary
#內核4.18版本之前,如下配置:
#CONFIG_CC_STACKPROTECTOR=y
#CONFIG_CC_STACKPROTECTOR_STRONG=y
#內核4.18版本之后,如下配置:
CONFIG_STACKPROTECTOR=y
CONFIG_STACKPROTECTOR_STRONG=y
#使能在函數入口初始化所有堆棧變量,要求Clang和GCC 12版本以上CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF_ALL=y(GCC 12前)
CONFIG_INIT_STACK_ALL_ZERO=y
#系統啟動時收集更多的entropy信息
CONFIG_GCC_PLUGIN_LATENT_ENTROPY=y
#強制所有結構體在傳遞給其他函數之前進行初始化
CONFIG_GCC_PLUGIN_STRUCTLEAK=y
CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF_ALL=y
#系統調用推出后擦除堆棧信息,減少堆棧內舊數據的生命周期CONFIG_GCC_PLUGIN_STACKLEAK=y#隨機化系統結構的布局。這可能會對性能產生巨大的影響,所以請謹慎使用或使用
#CONFIG_GCC_PLUGIN_RANDSTRUCT_PERFORMANCE=y
CONFIG_GCC_PLUGIN_RANDSTRUCT=y

五、X86_64 #禁止分配內存起始階段的64K內地址
CONFIG_DEFAULT_MMAP_MIN_ADDR=65536
#禁止MSR寄存器寫權限
#CONFIG_X86_MSR is not set
#使能隨機分配內核和內存地址
CONFIG_RANDOMIZE_BASE=y
CONFIG_RANDOMIZE_MEMORY=y
#Libc不再需要用戶空間中的固定位置映射
CONFIG_LEGACY_VSYSCALL_NONE=y
#使能內核頁表隔離機制,以刪除整個緩存計時側通道類
CONFIG_PAGE_TABLE_ISOLATION=y
#縮小暴露的攻擊面
#CONFIG_IA32_EMULATION is not set
#CONFIG_X86_X32 is not set
#CONFIG_MODIFY_LDT_SYSCALL is not set
#完全刪除vsycall,以避免它成為任何類型的固定位置的ROP目標。
vsyscall=none

六、X86_32 #32-bit 內核上, 使能PAE#CONFIG_M486 is not set
#CONFIG_HIGHMEM4G is not set
CONFIG_HIGHMEM64G=y
CONFIG_X86_PAE=y
#禁止分配內存起始階段的64K內地址
CONFIG_DEFAULT_MMAP_MIN_ADDR=65536
#禁止MSR寄存器寫權限
#CONFIG_X86_MSR is not set
#使能隨機分配內核地址
CONFIG_RANDOMIZE_BASE=y
#使能內核頁表隔離機制,以刪除整個緩存計時側通道類
CONFIG_PAGE_TABLE_ISOLATION=y
#禁止16位程序模擬和相關的LDT操作
#CONFIG_MODIFY_LDT_SYSCALL is not set

七、ARM64 #禁止分配內存起始階段的32K內地址,不是64K的原因是因為ARM加載器需要使用這段地址
CONFIG_DEFAULT_MMAP_MIN_ADDR=32768
#使能隨機分配內核地址
CONFIG_RANDOMIZE_BASE=y
#使能PAN模擬器.
CONFIG_ARM64_SW_TTBR0_PAN=y
#使能內核頁表隔離機制,以刪除整個緩存計時側通道類
CONFIG_UNMAP_KERNEL_AT_EL0=y

八、Arm #禁止分配內存起始階段的32K內地址,不是64K的原因是因為ARM加載器需要使用這段地址
CONFIG_DEFAULT_MMAP_MIN_ADDR=32768
#最大化用戶空間內存和ASLR
CONFIG_VMSPLIT_3G=y
#對于老的Qualcomm內核版本,如下配置
CONFIG_STRICT_MEMORY_RWX=y
#使能PXN/PAN模擬器
CONFIG_CPU_SW_DOMAIN_PAN=y
#禁止陳舊接口,縮減攻擊面
#CONFIG_OABI_COMPAT is not set

九、進程命令行調試配置 #擦除Slab和頁分配的內存(5.3版本后)
init_on_alloc=1
init_on_free=1
#使能系統調用入口上的隨機內核棧偏移量計算(5.13版本后)
randomize_kstack_offset=on
#禁用slab合并,使得許多堆溢出攻擊更加困難
slab_nomerge
#始終啟用內核頁表隔離,即使CPU聲稱它對Meltdown是安全的
pti=on
#預防L1TF
nosmt
#使能SLUB redzoning和健康檢查
slub_debug=ZF
#使能Slab/Slub分配器的內存溢出檢測功能,需在內核5.3后版本上,使能CONFIG_SLUB_DEBUG=y
slub_debug=P
#使能伙伴系統分配器的內存溢出檢測功能,需要在內核5.3版本上,使能CONFIG_PAGE_POISONING=y
page_poison=1
#強制IOMMU TLB失效,使設備永遠無法訪問過時的數據內容
iommu.passthrough=0 iommu.strict=1

十、結論 內核安全問題,牽一發而動全身,尤其是在配置方面,所以如果有的時候在穩定性或者性能優化上卡住,不妨從內核配置的角度,結合上文的詳細說明,換個角度來分析問題,可能會有更好的收獲。這篇文章著重從內核安全配置的角度來分析了KSPP,在LSM機制、漏洞利用分析、棧溢出攻擊等方面會有真實利用場景,后續會逐步更新相關文章。
審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 內核
    +關注

    關注

    3

    文章

    1377

    瀏覽量

    40326
  • Linux
    +關注

    關注

    87

    文章

    11322

    瀏覽量

    209861
  • config
    +關注

    關注

    0

    文章

    15

    瀏覽量

    4635

原文標題:萬字長文 | 手把手教你加固內核安全配置

文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    詳解Linux內核源碼組織結構

    概要:本文內容包含Linux源碼樹結構分析、Linux Makefile分析、Kconfig文件分析、Linux內核配置選項分析。這些知識是為了理解內核文件的組織形式,為具體移植內核做知識準備。
    的頭像 發表于 05-10 19:28 ?5783次閱讀

    嵌入式Linux內核移植詳解(頂嵌)

    嵌入式內核移植步驟詳解配置含義及內容等方面
    發表于 11-20 16:00 ?19次下載

    Linux內核配置系統詳解

    ,都將面臨著同樣的問題,即如何將源代碼融入到 Linux 內核中,增加相應的 Linux 配置選項,并最終被編譯進 Linux 內核。這就需要了解 Linux 的內核配置系統。 眾所周
    發表于 11-01 15:45 ?4次下載

    詳解Linux內核測試現狀

    of a feather)會議,Dhaval Ginal和Sasha Levin組織了個關于內核測試的相關討論,讓我們起去看看。
    的頭像 發表于 01-01 09:06 ?3209次閱讀

    詳解藍牙模塊原理與結構

    電子發燒友網站提供《詳解藍牙模塊原理與結構.pdf》資料免費下載
    發表于 11-26 16:40 ?94次下載

    詳解精密封裝技術

    詳解精密封裝技術
    的頭像 發表于 12-30 15:41 ?1679次閱讀

    詳解分立元件門電路

    詳解分立元件門電路
    的頭像 發表于 03-27 17:44 ?3292次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>詳解</b>分立元件門電路

    詳解pcb和smt的區別

    詳解pcb和smt的區別
    的頭像 發表于 10-08 09:31 ?3408次閱讀

    詳解pcb地孔的作用

    詳解pcb地孔的作用
    的頭像 發表于 10-30 16:02 ?1701次閱讀

    詳解pcb不良分析

    詳解pcb不良分析
    的頭像 發表于 11-29 17:12 ?1201次閱讀

    詳解PCB半成品類型

    詳解PCB半成品類型
    的頭像 發表于 12-11 15:41 ?1416次閱讀

    詳解pcb的msl等級

    詳解pcb的msl等級
    的頭像 發表于 12-13 16:52 ?9902次閱讀

    詳解pcb微帶線設計

    詳解pcb微帶線設計
    的頭像 發表于 12-14 10:38 ?3431次閱讀

    詳解pcb的組成和作用

    詳解pcb的組成和作用
    的頭像 發表于 12-18 10:48 ?1614次閱讀

    詳解pcb回流焊溫度選擇與調整

    詳解pcb回流焊溫度選擇與調整
    的頭像 發表于 12-29 10:20 ?1714次閱讀
    主站蜘蛛池模板: 亚洲日韩视频免费观看| 边做边爱播放3免费观看| 国产伦精品一区二区三区| 香港成人社区| 精品无码国产AV一区二区三区| 在线 无码 中文 强 乱| 欧美激情视频一区| 国产精品99AV在线观看| 伊人久久精品99热超碰| 欧美性受xxxx狂喷水| 国产精品免费一区二区三区视频 | 日日天干夜夜狠狠爱| 国产精品无码AV天天爽色欲 | 亚洲AV怡红院AV男人的天堂| 麻豆AV久久无码精品九九| 大桥未久与黑人中出视频| 一级毛片免费播放| 日产久久视频| 久久久久九九| 国产成人亚洲精品午夜国产馆| 伊人22222| 涩涩网站在线看| 老妇xxxxbbbb| 国产日韩高清一区二区三区| 99re6久久热在线视频| 午夜天堂一区人妻| 女人高潮了拔出来了她什么感觉| 国产日韩欧美综合久久| FREE17一18外女破| 夜夜艹日日干| 思思re热免费精品视频66| 美国兽皇zoo在线播放| 国产一级毛片在线| 成年人视频免费在线观看| 在线看无码的免费网站| 午夜看片a福利在线观看| 欧美做真爱欧免费看| 久久亚洲黄色| 狠狠久久免费视频在线| 公开超碰在线视频| 99久久免费国内精品|