使用tracee编写规则追踪系统安全事件
一、何為tracee
Tracee 是 Linux 的運行時安全和取證工具。它使用 Linux eBPF 技術在運行時跟蹤您的系統和應用程序,并分析收集到的事件以檢測可疑的行為模式。Tracee 由以下子項目組成:
Tracee-eBPF - 使用 eBPF 的 Linux 跟蹤和取證程序
Tracee-Rules - 運行時安全規則檢測引擎
『技術資料』
二、安裝tracee
運行tracee的必要條件
Linux 內核版本 >= 4.18
Linux 內核頭文件在常規位置下可用
系統庫 libelf 和 zlib
快速開始安裝
docker run --name tracee --rm --pid=host --privileged -v /tmp/tracee:/tmp/tracee -it aquasec/tracee:latest trace 本條命令將僅啟動原始跟蹤 (Tracee-eBPF),沒有檢測引擎 (Tracee-Rules),用戶將會看到如下的大量的原始事件輸出:[root@localhost ~]# docker run --name tracee --rm --pid=host --privileged -v /tmp/tracee:/tmp/tracee -it aquasec/tracee:latest trace TIME UID COMM PID TID RET EVENT ARGS 06:16:20:529134 0 assist_daemon 719 759 0 security_file_open pathname: /proc/stat, flags: O_RDONLY|O_LARGEFILE, dev: 5, inode: 4026532025 06:16:20:529094 0 assist_daemon 719 759 7 open pathname: /proc/stat, flags: O_RDONLY|O_LARGEFILE|O_CLOEXEC, mode: 0 06:16:20:529244 0 assist_daemon 719 759 0 close fd: 7 06:16:20:529274 0 assist_daemon 719 759 0 security_file_open pathname: /proc/719/stat, flags: O_RDONLY|O_LARGEFILE, dev: 5, inode: 16789925 06:16:20:529267 0 assist_daemon 719 759 7 open pathname: /proc/719/stat, flags: O_RDONLY|O_LARGEFILE|O_CLOEXEC, mode: 0 06:16:20:529332 0 assist_daemon 719 759 0 close fd: 7 06:16:20:652683 0 systemd 1 1 0 security_file_open pathname: /proc/1/mountinfo, flags: O_RDONLY|O_LARGEFILE, dev: 5, inode: 387752 06:16:20:652646 0 systemd 1 1 21 openat dirfd: -100, pathname: /proc/self/mountinfo, flags: O_RDONLY|O_CLOEXEC, mode: 0 06:16:20:653013 0 systemd 1 1 0 lstat pathname: /proc, statbuf: 0x7FFE8EE051E0每行是 Tracee-eBPF 收集的單個事件,包含以下信息:
TIME - 以秒為單位顯示相對于系統啟動時間的事件時間
UID - 調用進程的真實用戶 ID(在主機用戶命名空間中)
COMM - 調用進程的名稱
PID - 調用進程的pid
TID - 調用線程的 tid
RET - 函數返回的值
EVENT - 標識事件(例如系統調用名稱)
ARGS - 函數的參數列表
三、使用tracee-rules檢測可疑行為
目前官方未給出docker運行的方式,根據官方文檔,可以從源碼進行編譯(cd tracee-rules && make),或者從release內下載編譯好的包。為了方便測試,選擇使用官方release包。
wget https://github.com/aquasecurity/tracee/releases/download/v0.6.3/tracee.tar.gz cd distsudo ./tracee-ebpf -o format:gob | ./tracee-rules --input-tracee file:stdin --input-tracee format:gob以上命令會執行tracee-rules默認的檢測規則,包含以下可疑行為的檢測:
我們可以簡單的選用Fileless Execution(從內存執行進程,磁盤中沒有文件)這個行為測試一下:
執行打印hello的命令以后,tracee-rules捕捉到結果如下:
Loaded 14 signature(s): [TRC-1 TRC-13 TRC-2 TRC-3 TRC-11 TRC-9 TRC-4 TRC-5 TRC-12 TRC-8 TRC-6 TRC-10 TRC-7]*** Detection *** Time: 2021-11-04T07:55:05Z Signature ID: TRC-5 Signature: Fileless Execution Data: map[] Command: elfexec Hostname: localhost從返回中可以看出,該命令觸發了TRC-5規則。
四、創建自定義規則
tracee-rules提供了兩種方式自定義規則:使用.rego語言的規則文本,或使用go Signature接口的規則。這里我們以rego規則示例,如何自定義規則,捕獲可疑的系統行為。
rego規則
tracee_match:編寫匹配邏輯,可以擁有多個trace_match塊。
筆者以編寫一個監控whoami命令為例。需要監控whoami命令,則需要監視execve內核函數,并且執行的路徑參數應該是whoami的文件路徑。完整的規則文本如下:
package tracee.TCR_1 import data.tracee.helpers __rego_metadoc__ := {"id": "TCR-1","version": "1.0.0","name": "cmd whoami","description": "cmd whoami","tags": ["linux", "container"],"properties": {"Severity": 2,"MITRE ATT&CK": "cmd",} } eventSelectors := [{"source": "tracee","name": "execve"} ] tracee_selected_events[eventSelector] {eventSelector := eventSelectors[_] } tracee_match {input.eventName == "execve"pathname = helpers.get_tracee_argument("pathname")startswith(pathname, "/usr/bin/whoami") }將此規則文件保存于rules目錄下,重新啟動tracee-rules即可監控到whoami命令的執行。
Loaded 1 signature(s): [TCR-1]*** Detection *** Time: 2021-11-08T06:50:52Z Signature ID: TCR-1 Signature: cmd whoami Data: map[] Command: bash Hostname: localhost最后
點擊獲取『網絡安全學習資料`攻略』
總結
以上是生活随笔為你收集整理的使用tracee编写规则追踪系统安全事件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 某平台的一次简单渗透测试记录
- 下一篇: java信息管理系统总结_java实现科