文章目录

  • The Tangled Genealogy of IoT Malware
    • abstract
    • introduction
    • dataset
    • malware lineage graph extraction
      • based-code clustering
      • symbols extraction
      • Binary diffing and symbol propagation
      • Source Code collection
      • Phylogenetic Tree of IoT Malware
    • RESULTS
      • Code Reuse
      • Outliers and AV Errors

The Tangled Genealogy of IoT Malware

物联网恶意软件的纠缠的家族谱系

Emanuele Cozzi , EURECOM

abstract

IOT设备的快速发展极大的增加了在野外观察到linux恶意软件的数量和复杂程度,大量的代码重用是物联网恶意软件的特点,这就需要一种自动化方法来检测相似性并确定每个家族的系统发育树。本文对物联网软件进行了测量,通过适用二进制代码的相似性,系统的重建了物联网恶意软件家族的血统,并跟踪它们之间的关系、演变和变体。

introduction

主要的iot恶意软件家族相关的源代码公开为无数变种和代码重用的复杂关系铺平了道路,但目前未知仍然是较为分散的物联网恶意软件生态系统视图。

尽管学术界做出了些许努力(例如记录iot恶意软件的复杂性,即持久性机制,反分析技巧,加壳等,例如部署iot蜜罐衡量物联网恶意软件的感染和货币化机制,例如刨析mirai僵尸网络并对其操作进行了彻底调查),但很遗憾的是,对于新的恶意样本出现的背后动态仍然知之甚少。

并且,iot的恶意软件仍然根据av厂商所分配的标签进行分类,这些label通常非常粗略,因此无法捕捉iot恶意软件的持续演变和代码共享特征。例如,目前并不清楚在野外观察到了多少mirai botnet变体,以及是什么让变种之间有所区别。并且对流行的恶意软件家族的内部关系知之甚少,例如Mirai和Gafgyt botnets。

作者展示了iot恶意软件的特性需要采用定制技术,并且使用了大量的恶意样本,样本中普遍的缺乏混淆使绘制涵盖iot物联网软件整个生态系统的完整图景成为可能。

Our main contribution is twofold. First, we present an approach to reconstruct the lineage of IoT malware families and track their evolution. This technique allows identifying various variants of each family and also the intra-family relationships that occur due to the code-reuse among them. Second, we report on the insights gained by applying our approach on the largest dataset of IoT malware ever assembled to date, which include all malicious samples collected by VirusTotal between January 2015 and August 2018.

贡献是双重的,首先提出一种重建iot恶意软件家族谱系并跟踪其演变的方法,其次将该方法应用于最大的iot物联网恶意软件数据集所获得的见解。

dataset

作者收集了一个大型且具有代表性的恶意软件样本数据集,从2015年1月到2018年8月提交给virustotal并且被至少5个反病毒引擎标记为恶意的elf二进制文件,舍弃了android应用程序和共享库,并且删除了intel和amd架构编译的样本,因为很难区分嵌入式设备和linux桌面系统的二进制文件。

表一报告了数据集的编译细节,其中arm32和mips-1占整个数据集的2/3,且95%的样本为静态链接。

What does it mean for a binary to be stripped?

A stripped binary is a program that is compiled with a strip flag that tells the compiler to discard these debugging symbols and compile to program as it is. Stripping a binary reduces its size on the disk and makes it a little more difficult to debug and reverse engineer.

简而言之,stripped binary是通过设置编译器选项生成没有符号表的binary。

使用AVCLASS处理样本的标签,表二详细列出,gafgyt和mirai家族占据了主要地位,存在3.7k的样本没有被标记成功。

malware lineage graph extraction

The field that studies the evolution of malware families and the way malware authors reuse code between families as well as between variants of the same family is known as malware lineage.

研究恶意软件家族的演变以及恶意软件作者在家族之间以及同一家族的变体之间重用代码的方式的领域被称为恶意软件谱系。

推导谱系是一项艰巨的任务,并且在如此之大的数据集上进行该任务,所以该任务依赖一个完全自动化的结局方案,用于此任务的传统方法是基于静态和动态特征执行恶意软件的聚类,当然,在分析中也需要结合时间维度,聚类可以帮助得出恶意软件进化的完整时间线,即是恶意软件家族的系统发育树。

