美文网首页
恶意代码常规分析流程

恶意代码常规分析流程

作者: 不愿透露姓名的多多 | 来源:发表于2019-02-16 14:13 被阅读0次

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

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

    攻击途径

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

    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

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

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


    图2

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

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


    图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

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

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

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

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


    图5

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

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

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

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

    • IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE表示支持终端服务器

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


    图6
    • Size of Raw Data指向的是代码起始处
    • IMAGE_SCN_MEM_EXECUTE表示该节加载到内存后的所有页面可执行
    • IMAGE_SCN_MEM_READ表示该节加载到内存后的所有页面可读

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


    图7

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


    图8

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


    图9

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


    图10

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


    图11

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


    图12

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

    图13. 界面 图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的主要功能为击键记录和鼠标操作记录,同时包含有复现记录下的操作,保存记录文件等功能。

    相关文章

      网友评论

          本文标题:恶意代码常规分析流程

          本文链接:https://www.haomeiwen.com/subject/lvpbeqtx.html