溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

linux中如何使用BPF增強(qiáng)SSH會(huì)話的安全審計(jì)

發(fā)布時(shí)間:2021-10-23 15:20:45 來(lái)源:億速云 閱讀:236 作者:小新 欄目:系統(tǒng)運(yùn)維

這篇文章將為大家詳細(xì)講解有關(guān)linux中如何使用BPF增強(qiáng)SSH會(huì)話的安全審計(jì),小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

linux中如何使用BPF增強(qiáng)SSH會(huì)話的安全審計(jì)

Teleport是一款Golang語(yǔ)言開發(fā)的用來(lái)替代sshd的ssh服務(wù)器,支持通過(guò) SSH 或者 HTTPS  遠(yuǎn)程訪問(wèn),支持集群、Web登陸、SSH歷史記錄還重放用以操作分享和安全審計(jì),基于Golang ssh包構(gòu)建開發(fā),實(shí)現(xiàn)完全兼容OpenSSH。

linux中如何使用BPF增強(qiáng)SSH會(huì)話的安全審計(jì)

最近Teleport  4.2版本中新增加ssh增強(qiáng)的回話記錄功能用來(lái)接收非結(jié)構(gòu)化的ssh會(huì)話,并將其通過(guò)結(jié)構(gòu)化事件流來(lái)輸出。該功能使用到了Linux內(nèi)核中集成的一項(xiàng)新技術(shù)eBPF(簡(jiǎn)稱為BPF)。用來(lái)完善Teleport審計(jì)功能的不足之處。本文蟲蟲就給大家介紹Teleport中是如何做的。

背景

Teleport的一個(gè)優(yōu)勢(shì)就是,可以對(duì)ssh會(huì)話全程記錄。該功能可以捕獲用戶屏幕上顯示的所有內(nèi)容。之后,可以使用該記錄回放還原所有操作,以便于審計(jì)。這些記錄易于理解,并提供了有關(guān)用戶在會(huì)話過(guò)程中所做操作和顯示的信息

然而,和其他同類工具一樣(堡壘機(jī)),Teleport也有不足之處,用戶可以使用一些方法繞過(guò)會(huì)話記錄。其中包括:

混淆命令:

比如通過(guò)加密或者其他方式對(duì)命令予以混淆。比如下面的語(yǔ)句,用base64編碼對(duì)要執(zhí)行的命令進(jìn)行了混淆。

echo Y3VybCBodHRwOi8vd3d3LmV4YW1wbGUuY29tCg== | base64 -d | sh

這樣實(shí)際的執(zhí)行命令(curl example.com)不會(huì)直接被記錄。

Shell腳本:

如果用戶通過(guò)上傳并執(zhí)行腳本的方式,也不能捕獲腳本中運(yùn)行的命令,只能捕獲腳本的輸出。

終端控制:

ssh終端可以支持多種控件,比如用戶可以禁用終端回顯的控件,在一些應(yīng)用程序通常會(huì)使用。例如sudo命令當(dāng)它們提示用戶輸入密碼時(shí)。這是也不能在ssh記錄中捕獲它們。

此外,由于TTY流是非結(jié)構(gòu)化性質(zhì),會(huì)話記錄在某種程度上可能難以捕獲和監(jiān)視。

技術(shù)實(shí)現(xiàn)

為了解決安全審計(jì)的這些不足,Teleport需要一種能將非結(jié)構(gòu)化ssh會(huì)話轉(zhuǎn)換為結(jié)構(gòu)化事件流的方法。這就是本文要說(shuō)的增強(qiáng)回話記錄功能,具體功能展示如下:

linux中如何使用BPF增強(qiáng)SSH會(huì)話的安全審計(jì)

技術(shù)選型

通過(guò)多種方法對(duì)比,包括了內(nèi)容從正則表達(dá)式模式匹配之類的臨時(shí)方法到自己解析原始SSH會(huì)話之類的方法,還探索了Linux提供的各種API和系統(tǒng),例如Audit,fanotify和BPF等,在走技術(shù)對(duì)比時(shí)候,要考慮的兩個(gè)標(biāo)準(zhǔn)是準(zhǔn)確性和性能問(wèn)題:

