selph
selph
发布于 2021-10-08 / 669 阅读
0
0

恶意代码分析实战Lab01-静态分析基础

笔记

本章介绍的是从在不执行的情况下,从恶意文件中初步提取有用信息:

  • 使用杀毒软件和云沙箱进行检测(获取在线信息)
  • 从静态PE文件中获取有用信息(获取离线信息)

首先,可以使用杀毒软件和云沙箱来进行检测,结果中通常会显示其哈希值,这个哈希值是用来唯一标识恶意代码的常用方法

接下来对PE文件进行分析,可以从这几个角度入手:

  1. 字符串:有几率可以获得程序功能相关的提示,常用工具:Strings - Windows Sysinternals | Microsoft Docs
  2. 查壳:查看程序是否有进行加密加壳压缩等,常用工具:https://github.com/horsicq/Detect-It-Easy
  3. PE文件格式:从PE头中可以获取程序的一些信息,例如编译信息、空间要求等
  4. 链接库和函数:从程序的链接库中可以初步推断程序的功能,常用工具:Dependency Walker(包含在VS里了)
    1. 动态链接库:可以大概知道做什么事情了,例如用了ws2_32.dll,可以推测程序有联网行为
    2. 导入表:看到具体从dll中获取了哪些函数
    3. 导出表:dll中常见

作业

Lab 1-1

  1. 将文件上传至云沙箱查看报告,文件匹配到了已有的反病毒软件特征了吗?

    在微步在线云沙箱中检出率:8/25,被识别为了木马

    image-20210927192901719

  2. 这个文件是什么时候编译的?

    这个文件编译时间是:2010年12月20日:

    image-20210927192947742

  3. 这两个文件中是否存在迹象说明它们是否被加壳或混淆了?如果是,这些迹象在哪里?

    区段名称和大小正常,没有被加壳或混淆

  4. 是否有导入函数显示出了这个恶意代码是做什么的?如果是,是哪些导入函数?

    image-20210927193752817

    exe文件的导入表如上图,这里调用了各种文件相关API,文件搜索用的,文件复制,文件打开/创建,创建/关闭文件映射,暂不清楚是干嘛用的

    image-20210927194250283

    dll文件的导入表如上图,这里调用了创建进程的API,以及创建互斥对象API,说明要防止这个被创建的进程被多次创建,可能是创建一个命名互斥对象,然后还可以看到,调用了ws2_32.dll,这是用于网络连接的库,而且全部都是序号导入,看不到函数名称

    奇怪的是,这个dll文件导出表是空的,一般来说dll都是给exe导出函数来调用的,这里推测可能通过某种我不知道的方式进行执行

    答案:dll从msvcrt.dll里导出的了Sleep函数和kernel32.dll的CreateProcess函数,可以用来创建进程,执行功能,执行完就Sleep进入睡眠,这可能是个后门程序

  5. 是否有任何其他文件或基于主机的迹象,让你可以在受感染的系统上查找?

    通过查询字符串:

    image-20211002162911920

    可以推测,exe会对把原本kernel32.dll变成kerne132.dll还放在原来的目录下,dll里发现了ip地址,可能有网络连接行为,可以通过:c:\windows\system32\kerne132.dll来判断感染迹象

  6. 是否有基于网络的迹象,可以用来发现受感染机器上的这个恶意代码?

    有,在dll被执行的时候会向127.26.152.13发起连接

  7. 你猜这些文件的目的是什么?

    猜测会进行从网络中获取有问题的kerne132.dll进行读取,把正常的kernel32.dll映射到内存进行修改,修改成不正常的kerne132.dll的内容

    答案:dll可能是个后门,exe用来安装与运行dll文件

Lab 1-2

  1. 上传至云沙箱查看

    image-20211002170341290

  2. 是否有加壳混淆迹象?迹象是什么?被加壳的话请进行脱壳

    通过Die查看PE文件信息:

    image-20211002170445307

    看到这里有加壳:UPX壳,版本是3.04,upx是压缩壳,可通过加壳工具脱壳(UPX: the Ultimate Packer for eXecutables - Homepage

    image-20211002171150550

    重新查壳发现没壳了:

    image-20211002171318639

  3. 有没有导入函数能暗示这个程序的功能?如果是,是哪些导入函数,暗示了什么?

    image-20211002171440341

    LoadLibrary函数和GetProcAddress函数配合,可以动态获取dll中的函数地址,来调用函数而不显示在导入表里,接下来的Virtual三个函数是用来申请内存和修改内存属性的,可以把缓冲区的内容设置为可执行,然后进行执行,进一步看执行了哪些函数需要查询字符串:

    image-20211002171819080

    这里调用了CreateService函数,OpenSCManager函数,显然是创建服务程序,下面的InternetOpen,还有网址和IE8.0的字符串,表明,这里会有网络连接行为

  4. 哪些基于主机或网络的迹象确定被这个程序所感染的机器?

    连接上图中的那个网址的行为,以及服务里的MalService服务可以确定

Lab 1-3

  1. 上传云沙箱查看信息

    image-20211002172421854

  2. 是否有加壳混淆迹象?迹象是什么?被加壳的话请进行脱壳

    image-20211002172652334

    有被加壳,FSG壳,使用UnFSG进行脱壳:

    image-20211002173642203

    再次查看,已经无壳了:

    image-20211002173709177

  3. 有没有导入函数能暗示这个程序的功能?如果是,是哪些导入函数,暗示了什么?

    image-20211002173932423

    Ole.dll里导入了COM操作相关的函数,这个程序要进行COM组件的操作

  4. 哪些基于主机或网络的迹象确定被这个程序所感染的机器?

    字符串里搜索到了字符串:http://www.malwareanalysisbook.com/ad.html,这里被感染的机器会对这个域名发起访问请求

    书上解答说这个文件加壳了,暂时无法解答2,3,4问题,等后门学完脱壳再回来分析这个文件。。。

Lab 1-4

  1. 上传云沙箱查看信息

    image-20211002174324589

  2. 是否有加壳混淆迹象?迹象是什么?被加壳的话请进行脱壳

    没有加壳迹象

  3. 文件是什么时候编译的?

    image-20211002174450362

    大大的疑惑?这里很可能是程序篡改了自身的编译时间

  4. 有没有导入函数能暗示这个程序的功能?如果是,是哪些导入函数,暗示了什么?

    image-20211002174727227

    资源释放三件套,这个程序里有资源文件会被放出来,除此之外,还在字符串看到了dll注入用的函数,提升权限令牌的函数,网址uri的exe,这里大概率资源文件里藏了一个dll,程序会把dll释放出来提权注入到某个进程中去

  5. 哪些基于主机或网络的迹象确定被这个程序所感染的机器?

    检查C:\windows\system32\wupdmgrd.exe文件和C:\windows\winup.exe文件的存在,以及检查连接网址:http://www.practicalmalwareanalysis.com/updater.exe的行为

  6. 文件包含一个资源,你能从资源中发现什么吗?

    使用Die的资源查看可以看到:

    image-20211002175400691

    这里藏了一个可执行程序,大概率是个动态链接库


评论