恶意代码常规分析流程

本文介绍恶意代码常规分析流程。(待更)
菜鸟一枚,可能写的不好或存在错误,欢迎指正。

首先,恶意代码的生命周期分为三个——植入前、植入中、植入后

攻击途径

攻击途径有很多,大致有:

1.网页漏洞方式——0day
2.邮件方式——附件、社工钓鱼等
3.聊天工具
4.U盘交叉使用等等

形式

常见为exe、dll

分析

前:

1.建立虚拟环境(安全)

2.静态分析

  • 指通过反病毒引擎扫描识别已知的恶意代码家族和变种名
  • 逆向分析恶意代码模块构成,内部数据结构,关键控制流程等,理解恶意代码的机理,并提取特征码用于检测。
  • 常用工具包括PEview、PEID 、IDA(加壳的能脱壳就脱,利用工具能得到结论的是没加壳的恶意代码)

中:

3.脱不了就动态分析

  • 指通过在受控环境中执行目标代码,以获取目标代码的行为及运行结果。

目标:

  • 为网络入侵事件的响应提供所需信息
  • 确定到底发生了什么
  • 确保定位出所有受感染的主机和文件
  • 确定恶意代码可以做什么
  • 分析出主机特征和网络特征,以便检测

例如:动态分析a.exe。

假如释放新的c.dll或c.exe,再对释放的代码进行静态动态分析(目标恶意代码是下载器之类的)

恶意代码是否自启动——资源配置(文件释放,修改注册表、注册服务等等)——网络行为(连接web服务器下载东西等等)

把a.exe运行起来,要针对a.exe中PID 2503(注入到explorer.exe中)的进程行为进行分析监控,对进程行为分析processmonitor(进程行为、注册表、文件、API调用(IAP hook)、端口(专门列举端口的应用程序)等等)

针对c.exe——如果注册成服务,以内核态运行——到内核层用hook(API调用)

后:

持久控制(可靠控制)、隐蔽控制

完成
(1)自启动:修改注册表、注册服务——sys(内核中做hook)
(2)资源配置:文件释放
(3)网络行为:连接web服务器,下载

实例

本次分析的为样本下载链接:

一、首先建立安全的虚拟环境,这里使用win10虚拟机进行样本分析。

二、1.拿到样本首先进行静态分析,用PEid分析样本,观察其是否为加壳的恶意代码。如下图:


恶意代码常规分析流程_第1张图片
图1

观察到其并没有加壳,病毒本身是利用C#进行编写。入口点为0003008E。

2.接下来我们进一步查看扩展信息,如下图:


恶意代码常规分析流程_第2张图片
图2

可见其的确是未经过加壳的病毒。

三、然后我们利用PEview查看这个PE文件头信息以及各分节信息,如下图:


恶意代码常规分析流程_第3张图片
图3.png

1.先解释一下各部分的信息:

  • DOS_HEADER:DOS头
  • MS-DOS Stub Program:DOS环境下执行的指令,输出该程序不能再dos下运行的提示。
  • NT_HEADERS:PE文件头,其包含了标准与扩展PE头
  • NT_HEADERS下属的4个表(.text等):各节(section)的摘要信息,又称节表。
  • SECTION .text:存储程序中的代码节
  • SECTION .rdata:存储程序中引用的所有外部符号的数据节,该节包含导入的DLL名称表,其中的函数相对虚拟地址表,如果是DLL,则还有导出表
  • SECTION .data:存储程序中用到的所有全局变量,符号常量,字符串等数据的节,这些数据通常是由程序员自定义的,并且没有引用外部文件的内容。
  • SECTION .rsrc:存储程序中用到的所有资源,例如图标,窗口菜单,按钮等的节,该节通常只存在于图形界面的程序中。
  • SECTION .reloc:就是重定位区段,可执行文件的基址重定位。

2.首先分析IMAGE_FILE_HEADER字段,如下图:


恶意代码常规分析流程_第4张图片
图4

可以看出该字段的值为014C(对应符号常量为IMAGE_FILE_MACHINE_I386) ,

所有编译为可以在Intel 80386以及后续兼容处理器平台上运行的PE文件,应该都具有相同的值。

  • IMAGE_FILE_EXECUTABLE_IMAGE表示这是一个可执行文件
  • IMAGE_FILE_32BIT_MACHINE表示这是一个在32位机器上运行的程序

