0×00 概述
静态分析技术通常是研究恶意代码的第一步,是分析程序指令与结构来确定功能的过程,此时程序不是在运行状态的。
1. 反病毒软件确认程序样本恶意性
2. 使用hash识别恶意代码
3. 文件的字符串列表,使用函数还有文件头信息分析
尽可能多的搜集信息,对目标就更加了解。
0×01 反病毒扫描
反病毒软件显然不完美,主要依靠恶意代码特征片段的匹配(病毒文件特征库),还有基于行为模式的匹配分析(启发式检测)
恶意代码编写者很容易修改或者转化自己的特征代码片段,启发式检测也仍然会被新型的恶意代码绕过。
不同的反病毒软件使用了不同的特征库和启发式检测方法。
Virustotal网站允许你上传一个文件,调用多个反病毒引擎进行扫描,并生成一份报告
https://www.virustotal.com/ 扫描结果提供了各个引擎对样本的识别情况,
图1 扫描结果
传说还有相当多的黑客利用网站帮助其修改恶意代码,然而谷歌官方也能通过分析提交的恶意代码跟踪黑客修改软件的过程,甚至反向定位黑客。
0×02 恶意代码的指纹
hash是唯一标识恶意代码的常用方法,SHA-1算法,MD5算法是最常用的两种hash函数。
图2 Kali中的md5deep
0×03 查找字符串
程序中的字符串就是一段可打印的字符序列,从其中会包含很多信息,比如弹出的消息,读取的位置,链接的URL等等。
使用Kali中的Strings程序搜索可执行文件的字符串,通常以Unicode和ASCII格式存储。
两种类型格式都以NULL结束符,表示字符串是完整的 ASCII字符串每个字符使用一个字节,Unicode使用两个字节。
然而有些时候检测到的也并非是真正的字符串,可能是内存地址,CPU指令序列。
0×04 加壳与混淆恶意代码
加壳后的恶意程序会被压缩,混淆技术则隐藏了执行的过程。
有时候使用Strings程序只搜索出很少的字符串,大部分是加壳或者混淆的,但是此类程序至少会有两个函数LoadLibrary和GetProcAddress 用来加载和使用其他函数。
加壳程序运行先自身脱壳解压缩自身的文件,然后在运行,我们利用静态分析只能看到外面的脱壳代码。
0×05 PEID检测加壳
PEID来检测加壳的类型和所用编译器的类型,简化加壳分析的过程,
加入一个简单的恶意代码 PEID识别了加壳的类型
图3
UPX加壳工具非常流行 但是UPX也非常容易脱壳http://upx.sourceforge.net/ 下载工具就好
Warning: PEID 0.92中也存在缓冲区溢出漏洞,它和其他的程序一样,也许也会被黑客利用误导分析人员。
许多PEID插件会在不知情的情况下运行恶意代码可执行文件,注意在安全的环境下运行。
0×06 链接库与函数
对于分析恶意代码,收集它的导入表至关重要,导入表是一个程序使用的存储于另一个程序的那些函数。
静态链接(库与程序静态链接时,库中的所有代码都会复制到程序中,程序增大很多)常见于UNIX和Linux系统中,而Windows中都是动态链接(只有在程序运行时才链接到库)
DLL文件又称应用程序拓展,在Win中许多应用程序并不是一个完整的可执行文件,它们被分割成相对独立的动态链接库,DLL文件。
1. 不要把库包含在程序中需要时调用即可
2. 内存映射技术使加载后的DLL代码,资源在多个进程之间实现共享
3. 更新库时只要替换DLL即可方便快捷
0×07 Dependency Walker工具查看动态链接函数
图4
常见的DLL程序:
Kernal.dll 包含系统的核心功能,访问和操作内存,文件,硬件
WININET.dll 联网操作 包含了FTP HTTP NTP等协议
User.dll 包含了用户界面组件,控制响应用户操作的组件
Ntdll.dll 是Windows内核的接口 通常由Kernal间接导入,一些隐藏功能和操作进程会使用这个接口。
Advapi32.dll 提供了对核心Windows组件的访问 ,比如服务管理器和注册表
Gdi32.dll 提供图形显示和操作的函数
0×08 PE文件头与分节
PE文件是Windows系统下使用的可执行文件格式,它是微软在UNIX平台的COFF(Common Object File Format 通用对象文件格式)基础上制作而成。最初设计用来提高在不同系统上的移植性,其实只能用在Windows操作系统上。
PE是指32位可执行文件,64位的可执行文件称为PE+ 或者PE32+,并非PE64。
PE文件以一个文件头开始,其中包括代码信息,应用程序类型,所需的库函数与空间要求。
PE文件中常见的分节:
.text 包含了CPU的执行指令,正常是唯一包含代码的节。
.rdata 通常包含导入导出的函数信息,还可以存储程序中的其他只读数据
.data 包含了程序的全局数据 (本地数据并不存储在这里)
.rsrc 包含可执行文件使用的资源,内容并不执行,例如 图标,菜单项,字符串等
.reloc 包含用于重定位文件库的信息
0×09 一个小实验
我们先在Kali中用Strings程序看一下样本中的字符串,虽然没有显示出很多字符串,至少也得到了一部分信息。引入了WININET.dll和InternetOpenA函数说明会连接网络。还看到了一个网址可能是上述函数要连的网址。
接着我们用PEview打开文件,没有看到常用的PE节却看到了.UPX0/1/2 明显是UPX加密的痕迹 其中UPX0 虚拟大小为0×400 却没有原始数据 很可能包含了恶意代码。
PEID扫描结果看出是UPX加壳:
利用命令行工具UPX脱壳:
脱壳后重新PEview 这时就可以看到正常的PE节了,PE节的名称都很固定任何特殊的PE节都是可疑的,同时还观察到 NT头IMAGE_OPTIONAL_HEADER 中的Subsystem CUI表示是命令行程序:
参考 Practical Malware Analysis
示例程序 链接: http://pan.baidu.com/s/1bnlYFT1 密码: d8jw
*本文作者:月尽西楼,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)
- 上一篇:伽利略远程监控系统完全安装指南
- 下一篇:如何阻止微软强制更新你的操作系统
-
刚开始我以为文内有关于现下某些流行木马或者病毒的详细逆向分析的各种细节这样的干货,进来一看原来是列举了各种工具,且不说抄袭与否,单是文章质量。。。
-
55-AAstring不光kali有,这是linux/unix的通用工具。
0×04 加壳与混淆恶意代码,这个显然不是“恶意代码的静态分析技术”,而是anti“恶意代码的静态分析技术”。其中“但是此类程序至少会有两个函数LoadLibrary和GetProcAddress 用来加载和使用其他函数”这说的太绝对了,不用这两个函数的壳多的去了。
“而Windows中都是动态链接”,也不能这么说,windows中也有静态库,如MFC,动态静态都可以,看编译时如何选。
“Kernal.dll 包含系统的核心功能”,应该是kernel32.dll,即使是64位系统也是32。user32也一样,不是user.dll。
0×08 PE文件头与分节,PE不只是在windows下执行,wine也可以。.text 也不是唯一包含代码的节,驱动程序的.init节也包含执行代码。
0×09 一个小实验,“明显是UPX加密的痕迹”,upx数据压缩壳,没有使用密钥进行加密,修改版的除外。有.UPX0/1/2 也不一定就是upx,现在的混淆可以做到天衣无缝。
“Subsystem CUI表示是命令行程序”,这个不一定,很多有界面的程序也可以是CUI,驱动程序CUI的比较多,动态库CUI的也比较多。 -
科普文
-
@ 55-AA 谢大牛指教
-
加油
不容错过
- 一周「BUF大事件」(20160625-20160701)supercoco2016-07-02
- 点击一张图片背后的风险mscb2016-10-11
- 4.22,FreeBuf小酒馆(bar.freebuf.com)试营业FB客服2015-04-20
- Splunk大数据分析经验分享:从入门到夺门而逃Porsche2016-12-19
0day
已有 12 条评论
刚开始我以为文内有关于现下某些流行木马或者病毒的详细逆向分析的各种细节这样的干货,进来一看原来是列举了各种工具,且不说抄袭与否,单是文章质量。。。
哈哈哈~~~楼上亮了~~~狗眼已瞎。
也算是原创读书笔记了。。
string不光kali有,这是linux/unix的通用工具。
0×04 加壳与混淆恶意代码,这个显然不是“恶意代码的静态分析技术”,而是anti“恶意代码的静态分析技术”。其中“但是此类程序至少会有两个函数LoadLibrary和GetProcAddress 用来加载和使用其他函数”这说的太绝对了,不用这两个函数的壳多的去了。
“而Windows中都是动态链接”,也不能这么说,windows中也有静态库,如MFC,动态静态都可以,看编译时如何选。
“Kernal.dll 包含系统的核心功能”,应该是kernel32.dll,即使是64位系统也是32。user32也一样,不是user.dll。
0×08 PE文件头与分节,PE不只是在windows下执行,wine也可以。.text 也不是唯一包含代码的节,驱动程序的.init节也包含执行代码。
0×09 一个小实验,“明显是UPX加密的痕迹”,upx数据压缩壳,没有使用密钥进行加密,修改版的除外。有.UPX0/1/2 也不一定就是upx,现在的混淆可以做到天衣无缝。
“Subsystem CUI表示是命令行程序”,这个不一定,很多有界面的程序也可以是CUI,驱动程序CUI的比较多,动态库CUI的也比较多。
@ 55-AA 谢大牛指教
我最喜欢就是跟着技术大神写木马这些类型的,
【无端言论攻击 和谐 by FB客服】
嘲笑别人真的好吗?
谁不是从菜鸟一路走过来的,真正的大牛怕也不会嘲笑别人
科普文
加油
我是跟着标题进来的,看了内容,我有点明白了。。
其实作者的本意是,帮你们把《恶意代码分析实战》里的内容摘抄出来,怕你们没有电子版
对于这种行为,我觉得……好吧。。。我还是看实体书吧。。。楼主更新太慢,。。