1、样本信息
使用virustotal和virscanhttp网站对恶意样本进行分析,应该是Siscos家族的远控木马
所属家族:Siscos
MD5值:67DFC7730A6D14715DE7B28DB5F23C0B
SHA1值:D958DAEEF153D07F1B5013EC2E2D8833360874C3
SHA256值:47adf8083f73c20364fb88abce106f4e2126dbb08be18d0a066a9a8fc10ec436
CRC32:1CF02C4A
1.2 测试环境及工具
测试环境:Windows7 专业版
测试工具:Hash、PEID、OD、IDA、火绒剑、PCHunter、010Editor
1.3 分析目标
分析样本的主要恶意行为
2.具体分析
2.1 主要行为分析
使用PCHunter查看,对比运行前后异常的地方:
- 可疑进程
没有使用cmd命令,conhost.exe却启动,应该是恶意样本执行了cmd的命令
2.查看启动项(注册表、计划任务等)
没有发现可疑信息
3.查看驱动、服务等可疑项
可疑服务:conhost
4. 查看其他杂项,网络连接
没有发现可疑信息
5. 使用抓包工具(WSExplorer)查看可疑流量
没有发现可疑信息
使用火绒剑,对样本进行监控:
- 文件操作,主要看文件创建、修改、删除等操作
创建、并写入了dll文件,并删除了恶意样本文件
2.注册表操作,主要看注册表设置、创建等操作
创建了注册表键,并且设置了一些键值
3. 进程操作,主要看创建进程、写入内存等操作
4.网络操作,主要看网络连接地址、IP等信息
无
5.行为操作
释放pe文件、注册服务动态库、自我删除
查看执行监控,记录了进程启动、模块加载、进程提出
2.2 恶意代码详细分析
将样本拖入IDA中进行分析,找到WinMain函数,再使用OD找到对应的位置
进入进行分析,前几个函数是mfc的库函数,第5个call 40102D,然后jmp 4015A9,跳到入口点
在IDA中找到相应位置,对其进行具体分析:
1、先初始化了winsocket,又初始化应用程序的OLE支持,初始化了COM库
2、获取命令行参数中是否有Gupdate字符串,如果找到,返回该字符串地址。获取其后面的字符串(后面分析可知是conhost),注册键值,设置SYSTEM\CurrentControlSet\Services\conhost的显示名为:System Remote Data Simulation Layer 描述为:管理基于组件对象模型的核心服务。如果服务被禁用,计算机将无法正常运行。创建SYSTEM\CurrentControlSet\Services\conhost\Parameters,并设置servicedll的值。
然后将逆序存放的恶意代码再逆序回来,再在恢复后的代码中找到:.HL.,然后用0x411A20开始的0x214个字节替换找到的.HL.处,最后,创建文件,将得到的恶意代码写入到刚才的dll属性值下
逆序恢复过程:
逆序存放的恶意代码
恢复正常的恶意代码
在逆序后的代码中找到:.HL.,并进行替换
将得到的恶意代码,写入到传入的路径下
3、如果命令行中没有参数Gupdate,则执行下面的操作。加载shell32.dll、kernel32.dll模块,创建互斥体cloudbase-init.pw:8000:conhost,防止多开。
然后获取系统版本信息,获取ProgramFiles\Google目录,如果获取失败就获取临时目录Temp
获取系统启动的毫秒数,然后以此为恶意dll名,拼成路径:C:\ProgramFile\Google\系统启动毫秒数.dll,将逆序后以及替换0x214个字节的恶意代码,写入到该路径的dll中
遍历进程,查找360trayexe是否存在,如果存在返回1
加载刚才创建的恶意dll,如果360tray.exe正在运行,则不执行恶意dll的install函数;如果360tray.exe没有运行,则执行install函数。
360tray.exe存在,获取恶意文件路径,获取系统目录,获取系统运行毫秒数,然后将恶意文件复制到系统目录下,名称为:系统目录\系统启动毫秒数.bak。系统如果重启,则删除系统目录下的恶意文件。使用命令:rundll32.exe 恶意dll,MainThread,执行DLL中的MainThread函数。
最后删除自身,获取当前可执行文件的完整路径,获取当前进程并设置为最高优先级,获取当前线程并设置优先级为15,执行cmd命令,隐藏执行删除自身的命令。
大致流程图:
下面对生成的恶意dll进行分析,观察其导出表,发现有六个导出函数,需要逐个对其进行分析
- DllEntryPoint
Dll被加载时,会自动执行,该函数进行初始化操作,动态加载了一些模块,并且获取了一函数的地址,以便后面使用
- Install
经过分析,该函数主要时创建了conhost服务,设置相关的注册表键及其键值
创建并启动服务:
其中,参数不同,执行的操作不同:
使用OD动态分DLL,得到相关的函数名,启动服务,并且只要服务在运行,就一直循环:
设置SYSTEM\CurrentControlSet\Services\conhost\Remark,
获取系统时间,并设置Install时间为:Year-Month-Day Hour Minute
3、Unistall
获取当前文件路径,获取了系统目录,获取了系统启动时间。将自身复制到系统目录下,名称为:系统启动时间.bak,。MoveFileExA传入参数是4,重启时会删除自身文件
停止了conhost服务,然后删除了该服务,并删除了相关的键值
4、DllUpdate函数
Dll更新的函数,先是停止了服务,然后将自身复制到系统下,系统重启时删除自己。创建新的进程并运行,获取当前模块路径,然后重新启动conhost服务
5、ServiceMain
6、MainThread
主要线程,待更新