3.然后是IMAGE_OPTIONAL_HEADER字段,如下图:


恶意代码常规分析流程_第5张图片
图5

由Subsystem可以看出这是一个具有windows图形化界面的恶意代码

  • IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE可知允许在载入的时候进行重定位

  • IMAGE_DLLCHARACTERISTICS_NX_COMPAT,表示程序采用了/NXCOMPAT编译

  • IMAGE_DLLCHARACTERISTICS_NO_SEH表示不使用结构化异常处理

  • IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE表示支持终端服务器

4..text代码段分析,如下图:


恶意代码常规分析流程_第6张图片
图6
  • Size of Raw Data指向的是代码起始处
  • IMAGE_SCN_MEM_EXECUTE表示该节加载到内存后的所有页面可执行
  • IMAGE_SCN_MEM_READ表示该节加载到内存后的所有页面可读

5.接下来是.data字节,存储程序中用到的所有全局变量,符号常量,如下图


恶意代码常规分析流程_第7张图片
图7

6.在SECTION .sdata字段中我们看到value中有Auto clicker typer的字样,推测这是一个自动点击记录器。如下图


恶意代码常规分析流程_第8张图片
图8

四、使用Dependency Walker扫描32位或64位Windows模块(exe,dll,ocx,sys等),如下图:


恶意代码常规分析流程_第9张图片
图9

1.首先可以看到该程序调用MSCOREE.DLL,mscoree.dll是.NET Framework相关组件。在KERNEL32.DLL中我们可以看到导出函数中有如RegDeleteKey字样的函数,说明该可执行文件会删除注册表键和注册表键值,如下图:


恶意代码常规分析流程_第10张图片
图10

2.在NTDLL.DLL中还发现了RtlIpv4AddressToString字眼的函数,很可能和网络服务有关,如下图:


恶意代码常规分析流程_第11张图片
图11

3.同时,看到了UnmapViewOfFile函数,该函数可以对修改后的文件保存,如下图:


恶意代码常规分析流程_第12张图片
图12

五、接下来用IDA进行反编译,但却出现如下图界面:

恶意代码常规分析流程_第13张图片
图13. 界面
恶意代码常规分析流程_第14张图片
图14

发现IDA无法反编译用C#编写的.NET程序,因此这里尝试使用其他工具,上网搜索后,决定使用dotPeek

1.利用dotPeek进行反编译后,结果如下图:

need-to-insert-img

2.我们可以看到这个恶意代码调用了哪些库,如下图:

need-to-insert-img

3.可以看到在这个恶意代码中有4个Form,应该对应4个界面,如下图:

need-to-insert-img

4.在Form1中往下看,可以看到许多引人注目的API,如下图:

need-to-insert-img

need-to-insert-img

这些函数的功能再明显不过了,如KeyPress()应该是键盘记录的作用,MouseDown()应该是记录鼠标点击的动作,MouseWheel()应该是记录鼠标滚轮的操作等等。

5.然后我们来看看Button1,如下图:

need-to-insert-img

可见点击button1后,应该是让其他按钮无效DisableAll(),如下图。然后安装钩子InstallHooks()

need-to-insert-img

在进入InstallHooks()这个函数后,可以看到其实现了对用户鼠标行为的监控,比如获取鼠标button的flag,如下图:

need-to-insert-img

获取用户点击鼠标的次数,如下图:

need-to-insert-img

创建鼠标事件,如下图:

need-to-insert-img

其中的X、Y用来记录鼠标的位置,通过POINTAPI来实现,如下图:

need-to-insert-img

接下来就是很明显的键盘记录行为,通过GetKeyboardState()函数来获取键盘状态,然后转换成ASCII码。如下图:

need-to-insert-img

6.Button2的按钮的功能应该是和Button1的功能相呼应,重新激活各个按钮,移除钩子,如下图:

need-to-insert-img

7.注意到Button5有保存文件,且有写文件的功能。先是通过ShowDialog()显示目录,然后写文件。因此可能这个按钮会触发释放文件。如下图:

need-to-insert-img

8.Button7、Button9等应该就是触发其他Form的功能。如下图:

need-to-insert-img

9.我们来到Form2看一下几个button的功能,绝大部分是与Form1相关,例如打开目录等等,如下图:

need-to-insert-img

