0%

2019 ChangAn Cup复盘

0x01 前言

话不多说 直接复盘 查漏补缺

0x02 分析思路

检材1:

使用仿真对检材1进行分析,开机后发现该Linux无法使用密码远程连接,修改配置文件/etc/ssh/sshd_config文件进行配置:
把PasswordAuthentication后的参数改为yes,重启ssh服务(systemctl restart sshd)即可使用远程工具连接;

查看历史执行命令history,可看到少数命令,怀疑本地的历史命令被加密,/var/log日志目录被删除:

netstat -anptl查看服务器开启的端口发现8091和39999上有docker-proxy

使用docker ps命令查看docker容器情况,发现docker运行了3个容器,其中验证了第二个ssh的容器属于干扰项,没有作用;

id为16fc..的容器将自身80端口映射到了本机8091端口上,主要运行的命令为nginx;
id为53766的容器开启了8012端口,主要运行命令docker-entrypoint.sh;
使用docker inspect 命令可以查看到容器详细信息,如下:








使用命令 docker exec -it id号 /bin/bash可以进入到容器内部,16fc160060c1容器内主要运行nginx服务,因此查看nginx配置文件:


通过查看nginx配置文件可以知道,nginx访问日志放在相对路径logs下的jrweb.log中,nginx将所有来自自身80端口的请求转发到IP为172.17.0.3的8012端口上,由ID为53766d68636f的容器开启的8012端口可知,应该是转发到该容器,该容器(53766d68636f)在案件中的ip应为172.172.0.3(由于出题时候未设固定ip因此每个人仿真起来之后ip可能会发生变化,前面查看docker inspect时候可看到该容器ip变化为172.17.0.2);

通过查看访问网站的访问日志jrweb.log可知,该网站案发当时的IP地址为192.168.184.128,使用端口8091,分别有ip192.168.184.1和192.168.184.133对该网站进行过访问,133的ip可以看到有尝试登陆的请求;

查看Id为53766d68636f的容器,查看history命令可知网站路径为/home/vue2-element-touzi-admin(物理机路径可以查看前面docker inspect),


网站根目录下有README.md文件,通过查看可了解网站大致的配置情况,查看server目录下的index.js可知网站的主要配置情况

查看server目录下的api.js文件课知,该文件引用了当前目录下的db文件

查看网站/server目录下的db.js文件可知,该网站使用mongo的数据库,数据库用户名和密码为root、root,网站使用站库分离结构,数据地址位于192.168.184.129(该ip为检材2的解压密码),使用端口27017,使用的databases为tougu;

检材2:

使用192.168.184.129对检材2进行解压,对检材计算哈希并及进行静态分析和仿真:
使用history命令发现如下信息:下载过某程序、执行了encrypt(5)程序,删掉了之前的bash历史记录:

前面分析已知该服务器为mongodb服务器,通过端口确认mongo监听在27017端口

通过/root/.dbshell发现数据库操作的shell记录,里面发现几条重要信息(由于shell没有时间戳,只能用来推测不能单过证据)

通过查看mongo进程信息发现mongo的配置信息,查看mongod.conf文件发现mongod的日志配置情况和安装物理路径。


结合系统登陆日志和mongo的日志查看,发现在时间7-11 18:05至18:32分中间,133IP一直在登录状态,同时间没有其他用户登陆,日志中,同时间端发现大量的操作日志,drop为删除数据库指令



检材3

使用192.168.184.133对检材3进行解压,对检材计算哈希并及进行静态分析和仿真:
通过history命令查看历史命令记录,可以看到大量安装配置pptpd(pptpd是指运行在服务器上提供pptp协议服务的软件)的命令:

其中还有大量修改时区信息的命令

数据包抓取的命令:

