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