10.再来看看Form3,Form3中有许多ComboBox,也有包括创建注册表键(名为AutoClickerTyper),如下图:

need-to-insert-img

11.Form4中看到设置了注册表项中的开机自启项,因此推测可以有开机自启的功能,如下图:

need-to-insert-img

12.在Keyboard中,我们可以看到列举了Keys的各个枚举值常量,如下图:

need-to-insert-img

13.在Win32中我们同样可以看到刚刚的关键性函数GetKeyboardState(),如下图:

need-to-insert-img

动态分析

  1. 准备好软件工具包和恶意代码样本,放到Windows10虚拟机

need-to-insert-img

  1. 对改虚拟机拍摄快照,建立安全的运行环境,以便虚拟机出现问题时快速恢复。

need-to-insert-img

  1. 运行process monitor,界面如图,可以对Windows下的高级监视工具,提供监控注册表、文件系统、网络、线程、进程和线程行为。

· 结合了文件监视器FileMon和注册表监视器RegMon的功能。

· 监控所有能捕获的系统调用-> 容易耗尽内存

· 通常不用于记录网络行为

need-to-insert-img

  1. 可以只针对恶意代码或特定的系统调用设置过滤。如图我们指定对测试的恶意代码进行测试。

need-to-insert-img

  1. 运行该恶意代码,因为是.exe文件,直接双击运行即可。界面如下:

need-to-insert-img

点击record,发现我的键盘输入以及鼠标的点击都被显示出来,键盘是以ASCII码形式记录,鼠标点击的方式等都被记录。

need-to-insert-img

点击stop停止运行

need-to-insert-img

点击option有开机自启动等选项

need-to-insert-img

点击play可以对整个被记录的过程进行复现。

点击clear清除现有记录。

need-to-insert-img

save list 可以将现有的键盘记录存储在电脑上,如图:

need-to-insert-img

open list 可以打开现有的键盘记录,如图:

need-to-insert-img

点击auto list 可以打开如下界面进行诚挚keys

need-to-insert-img

hot key 用于设置快捷键,如图:

need-to-insert-img

change delay 可以设置延迟时间,如下图:

need-to-insert-img

  1. 过滤之后可以看到该恶意代码的进程行为。

need-to-insert-img

  1. 首先查看注册表。通过检查注册表变化,发现恶意程序对注册表的操作。

need-to-insert-img

need-to-insert-img

后来查资料发现.pf文件是预读文件,可以加快程序的加载速度。

need-to-insert-img

发现很多修改注册表的行为

新建删选条件如下:

need-to-insert-img

need-to-insert-img

wininet.dll是Windows应用程序网络相关模块,与网络的连接有关。

WSOCK32.dll和WS2_32.dll,是用来创建套接字的dll库,显然,如果这个程序所介绍的功能中不应该有网络连接部分,那么在其动态链接库中还存在这2个库就显得尤为可疑了

msvcrt.dll是提供C语言运行库执行文件,提供了printf,malloc,strcpy等C语言库函数的具体运行实现,并且为使用C/C++(Vc)编译的程序提供了初始化(如获取命令行参数)以及退出等功能。

need-to-insert-img

上图为writefile函数的情况

通过这些函数我们可以猜测恶意代码进行了修改注册表、修改内存信息、建立网络连接等行为。

need-to-insert-img

进程浏览器(****Process Explore****)

主要功能

· 列出所有活跃的进程、被进程载入的DLL、各种进程属性和整体系统信息。

· 杀死一个进程、退出用户登录、启动或激活进程。

need-to-insert-img

尝试查看我们的恶意代码,如下图

need-to-insert-img

发现他的详细信息被隐藏了

Regshot

运行恶意代码前 打开Regshot进行1st shot并保存其快照

如图所示:

need-to-insert-img

另存为:

need-to-insert-img

need-to-insert-img

接下来运行恶意代码,运行一段时间后进行第二个拍照,对比两次注册表信息的变化情况。如下图:

need-to-insert-img

比较前后注册表的不同,对比结果用记事本打开

need-to-insert-img

对比结果如下:

need-to-insert-img

结论:

Auto Clicker Typer的主要功能为击键记录和鼠标操作记录,同时包含有复现记录下的操作,保存记录文件等功能。

你可能感兴趣的:(恶意代码常规分析流程)