通过查看pptpd的配置文件可知如下信息:配置了options.pptpd、开启写入wtmp、定义了本地远程IP地址(可以参看教程https://blog.csdn.net/ljm_503909378/article/details/41478121):



查看/etc/ppp/options.pptp文件可以知道,pptpd开启了日志信息,记录在/var/log/pptpd.log中(当然在历史命令中也可以得知该日志):

继续查看该目录下的chap-secrets文件,该文件为用户验证文件,记录了客户端的使用名称和密码:

查看pptpd的日志进行分析,发现IP为172.16.80.188通过账号VPN1成功登陆VPN服务器,时间为2019-07-13 14:15:37 UTC+6(注意!该服务器时区为UTC+6,与北京时间相差2小时),这段时间内还有多个IP通过VPN2\3\4等账号连结果vpn服务器(干扰项),结合下面的PCAP文件可以进行排查筛选:



查看last登陆成功日志可以对应上时间:

已知该服务器中存在着数据包文件,将两个文件导出并进行分析,查看到两个文件的内容,该vpn服务器为双网卡,对内IP为192.168.184.133,具备对检材1(192.168.184.128)和检材2(192.168.184.129)访问权限,出口/服务端IP为172.16.80.92,通过分析可发现IP172.16.80.188在北京时间16:15-17:58之前进行了大量的操作,以192.168.184.133的身份对目标网站进行了连接和访问:

检材4

使用密码172.16.80.188对检材4进行解压,并使用火眼介质分析和火眼仿真对该介质进行动态和静态分析:

1.github访问

使用火眼介质分析分析上网记录发现目标服务器(192.168.184.128)的访问记录:
16:17分找到权限并尝试登陆页面

结合前面服务器的登陆日志、网站访问日志、抓包文件等分析结果确认最早入侵时间为北京时间2019-07-13 16:17:35(注意!目标服务器的时区为0时区,与北京时间相差8小时)

在入侵开始时,嫌疑人除访问目标服务器外,还访问了github,根据上网记录登陆github网址查看,搜索用户PackerLin,查看该用户页面,发现其上传过test2的文件,下载后发现为密钥文件,使用该文件尝试连接目标服务器,可以成功登陆,结合检材1默认设置为密钥登陆(禁用密码登陆),可以确认嫌疑人是从git上发现了服务器的连接密钥,从而对服务器实施的入侵。

2.手机备份分析

使用火眼介质分析发现内容如下:
IOS备份,虚拟机记录Ubuntu,Xshell连接密钥

通过仿真启动检材4镜像,在桌面看到如下内容:
Xshell直接运行起来发现其中有两个连接记录,通过密钥的方式进行的连接,密钥文件为packerlin’s test(Xshell的缓存)

同时桌面还有一个便签内容为‘niuroumian6’,一个新建文本文档,打开之后看起来像一个密码字典,

使用火眼添加手机备份文件为证据直接进行分析,发现该手机备份为加密备份,尝试发现的各种密码,‘niuroumian6’成功解开备份,可以直接对手机备份进行分析,手机内的短信、微信、qq中均发现案件相关聊天记录,通过聊天记录基本可以梳理出来整个案发的流程,同时通过短信了解到该嫌疑人还使用钓鱼网站对一名受害者进行诈骗:

通过对检材4分析,发现前面的虚拟机有嫌疑,因此导出虚拟机查看

3.网站重构

在前面检材分析过程中,发现mongo服务器的数据库被drop掉,数据库中无内容,结合后面聊天记录了解到,在检材2的root目录下存在一个被加密的db,应该是嫌疑人要对目标进行勒索,因此下载了加密软件进行了加密

方法1:可以尝试使用逆向工程的方法对encrypt(5)文件进行分析,查看大致的加密方式,从而尝试破解或者解密。使用IDA对ELF文件进行逆向分析,可以通过代码或者流图大致看出该加密方式为逐字节+66(10进制),然后和AA进行异或,由于加密方式很简单可以通过WINHEX或者编写简单脚本即可实现解密。


方法2:
在windows检材中,C盘根目录发现了一个VHD的文件,

双击直接运行,win10系统会自动挂载,发现该分区为bitloker加密分区,通过时间线分析(详见下文),发现该检材又发出过邮件,但是本机未分析出来,通过前面的流量包考虑到,该设备的流程应该都被检材3监听下来,因此尝试对数据包进行分析,发现了一份邮件发出的数据包,追踪TCP流将邮件提取出,发现了备份的bitlocker密钥,但是压缩包加过密码,因此需要尝试破解,联想到之前发现的密码线索桌面字典和便签,尝试对该压缩包进行字典破解,成功破解出密码 !VCHWEDfdfd2IOA564356:”:” ,



成功解压后,可以对加密分区进行解密,该分区内发现了3个与案件相关的重要文件,结合时间线,db文件为嫌疑人拖库的mongo数据,decrypt为解密程序,we.tar.gz为嫌疑人下载的网站代码,因此直接使用db,或者上传decrypt(解压密码为便签内容)到检材1、2,对其中加密的文件进行解密

通过上述两种方法,我们可以找到正常的数据库备份文件db,因此导回检材2的mongo数据库中,可以尝试重启网站:

由于检材在本地仿真的时候IP发生了变化,因此要调整配置文件的内容,对检材1中的nginx配置文件和数据库配置文件进行修改,此处修改要根据自己虚拟机网络配置的情况进行修改,修改好配置之后,将docker中的run.sh脚本复制到网站目录执行后可以启动网站。



查看检材1中网站配置文件/server/index.js,发现该文件引用了api.js,查看该文件发现其中关键的验证登录的字段,直接使用数据库种明文密码登陆,因此登陆数据库查看user表,使用表中用户登陆网站,成功登陆进去


案情时间线梳理

16:17分找到权限并尝试登陆页面

16:19:54下载密钥文件

16:20:42 运行xshell

16:21:18 设置用户密钥

16:21:28 成功连接128服务器

16:31:06 初次启动xftp,创建文件夹及文件

16;33:00传输web文件,16:33:15传输完成

16:34:55 登陆网页微信

16:40:13 打开rar,解压web文件

16:44:03查看关键数据库链接文件

16:45:45——数据库连接

16:53:45——17:12:30 手机QQ/微信购买ddos

17:15:33 下载runit(DDOS)

17:18:20新建xshell连接,17:18:55连接成功

17:22:23 下载db


17:27:53——17:37:56 手机QQ/微信购买加密解密

17:39:32 下载解密程序

17:42:20 再次访问129服务器

17:44:35 再次连接128服务器

17:45:16 XFTP连接128服务器


17:49:01 bitlocker加密

17:49:45 密钥生成于C:\users

17:51:47 桌面出现txt

17:52:19 目录下出现BitLocker.rar

17:53:24 运行foxmail

参考:

1.https://xdforensics-wiki.github.io/XDforensics-wiki/linux2/#docker
1、https://www.jianshu.com/p/806485990aea Docker文件目录 - 简书
2、https://hub.docker.com/_/mysql mysql - Docker Hub
3、李鹏超, 周凯. 基于Docker容器的电子数据取证方法[J]. 吉林大学学报(理学版), 2019, 57(06): 1485-1490.

你想在文章末尾对读者说的话