一、基本信息
样本名称:1.exe
样本编译时间:
样本类型:MZ for MS-DOS
样本文件大小:234,496 字节
样本文件MD5 校验值(md5、certutil):324b6ab5e45e2a106025be8802d39511
样本文件SHA-256校验值(shasum、certutil) :3c2952b8e4351727e26025036532b31841b06c45b5e0e3faec4110d1959aad8b
壳信息:MPRESS v2.12 - [ v2.19 ]
可能受到威胁的系统:DOS系统
样本图标:
样本功能:
二、样本行为分析
1、网络行为分析
1.exe
- 发起网络连接请求
images.exe
- 发起网络连接请求
2、文件行为
1.exe
- 在程序文件夹下新建Microsoft DN1
- 读取多个文件夹下desktop.ini配置文件
- 在程序文件夹下新建文件images.exe
3、注册表行为
1.exe
- 设置IE浏览器最大同步下载的连线数目
- 在Windows\CurrentVersion\Explorer\下新建了一个键值 ADDEJIWOQK,设置了一个注册表项inst,类型为Binary
- 将images.exe添加为开机自启动项
images.exe
- 和1.exe类似
4、进程行为
1.exe
- 调用cmd执行Conhost.exe
- 运行sdclt.exe,尝试绕过UAC
- 启动自释放文件images.exe(BA_exec_extratedfile)
三、样本执行过程
- 入口两个函数
- 第一个函数,设置security_cookie
- 第二个函数为主体函数,进入定位到关键函数(0x00401730)
- 跟进后发现第四个函数为功能函数(0x401300)
- F7步入分析,发现第一个函数关闭了控制台程序
- 进入第二个函数(0x401000),该函数首先获取了当前进程的句柄,然后调用VirtualAllocEx分配内存,大小为0xC00000字节,有执行权限,返回值为分配的起始地址(0x920000),此时该块区域全部被0填充。
- 接下来将内存地址(0x495000)处的0x28000字节数据逐字节进行取反操作,处理后的数据放入到新分配的内存中。
- 对0x92000处的数据进行解密,得到shellcode1。
- 转去执行shellcode1
shellcode1
- 首先利用PEB结构定位后续需要的导入表函数的实际地址
- 接着shellcode自身存在一个PE文件(0x92053F)
- 检查该PE文件的一些基础信息(Magic,文件头地址,区块数目,可选头大小,入口点RVA)
- 分配一块新的内存区域,大小为0x154000,页属性为可读可写。
- 将上述PE文件复制到新分配的内存中
- 复制PE头
- 复制各个区块
- 修正IAT表
- 更改各个段的属性(例:.text段内存属性为PAGE_EXECUTE_READ)
- 因为修改了内存,所以调用ZwFlushInstructionCache函数转去执行这个PE程序(shellcode2)
shellcode2(恶意行为)
- 新建一个线程
- 该线程执行的函数功能包括:
- 调用GetCommandLineA,获取命令行参数
- 调用GetStartUpInfo,取得进程在启动时被指定的 STARTUPINFO 结构,用 GetProcessHeap 返回调用进程的默认堆句柄,用 RtlAllocateHeap 分配堆内存。接着获取模块句柄,最后关闭进程。
- 数据库操作
- 注册表操作
- 连接远程服务器