1.静态分析确定的线索
使用 PEView 对脱壳后的01-02.exe进行分析,可以在IAT表中看到如下导入函数:
ADVAPI32.dll:一个高级API应用程序接口服务库的一部分,包含的函数与对象的安全性,注册表的操控以及事件日志有关。
- CreateServiceA:创建一个服务对象,并将其添加到指定的服务控制管理器数据库。
- OpenSCManager:建立了一个到服务控制管理器的连接,并打开指定的数据库。
- StartServiceCtrlDispatcher:将服务进程的主线程连接到服务控制管理器,使得线程成为调用进程的服务控制调度程序线程。
KERNEL32.dll:是一个32位的动态链接库文件,属于内核级文件。它控制着系统的内存管理、数据的输入输出操作和中断处理。
- CreateThread:创建新的线程。
- CreateMutex:创建一个互斥对象并返回句柄
- OpenMutexA:打开一个互斥体(MUTEX)
- SystemTimeToFileTime:是一个进程,即系统时间本地时间。
- GetModuleFileName:获取当前进程已加载模块的文件的完整路径。
- CreateWaitableTimer:创建一个可等待的计时器对象。
- SetWaitableTimer:对上面创建的定时器对象进行时间的设置。
- WaitForSingleObject:用来检测hHandle事件的信号状态。
- ExitProcess:结束一个进程及其所有线程。
WINNET.dll:是Windows应用程序网络相关模块
- InternetOpenA:初始化应用程序,以实现对 WinINet 功能的使用。
- InternetOpenUrlA:打开由完整的FTP或HTTP URL指定的资源。这里要注意,该恶意程序可能会通过访问某url去下载另外的恶意资源。
使用string工具我们可以得到一个url和Internet Explorer 8.0的线索。
综上所述,从静态分析,我认为这个程序会使用Internet Explorer 8.0去访问http://www.malwareanalysisbook.com获得资源。
2.动态分析对上述线索的验证分析过程
使用Process Monitor,添加监视运行脱壳后的恶意程序 unpack01-02.exe
的过滤条件。
-
首先,要添加进程名字,即
unpack01-02.exe
-
从上面的静态分析中,我们大致可以猜测出此程序会创建进程和线程,所以在操作中添加
Process Create
和Thread Create
-
再根据上面的 url 和IE 8.0,我猜测它会进行连网操作,所以添加
TCP Connect
-
运行
unpack01-02.exe
,发现它会弹出一个黑色的命令行窗口,并且会创建一个线程。几秒钟后,cmd窗口自己关闭,监视屏幕上会显示出20线程创建函数Thread Create
和 退出函数Process Exit
。
使用 Process Explorer 来查看程序运行时进程和线程列表中的变化,以及此程序都调用了哪些DLL。
-
双击运行
unpack01-02.exe
,屏幕上会特别快的显示一行绿色的记录,是该程序的运行记录。暂时没有找到其他的线索。
使用 wireshark 进行抓包
-
首先在命令行中ping上面发现的那个url,获取其ip地址=184.168.131.241
-
然后打开wireshark,运行此程序进行抓包
-
从抓到的包中可以看到目前只有
ARP
和NBNS
两种类型的包。- ARP包是本机广播查找网关192.168.174.2的MAC地址
- NBNS是网络基本输入/输出系统 (NetBIOS) 名称服务器的缩写。它也是TCP/IP协议的一部分。它在基于 NetBIOS 名称访问的网络上提供主机名和地址映射方法。
NBNS包的源IP地址=192.168.174.133(本机),目的IP=192.168.174.2(网关)
从当前的抓包并没有获得什么有用的东西。
-
使用ip.addr == 184.168.131.241进行过滤,发现什么内容也没有。
使用 微步云沙箱 对该程序进一步分析
-
首先从样本标签可以得知,这是一个特洛伊木马。对脱壳后的文件进行检查,出现的标签是更为具体的
Trojan-Clicker
。查资料得知,这类病毒运行后为伪装自己,在运行后连接某网址,此网站含有病毒,病毒会延时运行,运行后,添加注册表启动项,以达到随系统启动的目的。 -
在行为签名部分,我们可以看到更为详细的行为特征信息
-
该程序通过创建服务实现自启动,这个服务的名字是Malservice。在静态分析中,我们获取到了创建服务的导入函数
CreateServiceA
,在string工具中,我们也找到了Malservice这条线索。 -
该程序是使用UPX加壳的
-
在文件内存中发现了URL,发起了HTTP请求。
-
使用OllyDbg 对脱壳后的unpack01-02.exe进一步分析
-
可以看到它调用
CreateMutex
创建了一个名为HGL345
的互斥体,然后又通过OpenMutexA
打开它 -
创建服务 Malservice
Password = NULL //指定此服务的口令,NULL表示无口令或是本地服务 ServiceStartName = NULL //指定服务帐号,NULL表示使用LocalSystem帐号 pDependencies = NULL //指定启动该服务前必须先启动的服务或服务组 pTagId = NULL //忽略 LoadOrderGroup = NULL //指定顺序装入的服务组名,NULL表示此服务不属于组 BinaryPathName //指定服务程序二进制文件的路径 ErrorControl = SERVICE_ERROR_IGNORE //指定服务启动失败后的差错控制 StartType = SERVICE_AUTO_START //指定服务启动选项 ServiceType = SERVICE_WIN32_OWN_PROCESS //指定服务类型 DesiredAccess = SERVICE_CHANGE_CONFIG //指定服务返回类型 DisplayName = "Malservice" //显示在用户界面用来标识服务的名称 ServiceName = "Malservice" //要创建的服务的名称。 hManager //服务控制管理器数据库的句柄。
ErrorControl的值如下
值 含义 SERVICE_ERROR_CRITICAL 服务启动程序将把该错误记录到事件日志中。 若最后一次正确配置可用,服务启动程序将以最后一次正确配置重新启动;否则将退出执行。 SERVICE_ERROR_IGNORE 服务启动程序将忽略该错误并返回继续执行。 SERVICE_ERROR_NORMAL 服务启动程序将把该错误记录到事件日志中并返回继续执行。 SERVICE_ERROR_SEVERE 服务启动程序将把该错误记录到事件日志中。若最后一次正确配置可用,服务启动程序将以最后一次正确配置重新启动;否则将返回继续执行。 StartType 的值如下
值 含义 SERVICE_AUTO_START 系统启动时由服务控制管理器自动启动该服务程序。 SERVICE_BOOT_START 用于由系统加载器创建的设备驱动程序。只能用于驱动服务程序。 SERVICE_DEMAND_START 由服务控制管理器(SCM)启动的服务。 SERVICE_DISABLED 无法启动的服务。 SERVICE_SYSTEM_START 用于由IoInitSystem函数创建的设备驱动程序。 ServiceType 的值如下
值 含义 SERVICE_ADAPTER 保留。 SERVICE_FILE_SYSTEM_DRIVER 文件系统驱动程序服务。 SERVICE_KERNEL_DRIVER 驱动程序服务。 SERVICE_RECOGNIZER_DRIVER 保留。 SERVICE_WIN32_OWN_PROCESS 运行于独立进程的服务程序。 SERVICE_WIN32_SHARE_PROCESS 被多个进程共享的服务程序。 -
设置等待时间
可以看到等待的时间被设置为永远,那么也就是说这个函数会一直处于等待状态,直到hHandle标记的对象被触发。
3. 动态分析的结论
(1)程序运行后,调用CreateMutex找出当前系统是否已经存在此进程的实例,如果没有则创建一个互斥体HGL345
。调用OpenMutexA打开互斥体HGL345
。
(2)调用GetModuleFileName获取当前进程已加载模块的文件的完整路径。
(3)调用 CreateServiceA 创建一个服务对象Malservice
,并将其添加到指定的服务控制管理器数据库。
(4)建立服务对象Malservice与服务控制管理器的连接,并打开指定的数据库。
(5)设置特殊时间:首先将系统的本地时间设置为2100,然后创建一个定时器,将其定时为系统本地时间。
(6)等待到达指定时间或事件被激活,创建20个线程去访问http://www.malwareanalysisbook.com ,达到分布式攻击的效果,使得网站服务器瘫痪。
4. 动态分析中尚不能确定,有待进一步分析的内容
- http://www.malwareanalysisbook.com 这个网站貌似不存在,在主机和虚拟机中访问他均显示无法访问此页面,并且无法ping通。
- 不知道此程序的自启动到底是怎样实现的,或者说是不知道如何判断它有没有自启动。
- 指定的服务控制管理器数据库到底是什么?