zoukankan      html  css  js  c++  java
  • 实践作业5.2 初步动态分析

    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 CreateThread Create

    • 再根据上面的 url 和IE 8.0,我猜测它会进行连网操作,所以添加 TCP Connect

      image

    • 运行unpack01-02.exe,发现它会弹出一个黑色的命令行窗口,并且会创建一个线程。几秒钟后,cmd窗口自己关闭,监视屏幕上会显示出20线程创建函数 Thread Create和 退出函数Process Exit

      image

      image

    使用 Process Explorer 来查看程序运行时进程和线程列表中的变化,以及此程序都调用了哪些DLL。

    • 双击运行 unpack01-02.exe ,屏幕上会特别快的显示一行绿色的记录,是该程序的运行记录。暂时没有找到其他的线索。

      image

    使用 wireshark 进行抓包

    • 首先在命令行中ping上面发现的那个url,获取其ip地址=184.168.131.241

    • 然后打开wireshark,运行此程序进行抓包

      image

    • 从抓到的包中可以看到目前只有 ARPNBNS 两种类型的包。

      • 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进行过滤,发现什么内容也没有。

      image

    使用 微步云沙箱 对该程序进一步分析

    • 首先从样本标签可以得知,这是一个特洛伊木马。对脱壳后的文件进行检查,出现的标签是更为具体的 Trojan-Clicker。查资料得知,这类病毒运行后为伪装自己,在运行后连接某网址,此网站含有病毒,病毒会延时运行,运行后,添加注册表启动项,以达到随系统启动的目的。

      image

    • 在行为签名部分,我们可以看到更为详细的行为特征信息

      image

      • 该程序通过创建服务实现自启动,这个服务的名字是Malservice。在静态分析中,我们获取到了创建服务的导入函数CreateServiceA,在string工具中,我们也找到了Malservice这条线索。

        image

      • 该程序是使用UPX加壳的

      • 在文件内存中发现了URL,发起了HTTP请求。

    使用OllyDbg 对脱壳后的unpack01-02.exe进一步分析

    • 可以看到它调用 CreateMutex 创建了一个名为HGL345的互斥体,然后又通过OpenMutexA 打开它

      image

    • 创建服务 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 被多个进程共享的服务程序。
    • 设置等待时间

      image

      可以看到等待的时间被设置为永远,那么也就是说这个函数会一直处于等待状态,直到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通。
    • 不知道此程序的自启动到底是怎样实现的,或者说是不知道如何判断它有没有自启动。
    • 指定的服务控制管理器数据库到底是什么?
  • 相关阅读:
    关于Python Package下的Module import方式[转]
    go指针的一个小坑
    不错的python中级电子书
    virtualenv 安装及使用[转]
    Go语言的传参和传引用[转]
    gorename: easy refactoring tool for Golang[转]
    Python上下文管理器的使用
    Python使用DB-API操作MySQL数据库
    Python类的定义、方法和属性使用
    tomcat配置通过域名访问项目
  • 原文地址:https://www.cnblogs.com/jjy-666/p/14833818.html
Copyright © 2011-2022 走看看