sysdig 的学习
环境
系统: Ubuntu 20.04.2 LTS
安装和配置
首先,通过apt在终端中运行以下命令确保所有系统包都是最新的
sudo apt update
sudo apt upgrade
sudo apt install gnupg software-properties-common curl -y
sudo apt install linux-headers-$(uname -r)
现在我们运行以下命令将 Sysdig 安装到系统:
curl -s https://s3.amazonaws.com/download.draios.com/stable/install-sysdig | sudo bash
执行此命令后,需要更新服务器并安装它:
sudo apt update
sudo apt install sysdig
安装完成后,可以使用以下命令查看有关 Sysdig 的更多信息:
sysdig --help
验证安装,运行csysdig命令来显示正在运行的进程、CPU 使用率和内存使用率
sudo csydig
使用
输出的信息
sysdig命令需要root权限才能运行,并且它需要任意数量的选项和过滤器。
如果不添加过滤选项的话,将会滚动输出系统的实时数据。
看一下输出的结果每一列数据的含义:
%evt.num %evt.outputtime %evt.cpu %proc.name (%thread.tid) %evt.dir %evt.type %evt.info
- evt.num是增量事件编号。
- evt.outputtime是事件时间戳,您可以自定义。
- evt.cpu是捕获事件的CPU编号。在上面的输出中,evt.cpu为0,这是服务器的第一个CPU。
- proc.name是生成事件的进程的名称。
- thread.tid是生成事件的TID,它对应于单线程进程的PID。
- evt.dir是事件方向。您将看到>用于输入事件和<用于退出事件。
- evt.type是事件的名称,例如’open’,’read’,’write’等。
- evt.info是事件参数列表。在系统调用的情况下,这些往往对应于系统调用参数,但情况并非总是如此:出于简单性或性能原因,排除了一些系统调用参数。
使用过滤器
使用方法:
$ sudo sysdig [option] [filter]
可以使用以下方法查看可用过滤器的完整列表:
$ sysdig -l
常用的一些过滤器类别:
- fd:过滤文件描述符(FD)信息,如FD编号和FD名称。
- process:过滤进程信息,例如生成事件的进程的id和名称。
- evt:过滤事件信息,如事件编号和时间。
- user:过滤用户信息,如用户ID,用户名,用户主目录或登录shell。
- group:过滤组信息,例如组ID和名称。
- syslog:过滤syslog信息,如设施和严重性。
- fdlist:过滤轮询事件的文件描述符。
来个例子看一下:
$ sudo sysdig proc.name=nano
这是针对单个进程进行过滤,结果测试仍然会有大量的输出,所以配置输出到文件方便分析,使用sysdig的-w选项,并指定目标文件名,如下所示:
$ sudo sysdig -w sysdig-trace-file.scap
所以上面针对nano进程到过滤,然后结果输出到文件的命令如下:
$ sudo sysdig -w sysdig-trace-nano.scap proc.name=nano
使用Sysdig读取和分析:
sudo sysdig -r sysdig-trace-java.scap
同样的可以添加过滤条件
chisels
chisels是可以使用的Lua脚本,用于分析Sysdig事件流以执行有用的操作,可以使用以下命令查看系统上可用的chisels列表:
$ sysdig -cl
使用 -i 参数可以查看chisels的更详细的描述
使用chisels,通过 -c 参数指定chisels 进行分析,如下的例子:
csysdig
使用csysdig可以在有界面的视图中查看数据。可以像上面提到的那种实时查看,也可以使用 -r 参数指定log文件进行分析。
csysdig使用的时候,最下面给出了一些操作的按键提示。这里记录一些在学习使用过程中值得注意的:
F2切换分析视角
参数
-j json格式输出
-A 记录的更加详细
-s 100 抓取字节(选择合适的避免默认的不够造成关键信息没被记录)
-p 自定义字段
log4j复现实验
安装jdk1.8
执行如下命令开启sysdig的记录,配置输出到文件
sudo sysdig -w sysdig-trace-java.scap proc.name=java
运行我们的漏洞环境
java -jar springboot-log4j2-demo.jar
将sysdig的记录输出到文件,方便后续分析
使用 csysdig 进行视图格式的分析:
sudo csysdig -r xxx.scap
下面是分析过程做的一些尝试:
使用csysdig进入分析视图,然后选择我们这个java进程回车进入
然后可以F2选择分析视角,包括线程、系统调用、连接等
通过连接相关的查看,可以看到POC执行时的网络请求
为复现log4j漏洞并执行命令,我们首先需要将Java版本降低到java8u191以下:
之后开启JNDI远程恶意类
执行poc后,执行命令touch /tmp/xiaogui,查看文件夹命令执行成功:
之后使用sysdig开启抓取系统信息,并重新执行一遍命令
并且看见了命令执行的命令:
目前形成的初步检测规则:
sysdig -A -s 1024 "evt.type=write and evt.dir=< and evt.res=SUCCESS and evt.arg.data icontains "exec" and evt. arg.data icontains '"'1og4j' and evt.arg.data icontains 'jndi' and evt.arg.data icontains '1dap'" -j