freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

恶意代码分析静态分析初级篇
2020-03-31 20:11:58

在应急响应中对发现的恶意脚本进行行为、原理分析无疑是一份事件处理报告的点睛之笔。对于大牛来讲ida、ollydb就能搞定一切,轻松拿下,但是对于小菜来讲,只能从简单的入手了。结合《恶意代码分析实战》一书,记录一些简单的笔记。这次就先记录几个简单、易入手的分析工具,内容较为基础大牛绕行。

一、恶意文件在线识别站点

在线识别站点是指一个网站允许你上传文件,然后调用多个反病毒引擎来进行扫描,并最终生成报告,其中体现了对样本的识别情况、标识这个样本是否是恶意、恶意代码名称,以及其他额外信息。通过这种方式可以帮助我们确定在应急中发现的恶意样本是否为恶意,如果为恶意在利用ida等工具进行进一步分析。

1、 https://www.virustotal.com/gui/home/upload

virustotal是书中作者推荐的一款在线检测工具,将疑似的恶意文件上传到网站即可,测试文件的扫描结果如下

图片.png

2、https://r.virscan.org

virscan是本人常用的一款在线扫描工具,上传样本,扫描结果如下

图片.png

3、https://x.threatbook.cn/

微步在线也是常用的一个在线识别工具,将样本上传后,会在沙箱中进行运行,所以会检测出样本的动态行为

图片.png

包括样本产生的一些进程、释放的文件等信息

图片.png

二、哈希值计算

哈希是一种用来唯一标识恶意代码的常用方法,md5算法是恶意代码分析常见的哈希函数,SHA-1也是常用的算法。hash可做为样本的标签使用,通过在线搜索hash可确定该文件是否已经被识别。可利用hashdeep计算hash值, 该工具的早期版本名称为md5deep。该工具可以批量计算文件的哈希值,并和哈希值列表进行比对。kali 下自带该工具

图片.png

在获取到样本hash的情况下,可直接在上述的网站中通过搜索hash获取样本分析结果,此处以virscan为例,访问如下url:https://md5.virscan.org/language/zh-cn/7f7ccaa16fb15eb1c7399d422f8363e8.html,将url中后面的字符串替换为需要查找的hash值即可查看相关文件报告

图片.png

三、字符串查找

字符串是一串可打印的字符序列,一个程序包含一些字符串,如打印出的消息、连接的url或是复制文件到某个特定位置。从字符串搜索是获得程序功能提示的一个简单方法,如程序访问了哪个url,可以使用strings查看文件中的可打印字符。kali中也自带了strings程序,使用strings查看样本,结果如下

图片.png

四、加壳与混淆恶意代码

恶意代码编写者经常使用加壳或是混淆技术,让他们的文件更难被检测与分析。混淆程序是恶意代码作者尝试去隐藏其执行过程的代码。而加壳是混淆程序中的一类,加壳后的恶意程序会被压缩,难以分析。加壳或混淆的恶意代码直接分析获取的可打印字符很少。加壳或是混淆的代码通常会包含LoadLibrary 和GetProceAddress函数,他们是用来加载和使用其他函数功能,允许程序访问系统上任何库的任何函数。

加壳的程序在运行时,会先运行一段脱壳代码,来解压缩加壳文件,然后在运行脱壳后的文件,利用peid可进行检测文件是否加壳,对样本Lap01-03.exe进行检测,样本是用的FSG1.0进行加壳。

图片.png

简单列举下加壳工具有有哪些: ASPack UPX 、 PECompact 、 Petite 2.2 NsPack v3.7FSG 2.0 Dbpe 2.20The Enigma Protector 1.02 Armadillo、 ACProtect 等,每个工具的介绍、下载链接,看雪已经做了整理,可参考如下链接https://tools.pediy.com/win/packers.htm

侦壳工具,除了上述的peid还可以采用 exepeinfo、Detect It Easy,还有部分工具看雪已经做了整理,具体具体可参考看雪链接:https://tools.pediy.com/win/unpacker.htm

五、链接库与函数

对于一个可执行程序,收集到的最有用的信息之一,就是导入表,导入函数是一个程序所使用的但存储在另一个程序中的一些函数,如包含了对于很多应用程序都通用的一些代码函数库。代码库可以被静态链接,也可以在运行时链接,或者动态链接。

静态链接在windows平台中不怎么常用,但是在linux程序中较为常见,当一个库被静态链接到一个程序时,库中的所有代码都会被复制到可执行程序中,所以此时可执行程序会大很多。

运行时链接在合法程序中不常见,但是在恶意代码中常用,特别是但恶意代码被加壳或混淆时,使用运行时链接只有到需要使用函数时,才链接到库而不是像动态链接模式在程序启动时就会链接。

动态链接是最常见的,宿主操作系统会在程序被装载时搜索所需的代码库。

dependency walker支持列出可执行文件的动态链接函数,如下图为dependency walker对样本lab01-02.exe的分析结果,主要包括程序导入的dll列表,包括KERNEL32.DLL、ADVAPI32.DLL等。右边为dll文件导入的一些函数。

图片.png

每个函数的功能可通过在msdn库中查找,如查询SetWindowsHookExA函数https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwindowshookexa,也可直接在左边搜索栏中进行查找相关函数。

图片.png

peview查看pe文件头

文件头中包含了有关文件本身的元数据,每个分节中都包含了有用的信息,windows平台可执行pe文件中的分节如下:

.text:包含了cpu的常见指令,一般来说是唯一可执行的节,也是包含可执行代码的节;

.rdate:包含程序中全局可访问的只读数据,包含导入导出的函数信息;

.data:存储程序中可访问的全局数据,本地数据并不村春在这个节中;

.rsrc:包含由可执行文件所使用的资源,而这些内容并不是可执行的,如图片、图标、字符串等。

利用peview查看样本lab01-1

图片.png

image_file_header:包含文件的基本信息;

image_optional_header:subsystem会指出该软件是控制台还图形程序界面,如上图IMAGE_SUBSYSTEM_WINDOWS_CUI,则说明系统为命令行窗口运行,若为GUI则是图形界面程序 。

resource hacker工具查看.rsrc资源节内容,下图查看记事本内容

图片.png

左侧窗口显示所执行文件所包含的所有资源,可利用该工具修改程序内容,下图将记事本的打印替换为111ww

图片.png

六、小结

内容较为基础,主要介绍了几种针对恶意程序进行初步判断的方法,大牛绕行。文中涉及的工具以及lab样本已经可在github下载,下载地址如下: https://github.com/tide-emergency/yingji/tree/master/%E6%81%B6%E6%84%8F%E4%BB%A3%E7%A0%81%E5%88%86%E6%9E%90%E4%B8%8E%E5%AE%9E%E6%88%98%E7%AC%94%E8%AE%B0/tools

关注我们

Tide安全团队正式成立于2019年1月,是新潮信息旗下以互联网攻防技术研究为目标的安全团队,目前聚集了十多位专业的安全攻防技术研究人员,专注于网络攻防、Web安全、移动终端、安全开发、IoT/物联网/工控安全等方向。

想了解更多Tide安全团队,请关注团队官网: http://www.TideSec.com 或长按二维码关注公众号:

ewm.png

# 应急响应
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者