使用tracee编写规则追踪系统安全事件
一、何為tracee
Tracee 是 Linux 的運(yùn)行時(shí)安全和取證工具。它使用 Linux eBPF 技術(shù)在運(yùn)行時(shí)跟蹤您的系統(tǒng)和應(yīng)用程序,并分析收集到的事件以檢測(cè)可疑的行為模式。Tracee 由以下子項(xiàng)目組成:
Tracee-eBPF - 使用 eBPF 的 Linux 跟蹤和取證程序
Tracee-Rules - 運(yùn)行時(shí)安全規(guī)則檢測(cè)引擎
『技術(shù)資料』
二、安裝tracee
運(yùn)行tracee的必要條件
Linux 內(nèi)核版本 >= 4.18
Linux 內(nèi)核頭文件在常規(guī)位置下可用
系統(tǒng)庫(kù) libelf 和 zlib
快速開始安裝
docker run --name tracee --rm --pid=host --privileged -v /tmp/tracee:/tmp/tracee -it aquasec/tracee:latest trace 本條命令將僅啟動(dòng)原始跟蹤 (Tracee-eBPF),沒有檢測(cè)引擎 (Tracee-Rules),用戶將會(huì)看到如下的大量的原始事件輸出:[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 收集的單個(gè)事件,包含以下信息:
TIME - 以秒為單位顯示相對(duì)于系統(tǒng)啟動(dòng)時(shí)間的事件時(shí)間
UID - 調(diào)用進(jìn)程的真實(shí)用戶 ID(在主機(jī)用戶命名空間中)
COMM - 調(diào)用進(jìn)程的名稱
PID - 調(diào)用進(jìn)程的pid
TID - 調(diào)用線程的 tid
RET - 函數(shù)返回的值
EVENT - 標(biāo)識(shí)事件(例如系統(tǒng)調(diào)用名稱)
ARGS - 函數(shù)的參數(shù)列表
三、使用tracee-rules檢測(cè)可疑行為
目前官方未給出docker運(yùn)行的方式,根據(jù)官方文檔,可以從源碼進(jìn)行編譯(cd tracee-rules && make),或者從release內(nèi)下載編譯好的包。為了方便測(cè)試,選擇使用官方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以上命令會(huì)執(zhí)行tracee-rules默認(rèn)的檢測(cè)規(guī)則,包含以下可疑行為的檢測(cè):
我們可以簡(jiǎn)單的選用Fileless Execution(從內(nèi)存執(zhí)行進(jìn)程,磁盤中沒有文件)這個(gè)行為測(cè)試一下:
執(zhí)行打印hello的命令以后,tracee-rules捕捉到結(jié)果如下:
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從返回中可以看出,該命令觸發(fā)了TRC-5規(guī)則。
四、創(chuàng)建自定義規(guī)則
tracee-rules提供了兩種方式自定義規(guī)則:使用.rego語(yǔ)言的規(guī)則文本,或使用go Signature接口的規(guī)則。這里我們以rego規(guī)則示例,如何自定義規(guī)則,捕獲可疑的系統(tǒng)行為。
rego規(guī)則
tracee_match:編寫匹配邏輯,可以擁有多個(gè)trace_match塊。
筆者以編寫一個(gè)監(jiān)控whoami命令為例。需要監(jiān)控whoami命令,則需要監(jiān)視execve內(nèi)核函數(shù),并且執(zhí)行的路徑參數(shù)應(yīng)該是whoami的文件路徑。完整的規(guī)則文本如下:
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") }將此規(guī)則文件保存于rules目錄下,重新啟動(dòng)tracee-rules即可監(jiān)控到whoami命令的執(zhí)行。
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最后
點(diǎn)擊獲取『網(wǎng)絡(luò)安全學(xué)習(xí)資料`攻略』
總結(jié)
以上是生活随笔為你收集整理的使用tracee编写规则追踪系统安全事件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 某平台的一次简单渗透测试记录
- 下一篇: 『安全漏洞』Windows 云同步引擎A