減少誤報(bào),最好減少到零。監(jiān)控系統(tǒng)(安全審計(jì)),首先要考慮是的準(zhǔn)確性問(wèn)題,如果報(bào)警很多,則對(duì)警報(bào)的關(guān)注度就會(huì)減少??赡軙?huì)導(dǎo)致嚴(yán)重問(wèn)題被忽略掉。

減少由監(jiān)控引起的任何性能影響,最好為零。監(jiān)控系統(tǒng)要盡量避免影響系統(tǒng)的性能。

多種方法中,誤報(bào)問(wèn)題都很嚴(yán)重。無(wú)法對(duì)構(gòu)成SSH會(huì)話的字節(jié)流進(jìn)行準(zhǔn)確的解析和解釋,不能防止警報(bào)疲勞。

還有一些方法,會(huì)有性能問(wèn)題。比如Linux Audit。

通過(guò)查看文件系統(tǒng)訪問(wèn),有一些替代方法。最突出的兩個(gè)是inotify和fanotify。inotify不錯(cuò),做為了初始備選項(xiàng),但是其缺少遞歸目錄監(jiān)視功。fanotify更有希望,也存在兩個(gè)問(wèn)題。

布倫丹.格雷格在BPF性能工具書中提到,在重負(fù)載時(shí),opensnoop比對(duì)fanotify,fanotify  占了67%的CPU,而opensnoop只用到1%。

Linux內(nèi)核最近合并到一個(gè)補(bǔ)丁,以提高fanotify的性能,使其更適合于對(duì)整個(gè)文件系統(tǒng)監(jiān)視,這樣可以在Teleport中的使用更加緊密地契合。然而,補(bǔ)丁需要在Linux  5.1中才被合并,目前還沒(méi)有開箱即用的主流發(fā)行版支持。

考慮到這些考慮因素,Teleport最終選擇了基于BPF程序鏈構(gòu)建的解決方案,該解決方案減少了誤報(bào)并且對(duì)性能的影響最小。

BPF介紹

BPF,原本是Unix的一個(gè)包過(guò)濾器,伯克利包過(guò)濾器(Berkeley Packet Filter)。后來(lái)被移植到了Linux中。2013  年,Alexei Starovoitov 對(duì) BPF 做完善和改進(jìn),新版本被命名為 eBPF (extended  BPF),簡(jiǎn)寫為BPF,而將老的BPF叫做cBPF(classic BPF)。eBPF在增加了映射和尾調(diào)用等新特性,并且還重寫了JIT 編譯器。新版語(yǔ)言比  cBPF 更接近原生機(jī)器語(yǔ)言。BPF允許用戶空間程序以安全和高效的方式從內(nèi)核中的某些位置掛接并發(fā)出事件。

安全意味著BPF程序不會(huì)陷入無(wú)限循環(huán)而導(dǎo)致系統(tǒng)癱瘓。BPF程序不太可能像內(nèi)核模塊一樣可能使整個(gè)操作系統(tǒng)崩潰。

BPF程序也很有效,如果不能足夠快地使用它們,則丟棄事件,而不是拖累整個(gè)系統(tǒng)的性能。

目前Linux中有大量的系統(tǒng)工具都是基于BPF進(jìn)行了重構(gòu)(比如iptables),布倫丹.格雷格的書《BPF高性能工具》中(blog中)介紹了大量的工具可以供大家學(xué)習(xí)。

linux中如何使用BPF增強(qiáng)SSH會(huì)話的安全審計(jì)

Teleport對(duì)接BPF

Teleport中使用了三個(gè)BPF程序:execsnoop捕獲程序執(zhí)行,opensnoop捕獲程序打開的文件,tcpconnect捕獲程序建立的TCP連接。

為了更好地理解這些BPF程序的功能,可以運(yùn)行時(shí)查看execsnoop的輸出man ls。

linux中如何使用BPF增強(qiáng)SSH會(huì)話的安全審計(jì)

看起來(lái),簡(jiǎn)單地運(yùn)行man二進(jìn)制文件似乎是在幕后執(zhí)行了許多其他程序。

Teleport 將這些程序嵌入其二進(jìn)制文件中,并且在啟用"增強(qiáng)的會(huì)話記錄"功能后,它將生成并運(yùn)行它們。

linux中如何使用BPF增強(qiáng)SSH會(huì)話的安全審計(jì)

這些程序本身是調(diào)試和跟蹤的出色工具,它能給出系統(tǒng)上正在執(zhí)行什么操作,而不僅限于一個(gè)用戶。

