恶意代码行为


知识点

本章中会介绍恶意代码常见的恶意行为,方便我们识别各种各样的恶意程序。

下载器和启动器:常见的两种恶意代码是下载器和启动器。下载器从互联网上下载其他的恶意代码,然后在本地系统中运行,通常使用WindowsAPI函数URLDownloadtoFileAWinExec,来下载并运行新的恶意代码。启动器也成为加载器,是一类可执行文件,用来安装立即运行或者将来运行的恶意代码。

后门:后门可以让攻击者远程访问一个受害的机器。通常使用80端口的HTTP协议与控制机器进行通信。

使用WinDbg调试内核


知识点

WinDbg是微软提供的一个免费调试器,支持内核调试,也具有监控Windows系统交互的功能。

驱动与内核代码:Windows设备驱动简称为驱动,他让第三方开发商在Windows内核模式下运行代码。驱动程序常驻与内存,并且负责响应用户态程序的请求,而且应用程序不直接与驱动程序通信,而是直接访问设备对象,向具体的物理设备发送请求。设备对象由驱动程序创建和销毁,可以被用户态的程序直接访问,但他们并不一定是真实的物理设备。为了系统能正常工作,驱动程序必须加载到内核空间,这与DLL需要加载到进程空间道理相同,当驱动被首次加载时,DriverEntry函数将被调用。

与DLL通过导出函数表来提供其功能不同,驱动程序通过注册回调函数来提供功能。当用户态的应用程序请求一个服务时,这些回调函数将被调用。回调函数在DriverEntry程序中被注册。Window会为每个条创建一个驱动对象,并以参数形式将其传递给DriverEntry函数,DriverEntry函数用回调函数填充这个驱动对象。然后DriverEntry会创建一个可以被用户态应用程序访问的设备对象,应用程序与去当的交互请求都通过这个设备对象进行。

OllyDbg使用方法


知识点

加载恶意代码:OD可以直接加载可执行文件,也可以加载DLL文件,也可以将调试器附加在进程中,我们甚至可以用命令行运行恶意代码或者执行DLL中的某个函数。

加载可执行文件:在加载可执行文件的时候OD会使用它的加载器来加载这个程序,并可在此过程选择运行的命令行参数。如果OD能确定程序的main函数就在main处中断,否则在程序PE头提供的程序入口点中断。

附加调试器到一个程序:OD在附加到一个进程时会立即暂停这个程序以及它所有的线程。

OD窗口:OD有如下几个常用窗口:

  • 反汇编窗口:这个窗口显示了被调试程序的代码,下一条要执行的指令回在窗口中高亮显示,如果项修改指令或者数据,可以在此窗口中敲击空格键。
  • 寄存器窗口:这个窗口会显示程序寄存器的当前状态,代码在调试过程中,如果莫格寄存器的值发生了改变,则此寄存器就会从黑色变成红色。右键某个寄存器选择Modify就可以修改某个寄存器中的值。
  • 栈窗口:这个窗口会显示被调试宪曾在内存中的当前状态。这个窗口总会显示给定线程得到栈顶。OD会在一些栈单元上显示一些有用的注释,这些注释描述了调用一个API之前栈中存放的参数。
  • 内存转储窗口:这个窗口显示被调试进程的实时内存转储。

动态调试技术


知识点

本章会重点介绍两个调试器:OllyDbgWinDbg,调试器监控程序执行的能力在恶意代码分析的过程中十分重要,调试器允许我们查看任意内存地址的内容,寄存器的内容以及每个函数参数的值。调试器也允许我们在任意时刻改变运行中的程序中的值。

源代码级调试器与汇编级调试器:源代码级调试器指在代码编写期间运行的调试器,汇编级调试器也成为底层调试器,他的操作对象使源代码而不是汇编代码。

内核模式与用户模式调试:在用户模式中调试器调试的程序是单个可执行程序,操作系统会将它与其他可执行程序隔离。内核模式调试一般需要两个系统,一个系统运行被调试的代码,另一个系统运行调试器,我们需要开启操作系统的内核调试功能并将两个系统连接。WinDbg是一个常用的内核调试器,OD是一个常用的用户模式调试器。

分析恶意Windows程序


知识点

多数恶意代码运行在Windows上,因此对Windows变成概念的深刻理解会帮助我们识别出恶意代码在主机上感染的迹象,本章会介绍一些恶意代码使用Windows功能的独特方式,并且会讨论恶意代码是如何使用内核模式来实现额外功能与自身隐藏的。

Windows API:Windows API是一个广泛的功能集合,管理着恶意代码与微软程序库之间的交互方式,Windows API使用他自己的名字。例如DWORD和WORD类型分别标识32位与16位无符号整数。标准C类型如int、short等通常并不使用。Windows总体上使用匈牙利表达法,作为API函数的标识符,这个表达式使用一个前缀命名,如32位无符号整数变量会以dw开头。

识别汇编中的C代码结构


知识点

本章将通过讨论超过十种的不同的C代码结构来分析不同的汇编代码,帮助我们快速的提升形成恶意代码功能的高级视图的能力

全局变量|局部变量:全局变量可以被程序中任意函数访问和使用,局部变量只能在它被定义的函数中访问,在汇编代码中,全局变量通过内存地址引用,而局部变量通过栈地址引用。

识别if语句:有if语句一定存在跳转,但是有跳转不一定是if语句,if语句前有一个cmp指令用于对比条件,之后会有一个jnz指令来决定是否进行跳转。

