1.恶意代码分析技巧
会软件逆向就能进行恶意代码分析吗? 如图所示是海莲花组织的一次攻击过程,在整个攻击过程中,涉及到lnk、exe、hta、dll、exe、doc、sfx、ocx、zip和rar等各种类型的文件,恶意代码分析师需要对如上所有类型的文件进行分析,找出潜藏其中的恶意代码,分析其攻击过程,甚至是揪出背后的攻击者。面对类型多样的恶意代码,单纯的软件逆向远远无法胜任行恶意代码分析的工作,恶意代码分析的工作需要掌握各种类型的文件的分析技巧。 恶意代码中往往还会使用大量的混淆技术。如图所示,这是一段严重混淆过的js代码,直接分析费时费力还容易出错。 如果你掌握了分析技巧,你就会发现,这段js代码是混淆过的代码,这种混淆技术非常常见。使用分析工具解除混淆,就会发现这是一段很简单的js代码:document.write(“helloworld”); 面对形式多变的恶意代码,掌握恶意代码分析技巧尤为重要。本系列文章将向你介绍恶意代码分析技巧,帮助你快速定位并分析恶意代码。
2.根据行为分析
恶意代码分析最快速的方式是根据行为分析,运行恶意代码,查看恶意代码执行了哪些行为。 根据行为分析恶意代码,主要有在沙箱中运行恶意代码和在本地运行恶意代码两种方式。
2.1.沙箱运行
沙箱提供了一个独立的虚拟环境,在其内部运行的程序并不能对硬盘产生永久性的影响。根据沙箱的运行环境,又可以将沙箱细分为本地沙箱和在线沙箱。许多安全厂商都有自己的沙箱,下面列出了几款在线沙箱: https://x.threatbook.cn/ https://www.maldun.com/analysis/ https://ti.360.net/
2.2.本地运行
在本地运行恶意代码前,需要一些准备工作。 ①准备恶意代码的运行环境——虚拟机; ②准备行为监控软件——火绒剑(推荐)、process monitor... 虚拟机最好多准备几台,win7、winxp、win10、Ubuntu等,满足各种恶意代码的分析需求。 行为监控软件多种多样,笔者最喜欢使用的就是火绒剑,它能够检测进程、文件、注册表等操作。 火绒剑的使用也非常方便,只需要两步: ①添加监视: 系统—过滤—进程过滤—添加—设置方法(选择进程树)—设置值(输入进程路径)—确认 ②开启监控 单击开启监控,运行程序,观察日志
2.3.常见的恶意行为
在本地监控恶意代码行为得到的日志十分详细,但看到这样成百上千的日志,我们如何判断哪些行为是恶意的? 这就需要我们了解病毒常用的技术,下图是笔者总结的一些技术: 熟悉上图中的每一种技术,在分析中根据行为找恶意代码将会事半功倍。 网上已经有大神(TonyChen56)将上述的一些技术整合到同一个程序中,感兴趣的同学可以去看代码:https://github.com/TonyChen56/HackerTools
3.根据编译执行方式分析
行为分析只能让我们对恶意代码有一个简单的了解,而且往往会因为运行环境的原因,导致无法分析出恶意代码中所有的恶意行为。恶意代码分析免不了对恶意代码的详细分析。而根据恶意代码使用的语言不通,将有不同的分析方式。 脚本程序是由专门的脚本解释程序解释执行的,不需要产生目标代码,一般我们能够直接看到脚本程序的源代码,一般使用脚本调试器调试脚本类恶意代码。 与解释执行对应的就是编译执行。编译执行的程序又主要分成两类:一类是先编译为中间代码,在运行时再动态编译为当前CPU能够执行的目标代码,典型的代表便是使用C#开发的.NET程序。另一类是直接编译和链接成目标代码的程序,比如传统的C/C++程序。针对前一类代码的调试一般称为托管调试,针对后一类程序的调试称为本地调试。如果希望在同一个调试会话中既调试托管代码又调试本地代码,那么这种调试方式称为混合调试。 下图是笔者摘自《软件调试》中归纳出的按照执行和编译方式来对软件调试进行分类的判断方法和步骤:
正确的判断恶意代码使用的语言,才能选择合适的方式分析恶意代码。
4.根据文件类型分析
在本文第一节中笔者就提到过lnk、exe、hta、dll、exe、doc、sfx、ocx、zip等各种类型的文件都可能含有恶意代码。不同文件类型的恶意代码的分析方式大相径庭,在本系列的后续文章中,我们再详细介绍。