一种常见的方法是依赖AV标签,但这更倾向于识别宏观家族,另一方面,作者致力于更细粒度的分类,并且为作者研究亚家族之间的差异和整个家族内部的演变和关系提供支撑。

聚类需要大量的手工调整和验证,并且总是会产生嘈杂的集群。

  1. 处理unstripped的binary并分析符号以在静态链接文件中定位库代码
  2. 然后根据代码级相似性执行增量聚类,同时将符号传播到每个新样本
  3. 构建家族图(每个cpu架构一个图)
  4. 使用可用符号将样本和簇固定到能够从在线代码存储中抓取的代码片段,以获得关于恶意软件家族演变的更详细的了解
based-code clustering

作者采用代码级分析和函数相似性的方案来进行此任务:

  • 优点是代码不会说谎,可用于精确跟踪给定家族随时间的演变以及不同家族之间借用的代码重用和功能
  • 缺点是两个二进制文件的距离难以计算

为了能够比较两个binary,必须满足三个条件:

  • 每个样本需要正确脱壳
  • 必须可以正确的反汇编代码
  • 必须可以分离应用程序代码和库代码

前两个问题阻碍了windows恶意软件的分析进行,而iot在很大程度上可以避免前两个问题,但第三个条件确实难题(讽刺的是,这是唯一一个不会对windows恶意软件造成的问题)

symbols extraction

数据集中94.3%的样本是静态链接的,作者推测很可能是由于努力确保样本可以在具有各种系统配置上的设备上运行。

但对于静态链接的二进制文件代码相似性很可能是没用的,因为两个样本可能包含相同的libc库从而错误的认为相似。

因此作者首先将用户定义的代码和其中的库代码分开,不幸的是,在处理stripped的二进制文件时时,仍然是一个悬而未决的问题。

作者通过unstripped的binary提取symbol并利用它们为反汇编代码添加语义来开始分析。(53%的静态链接样本和30%的动态链接样本包含symbol信息)

  • 使用IDA pro识别函数,并提取函数名称
  • 然后使用一个简单的启发式方法将binary的库代码和应用代码一分为二(即找到一个分割点,简单的以分割点为界限,界限之上为应用代码,界限之下为库代码。但linker可能在最终的binary中交错的使用应用程序和库函数,这会导致该方法丢弃部分恶意软件代码,但这并不是一个常见行为,而且没有更优的解决方案,因此代价很小)

具体方法如下:

  • 建立了一个不同版本的glibc和uclibc中提取的符号数据库作为参考
  • 在unstripped的binary中提取函数符号,对所有函数的偏移量进行线性扫描
  • 从_start函数开始,滑动一个大小为2的窗口,如果窗口内的所有函数名称在符号数据库都得到了正面匹配,则定义一个cut
  • 以cut为界限,切割库代码和应用代码
  • 一旦确定了cut,在此点之前的所有符号都会被保留,剩下的则会被丢弃

为什么使用窗口机制,而不是单一的函数匹配:这可以避免错误的情况,例如用户函数可能被错误的解释为一个库函数,因此滑动窗口可以提高该启发式算法的可靠性。

作者选择对libc变体进行操作有两个原因,首先是编译器在产生静态链接文件时总是默认将libc包含在最终的可执行文件中,此外在数据集中只有不到2%的动态链接样本在libc之上需要其他库。最后在删除了库代码之后,作者进一步过滤掉了其他的特殊符号,如__start,_start和依赖于架构的一些函数,比如arm处理器的_aeabi*函数。

Binary diffing and symbol propagation

Binary diffing构成了该方法的核心,可以在代码层面评估二进制文件的相似性。鉴于不同架构的二进制文件在汇编代码层次的内在差异,作者仅将同一架构编译的binary放在一起比较,因此不同的architecture会产生不同的聚类图,以及不同的恶意软件路线。但ARM32架构的malware数量有36574个文件,两两计算得到完整的相似性矩阵也是不可行的

