欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

行动中的恶意代码分析 第 9 章 实验部分 01

最编程 2024-04-16 16:53:02
...

Q

Lab9-1:使用IDA Pro和OllyDbg分析恶意文件Lab9-1.exe,回答以下问题。

  1. 如何让这个恶意代码安装自身?
  2. 这个恶意代码的命令行选项是什么?它要求的密码是什么?
  3. 如何利用OllyDbg永久修补这个恶意代码,使其不需要指定的命令行密码?
  4. 这个恶意代码基于系统的特征是什么?
  5. 这个恶意代码通过网络命令执行了哪些不同操作?
  6. 这个恶意代码是否有网络特征?

A

Lab09-01

使用IDA Pro打开Lab09-01.exe文件,查看main函数的地址,发现main函数位于0x00402AF0.

main.png

首先会检查参数的个数是不是1。

check_argc.png

如果只有一个参数,就会检查注册表是否有SOFTWARE\Microsoft \XPS,执行删除自身的操作。

401000.png
402010.png

其他逻辑先不细看,先使用OllyDbg动态调试。(这里需要注意一下,以管理员权限打开OD,不然之后调试逻辑可能有问题,我是从后面穿越过来的。)

call_main.png

F8到 CALL 00402AF0处,这里是对主函数的调用,F7步入,继续单步执行。0x00402AFD处查看参数个数是否为1。

cmp.png

继续执行到0x00401000处,该函数检查注册表。

check_reg.png

步入0x402410处的函数,会在0x004024EE处调用ShellExecuteA参数是/c del C:\Users\doinb\Desktop\BINARY~1\CHC9F5~1\Lab09-01.exe >> NUL执行删除自身的操作,这和静态分析的结果一致。

402410.png
call_cmd.png

此时由于参数不正确,恶意代码只是删除自身,难以继续分析,可以继续使用IDA Pro 找到合适的执行流程。

args.png

可以看到参数主要有以下几个可选项

  • -in
  • -re
  • -c
  • -cc

程序还会检查最后一个参数是不是合法,跟进sub_402510函数,此函数会检查最后一个参数是不是abcd,相当于密码,检查失败程序也不会正常执行。

sub_402510.png
402510.png

第一种方式我们可以直接逆向处sub_402510的逻辑,输入正确的密码,第二种思路,我们可以改变0x00402B38处的逻辑,无论sub_402510的执行结果为什么,直接跳到loc_402B3F函数处。

66.png

将此处的JNZ指令修改为JMP指令。

67.png

修改成功后,可以直接跳到00402B3F位置。

68.png

可以修改指令绕过检查密码的函数,输入-in abcde后继续执行,执行到00402600位置。

in.png
BOOL __cdecl sub_402600(LPCSTR lpServiceName)
{
  SC_HANDLE hService; // [esp+Ch] [ebp-1408h]
  char v3[1024]; // [esp+10h] [ebp-1404h] BYREF
  CHAR Filename[1024]; // [esp+410h] [ebp-1004h] BYREF
  CHAR DisplayName[1024]; // [esp+810h] [ebp-C04h] BYREF
  CHAR BinaryPathName[1024]; // [esp+C10h] [ebp-804h] BYREF
  SC_HANDLE hSCManager; // [esp+1010h] [ebp-404h]
  CHAR Src[1024]; // [esp+1014h] [ebp-400h] BYREF

  if ( sub_4025B0(v3) )
    return 1;
  strcpy(Src, aSystemrootSyst);                 // %SYSTEMROOT%\system32\
  strcat(Src, v3);
  strcat(Src, aExe);                            // .exe
  hSCManager = OpenSCManagerA(0, 0, 0xF003Fu);
  if ( !hSCManager )
    return 1;
  hService = OpenServiceA(hSCManager, lpServiceName, 0xF01FFu);
  if ( hService )
  {
    if ( !ChangeServiceConfigA(hService, 0xFFFFFFFF, 2u, 0xFFFFFFFF, BinaryPathName, 0, 0, 0, 0, 0, 0) )
    {
      CloseServiceHandle(hService);
      CloseServiceHandle(hSCManager);
      return 1;
    }
  }
  else
  {
    strcpy(DisplayName, lpServiceName);
    strcat(DisplayName, aManagerService);       // Manager Service
    hService = CreateServiceA(hSCManager, lpServiceName, DisplayName, 0xF01FFu, 0x20u, 2u, 1u, Src, 0, 0, 0, 0, 0);
    if ( !hService )
    {
      CloseServiceHandle(hSCManager);
      return 1;
    }
  }
  CloseServiceHandle(hService);
  CloseServiceHandle(hSCManager);
  if ( !ExpandEnvironmentStringsA(Src, BinaryPathName, 0x400u) )
    return 1;
  if ( !GetModuleFileNameA(0, Filename, 0x400u) )
    return 1;
  if ( !CopyFileA(Filename, BinaryPathName, 0) )
    return 1;
  if ( sub_4015B0(BinaryPathName) )
    return 1;                                   // ups
  return sub_401070(aUps, aHttpWwwPractic, a80, a60) != 0;// http://www.practicalmalwareanalysis.com
}

