本文讲的是Windows恶意软件API调用特征分析

1.背景

目标:

1)找到病毒调用概率高的API
2)找到病毒调用概率不高,但是当调用频次高的时候,是病毒概率高的API。

通常对病毒使用API的认识都是基于病毒工程师的经验,但是我们并不知道每个API对于是否是病毒的贡献有多大。通过对大量病毒样本的统计分析,我们可以得出相关的数据。

从网上下载3000个样本,1500个病毒,1500个无毒。用沙箱进行扫描,得到样本调用API和是否是病毒。如下图所示

取API的动态调用次数作为每个样本的特征,病毒类标记为1,非病毒类标记为0。如下所示:

{‘LdrUnloadDll’:4, ‘RegCloseKey’:45,…}  1
{‘GetFileSize’:1, ‘NtWriteFile’:4, ….} 0

2. 分析

将样本的API调用次数表示到折线图和条形图上,蓝色表示正常样本,绿色表示病毒样本。如下图所示:

条形图按API调用的次数分布到5个区间1+(1~10),10+(10~100),100+(100~1000),1000+(1000~5000),5000+(5000~)。

通过对大量样本的图形的观察发现,病毒比较常用的API(如:WriteProcessMemory,Process32NextW等)不管是折线图还是条形图,绿色线条所占的比例都很大。

病毒使用率低的API,蓝色线条占的比例比较大。

有些API的调用,折线图绿线比例大,条形图蓝线比例比较大。这种情况下病毒对API的调用次数会很多(会有很多成千上万次的调用),普通样本对API调用次数很少(一般不超过100次)。

因此我们可以计算折线图和条形图中绿色像素所占的比例来评估API对病毒的影响。

3. 方法

P1 = 折线图占用率:绿色像素/(绿色像素+蓝色像素)

P2 = 条形图占用率:绿色像素/(绿色像素+蓝色像素)

1) 计算API对病毒分类的贡献(P1*P2)

对于最能表示病毒特征的API,其被病毒调用的概率要比被正常样本调用的概率大的多,同时高频调用的次数也比正常样本大的多。如Process32NextW

所以P1,P2的值也会很大。

对于最不可能被病毒调用的API,P1,P2的值都会很小。

因此可以用P1*P2来表示API对病毒分类的贡献,进行排序后,数值会往两端移动。

贡献度排序曲线

2) 计算API的高频调用对病毒分类的贡献(P1-P2)

对于__exception__这样的,P1值很大,但是P2值比较小。其高频次调用的情况下是病毒的概率很高,无法单纯的从是否调用来判断是否为病毒。

用P1-P2来评价高频次调用。

4.结果

1)计算P1*P2,进行排序,部分结果如下。

数据结果分别为(API名,(贡献值,API调用次数概率,调用API的样本为病毒的概率,病毒样本数量))

贡献值为1的API,没有被正常样本调用过。(可能是由于样本数量太小造成的,特别是病毒样本数量只有几次的API)。其图像如下:

贡献值比较大的API基本都是病毒常用的,经常用来识别病毒。如排在前10的有:

WriteProcessMemory,NtGetContextThread,gethostbyname,CreateToolhelp32Snapshot,NtSetContextThread,Process32NextW,Process32FirstW,InternetOpenA,

GetComputerNameA,GetFileSizeEx。其图像如下

中间这部分数据用于下一节。

排在后面的都是比较没有病毒特性的API,比如WriteConsoleA,WriteConsoleW,MessageBoxTimeoutW,InternetGetConnectedState,select等。图像示例如下:

2)计算P1-P2,进行排序,部分结果如下。

这部分可以找到那些低频次调用贡献度下,但是高频次调用贡献度大的API。

数据格式(API名,(提升度,API调用次数概率,调用API的样本为病毒的概率,正常样本调用最大次数))

比如NtQueryAttributesFile,正常样本使用这个API的可能性更大。但是正常样本很少调用超过10次的。 因此超过10次调用NtQueryAttributesFile的样本就很可能是病毒了。

GetFileAttributesW 超过100次调用则很有可能是病毒。

超过10次的__exception__调用时病毒的概率很大。

完整的数据整理看数据部分。

5.结论

1)通过计算贡献度=病毒调用API概率*调用次数比例可以将API两极化

结果会受样本数量的影响,需要过滤掉次总数低的数据

2)通过(调用次数比例-病毒调用API概率)可以找到那些调用次数少时对病毒分析没什么帮助,但是调用次数多时帮助很大的API。

6.数据

1)对病毒识别影响大的API

2) 调用次数少难以区分,调用次数多可以用于识别病毒的API

