2016-2017-1 20155215 信息安全技术 补课上测试
因为没有及时提交课上的测试成绩,所以我在课后做了一些关于恶意代码的学习,作为一个补充提交项。
恶意代码分析技术。
- 静态分析初级技术
- 动态分析初级技术
- 静态分析高级技术
- 动态分析高级技术
静态分析技术通常是研究恶意代码的第一步,是分析程序指令与结构来确定功能的过程,此时程序不是在运行状态的。
反病毒扫描
反病毒软件显然不完美,主要依靠恶意代码特征片段的匹配(病毒文件特征库),还有基于行为模式的匹配分析(启发式检测)恶意代码编写者很容易修改或者转化自己的特征代码片段,启发式检测也仍然会被新型的恶意代码绕过。不同的反病毒软件使用了不同的特征库和启发式检测方法。
恶意代码的指纹
hash是唯一标识恶意代码的常用方法,SHA-1算法,MD5算法是最常用的两种hash函数。
查找字符串
程序中的字符串就是一段可打印的字符序列,从其中会包含很多信息,比如弹出的消息,读取的位置,链接的URL等等。使用Kali中的Strings程序搜索可执行文件的字符串,通常以Unicode和ASCII格式存储。
两种类型格式都以NULL结束符,表示字符串是完整的 ASCII字符串每个字符使用一个字节,Unicode使用两个字节。然而有些时候检测到的也并非是真正的字符串,可能是内存地址,CPU指令序列。
加壳与混淆恶意代码
加壳后的恶意程序会被压缩,混淆技术则隐藏了执行的过程。有时候使用Strings程序只搜索出很少的字符串,大部分是加壳或者混淆的,但是此类程序至少会有两个函数LoadLibrary和GetProcAddress 用来加载和使用其他函数。加壳程序运行先自身脱壳解压缩自身的文件,然后在运行,我们利用静态分析只能看到外面的脱壳代码。
PE文件头与分节
PE文件是Windows系统下使用的可执行文件格式,它是微软在UNIX平台的COFF(Common Object File Format 通用对象文件格式)基础上制作而成。最初设计用来提高在不同系统上的移植性,其实只能用在Windows操作系统上。
PE是指32位可执行文件,64位的可执行文件称为PE+ 或者PE32+,并非PE64。
PE文件以一个文件头开始,其中包括代码信息,应用程序类型,所需的库函数与空间要求。
链接库与函数
对于分析恶意代码,收集它的导入表至关重要,导入表是一个程序使用的存储于另一个程序的那些函数。静态链接(库与程序静态链接时,库中的所有代码都会复制到程序中,程序增大很多)常见于UNIX和Linux系统中,而Windows中都是动态链接(只有在程序运行时才链接到库)DLL文件又称应用程序拓展,在Win中许多应用程序并不是一个完整的可执行文件,它们被分割成相对独立的动态链接库,DLL文件。
我在网上搜索了解了一些关于恶意代码分析的内容,其中有一本书叫做《恶意代码分析实战》
《恶意代码分析实战》是一本内容全面的恶意代码分析技术指南,其内容兼顾理论,重在实践,从不同方面为读者讲解恶意代码分析的实用技术方法。
《恶意代码分析实战》分为21章,覆盖恶意代码行为、恶意代码静态分析方法、恶意代码动态分析方法、恶意代码对抗与反对抗方法等,并包含了shellcode 分析,C++恶意代码分析,以及64 位恶意代码分析方法的介绍。本书多个章节后面都配有实验并配有实验的详细讲解与分析。通过每章的介绍及章后的实验,本书一步一个台阶地帮助初学者从零开始建立起恶意代码分析的基本技能。
然后我还在I春秋上找到了一个关于《恶意代码分析实战》这本书的课后习题讲解课程,并学习了该课程的第一个视频。其中演示了一个恶意代码静态分析实验。
- 实验内容:
此外,我还发现了一款恶意代码分析器,SCDBG。
恶意代码分析利器 – scdbg
什么是scdbg
scdbg是一款多平台开源的Shellcode模拟运行、分析工具。其基于libemulibrary搭建的虚拟环境,通过模拟32位处理器、内存和基本Windows API运行环境来虚拟执行Shellcode以分析其行为。有了虚拟执行妈妈再也不用担心我的电脑中病毒了。
关于Shellcode:
实际是一段代码(也可以是填充数据),是用来发送到服务器利用特定漏洞的代码,一般可以获取权限。另外,Shellcode一般是作为数据发送给受攻击服务器的。 Shellcode是溢出程序和蠕虫病毒的核心,提到它自然就会和漏洞联想在一起,毕竟Shellcode只对没有打补丁的主机有用武之地。网络上数以万计带着漏洞顽强运行着的服务器给hacker和Vxer丰盛的晚餐。漏洞利用中最关键的是Shellcode的编写。由于漏洞发现者在漏洞发现之初并不会给出完整Shellcode,因此掌握Shellcode编写技术就显得尤为重要。
scdbg的基本原理
众所周知,shellcode为了实现特定的功能必须通过调用系统API来完成-不论先前怎怎么变形怎么加密最后都会调用系统API。scdbg就是通过模拟执行以及hook多达200多个API来探测shellcode的行为。当然比如创建文件和访问网络这些危险的API并没有真正的在本机执行,而是通过传回虚假的返回值来欺骗shellcode让其平稳运行。
但是,我将scdbg下载下来之后却发现无法使用,按照网上的一些说明输入命令行也失败了。
- readme文档如下:
_______________
| |
| |
| libemu |
| x86 emulation |
| |
| |
| |
\ O |
\______________|
libemu homepage: http://libemu.mwcollect.org
This build supports:
100 hooks, 13 dlls, SEH, condensed output, interactive debug shell
see CHANGES for more details. note currently version is VS_LIBEMU repository
which is a Windows native build that is several years more advanced.
Home Page: http://sandsprite.com/blogs/index.php?uid=7&pid=152
Manual: http://sandsprite.com/CodeStuff/scdbg_manual/MANUAL_EN.html
Basic Video: http://www.youtube.com/watch?v=jFkegwFasIw
Adv Video: http://youtu.be/HZE2c_If6hU
Demo Shellcodes: http://sandsprite.com/blogs/files/sc_samples.zip
building from svn:
autoreconf -v -i
./configure --prefix=/opt/libemu; make install
scdbg binary is in ./tools/sctest/ after compilation
这是输入命令行之后: