阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

如何通过API调用来分析恶意软件

32次阅读
没有评论

共计 2436 个字符,预计需要花费 7 分钟才能阅读完成。

 

导读 在今年的上一个季度,我们发现有越来越多的恶意软件开始使用各种加密、封装和加壳等保护技术来对恶意代码进行混淆处理,以防止系统或程序对其进行识别。除此之外,这些技术甚至还会让研究人员对其的静态分析变得更加困难。虽然越来越多的恶意软件开发人员开始使用这种保护性的加壳技术,但这也直接导致了另一种恶意软件分析方法的诞生。

如何通过 API 调用来分析恶意软件

 

其中的一种分析方法,就是通过分析恶意代码中负责告诉系统如何执行特定操作的 API 调用以及控制命令。在这种方法中,我们不需要对已加壳的文件进行逆向分析,因为我们只需要对恶意代码所执行的 API 调用来进行动态分析,就可以知道某个特定文件具体的功能了。通过这样的方法(分析 API 调用),我们可以确定一个文件是否具有恶意性,而有些 API 调用只有某些特殊类型的恶意软件才会去使用。比如说,常用的恶意 Payload 下载 API 是 URLDownloadToFile,而 GetWindowDC 这个 API 一般用于间谍软件或键盘记录器等恶意工具(用于屏幕截取)。

接下来,我们会对一个恶意软件样本进行分析,并给大家介绍这项技术的实现方法。

木马样本

我们所要分析的恶意软件样本是一个名叫 1.exe 的著名木马,它的 SHA256 如下:0213b36ee85a301b88c26e180f821104d5371410ab4390803eaa39fac1553c4c

如何通过 API 调用来分析恶意软件

这个文件是加了壳的(VMProtect),所以我们就很难使用反编译工具来对其进行分析了。由于我个人并不擅长逆向工程分析,因此我打算通过分析该文件在沙盒环境的执行过程中的 API 调用来了解它的行为。

下面这张图片中,显示的是我们通过观察它在沙盒环境中的运行情况所得到的 API 调用列表:

如何通过 API 调用来分析恶意软件

首先,我们来看一看这些函数到底有什么作用。其中有部分函数可以在微软的网站中找到相关内容:

GetModuleHandle 函数

为特定模块获取模块处理器,该模块必须在调用进程中被加载。GetModuleHandleA (ANSI)

GetProcAddress 函数

获取一个输出函数的地址,或从指定的动态链接库(DLL)获取变量。

_wtoi

将一个字符串转换成整型

CreateStreamOnHGlobal 函数

这个函数将创建一个流对象,该对象可以使用一个 HGLOBAL 内存处理器来存储流内容。

StrStr 函数

查找字符串中出现的第一个子字符串,匹配是大小写敏感的。StrStrA(ANSI)

wsprintf 函数

向特定的缓冲区中写入格式化数据,可根据相应的格式化字符串标准向输出缓冲区中写入任意参数。wsprintfA (ANSI)

WinHttpOpen 函数

该函数可以初始化 WinHTTP 函数并返回一个 WinHTTP-session 处理器。

GetModuleFileName 函数

获取包含指定模块的文件的完整路径,该模块必须在当前的调用进程中被加载。GetModuleFileNameW (Unicode)

LoadLibrary 函数

向调用进程的地址空间加载特定模块,该模块可能还会加载其他的模块。LoadLibraryA (ANSI)

LocalAlloc 函数

向堆内存中分配指定大小的字节。

LocalFree 函数

释放指定的本地内存对象,并初始化该对象的处理器。

GetModuleFileName 函数

获取包含指定模块的文件的完整路径,该模块必须在当前调用进程中被加载。GetModuleFileNameA (ANSI)

ExitProcess 函数
终止调用进程以及所有相关的线程。
关键的恶意识别指标

需要注意的是,上面给出的所有函数并非都能够之别标明某个可执行程序的真实作用。但是针对 WinHttpOpen 的调用可以告诉我们这个应用是有特殊目的的。

那我们就可以从这个函数下手,我们使用 URL Revealer(Kahu Security)来检测流量的目的地,并发现了两个该恶意应用会不断尝试连接的 URL 地址。

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

注:当我们向 VirusTotalAPI 提交一个文件来进行扫描时,最好提交这种形式的 POST

上面这个链接指向的是一个已失效的 Twitter 地址,当我使用 Twitter 的高级搜索功能进行查找时,我发现这条推文早就已经被删除了。

如何通过 API 调用来分析恶意软件

通过 Base64 解码之后我们得到了这条推文的原始内容:https://w0rm.in/join/join.php。但不幸的是,这个网站已经无法解析了,但这个网站原本是一个专门提供网站入侵服务的地下站点。不过需要注意的是,这个 Twitter 账号目前仍然是活跃的。

由此看来,我们就没办法弄清楚这个恶意软件想要利用 GET 请求来做什么了。但是我们可以用其他的方法搞清楚它想用 VirusTotal 来扫描什么东西?下面是我们使用 WireShark 所捕捉到的数据包:

如何通过 API 调用来分析恶意软件

在这个数据包中,你可以看到恶意软件用来在 VirusTotal 网站上扫描文件的 API 密钥以及文件名。所以,通过对 API 调用和数据包进行重构,我们发现这款恶意软件会向 VirusTotal 提交自己的拷贝版本,即恶意软件副本,而这正好是 Vflooder 木马家族的典型行为。Vflooder 是一种特殊类型的 Flooder 木马,而 Flooder 木马可以向目标发送大量的信息来中断目标的正常操作。但是我认为 VirusTotal 可能无法检测到这种恶意软件威胁。

总结

实际上,我们本文所分析的 Vflooder 木马样本其实还是费查更简单的。但是通过分析 API 调用来了解恶意软件的行为,其实并不是一件容易的事情,因为我们发现有很多的恶意软件会添加无效 / 冗余的 API 调用来增加我们的分析难度。但无论怎样,分析 API 调用也是一种检测恶意软件的有效方法,因为攻击者想要做的事情,肯定要在代码中有所体现。

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计2436字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中