Linux 系統(tǒng)是開放的,?其上安全機制、工具很多,不同的場景其安全目標(biāo)和選擇的工具都不相同。以下從個人角度仿ATT&CK列出一些常見的安全機制和技術(shù)。
Linux?系統(tǒng)分層
邏輯上總體可以分為三層:硬件層、內(nèi)核層、應(yīng)用層。每層都有攻擊面和相應(yīng)的安全技術(shù)。各層的安全技術(shù)相互配合形成體系化的防御。
紅色表示攻擊面,綠色表示安全機制
硬件
硬件是計算的基礎(chǔ),也是安全的基石。硬件大致由主板、各種總線、CPU、內(nèi)存、硬盤、外設(shè)組成。按照這幾個組件分析下攻擊面和安全技術(shù)。
主板??
主板是其他硬件組件物理上的base。物理安全不能忽視,歷史上發(fā)生過黑客直接替換存儲設(shè)備的案例,特定頻率的電磁波也能使某些硬件故障。??
主板上有CMOS,CMOS中代碼和配置是個攻擊面。其上的配置決定機器的功能和安全功能。如,是否啟用Secure Boot,SGX等安全配置。管理BIOS要設(shè)置管理密碼,開機使用要設(shè)置使用密碼。
BMC(Baseboard Management Controller),一般存在服務(wù)器上,監(jiān)控機器、控制機器啟動、CMOS更新等,可以看作是單獨一個系統(tǒng)。要加強保護(hù),如弱口令等。
硬盤
硬盤這個就挑硬盤的使用和自加密磁盤說說。
自加密磁盤(SED),一般是固態(tài)硬盤。存儲的內(nèi)容是加密的,主控負(fù)責(zé)加密和解密,其作用防止數(shù)據(jù)物理泄漏。開機使用時,要輸入正確的密碼才能使用。
CPU
CPU安全分為兩個方面:1. CPU自身的安全,如 meltdown spectre等缺陷。2. CPU提供的安全特性。
僅在軟件層面上做安全有其不足,如保護(hù)功能有限、性能不足等?,F(xiàn)代CPU上也提供一些安全機制和功能。以12代intel CPU為例說明(ARM上也有類似的安全特性,按照發(fā)展來看,筆者比較看好ARM的CCA安全體系)。
TXT(可信執(zhí)行技術(shù)) :是intel 實現(xiàn)可信計算平臺在CPU中提供的技術(shù)??尚庞嬎闶且惶装踩碚?,涉及到CPU、TPM、主板、內(nèi)核、開發(fā)庫、應(yīng)用,還有一些intel未公開源碼的微碼。其使用也涉及到產(chǎn)品制造商、基礎(chǔ)架構(gòu)和運維、開發(fā)等。發(fā)展很多年了,但基本沒有體系化使用,其中一些基礎(chǔ)功能也比較陳舊,不符合現(xiàn)在的安全發(fā)展。TPM大家接觸的較多。
說到TXT,可能會拿來與SGX比較。TXT是體系化的,平臺化的,面向公司的基礎(chǔ)架構(gòu),也有直接供運維和開發(fā)人員使用的TSS軟件棧和TPM工具。SGX嚴(yán)格來說是可信計算中的隔離執(zhí)行功能,其使用只依賴CPU特性+內(nèi)核支持+SDK,對于開發(fā)人員來說,相對比較容易使用(但是也不容易使用。在12代CPU中已經(jīng)廢棄SGX功能)。
AES-NI:??CPU上的AES加解密指令,提高AES的性能。這個一般的加解密庫都使用了。
PCLMULQDQ:? 無進(jìn)位乘法指令,提高加解密性能。
SHA Extensions:? sha1、sha256哈希算法的硬件加速指令。
Secure Key:?CPU上的隨機數(shù)產(chǎn)生指令。rdseed(產(chǎn)生隨機數(shù)種子)、rdrand。?在內(nèi)核中沒有完全信任CPU的種子指令,只是作為熵源的一部分。
NX:??非執(zhí)行位。標(biāo)記某個頁是禁止執(zhí)行的,如果違反了,產(chǎn)生異常。
Boot Guard Technology: 啟動保護(hù)技術(shù),屬于安全啟動,其目的是保護(hù)啟動過程的完整性(信任鏈的傳遞),防止未經(jīng)驗證的啟動代碼運行,例如BootKit。
SMEP & SMAP:阻止CPU在特權(quán)級別下執(zhí)行用戶模式的代碼。RFLAGS寄存器中的AC標(biāo)志清除時,阻止在特權(quán)級別下訪問用戶模式的內(nèi)存。
UMIP:?一些指令只能在特權(quán)模式下執(zhí)行。如SGDT、SIDT、SLDT、SMSW、STR。
MKTME: 多秘鑰全內(nèi)存加密,與AMD的SME對應(yīng)。這個筆者比較關(guān)注,內(nèi)存安全進(jìn)了一大步。
CET: 控制流加強技術(shù)。兩類: 1. 硬件影子棧,保護(hù)函數(shù)返回地址,如緩沖區(qū)溢出黑客利用。2. 新增ENDBRANCH(32位和64位)指令防御ROP/JOP/COP利用。gcc編譯時函數(shù)第一條指令是ENDBRANCH,運行時,CPU根據(jù)該指令保存/檢查相應(yīng)的狀態(tài),判斷是否惡意利用。
KeyLocker Technology:新增ENCODEKEY指令對key 進(jìn)行wrap并返回一個handle,以后加解密使用這個handle即可。與使用TPM加解密原理相似。
Devil’s Gate Rock: BIOS保護(hù)技術(shù)。更新BIOS時,進(jìn)行簽名、權(quán)限檢查等多項保護(hù)BIOS的技術(shù)集合。
MKTME、CET、Keylocker、Devil’s Gate Rock,這些技術(shù)只有在比較新的主板、CPU、內(nèi)核中才能使用。
12代CPU廢棄的安全技術(shù):MPX和SGX。
外設(shè)
每一種外設(shè)都是一個攻擊面。例如:WIFI、藍(lán)牙、USB類的設(shè)備。
WIFI:各種移動設(shè)備,車載,路由器,家居設(shè)備。這些設(shè)備如果驅(qū)動或者應(yīng)用有漏洞、訪問接入控制策略不當(dāng),都能形成破壞和信息泄漏。如果拿個手機站在馬路上,可以看到車上各種WIFI熱點,如果有耐心走到車附近,很容易就能掃到行車記錄儀上二維碼中的密碼。
藍(lán)牙:這個危害同WIFI。例如藍(lán)牙鼠標(biāo)、鍵盤。如果聯(lián)入系統(tǒng)的鼠標(biāo)被偷走,盲點擊就可以形成破壞。
USB設(shè)備:這個是對不聯(lián)網(wǎng)系統(tǒng)破壞的重要通道。例如,U盤中的惡意文件。
這些外設(shè),盡可能的減少,能物理割掉的割掉,不能割的封上,不能封的要禁止相應(yīng)的驅(qū)動加載。使用的,要保持軟件更新,實施合適的接入控制策略。
各種總線
USB總線、火線、PCI等總線。
PCI總線可以傳輸、更改SED的口令,火線可以直接讀取物理內(nèi)存,USB比較通用,較容易接入各種惡意物理設(shè)備。
安全物理設(shè)備
HSM、TPM都是用于安全目的芯片。TPM是可信計算中的組件,大多數(shù)計算機中都有,相對比較容易使用。openssl也有利用TPM的功能。
Ukey:? 使用系統(tǒng)時用外部設(shè)備進(jìn)行認(rèn)證。例如,CentOS登錄時,或者網(wǎng)銀登錄、玩游戲時都有相應(yīng)的身份認(rèn)證設(shè)備。
內(nèi)核
內(nèi)核大致由以下五部分組成:基礎(chǔ)組件(進(jìn)程調(diào)度與管理、內(nèi)存管理、進(jìn)程間通信,一般裁減時都會保留)、文件系統(tǒng)和塊IO系統(tǒng)、網(wǎng)絡(luò)子系統(tǒng)、各種基礎(chǔ)庫、驅(qū)動和固件。還有安全子系統(tǒng)。重點說一說內(nèi)核中的安全機制和技術(shù)。
自主訪問控制 & ACL
客體的擁有者決定其他用戶的權(quán)限。例如:ACL中配置的策略。Linux系統(tǒng)的 用戶/組/其他+ACL 組成基礎(chǔ)的訪問控制。ROOT作為管理身份,執(zhí)行基礎(chǔ)訪問控制外的功能。
SETUID/SETGID/ NO_NEW_PRIV
這個是基礎(chǔ)訪問控制外的特例。如passwd、mount、各種沙箱程序,盡量減少這類程序就是了。說一說NO_NEW_PRIV,setuid/setgid和capabilites都是合法提權(quán),在執(zhí)行一些程序時,為了防止這些提權(quán)方法被濫用,可以使用prctl設(shè)置NO_NEW_PRIV。
capabilities
ROOT權(quán)限太大,要對ROOT進(jìn)行分權(quán)。kernel v5.15中分成了41種具體的權(quán)限,如CAP_CHOWN、CAP_ADMIN、CAP_BPF等。在需要特權(quán)的可執(zhí)行程序上設(shè)置特定的特權(quán),在執(zhí)行時就不需要ROOT賬戶了,如SOCKET_RAW,bpf操作。應(yīng)用層開發(fā)庫libcap2比以前易用很多,但應(yīng)用的不是很多。
MAC
強制訪問控制,相對自主訪問控制而言。簡單來說制定統(tǒng)一的規(guī)則,賦予主體與客體相應(yīng)的標(biāo)記,根據(jù)規(guī)則判斷動作是否允許。訪問控制模型有BRAC(基于角色的訪問控制,這個用的多)、BLP、BIBA。BLP主要關(guān)注機密性,其控制規(guī)則“上不可讀,下不可寫”。BIBA主要關(guān)注完整性,其控制規(guī)則“上不可寫,下不可讀”。
內(nèi)核中的Selinux實現(xiàn)多級訪問控制,綜合了幾個訪問控制模型,是CentOS和Andriod上默認(rèn)的強制訪問控制機制。
Apparmor:?是Ubuntu上基于路徑的MAC實現(xiàn),其配置比Selinux容易理解。但Apparmor僅針對配置的程序進(jìn)行訪問控制。
Smack:?簡單的訪問控制。Smack在Tizen OS(一種用在TV、Iot的操作系統(tǒng))使用,其主要特點是實現(xiàn)了CIPSO協(xié)議。
Tomoyo:?日本人搞的強制訪問控制實現(xiàn)。Smack和Tomoyo相對較少使用。
LSM
Linux 安全模型是一套框架,實質(zhì)是分布在內(nèi)核代碼中多個地方的鉤子,本身沒有實現(xiàn)安全控制功能(現(xiàn)在的capabilites和IMA也在LSM框架中插入了hook)。在kernel V5.15中共有239個hook點。上面的Selinux、Apparmor就是實現(xiàn)不同hook點從而實現(xiàn)不同的訪問控制實現(xiàn)。
關(guān)于LSM是否可以同時使用多個訪問控制實現(xiàn),歷史上有過反復(fù),開始可以,后來不可以,現(xiàn)在又可以了。
YAMA:?用于控制ptrace、prctl使用的機制。例如是否允許調(diào)試、注入so庫,都可以通過設(shè)置yama實現(xiàn),比較簡單實用?,F(xiàn)在也是通過LSM實現(xiàn)的。
IMA:?完整性度量基礎(chǔ)設(shè)施,“計算”系統(tǒng)運行過程中文件、文件屬性、進(jìn)程的完整性。對系統(tǒng)運行過程中所有進(jìn)程(還有內(nèi)核)計算出一個hash值存于TPM中的17號寄存器中,當(dāng)向?qū)Ψ阶C明時使用。IMA很占用內(nèi)存,基本沒有使用的。
LANDLOCK: 創(chuàng)建一個功能受限的環(huán)境,多用于沙箱。根據(jù)現(xiàn)在的代碼來看,實現(xiàn)的比較粗糙。但配合cgroup、namespace也許能實現(xiàn)功能不錯的沙箱。
lockdown:? Linux系統(tǒng)安全增強功能。在CentOS早期版本中叫runlevel,Ubuntu上早期是通過應(yīng)用層腳本實現(xiàn)。例如,是否允許加載ko,是否允許訪問/dev/mem等等,這些原來允許使用但很危險的操作,可以通過lockdown限制。鎖住系統(tǒng),提高系統(tǒng)安全級別,比原來更安全了。安全級別只能提高,不能降級,如果想降級,要重啟系統(tǒng)。一般用于IoT設(shè)備。
LoadPin:?確保進(jìn)入內(nèi)核地址空間的代碼來自同一個文件系統(tǒng),該文件系統(tǒng)可以設(shè)置ro屬性。防止黑客引入ko攻擊系統(tǒng)。
內(nèi)核自保護(hù)技術(shù):?內(nèi)核作為一個軟件,其本身也是攻擊目標(biāo)。例如:
1. 減少攻擊面。以前導(dǎo)出的函數(shù)不再導(dǎo)出,以前老的系統(tǒng)調(diào)用被廢棄,增加seccomp機制過濾系統(tǒng)調(diào)用。一些關(guān)鍵信息不再向用戶空間導(dǎo)出,或者需要特權(quán)才能查看,如/proc/kallsym中符號的地址。內(nèi)核空間數(shù)據(jù)復(fù)制到用戶空間時,先初始化為0;系統(tǒng)調(diào)用返回時,清除棧;釋放堆內(nèi)存時,清除堆等等。
2. 執(zhí)行代碼的內(nèi)存不能同時具有執(zhí)行和寫權(quán)限。
3. 一些數(shù)據(jù)設(shè)置為只讀屬性。
4. 內(nèi)核模塊、固件、UEFI代碼驗證簽名。
5.?加強地址隨機化。棧緩沖區(qū)保護(hù)。運行時檢查計數(shù)器、整數(shù)是否溢出等。借鑒了pax項目的一些內(nèi)存安全保護(hù)技術(shù)。
6. 使用安全編譯選項編譯內(nèi)核。
Cgroup?&?namespace:?namespace是資源隔離技術(shù),v5.15對8類資源進(jìn)行隔離(pid、net、uts、user、cgroup、ipc、mnt、time)。Cgroup 是資源控制技術(shù),例如cpu使用量,內(nèi)存使用量等。它們是實現(xiàn)容器的基礎(chǔ)技術(shù)。其他資源控制技術(shù)如getrlimit、sched_setaffinity。
文件系統(tǒng)安全:?文件系統(tǒng)加密機制ecryptfs、dm-crypt、perfile加密。文件系統(tǒng)mount時只讀、文件使用量限制quota、文件屬性sticky位等。
SECRETMEM:?新版本內(nèi)核中增加的隱私內(nèi)存機制。在一個進(jìn)程中申請的secret mem,在其他進(jìn)程中不能使用ptrace訪問。
網(wǎng)絡(luò)安全方面:
1. Netfilter: 在這個基礎(chǔ)上可以設(shè)置防火墻規(guī)則。
2. Netlabel: 在ip數(shù)據(jù)包的選項中增加數(shù)據(jù)包標(biāo)記,實現(xiàn)數(shù)據(jù)包的訪問控制
3. IPsec & wireguard進(jìn)行安全通信。
4. KTLS:在TLS協(xié)議中,數(shù)據(jù)包加解密在內(nèi)核進(jìn)行,提高TLS的性能。
5. AF_PACKET & BPF 高效的抓包。XDP可實現(xiàn)抗D。
6. 負(fù)載均衡;重新實現(xiàn)TCP握手機制,增強抗SYN flood攻擊等
內(nèi)核HOOK機制:ftrace & kprobe & livepatch & bpf 。利用它們可以實現(xiàn)自己的安全功能,觀測內(nèi)核、進(jìn)程事件。熱補丁修復(fù)內(nèi)核漏洞。
內(nèi)核審計機制:Audit、kmsg、acct、cn_proc、fanotify等。
以上大致是進(jìn)入內(nèi)核主線的安全技術(shù),還有一些沒有進(jìn)入主線如 grsec、tpe、lkrg、dpdk等等。一些發(fā)行版本,如Ubuntu也會有選擇的引入其中一些安全技術(shù)。
應(yīng)用層
場景不同,選擇的工具也不同。下面就根據(jù)加固一個OS的基本原則說一下常用工具。
簡單(KISS原則)
設(shè)計簡單、使用簡單……
減少攻擊面
定制基線時,操作系統(tǒng)盡可能小,包含盡量少的軟件包。例如gcc、tcpdump、nc等不常用的軟件在生產(chǎn)系統(tǒng)上不要安裝。不用的內(nèi)核ko禁止加載或者從生產(chǎn)系統(tǒng)上刪除。
一些可以裁減內(nèi)核的系統(tǒng),保持內(nèi)核功能精簡。使用busybox代替coreutils包中的基礎(chǔ)工具,使用定制過的bash等等。
最小權(quán)限原則
最少的賬戶、賬戶最小的權(quán)限。/etc/passwd中不用的賬戶要刪除,是否允許登錄要控制等。使用sudo 控制賬戶執(zhí)行的命令。如果允許網(wǎng)絡(luò)登錄,使用pam中的插件控制。sshd配置要盡可能嚴(yán)格,如禁止使用root登錄。
設(shè)置不同類型的賬戶,如管理賬戶、審計賬戶。每類賬戶其權(quán)限剛好夠用。
保持更新
軟件保持更新,可以修復(fù)軟件漏洞。策略更新,適用新的變化。如一些密碼要周期性更新。
事件審計
重要事件要記錄和監(jiān)控。如登錄事件、服務(wù)重啟事件、配置更新事件。Linux上有各種日志記錄功能,一般都在/var/log下。很多安全工具都會讀取該目錄下的文件。
進(jìn)行基礎(chǔ)的加固和監(jiān)控
適當(dāng)?shù)姆謪^(qū)及權(quán)限設(shè)置,適當(dāng)?shù)姆阑饓σ?guī)則,適當(dāng)?shù)募咏饷艽胧?,防止口令破解措施?FA登錄認(rèn)證等等。
看待Linux系統(tǒng)安全有不同的角度,以上根據(jù)系統(tǒng)分層列出Linux安全機制和技術(shù),是靜態(tài)的。如果從事件活動角度,就可以把這些安全技術(shù)有機組合起來,形成防御功能。安全架構(gòu)師,類似廚子,知道每項技術(shù)的優(yōu)缺點,不迷信某個具體的技術(shù),能根據(jù)具體場景,設(shè)計合適的安全架構(gòu),組合利用(或者開發(fā))各種技術(shù)做出符合需求的佳肴。
審核編輯:湯梓紅
評論
查看更多