为了缓解该问题,作者采用Hierarchical Navigable Small World Graphs(HNSW,一种近邻图技术),这是一种在非度量空间中发现近似近邻的高效数据结构,以克服时间复杂性并挖掘bianry之间的相似性。核心思想是:每条数据只与先前发现的邻居的邻居进行比较,这大大限制了比较的数量,同时仍然保持高精度,在向HNSW添加数据条目时,距离函数将在有限的条目对上被调用,同时仍然能够与最相似的邻居相联系。

距离函数(异同度函数):http://diaphora.re/,一个ida插件。当两个函数被比较时,diaphora输出一个0-1的相似性分数。diaphora支持的功能如下所示:

为了汇总在该距离函数下各个比较对象的分数,作者计算相似度大于0.5的函数的数量,0.5是diaphora作者建议放弃不可靠的结果的阈值。随着两个bianry中越来越多的匹配对,这个分数会不断增加,之后计算该分数的倒数,将该值转化为距离,数值越高意味着两个样本相距越远,距离越低意味着两个样本共享更多的代码。


这里的计算方式感觉有问题:

  1. 每个样本的函数的数目是不同的,单纯的输出相似度高于0.5的函数而忽略函数总量是否有意义?
  2. 在比较过程中,binary_a与 binary_b如何选择函数进行比较的方式也没有仔细说明。

然后作者分两轮将样本逐一添加到HNSW中,按照样本在VT中首次看到的时间戳进行排序放入,这里是为了模拟分析人员在一段时间内收集新样本的方式。

  • 第一轮中将所有动态链接或unstripped的binary加入HNSW,这些样本占据了整个数据集的55%,
  • 第二轮中加入静态链接的stripped binary,由于没有符号,没有直接的方法区分用户代码和库代码。debin只针对有限的cpu架构
  • 作者尝试使用符号传播解决该问题,当一个stripped的样本中的function与unstripped样本中的function具有完全的相似性时,可标记其为相同的符号。
Source Code collection

许多基于linux的iot恶意软件家族的源代码已经在社区中开源,作者收集这些开源的代码来为相似性图中的节点组分配标签,虽然av标签也可以做,但av标签往往对应较粗的家族名称,而在线来源可以帮助区分同一家族中的具体变体。

为了找到源代码的例子,作者使用前一阶段提取的用户定义的函数符号列表来查询搜索引擎,即可在Github或Pastebin等公共服务上找到一些匹配的代码。包括整个代码库和单个源码文件。

Phylogenetic Tree of IoT Malware

为了使输出结果更加具有可读性,并更好的突出进化线,作者将G的最小生成树MST可视化,显示了所有样本之间最小二进制差异的路径。

MST可以根据AV标签进一步着色,以了解不同家族之间的关系并发现AV引擎分配的错误标签。

RESULTS

目前的iot恶意软件主要由三个家族:Gafgyt、Mirai和Tsunami等。

Today IoT malware code is not as complex as the one found in Windows malware, yet AVs may lose robustness when it comes to identifying widely reused functions and packed samples.

今天,iot上的malware还不像windows上的那样复杂,然而当涉及到识别广泛重复使用的函数和加壳样本时,av标签可能失去稳健性。

Code Reuse

表3报告了数据集中前十个家族共享函数的数量,相似度为0.9。

图三显示了MIPS样本的谱系图,在相似度大于0.9的情况下,节点根据AVclass的结果绘制。

Outliers and AV Errors

可以通过对系统发育树寻找离群点以检测异常标签。

