原创作者:secdarker
0×00 使用现成工具
在没有恶意代码分析所需要的一些知识和技能的情况下,使用现成的杀毒工具无疑是最好的方法。即使有这个能力,如果恶意软件样本的泄露不会造成重要资产的泄露,使用现成的工具进行扫描也能够提供很多有用的信息,减少大量的人工投入。
其中最为常用的就是PC端的杀毒软件,如360,腾讯安全管家等。但是不管是哪款杀毒软件都存在一定的误报和漏报。使用在线等多引擎杀毒软件能够较好的反应是否为恶意软件。
http://www.virscan.org 能够使用39款杀毒引擎对样本进行分析,只需要将样本上传即可。
如果所示,许多著名的杀软引擎都会出现漏报。所以使用大量杀毒引擎进程查杀能够得到比较客观的通过概率反映结果。 如果文件已经被其他用户上传过,可以直接显示结果,毕竟hash值碰撞的概率是很小的。 在结果出来一段时间后,该网站还会输出文件行为分析报告。让我们对恶意软件的行为有初步的了解。
包括了基本信息,关键行为,进程行为,文件行为,网络行为,注册表行为,其他行为这些恶意软件常见的操作目标。
其他沙盒行为分析常用的网站参考如下
虽然有很多工具可以使用,但是需要看懂分析报告需要知识与技能的积累。同时有些恶意软件拥有检测虚拟机与沙箱的功能,现有的沙箱难以进行准确的分析。另外有些恶意软件的真实功能是在子进程、计算机重启之后、休眠一段时间之后、一定条件满足以后才会触发的,因此需要进行一定的人工分析。
0×01 恶意代码分析基础
1)知识技能依赖
要能够对恶意代码进行分析,需要掌握大量的知识,以及较强的代码逆向分析能力,代码调试能力。
要分析恶意软件执行了哪些行为,首先需要知道恶意软件常见的一些行为,如反弹shell,进程感染,文件隐藏,信息收集等。而要弄清这些行为,恶意软件需要对文件,注册表,进程进行操作,同时恶意软件要对感染的主机下发指令,传输收集到的信息,通常需要建立网络连接。要更准确的分析需要知道使用了哪些WinAPI实现了这些功能。
对于初级的分析方法,只要掌握常见的知识,以及一些工具的使用即可快速的掌握。如可以使用工具分析文件的hash值,字符串,函数表,函数库依赖关系。 另外可以运行恶意代码用工具监控恶意软件对文件,注册表,网络,进程的访问与操作。
要深入到代码层级去分析恶意代码,需要代码逆向分析的能力,需要读的懂汇编代码,熟练使用IDA进行分析,熟练使用ollydbg等调试工具。
1. 使用虚拟机
2. 创建虚拟机快照,在分析完一个恶意软件之后,恢复到初始环境
3. 为避免蠕虫攻击网络中的其他有漏洞主机,使用HOST模式建立网络
4. 有些恶意软件需要能访问互联网,可以用AdaptDNS, INetSim等模拟网络服务
这里已经创建好了一个虚拟机,装好了常用软件,创建了虚拟机快照,以便拷贝和快速恢复。
0×02 静态文件特征分析
静态文件分析方法如上图所示(数字代表优先级,星星表示收集了对应的工具)
1)杀毒软件多引擎扫描
杀毒软件多引擎扫描参见0X00现成工具的使用。如果大部分杀毒软件都不报毒,只有少数杀毒软件报毒,有可能是杀毒软件误报导致。
如果恶意软件伪装成一些系统文件,可以找到对应的文件,与样本的hash值进行对比。如果hash值相同,则可以排除是恶意软件,hash值碰撞的概率是极低的。
3)证书查看,符号库匹配
查看程序的证书信息
如果有合法的证书信息,基本可以排除恶意软件的可能性
进一步的,可以通过查看软件的版本信息,找到对应的版本,对比hash值。
4)收集字符串表,函数表信息
使用IDA的字符串表与函数表即可分析程序映像的字符串表。
可以比较函数表中是否出现恶意软件经常使用的WinApi进行初步的判断,通过阅读字符串表也能收集到大量的有用信息。如可以关注字符串表中是否有注册表路径,文件路径,程序路径,IP地址等信息。
5)PE文件分析
通过对PE文件的分析,可以得到Dll依赖关系,文件导入的资源,文件编译的时间导入导出表等信息。常用的工具有PEview,dependency walker,Resource Hacker,PE explorer等。其中PE explorer能够包含PEview,Resource Hacker等工具的信息,是一款综合的工具。
通过时间日期戳可以知道文件编译的时间,从而知道这个恶意软件产生的时间是2009年。
从函数导入表可以分析出恶意软件使用了哪些API,可能会有哪些行为,如这里使用了GetProcAddress,GetModuleHanedleA,LoadLibrayA这些函数,恶意程序可能会注入其他进程或者启动其他进程。 使用了Sleep函数可能会休眠一段时间等待时机启动。
PE explorer也能够分析DLL依赖关系,但是提供的信息很不全面,可以使用dependency walker获取更详细的信息。
如图下面看框中是DLL中所有导出函数,上面的框中会进行hint值匹配。 恶意程序经常使用hint值(DLL中函数表编号)来调用函数,这样导入表中就看不到对应的函数。dependency walker会将hint值进行匹配,这样就能比较全的获取WinApi调用。这里可以看到程序调用了大量的注册表操作函数。
6)文件壳分析
通常恶意程序会加壳处理,这样就很难得到字符串与函数信息。脱壳需要较强的逆向知识,这里先对查壳工具PeiD进行介绍。
PeiD能够识别编译器和壳的信息。
0×03 动态文件行为分析
1)在线沙箱
在线沙箱使用参考0×00。
2)监控进程信息
进程信息监控使用ProcessExplorer。
分析进程当前所调用了哪些DLL。
通过查看签名信息,可以简单判断进程是恶意程序的可能。 没有签名的进程一般都比较危险。
双击查看进程属性,可以看到进程启动的线程,网络连接,字符串等信息。
进程建立的网络连接,开放了不常用的端口,抓包分析时就可以重点关注这个IP地址。
字符串信息分为映像与内存。有些字符串需要程序运行起来才会解密出来,所以需要查看进程内存中的字符串才能够分析出恶意代码真正使用的字符串。
如果恶意程序是Dll文件,可以使用DLL搜索功能,查看有哪些程序调用了这个DLL。
3)进程行为监控
ProcessMonitor可以监控进程的文件操作,网络连接,注册表操作,进程线程操作,可以设置过滤条件。通过对监控信息的阅读,可以分析出大量恶意软件的行为。
对注册表启动项做修改,恶意程序的常见行为,为了开机执行。
双击查看调用栈,可以看到程序在这个注册表项下创建了一个键值。
恶意文件创建了一个目录,用于隐藏恶意文件路径。
恶意软件调用了其他进程,来完成一些行为。
恶意软件的网络连接行为。
4)注册表比较
使用regshot,在恶意程序运行前按快照A,运行之后按快照B既可对比恶意程序运行前后注册表的变化,弹出报告。如图左边所示恶意程序对开机启动项做了修改。
5)抓包分析
Wireshark是最常见的抓包工具,但是科来网络分析系统对很多结果做了中文化处理,分类处理,用户体验更好。 如果所示,恶意软件对101.251.246.218进行连接,其域名是一个9855129.f3322.net的域名。
其实还有两部分:静态汇编代码分析 动态代码调试追踪,后续有时间写完也会放出来供大家学习。
最后再来两张图: