恶意代码常规分析流程

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

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

攻击途径

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容