利用AI+大数据的方式分析恶意样本(四十)相关推荐

  1. 利用AI+大数据的方式分析恶意样本(十四)

    文章目录 系列文章目录 本文主旨 加壳分类 脱壳分类 Example 硬脱壳示例: 软脱壳示例: 系列文章目录 <利用AI+大数据的方式分析恶意样本(一)>:通过四种方法静态分析恶意软件 ...

  2. 利用AI+大数据的方式分析恶意样本(十五)

    文章目录 系列文章目录 background 硕士答辩 1 恶意代码检测主要是动静结合,基于静态分析的检测是否存在边界? 2 恶意代码识别的关键是其变种.加壳.混淆等经过对抗检测后生成的样本,利用深度 ...

  3. 利用AI+大数据的方式分析恶意样本(十二)

    文章目录 系列文章目录 本文主旨 攻击 第一篇paper 主要成果 主要方法 第二篇paper 主要成果 主要方法 第三篇paper 主要成果 第四篇paper 主要方法 第五篇paper 主要方法 ...

  4. 利用AI+大数据的方式分析恶意样本(十八)

    文章目录 When Malware is Packin'Heat; Limits of Machine Learning Classifiers Based on Static Analysis Fe ...

  5. 利用AI+大数据的方式分析恶意样本(十三)

    文章目录 系列文章目录 Cuckoo沙箱搭建 环境说明 主要过程说明: 配置ubuntu的安装环境 使用virtualbox虚拟机安装win7客机 配置win7 Guest 修改cuckoo配置文件 ...

  6. 利用AI+大数据的方式分析恶意样本(二)

    文章目录 系列文章目录 系列文章目录 本文主旨 x86反汇编 抽象层次 内存 寄存器 简单指令介绍 算术指令 数据传送指令 堆栈指令 控制流指令 条件指令 分支指令 基本块和控制流程图 环境准备 编写 ...

  7. 为什么一买就跌一卖就涨,主力如何利用AI大数据击穿散户的心理防线?

    我做股票.期货.权证投资有10年了,币圈也做过一段,经历过两次熊市,也在币圈亲眼目睹了1000多万在5分钟内爆仓清零,连补保证金的机会都没有.投资本身就是一个带有投机性质的零和游戏,中国的市场我认为是 ...

  8. 大数据必学Java基础(四十):面向对象三大特性之一继承(Inheritance)

    文章目录 面向对象三大特性之一继承(Inheritance) 一.列举案例说明 1.类是对对象的抽象

  9. 新冠全球蔓延,AI+大数据拿什么拯救全人类? | AI 技术生态论

    整理 | 夕颜 责编 | 唐小引 头图 | 付费下载自视觉中国 出品 | CSDN(ID:CSDNnews) 自疫情发生以来,不少团队开始利用人工智能和大数据技术来进行疫苗研发.灾情防控等,比如百度L ...

最新文章

  1. Ensembl数据库下载参考基因组(植物拟南芥)
  2. ASP.NET 学习笔记_01 广告控件的使用
  3. Installation error: INSTALL_FAILED_CANCELLED_BY_USER
  4. 15.Three Sum
  5. MongoDB-集群搭建
  6. C#中的IntPtr类型(指针等用)
  7. git checkout 单个文件_IntelliJ IDEA下的使用 Git
  8. Extjs DateField onchange
  9. LSI MegaCli 命令使用2
  10. java多图片上传插件,Bootstrap中的fileinput 多图片上传及编辑功能
  11. 用tensorflow实现最简单的神经网络
  12. 关于RocketMQ消费者消费队列的消费起始位置源码分析
  13. Smarty - 下载
  14. 摩拜、ofo抢着用的NB-IoT技术,听说你还不知道!?
  15. SQL语句的增删改查(详细)
  16. 纯干货,用好PPT中的异形,提高页面的设计感,建议收藏!
  17. 阿里分布式事务Seata介绍
  18. 一个节拍都不错过——dfuse 2019年第三季度回顾
  19. 应力应变基础理论分析
  20. [论文阅读] Facial Expression Recognition Using Residual Masking Network

热门文章

  1. 从零开始写一个小米便签
  2. mysql中如何选中数据库_MySQL 选择数据库
  3. 【渝粤题库】陕西师范大学201961 中外教育管理史 作业(专升本)
  4. 服务过美国总统竞选的非传统投票UI [解析及DEMO]
  5. 固态硬盘用硬盘盒外接但是不显示盘符
  6. WIN7旗舰版下安装SQL SERVER 2008安装报错解决方案
  7. python的ogr模块_GDAL python教程(1)——用OGR读写矢量数据
  8. 数字华容道c语言源代码,vue数字华容道游戏代码
  9. 痞子衡嵌入式:IAR内部C-SPY调试组件配套宏文件(.mac)用法介绍
  10. 开发复杂业务系统,有哪些设计思路