专栏首页BestSDK深度解析|用API来分析软件,是否存在恶意倾向

深度解析|用API来分析软件,是否存在恶意倾向

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

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

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

木马样本

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

这个文件是加了壳的(VMProtect),所以我们就很难使用反编译工具来对其进行分析了。由于我个人并不擅长逆向工程分析,因此我打算通过分析该文件在沙盒环境的执行过程中的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地址。

GET http://twitter.com/pidoras6 POST http://www.virustotal.com/vtapi/v2/file/scan

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

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

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

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

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

总结

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

本文分享自微信公众号 - BestSDK(bestsdk)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-12-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一个“爆款”成功的API,都离不开这8条设计准则

    我已经看过很多API设计相关的文章和优秀的REST API设计教程。他们通常讨论的是适当的编码技巧和如何在给定的语言中暴露接口。尽管那些是很有用也是很需要的,但...

    BestSDK
  • 开发者必备“武器”API 接口,以最少成本开发应用

    五年前,我们就听别人说“软件正在蚕食整个世界”。SaaS类应用程序的数量呈爆发趋势,API领域的软件创新数量也在不断上升,API可以提供关键的连接,并不断提升重...

    BestSDK
  • API接口成企业数字化转型基石,85%企业已采用API开发模式

    在CA近日所披露的《API与数字化企业:由运营效率到数字化颠覆》全球调查报告中显示,中国大陆82%以上的组织已经采用了API,而有35%的组织已经达到了API应...

    BestSDK
  • 部署NGINX Plus作为API网关(第一部分)——NGINX

    HTTP API是现代应用架构的核心。HTTP协议使开发者可以更快地构建应用并使应用的维护变得更加容易。HTTP API提供了一套通用的接口,这使得在任意的应用...

    Techeek
  • android MVVM开发模式(五)

    android MVVM开发模式(五) 上一讲我们说了@InverseBindingAdapter标记的事情。通过这个,我们可以实现view向数据方向的传递。从...

    用户1263308
  • 能用强化学习买卖比特币赚钱吗?能能能,当然能!

    AI 科技评论按:人工智能热潮还没过去,电子货币和区块链的热潮又滚滚而来。以 BTC(比特币)为代表的电子货币近半年来吸引了全世界的注意力,每个人都想在这个热潮...

    AI科技评论
  • python笔记:用Python实现简单的爬虫

    做了一个简单的爬虫。使用python3。 涉及到代理的使用。关闭ssl验证。返回json的处理。 功能:用来查火车票。

    超级大猪
  • 大数据技术之_04_Hadoop学习_02_HDFS_DataNode(面试开发重点)+HDFS 2.X新特性

    思考:如果电脑磁盘里面存储的数据是控制高铁信号灯的红灯信号(1)和绿灯信号(0),但是存储该数据的磁盘坏了,一直显示是绿灯,是否很危险?同理DataNode节...

    黑泽君
  • Linux设置静态IP

    Java架构师历程
  • Facebook流量又被BGP劫持至俄罗斯

    “ 今天凌晨,BGPMon公司发布预警,称近日发生多起涉及AS12389(Rostelecom,俄罗斯电信公司)的大规模BGP劫持事件,影响8,000多个IP前...

    泉哥

扫码关注云+社区

领取腾讯云代金券