*本文作者:索马里的海盗,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。
0x1.背景
近几天,在XX任务中发现存在异常诡异的流量最终通过端口定位到该程序,便是故事的开始。
基本信息
复制到虚拟机上,简单查一下Proteug10 发现是一款专业电路仿真软件。
是不是你们电路工程的同学转向做安全了啊
Server.exe,无数字签名,仿冒其他软件,猜测是一个木马
资源未见敏感信息。
0x2.动态行为分析
挂着虚拟机运行程序对程序进行监视行为,分析监视数据。
分析行为监控,发现程序将自己复制到了C盘Microsoft Plarsb目录下,并且创建了服务来达到自启动目的。
并且程序对 121.18.238.56:8080和142.4.105.65:9090端口有网络访问,和当时设备监控的目标也是同一个。
前者关机(或防ping),后者存活,推测可能在吃鸡。
查找到为美国服务器(发现近几年的恶意程序服务端IP大部分都是来自美利坚众合国)
端口扫描结果:
端口开的太少如果开的多几率高一点,砸门可以搞一波反渗透本人渗透思路局限,还请大虾赐教。
0x3.逆向分析
程序开始获取InternetOpenA函数地址,推测可能会下载网络文件。
(F6616FC73090D751AFD98A6194A14358)像是一个32位HASH。
没解密出来唉,在这里开始大量出现程序内所用到的字符串。
这里出现了默认分组的字样,2010字样,并且在IP138查询了外网地址,猜测可能是GH0ST变种。
提权。
创建了以“傻逼360”命名的事件对象,可以确定不正常了。
确认目标路径存不存在,这里后面我用OD也跟到这里来了这个会先检测存不存这个文件,不存在就创建。
木马又复制了一个新的程序到这个C:\program Files\Microsoft Plarsb\Nlwxaoc.exe
下面进入if了去判断,创建相应文件夹。
将自己拷贝至目标路径内。
运行拷贝过去的文件,它这样做和直接运行有啥区别吗,真是感叹作者的脑瓜。
到这程序申请内存和堆操作,最后ExitPROCESS,下面我用OD动态跟。
申请堆。
然后获取程序启动信息路径和程序自身的信息。
之后获取系统启动信息:硬件型号,系统版本,系统环境变量。
释放新的文件,如上面从行为监控的大致一样。
通过loadPE查看加载的DLL只有一个,但在内存中动态使用loadLibrary去加载其他DLL猜测是来躲避查杀软件检测。
这里还PUSH了一堆密文:
xepdy0Q/xlU4bgAmDBixsFQS1PVMwfwe4WfV0HkKVyhpPH+3PqGW0ugVvJ2UpqFD1mNQiNw8SFRK1EULt7q/BhA4ejT/BEVY6sU8CNeuKdHmUAsM766VbK1zVougYQWvTJ9kczqMSSMody1B39rGDSj5iqw76x4BjPPnq3BEOrT7Ptkw3HqNHs5ghFvuH7q5kWUbjQ0bmISMRlPZ2N1BXkfBv+XOWuPz+EBQwSXU2AIYVeEkd/9JaUjmyOsHzGxEGypoU9Spv7a4eKJEdgMEfug1g/9uUyGTElb2IFALYaAZbHGNOA8XkUMmB56zQvlxcVB6L7W0XwDbjGkYobD//6QSmNEyVZKPk83fuF+ZzstmxA2z0SSS4dAEGG2/m++k+K8ycWu5ucIsuUzAdx6D+ZJEr/PekcHMP5H3PeQGM3+lVC7NDscisDc4q4MjIX/KqZNFiWAipvBgOYQEN3BpN7K9cFKUhj2e/j/2CJfTAs+vWutmrT+IgSm4jm+RA2Qau1Y4GIQgocYTyQ==
根据密文形式猜测,很有可能是AES/DES加密,根据12345678和12345678admins尝试解密失败。
至此,程序一阶段执行完毕,大概行为:
1.确认C盘目标目录是否存在
2.创建目标目录并复制
3.启动复制后的文件
4.提权
5.一堆加密的代码
6.退出
我们跟到第二个阶段的程序看看有没有新东西。
程序启动(C:\Program Files\Microsoft Plarsb\Nlwxaoc.exe):
第二个程序中再次出现这段密文,我觉得很有必要在lstrlenA函数下断点跟一下。
在二次运行阶段第一次通过注册表创建了服务。
删除C:\Picture.exe,下载http://121.18.238.56:8080/aaa.exe并再次通过API创建服务。
第二阶段退出。
到这程序也有申请内存和堆操作,最后ExitPROCESS,接着第三阶段。
开始连接此IP,并且打开网址:http://r.pengyou.com/fcg-bin/cgi_get_portrait.fcg?uins=12345678 由于朋友网接口失效,无法判断此网址作用。搞了那么久不会就是想交个朋友吧。
我尝试在VirtualAlloc下断,发现其动态申请了一段指定起始地址为10000000的内存。
根据之前的信息进行推测这里应该还是一个模块,在10000000处下硬件写入断点看看是什么时候写入的数据:
向上追踪esi地址,发现了一段经过UPX加壳的PE数据:
根据MZ头位置确定PE_HEADER:(0x0047005C+0x0128 = 0x00470184)
找到了NT头,找0B01,确定OPTIONAL_HEADER位置:
SizeOfHeaders:0x1000
NumberOfSections:3
继续向下找节表,节表如图所示,共3个节,
第一个节名:UPX0,SizeofRawData:0
第一个节名:UPX1,SizeofRawData:00051400
第三个节名:rsrc,SizeofRawData:00001C00
故整个PE文件实际大小:SizeOfHeaders(0x1000)+ UPX0(0)+ UPX0(00051400)+ rsrc(00001C00) = 0x54000
用MZ头所在内存起始地址加上计算出来的整个文件的大小:
0x47005C + 0x54000 = 4C405C
所以现在可以确定这个PE文件在内存里边的整段位置为:
0x47005C – 0x4C405C,在x32dbg中选中这段内存,右键保存为二进制数据,得到一个dll:
查看文件信息可得知,此文件伪装成酷狗音乐DLL文件运作:
加了UPX。
老规矩,ESP定律。
DLL导出表
导入表中大多是一些之前简单分析的函数。
截屏
路由相关
添加用户
下载文件
至此结束吧。这个木马最终会加载这个DLL至0x10000000并且进入这个模块继续执行,看了一下无非就是一些木马的常用功能。
按照以往做法这里是不是应该总结一张木马运行图,抱歉,运行图我不会画,但是画画我会,送上在下画的小鸡啄米图。
*本文作者:索马里的海盗,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。