Tracee是一個用于Linux的運行時安全性和取證的開源項目,用于解決常見的Linux安全性問題。通過利用Linux擴展的Berkeley Packet Filter (eBPF)的技術優勢,在內核運行時跟蹤系統和應用程序,以便獲取相應的數據信息。Tracee分析收集的事件可以用來檢測可疑的行為模式,在本文中,我將分享從使用eBPF和Linux安全模塊(LSM)鉤子的角度,來分析在解決Linux漏洞(如TOCTOU類型)中學到的經驗教訓。
設計LSM鉤子來提升安全性
在正在運行的應用程序中,通常是通過系統調用與操作系統進行交互。出于這個原因,安全從業者會使用系統調用來分析運行中的應用程序的行為。重點在于選擇收集系統調用的方法,因為獲取到的參數值和操作系統實際使用的參數值之間可能存在差距。
eBPF允許在無需更改內核源代碼或加載內核模的情況下,在Linux內核中運行沙盒程序。通過使用kprobes附加到Linux Security Module (LSM)掛鉤上,我們可以收集內核實際使用的參數值。下面是具體使用LSM鉤子需要克服的一些問題:
準確理解相對路徑
在Linux中,當從用戶程序中讀取信息時,path參數可以包含一個相對路徑。
例如,當調用一個程序時,Tracee可以使用以下參數獲取一個系統調用:
·open(“。./。./directory/file”, O_RDONLY)
·open(“。/test/。./。./directory/file”, O_RDONLY)
這些系統調用中的路徑可能指向相同的位置,但問題來了,根據給定的參數,很難精確定位絕對且始終唯一的規范路徑。在構建安全策略時,規范路徑的重要性變得更加明顯,因為相對路徑的意圖和效果可能太過模糊。
找出鏈接文件
例如,用戶程序給出的某個文件的參數值可能會包含指向其他文件的鏈接。在Linux中,我們可以創建到一個文件的符號鏈接,其方式是一個文件充當另一個文件或目錄的引用。操作系統使用符號鏈接到達被鏈接的文件,并執行給定的命令。請看下面的例子,創建了一個名為python的文件,并將其鏈接到一個惡意的二進制文件my_malware:
當運行python時,我們可以看到Tracee跟蹤了兩個事件。其一是帶有參數值的系統調用 。/python。但實際上,python是象征性地鏈接到~/bin/my_malware,第二個就是被Tracee捕獲的security_bprm_check事件返回了實際執行的文件的路徑名。
TOCTOU分析
當試圖獲取用戶程序的參數值時,如果只分析系統調用參數,結果可能會受到條件競爭的影響而錯過關鍵細節。這是因為在獲取信息后,用戶程序可以基于另一個并發線程,來進行更改系統調用參數。
例如,當調用一個程序時,Tracee可以使用以下參數獲取一個系統調用:
execve(“/bin/ls”, NULL, 0)
在進程中某一線程和內核調用執行Syscall之間會存在同一時間點。在這個時間點開始階段,通過使用指向進程地址空間中內存位置的指針,pathname參數被傳遞給內核。在這個期間,進程的另一個線程可以快速更改路徑名,最后內核來更新路徑名。
繼續我們的例子,另一個線程可以將第一個參數從/bin/ls更改為/bin/malicious,后者將由內核執行,而前者將由Tracee記錄。這個場景被稱為TOCTOU競態。攻擊者可以利用它來影響檢查和真正使用之間的記錄值,這樣會導致收集到的數據不準確,并誤導安全研究人員或自動檢測工具。
基于上面的原因,決定在Tracee中連同Syscall數據一起使用LSM鉤子來進行追蹤。像security_file_open這樣的事件,包含內核實際使用的路徑名,并與上報的常規Syscall事件交叉引用。
簡化分析過程
我們都知道在Linux中,Everything is a file這句著名的口號(https://en.wikipedia.org/wiki/Everything_is_a_file),是的,所有東西都是文件,需要使用文件描述符才能與之交互。當打開一個文件時(例如使用open),你會收到一個文件描述符。使用這些系統調用openat, unlinkat, execveat, accept, connect, bind, listen等等來與打開的文件進行交互。由于這個原因,如果我們想要分析在一個文件上執行的操作,那就必須跟蹤其打開的文件描述符,而Socket允許在不同的程序之間傳遞打開的文件描述符,這樣就會使分析更加困難。
對于使用Tracee的LSM鉤子事件,跟蹤文件描述符變得無關重要,因為LSM事件已經包含了相關的數據,比如完整的路徑名。這使得在分析問題時可以避免上述的影響,更加簡化分析流程。
結論
Tracee是一個易于使用的Linux運行時安全和取證工具,采用了目前最為火熱功能更為強大的eBPF技術,可以讓我們更好地理解程序的運行時行為,并打破對類似安全軟件構成困難和挑戰的桎梏,為安全分析人員提供進一步深入分析的方案。
原文標題:利用LSM鉤子打破系統調用跟蹤桎梏
文章出處:【微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。
-
Linux
+關注
關注
87文章
11229瀏覽量
208927 -
源代碼
+關注
關注
96文章
2944瀏覽量
66668 -
應用程序
+關注
關注
37文章
3243瀏覽量
57600
原文標題:利用LSM鉤子打破系統調用跟蹤桎梏
文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論