for循环:for循环是一个C变成使用的基本循环机制。for循环总之有四个组件:初始化、比较、执行命令、变量的递增或递减。

while循环:while循环与for循环的汇编代码类似,但是区别在于while循环没有递增或者递减的代码。当一个cmp指令返回一定的值后while循环就会终止。

IDA Pro使用方法


知识点

IDA Pro(交互式反汇编器专业版)是一款极其强大的反汇编器,是许多恶意代码分析师、逆向工程师和漏洞分析师的首选。

IDA Pro接口:

图形接口:

  • 文本模式:文本模式左侧部分被称为箭头窗口,显示了程序的非线性流程,实线标记的是无条件跳转,虚线标记了条件跳转,向上的箭头表示一个循环。
  • 图形模式:图形模式中,箭头的颜色和方向显示程序的流程,红色表示一个条件跳转没有被采用,绿色表示这个条件跳转被采用,蓝色表示一个无条件跳转被采用,向上的箭头同样表示一个循环条件。

IDA窗口分布:函数窗口:列举可执行文件中的所有函数,并显示每个函数的长度。你可以根据函数长度进行排序来筛选出一些规模庞大而有趣的函数,这个窗口中每个函数关联了一些标志,如L代表此函数是库函数。

  • 名称窗口:列举每个地址的名字,包括函数、命名代码、命名数据、字符串。
  • 字符串窗口:显示所有字符串,默认显示长度超过5个字符的ASCII字符串,可以通过右键字符串窗口并选择Setup来修改此属性。
  • 导入表窗口:列举一个文件的所有导入函数。
  • 导出表窗口:列举一个文件的所有导出函数,一般多用于分析DLL文件。
  • 结构窗口:列举所有的活跃数据的结构布局。

静态分析高级技术


知识点

本章内容为静态分析高级技术,知识点内容较多,很多知识点都是与x86体系结构下的指令等相关知识。

微指令|机器码:微指令层又称为固件,微指令只能在特定的电路上执行,其通常由更高的机器码层翻译而来,提供了访问硬件的接口;机器码层由操作码组成,操作吗是一些十六进制的数字,机器码一般由多条微指令实现,用于告诉底层硬件如何执行实际的代码。

逆向工程:逆向工程是将程序的二进制文件作为输入,由反汇编软件将其输出为汇编语言再进行分析的过程,汇编语言是一类语言的统称,例如x86、x64、SPARC、PowerPC、MIPS、ARM等。

动态分析基础技术


知识点

与静态分析不同,动态分析是将恶意代码加载运行之后观察代码运行状态的一个过程,一般来说,对恶意代码进行分析时先进行静态分析来大致了解软件的功能再进行动态分析以了解恶意代码运行时的更多细节,静态分析与动态分析都有各自的有点以及局限性,本章重点介绍了动态分析的一些手法和技巧。

用沙箱来分析恶意代码:沙箱是一种在安全环境下运行不信任的程序的安全机制,沙箱一般包含一个虚拟的环境,并可以定制虚拟网络等“欺骗”恶意代码让恶意代码认为自己所在的沙箱是一个正常的物理机的各种虚拟功能,但是运行在沙箱中的恶意代码并不会对物理机产生任何威胁,因此沙箱是一个很好的用来动态分析恶意代码的工具。

前一段时间我使用过布谷鸟沙箱(Cuckoo),这一款沙箱的结构是首先开启一个安装有Ubuntu14.04的系统用于安装Cuckoo,然后再向这个虚拟机上安装所有Cuckoo依赖的插件,安装完成后再向Ubuntu中安装一个Vmware虚拟机来安装一个用于运行Windows等系统的虚拟机,整体相当于是一个虚拟机的嵌套结构,布谷鸟对这个在虚拟机中运行的虚拟机的运行状态的存储状态进行记录,并对比运行病毒前后的镜像区别来确定恶意代码对主机做了什么,并会生成一个十分详细的报告,总的来说这种杀向在我们对一个恶意代码进行静态分析遇到困难时还是很有帮助的,但是缺点是此系统十分难于安装,因为很多安装条件会产生冲突,而且此沙箱运行起来也是对电脑性能的极大挑战,除非你有一台安装了Ubuntu14.04的物理主机。

在虚拟机中分析恶意代码


知识点

很多恶意代码无疑会对运行环境造成不同程度的损害,在分析恶意代码功能的时候我们最好将恶意代码放在虚拟环境下进行分析,除了有一些无法通过虚拟化环境分析的恶意代码需要用安装了Norton Ghost等还原系统的物理机里进行分析。本章主要讲了如何在虚拟环境下分析恶意代码以及我们在虚拟环境下分析恶意代码可能造成的问题。

虚拟化环境:对我们而言,最容易创造的虚拟化环境就是用VmwareHyper-v或者Virtual Box创建一个虚拟机,另外还有一些用Docker容器作为虚拟化环境的恶意代码分析手段,但是我感觉这种方式暂时还不成熟,有很多技术Vmware可以做的更好,而且安全性方面Vmware隔离更彻底,更安全。因此我们可以用功能十分强大的Vmware创建一个属于自己的恶意代码分析环境,创建虚拟机以及虚拟机的使用方法网上已经有很多教程了,此处不再赘述,而着重介绍与恶意代码分析相关的虚拟机用法。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×