原文发布时间为:2017年2月8日
本文作者:Change
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。
原文链接

Windows恶意软件API调用特征分析相关推荐

  1. 89个windows常用API调用

    VC API常用函数简单例子大全 第一个:FindWindow根据窗口类名或窗口标题名来获得窗口的句柄,该函数返回窗口的句柄 函数的定义:HWND WINAPI FindWindow(LPCSTR l ...

  2. Windows内核实验004 API调用

    文章目录 完善代码 内核API调用 修复一个潜在问题 复现问题 完整代码 前面几次实验我们已经完成了一个三环的程序调用零环API的必要条件. 提升到零环权限 使fs指向KPCR 完善代码 这次我们去掉 ...

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

    导读 在今年的上一个季度,我们发现有越来越多的恶意软件开始使用各种加密.封装和加壳等保护技术来对恶意代码进行混淆处理,以防止系统或程序对其进行识别.除此之外,这些技术甚至还会让研究人员对其的静态分析变 ...

  4. Tensorflow C++ API调用Keras模型实现RGB图像语义分割

    我的实验是基于PSPNet模型实现二维图像的语义分割,下面的代码直接从得到的h5文件开始往下做... 也不知道是自己的检索能力出现了问题还是咋回事,搜遍全网都没有可以直接拿来用的语义分割代码,东拼西凑 ...

  5. 初步了解Windows Safer API

    Safer API,应为Windows提供的安全性API: 下面来调用其中一个函数看一下: SaferCreateLevel 函数,其功能是打开一个SAFER_LEVEL_HANDLE句柄: 函数的微 ...

  6. 外汇汇率接口 java_基于JAVA的货币汇率api调用代码实例

    代码描述:基于JAVA的货币汇率api调用代码实例 关联数据:货币汇率 接口地址:http://www.juhe.cn/docs/api/id/23 1.[代码][Java]代码 import jav ...

  7. libsvm java 实例_LibSVM Java API调用示例程序

    [实例简介] LibSVM Java API调用示例程序 Eclipse 完整工程可以运行 相关详情见http://blog.csdn.net/yangliuy/article/details/804 ...

  8. Windows内核API HOOK 之 Inline Hook

    来源:CSDN   作者:daiwen 名字起得好,Inline hook,乍一听,似乎很高深.此处的Inline,我以为,意指将汇编代码直接写入内核API的内存区域.Inline Hook不像用户态 ...

  9. 基于Python2.7的阿里云API调用及运维相关

    基于Python2.7的阿里云API调用及运维相关 http://blog.chinaunix.net/uid-17291169-id-5212576.html 公司部分业务放在阿里云上面,虽然阿里云 ...

最新文章

  1. python wsdl connection refused 111
  2. ubuntu21.04截图快捷键
  3. sass 安装配置和使用
  4. vaadin_Vaadin和DukeScript中的Hello World
  5. 一篇文章彻底搞懂“分布式事务”
  6. cad考试题库绘图题答案_2019年低压电工作业操作证考试最新版题库及答案(一)...
  7. 第九章 Servlet工作原理解析
  8. C++创建对象new与不new区别
  9. qtvs添加qchart_如何使用Qt Designer在窗体中插入QChartView?
  10. 谈谈博客园和写博客,以及通过博客遇到的那些人
  11. prn文件导入Matlab,PPP_code(Matlab) GPS精密单点定位中的周跳探测与修复的算法研究代码 GPS develop 238万源代码下载- www.pudn.com...
  12. es入门以及索引原理学习
  13. 新闻主题分类任务NLP
  14. 【Java】微信企业付款报错:java.io.IOException: toDerInputStream rejects tag type 45
  15. 腾讯云轻量2核4G/4核8G/8核16G/16核32G服务器配置详解
  16. 向量快速检索方法总结——KDtree/Balltree/Annoy/NSW/HNSW
  17. 系统集成项目管理工程师案例分析考点汇总(整体管理)
  18. JAVA1V1人机对战游戏
  19. unity动画事件问题---为什么添加了没有触发
  20. win 10专业版激活

热门文章

  1. C语言在生活中的小应用
  2. 查找字符串里面有没有相同的字符- -
  3. CSS(二)属性--文本设置
  4. 使用 Artifactory 1分钟搭建 CocoaPod 私服
  5. Java学习(16)--System 类/Date 类/ Calendar类
  6. C言语选择排序算法及代码
  7. 讲你肯定能懂的机器学习多维极值求解
  8. 如何仿写thinkphp的C方法?
  9. [欢迎加入]博客园.NET Compact Framework讨论组
  10. 遭遇错误:ORA-01031