运行到函数OpenServiceA()函数处,lpServiceName参数为Lab09-01.

69.png

继续执行至0x004028A1处,参数为C:\Users\***\Desktop\BinaryCollection\Chapter_9L\Lab09-01.exeC:\WINDOWS\system32\Lab09-01.exe,作用为复制自身到系统目录下。

28A1.png
copy.png

继续执行至0x004028B9处,关注函数sub_4015B0sub_4014E0

4015B0.png
4014E0.png

函数参数为C:\WINDOWS\system32\Lab09-01.exeC:\WINDOWS\system32\Kernel32.dll,目的是将修改Lab09-01.exe的时间戳,此种技术被称为timestomping,ATT&CK中解释如下。

https://attack.mitre.org/techniques/T1070/006/

Adversaries may modify file time attributes to hide new or changes to existing files. Timestomping is a technique that modifies the timestamps of a file (the modify, access, create, and change times), often to mimic files that are in the same folder. This is done, for example, on files that have been modified or created by the adversary so that they do not appear conspicuous to forensic investigators or file analysis tools.

Timestomping may be used along with file name Masquerading to hide malware and tools.[1]
can.png

继续执行代码到0x004028E0处。

70.png

调用函数sub_401070,参数为ups,http://www.practicalmalwareanalysis.com,80,60(注意压栈顺序)

继续执行到0x004011D5处,调用函数RegSetValueExA()函数处,进入函数,这时EDX处保存的就是lpdata位置。这是以ups开头的字符串,就是把这个恶意domain和port的配置文件写入到了注册表中 HKLM\SOFTWARE\\Microsoft \\XPS 位置,名为Configuration值为ups.http://www.practicalmalwareanalysis.com.80.60,将配置信息持久化。右键EDX,选择Follow in Dump转储文件。

dump2.png

之后就会在16进制视图上显示。

dump3.png

命令行参数-in的行为分析结束,总结一下:

  • 创建服务Lab09-01
  • 复制文件到C:\WINDOWS\system32\Lab09-01.exe
  • Timestomping技术修改时间戳
  • 创建注册表项HKLM\SOFTWARE\\Microsoft \\XPS,名为Configuration值为ups.http://www.practicalmalwareanalysis.com.80.60

继续分析其他的命令行选项。

输入参数-re abcd运行函数到0x00402C18处,调用函数00402900

2900.png
402900.png

该函数主要作用为删除服务。删除系统目录下的文件。C:\WINDOWS\system32\Lab09-01.exe,总体上来说-re参数执行的行为和-in参数相反。

delete_file.png

-cc abcd参数运行文件。调用sub_401280

call_1280.png

参数如下

1280_argv.png
v12.png

继续运行至0x00402D60位置,call 00402E7E,参数如下,格式化字符串,并打印。

format.png
print.png

以参数-c运行程序比较特殊,要检查是否有七个参数,所以使用以下命令运行

-c AA BB CC DD abcd,这里参数看似是六个,实际上文件名也是参数,这时一共有七个参数argc=7argv=(Lab09-01, -c, AA, BB, CC, DD, abcd)

c.png

运行程序跟进至0x00402CC5处,关注函数sub_401070,参数如下

402cc5.png
402cc5_arv.png
401070.png

继续运行至RegSetValueExA处,查看参数

regsetvalue.png

这个地址上保存的就是RegSetValueExA函数的参数lpData,之后右键选择Follow in Dump在16进制窗口查看。

AA.png
dump22.png
lpdata.png

所以这个函数就是把参数用.拼接,然后重新设置注册表的键。

pjie.png

后门分析

继续查看strings页面,发现有网络连接和疑似后门字符串,查看引用。

back.png

在函数sub_402020发现对后门字符串的引用,对HTTP/1.0\r\n\r\n的直接引用在sub_401AF0处,继续查看引用,看到函数sub_401E60继续查看引用发现到了函数sub_402020,接下来就重点分析sub_402020函数。

backdoor_comm.png

支持的命令如下

命令 实现地址 行为
SLEEP 0x402076 睡眠
UPLOAD 0x4019E0 通过端口port连接远程主机并且读取内容,在本地文件创建file
Download 0x401870 读取文件file并通过端口port发送到远程主机
CMD 0x402268 运行command命令
NOTHING 0x402356 无操作

实现地址除了UPLOADDownload可以直接在伪代码里面看到,其他可以在图形模式里清晰看到。(_strncmp以后jnz的跳转)

回答:

1、可以使用命令行-in abcd也patch程序,跳过密码验证流程。

2、有四个可选的命令行和密码abcd

3、将0x00402B38处的jnz指令改为jmp指令

4、创建了注册表项HKLM\SOFTWARE\Microsoft \XPS\Configuration会在此写配置ups.http://www.practicalmalwareanalysis.com.80.60,相关配置信息之间使用.连接,在使用-c参数重新修改配置信息的时候,也会修改注册表此处的信息。

5、执行了上述分析的五个操作,不再赘述

6、恶意代码向http://www.practicalmalwareanalysis.com发出GET请求。