sysdig 的学习
2023-5-8 08:48:42 Author: 格格巫和蓝精灵(查看原文) 阅读量:15 收藏

文章转自 https://lanvnal.com/2022/02/03/sysdig-de-xue-xi/

另外

https://www.cnblogs.com/dpwindy/p/9088292.html

可以结合起来看,这个工具在系统监控、调试和应急响应等方面有非常好的作用

环境

系统:Ubuntu 20.04.2 LTS

安装和配置

首先,通过apt在终端中运行以下命令确保所有系统包都是最新的

bash

sudo apt update
sudo apt upgrade
sudo apt install gnupg software-properties-common curl -y
sudo apt install linux-headers-$(uname -r)

现在我们运行以下命令将 Sysdig 安装到系统:

bash

curl -s https://s3.amazonaws.com/download.draios.com/stable/install-sysdig | sudo bash

执行此命令后,需要更新服务器并安装它:

bash

sudo apt update
sudo apt install sysdig

安装完成后,可以使用以下命令查看有关 Sysdig 的更多信息:

bash

sysdig --help

验证安装,运行csysdig命令来显示正在运行的进程、CPU 使用率和内存使用率

bash

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是事件参数列表。在系统调用的情况下,这些往往对应于系统调用参数,但情况并非总是如此:出于简单性或性能原因,排除了一些系统调用参数。

使用过滤器

使用方法:

bash

$ sudo sysdig [option] [filter]

可以使用以下方法查看可用过滤器的完整列表:

bash

$ sysdig -l

常用的一些过滤器类别:

  • fd:过滤文件描述符(FD)信息,如FD编号和FD名称。

  • process:过滤进程信息,例如生成事件的进程的id和名称。

  • evt:过滤事件信息,如事件编号和时间。

  • user:过滤用户信息,如用户ID,用户名,用户主目录或登录shell。

  • group:过滤组信息,例如组ID和名称。

  • syslog:过滤syslog信息,如设施和严重性。

  • fdlist:过滤轮询事件的文件描述符。

来个例子看一下:

bash

$ sudo sysdig proc.name=nano

这是针对单个进程进行过滤,结果测试仍然会有大量的输出,所以配置输出到文件方便分析,使用sysdig的-w选项,并指定目标文件名,如下所示:

bash

$ sudo sysdig -w sysdig-trace-file.scap

所以上面针对nano进程到过滤,然后结果输出到文件的命令如下:

bash

$ sudo sysdig -w sysdig-trace-nano.scap proc.name=nano

使用Sysdig读取和分析:

bash

sudo sysdig -r sysdig-trace-java.scap

同样的可以添加过滤条件

chisels

chisels是可以使用的Lua脚本,用于分析Sysdig事件流以执行有用的操作,可以使用以下命令查看系统上可用的chisels列表:

bash

$ sysdig -cl

使用 -i 参数可以查看chisels的更详细的描述

使用chisels,通过 -c 参数指定chisels 进行分析,如下的例子:

csysdig

使用csysdig可以在有界面的视图中查看数据。可以像上面提到的那种实时查看,也可以使用 -r 参数指定log文件进行分析。

csysdig使用的时候,最下面给出了一些操作的按键提示。这里记录一些在学习使用过程中值得注意的:
F2切换分析视角

参数

-j json格式输出
-A 记录的更加详细
-s 100 抓取字节(选择合适的避免默认的不够造成关键信息没被记录)
-p 自定义字段

log4j复现实验

安装jdk1.8
执行如下命令开启sysdig的记录,配置输出到文件

bash

sudo sysdig -w sysdig-trace-java.scap proc.name=java

运行我们的漏洞环境

bash

java -jar springboot-log4j2-demo.jar

将sysdig的记录输出到文件,方便后续分析


使用 csysdig 进行视图格式的分析:

bash

sudo csysdig -r xxx.scap

下面是分析过程做的一些尝试:
使用csysdig进入分析视图,然后选择我们这个java进程回车进入


然后可以F2选择分析视角,包括线程、系统调用、连接等
通过连接相关的查看,可以看到POC执行时的网络请求

为复现log4j漏洞并执行命令,我们首先需要将Java版本降低到java8u191以下:

2771d206-ef98-4dfa-90ce-86ecab005d1b


之后开启JNDI远程恶意类

adf2044a-b9f9-4f53-acb0-44d991cddbf2


执行poc后,执行命令touch /tmp/xiaogui,查看文件夹命令执行成功:

e44c51e0-20b4-45b9-b176-888e390e68ac


之后使用sysdig开启抓取系统信息,并重新执行一遍命令

3d25dffd-5838-412b-b253-06f323710e91


并且看见了命令执行的命令:

77c89554-172c-46d3-ac61-a2c7392e30a4

目前形成的初步检测规则:

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

文章来源: http://mp.weixin.qq.com/s?__biz=MzI5NDg0ODkwMQ==&mid=2247485392&idx=1&sn=8a74bfe45f8c8fdcaf07bcf743e8f434&chksm=ec5dd73adb2a5e2cc5f41d2816df6590fb72ef481cae2def905acab07aa89f47803684bfc53f#rd
如有侵权请联系:admin#unsafe.sh