要將程序執(zhí)行與特定的SSH會(huì)話相關(guān)聯(lián),還使用了cgroups(尤其是cgroupv2)。Teleport啟動(dòng)SSH會(huì)話時(shí),它將首先重新啟動(dòng)自身并將其置于cgroup中。這不僅允許該進(jìn)程,而且可以使用唯一ID跟蹤Teleport啟動(dòng)的所有將來(lái)進(jìn)程。Teleport運(yùn)行的BPF程序已更新,還可以發(fā)出執(zhí)行它們的程序的cgroup  ID。這樣就可以將事件與特定的SSH會(huì)話和身份相關(guān)聯(lián)。

局限性

目前Teleport沒(méi)有完成增強(qiáng)的會(huì)話記錄。仍然存在一些差距,將以后版本解決。

值得指出的是,通過(guò)會(huì)話記錄,Teleport可以捕獲由于其特權(quán)位置而構(gòu)成會(huì)話的字節(jié)流(字節(jié)流必須流過(guò)Teleport)。至關(guān)重要的是,會(huì)話記錄的完整性不依賴于主機(jī)自己報(bào)告的任何信息。但是,增強(qiáng)的審核功能依賴于主機(jī)準(zhǔn)確地向Teleport報(bào)告信息。如果主機(jī)的完整性受到損害,則增強(qiáng)審核的完整性也會(huì)收到影響。此外,Teleport僅監(jiān)控系統(tǒng)中最關(guān)鍵的部分系統(tǒng)調(diào)用,而不是全部調(diào)用。

目前,增強(qiáng)的會(huì)話記錄最適合非root用戶,對(duì)有權(quán)訪問(wèn)root的用戶可以通過(guò)多種方式禁用增強(qiáng)會(huì)話記錄。

實(shí)踐

在沒(méi)有背景的情況下,可以使用下面的腳本進(jìn)行增強(qiáng)的會(huì)話記錄。

linux中如何使用BPF增強(qiáng)SSH會(huì)話的安全審計(jì)
linux中如何使用BPF增強(qiáng)SSH會(huì)話的安全審計(jì)

首先啟動(dòng)Ubuntu 19.04或RHEL/CentOS 8  VM,然后運(yùn)行上面的腳本。該腳本會(huì)安裝內(nèi)核頭文件和bcc-tools,這是運(yùn)行增強(qiáng)會(huì)話記錄的先決條件。此外,腳本還安裝jq,一個(gè)命令的json解析工具(蟲蟲以前文章介紹過(guò),可以參考),這有助于可視化結(jié)構(gòu)化事件流。

按照說(shuō)明輸入終端后,屏幕上看到以下類似的信息:

linux中如何使用BPF增強(qiáng)SSH會(huì)話的安全審計(jì)

由此可見(jiàn),curl程序是由用戶以兩種方式執(zhí)行的。首先是程序本身的執(zhí)行。第二個(gè)是程序的行為,curl發(fā)出了網(wǎng)絡(luò)請(qǐng)求,也可以看到它。你可以嘗試執(zhí)行其他操作,例如混淆的命令,或者腳本方式執(zhí)行等,應(yīng)該在日志中查看執(zhí)行結(jié)果。

要求

Teleport增強(qiáng)會(huì)話記錄的最低要求需要啟動(dòng)BPF支持的 Linux內(nèi)核4.18 。目前有多個(gè)發(fā)行版本可直接使用它,包括Ubuntu  19.04,Debian 10和RHEL/CentOS 8。

還需要安裝內(nèi)核頭文件和bcc-tools。對(duì)于上面列出的操作系統(tǒng),發(fā)行版的包管理器中安裝它們,比如對(duì)Centos 8只需運(yùn)行

yum install -y kernel-headers bcc-tools

或者Ubuntu下執(zhí)行

apt install -y linux-headers-$(uname -r) bpfcc-tools

如果尚未打包bcc-tools,則必須從源代碼構(gòu)建它們。

要在Teleport中啟用增強(qiáng)的會(huì)話記錄,只需在文件配置中將其啟用即可,如下所示:

ssh_service: enhanced_recording: enabled: yes

關(guān)于“l(fā)inux中如何使用BPF增強(qiáng)SSH會(huì)話的安全審計(jì)”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI