具体实施方式
恶意软件攻击正在被向着诸如智能手机和平板电脑的移动设备编写。移动恶意软件正在上升,并且威胁要从消费者那里偷钱。应用程序商店或市场,例如专有的商店和可替代的交易市场,正在变得广为流行,并已成为移动恶意软件攻击的目标。移动恶意软件检测已被证明是一个难以实现并且具有挑战性的目标。除了其它挑战的原因,恶意软件应用程序可以很容易地改变它们的签名以欺骗并绕过使用签名的病毒扫描程序的检测。此外,对应用程序进行动态分析是昂贵且费时的。因此,在最终用户的设备上安装恶意软件期间,或当恶意软件正被在应用市场上提供时,检测恶意软件可能是富有挑战性的。
因此,本发明公开的各个实施例涉及用于帮助检测恶意软件应用程序的、用于产生信号标记的方法。该方法提供了低成本和低计算能力的益处,以及提供在安装时,从良性应用程序快速检测恶意软件应用程序。
静态分析引擎可以被用来对可能被存储在一个特定市场或多个市场上的二进制文件进行字节代码分析以产生标记。在某些示例中,标记是致使规则被激发的、应用程序的成组原始数据。二进制文件可以被配置来运行于一个特定类型的操作系统或多个类型的操作系统中。操作系统的示例包括安卓、视窗、IOS和赛班等。二进制文件可以包括已知是清洁的部分,以及已知具有恶意软件的部分。字节代码分析的结果可以通过启发式评估过程被运行,以产生可被用来把未知应用程序分类为是恶意软件或是良性的信号标记。因此,在一些示例中,信号标记是可以被作为离散条目记录在恶意软件可能性数据库中的已处理项目。这样,信号标记可以在恶意软件判定处理中,被用于根据对被与从未知应用程序产生的标记比较的信号标记的贝叶斯分析,来确定未知应用程序是否包括恶意软件。
图1和图2为根据各个示例的、能够产生指示恶意软件的信号标记的计算设备的框图。计算设备100a和100b包括可以被用于产生信号标记的组件,信号标记可以被用于确定应用程序代码或应用程序二进制文件是否包括恶意软件。各个计算设备100a和100b可以是笔记本计算机,台式计算机,平板计算设备,无线设备,服务器,工作站,或任何其它计算设备。在一些示例中,计算设备100可以连接到包括已知包括恶意软件或不包括恶意软件的一组或多组应用程序代码的一个或多个数据库。此外,应用程序代码可以是二进制的形式或另一种形式的形式(例如,作为书面语言,可扩展标记语言(XML)等)。
计算设备100可以包括静态代码分析模块110和信号产生模块112。计算设备100还可以包括输出模块114、规则116、预处理模块118、至少一个处理器130、存储器132和输入/输出接口134。此外,计算设备100b可以包括和/或使用一个或多个输入设备140或输出设备142。在一个示例中,存储器132可以存储器132中存储模块110-114和118的指令方面,并且处理器130可以执行指令。
静态代码分析模块110可以被用于根据分别对第一组已知恶意软件应用程序代码和第二组已知干净应用程序代码进行的静态代码分析,确定第一组标记和第二组标记。如上所述,应用程序代码可以是二进制文件的形式。在一个示例中,二进制文件可以是安卓二进制文件(例如,APK文件)的形式。这些文件可以被解压缩并通过dex2jar实用工具运行以将APK压缩中的一个或多个.dex文件转换为.jar文件。结果可以包括二进制XML文件。可以使用另一个工具来把二进制XML转换为可读XML格式。这是一个实施方式的具体示例。应当指出的是,其它示例实施方式可以被用于不同的应用程序和/或操作系统的特定的工具和框架。在一些示例中,预处理模块118可以被用来把二进制文件转换为其可以被标记化的形式。
标记化是用于把文本流分解成被称为标记的单词,短语,符号,或其它有意义的元素的过程。标记的列表可以成为信号产生模块112所作的进一步处理的输入。在一些示例中,标记可以被标明为与恶意软件二进制文件/代码相关联或者与良性或干净二进制文件/代码相关联。可以把信息附加到各个标记上,或者标记也可以被以另一种方式监测,例如,通过把标记分成组,以其它数据结构列出标记等。
产生的标记可以根据规则116。在一些示例中,规则可以包括模糊处理容忍规则。模糊处理是一种通常被应用于代码,以使程序更耐逆向工程的技术。恶意软件和非恶意软件都使用模糊处理,恶意软件用来隐藏其恶意软件的性质,以及非恶意软件(例如用来防止知识产权被逆向工程)。模糊处理容忍规则可以是不管程序是否被有意地模糊处理,都起作用的经过深思熟虑的规则。
在一个示例中,污点分析可以被使用。污点分析试图找出那些被“污染”的变量并跟踪这些变量到可能被视为“污水坑”的可能的脆弱函数。如果被污染的变量在没有首先被消毒的情况下,被传递到污水坑,那么它可以被标记。
在与收费欺诈相关的恶意软件的具体示例中,恶意软件会调用函数来发送文本消息到目的地址和有效载荷。恶意软件程序将需要把相关参数提供给方法。为了隐藏其意图,恶意软件可以把加密用于各种地址,并使用过于复杂的调用关系图(例如,A调用B,B调用C,C调用D,而D调用发送文本消息的函数)。在这种情况下的模糊处理容忍规则会把污点放在加密字符串常量上和并把污水坑放在目的地址上。如果调用图简单,没有被模糊处理或被有目的的模糊处理复杂化,那么这将起作用。
用于产生标记的规则的其它示例包括与清单XML相关的规则(例如,与安卓清单XML文件相关联的规则),结构规则,例如,检查程序的抽象语法树中的元素的结构关系和关系类型(例如,A调用B,A是B的子类,C是D的方法中使用的类型等)的规则,表征规则(例如,根据结构关系或结构性质对函数应用技术属性;技术属性可以涉及例如数据流的入口点,直通,污水坑等),数据流规则(例如,污点分析),控制流规则(例如,一类匹配经历特定的调用图的代码的模式的分析),语义规则(例如,使用某些应用程序编程接口(API))等。当规则被满足或击中,可以产生规则的标记。在一个示例中,标记可以被与每个应用程序相关联。在另一示例中,标记可以被与已知恶意软件应用程序相关联,或者与已知干净应用程序相关联。
规则可以是为特定语言,操作系统,设备或设备组等高度定制的。例如,在能够进行收费欺诈的设备中,对应用程序的服务组件中的发送文本消息功能的调用可以被认为是为了金钱利益而不经用户的同意,发送诸如短消息服务(SMS)消息的溢价文本消息的收费欺诈恶意软件的重要指标。
另一示例是引导设备。在诸如安卓的基于LINUX的操作系统的情况下,应用程序可以被认为是访问被限制到其自身进程空间的LINUX进程。引导设备来获得特权访问通常需要使用诸如su,chmod,chown等的LINUX命令。检测这些命令的存在可以在应用程序的可疑性上升起标志。这些可以被认为是特权访问指标。
另一示例是权限模型的滥用。在一些示例中,操作系统可能要求应用程序在安装过程中请求访问系统服务的用户权限。恶意软件应用程序往往从信任的用户那里要求可能会危及用户隐私和/或安全性的系统资源的权限。示例可能是特定于操作系统的类型的,并且可以包括呼叫特权,接入位置权限,访问联系人,呼出呼叫的处理,读取通话记录,读取日历,读取外部存储,记录音频,使用其它外围设备(例如,摄像机)或输入/输出接口134等。
此外,一示例包括被安装为服务的应用程序。这些应用程序可以在这种情况下利用系统意图。当收到意图(例如,引导完成)时,应用程序可以在后台静静地开始恶意服务,以在未经用户同意或知晓的情况下,收获用户数据或与集中控制和命令服务器通信。注册作为服务运行的事件的应用程序可以被进一步审查的规则作为目标。
此外,规则可以把对诸如从服务组件检索诸如设备ID、位置信息(例如,小区信息,定位系统信息等)和SIM卡的序列号等的电话特定信息的API的敏感API的调用作为目标。
另一示例包括使用反射和/或动态加载可执行文件。运行时动态加载二进制文件的Java反射能力可能被恶意软件滥用,以从中央命令和控制服务器下载指令和恶意的二进制文件。诸如对将有利于使用动态特性的load(),loadClass(),loadLibrary(),forName()和getMethod()的调用的、创建子进程的操作系统API和/或JAVAAPI的调用可能指示恶意软件。
此外,另一示例包括侵犯隐私权。诸如把敏感信息写入到外部存储(例如,通过对getExternalStorage()的写入调用)或以Log.w()写入到系统日志的、对敏感信息的访问和/或不当处理可以被认为是应用程序对用户信息的疏忽和/或滥用的标志,并且可以由规则标志以产生标记。
这些特征中的任何一个特征的存在可能不足以把应用程序分类为恶意软件,但是这些特征中的多个特征的以某一密度的同时存在和/或这些特征的搭配可以被用于对应用程序进行启发式评估,以把应用程序分类为恶意软件或良性。机器学习可以被用来根据规则产生的多组标记来创建信号标记。此外,一个或多个信号标记可以根据特征/标记的密度和/或搭配被分组。在一些示例中,分组可以基于在某一代码段、函数等内的这些特征的量。
信号产生模块112可以处理标记以产生根据标记的分组来指示恶意软件的成组信号标记。信号标记可以根据贝叶斯分类被用于恶意软件判定处理中。贝叶斯分类是一种可以被用来最小化误分类的概率的方法。也可以使用最小化误分类的概率的其它类型的分类训练,诸如文本分类。在垃圾信息过滤中,贝叶斯垃圾信息过滤被用来计算邮件是或不是垃圾邮件的概率。可以使用相似的方法来确定是否由于一个或多个标记的存在,而存在恶意软件。
训练集可以是与每个应用程序,以及各个应用程序是否包括恶意软件或是良性的相关的标记。两个或多个标记的分组可以被用来产生信号标记。例如,训练可以注意到某些标记是每个应用程序公有的,因此不指示恶意软件,但是多个标记的组合可以被用来检测恶意软件(例如,因为组合存在于多个恶意软件应用程序代码中,但是不存在于良性应用程序代码中)。在一个示例中,训练可以进一步基于一个或多个规则或准则。例如,如果多个恶意软件应用程序中的标记的数量超过阈值,那么成组的标记可以被用来产生信号标记。此外,信号标记产生可以进一步被通过不与多于第二阈值数量的良性应用程序相关,而进一步限定。因此,训练允许信号标记数据库表示真实的、离散的和/或非相关的应用程序性质。在一个示例中,真实的性质是表示应用程序的方面的性质。在另一示例中,离散的性质是不需要被进一步拆散,因而除非因特别的原因,不需要归纳多个性质的一种性质。非相关的性质表示每个信号标记可以是与其它信号标记线性独立的。因此,如果多个信号标记被用于应用程序的特定贝叶斯分析中,那么应用程序的真实的方面不需要被过分地考虑(例如,表示应用程序的相同真实的方面的信号标记不需要被分别考虑)。
在一个示例中,比起非移动或良性的移动应用程序,恶意软件可能倾向于包括高百分比的每行代码发现。此外,除了指纹恶意软件利用的语义问题的高密度外,恶意软件应用程序通常被很差地编码和/或包括可以被用来产生远程攻击的高百分比的控制流和数据流安全漏洞。因此,在一些示例中,分组可以基于空取消引用、资源泄漏、死代码、路径操作、查询字符串注入、命令注入、资源注入、较差的风格、不良做法和拒绝服务中的至少一个或至少两个。其中的一些,例如死代码和具有较差的风格,可能是被有意地嵌入以分散逆向工程和/或入侵检测努力。其它的,例如路径操作和资源注入,可以被作为安全漏洞留下以允许设备的远程控制和攻击。此外,不良做法的存在,例如调用可能产生服务攻击的拒绝或收集系统信息以进行进一步攻击的System.exit(),System.gc()和Thread.sleep(),可以是分组的部分。
也可以使用其它分组。此外,分组可以基于可以由专门的恶意软件规则标记的某些应用程序特征的存在和恶意软件应用程序之间的相关。此外,在恶意软件应用程序中,特征的发现通常不是孤立的,但被成群的发现表明高概率的恶意意图。在一个示例中,因为恶意软件应用程序检索多个类型的设备特定的数据,所以恶意软件应用程序可以被确定。例如,恶意软件将检索诸如设备ID、SIM卡的标识符和行号等的、所有设备特定的属性。如上所述,信令恶意软件的分组可以基于机器学习技术。
输出模块114可以把信号标记输出给信号标记恶意软件可能性数据库。数据库可以由计算设备100或其它设备用来分析未知应用程序,其中修饰语,未知,指示应用程序是否包括恶意软件或是良性的是未知的。可以利用规则组合(例如,用于产生标记的规则)对未知应用程序运行静态分析。恶意软件可能性数据库和来自未知应用程序的信号标记可以被送入贝叶斯分类技术,以作出未知应用程序是否包括恶意软件的判决。
适于检索和执行指令的处理器130,例如中央处理单元(CPU)或微处理器,和/或电子电路可以被配置来执行本发明所述的模块110、112、114和118中的任一模块的功能。在某些情况下,指令和/或其它信息,例如规则116,可以被包括在存储器132或其它存储器中。输入/输出接口134可以额外地由计算设备100b提供。例如,输入设备140,例如键盘、传感器、触摸接口、鼠标、通信接口和麦克风等,可以被用来从围绕计算设备100b的环境接收输入。此外,输出设备142,例如显示器,可以被用来呈现信息给用户。输出设备的示例包括扬声器、显示装置、放大器等。此外,在某些实施方式中,某些部件可以被用来实现本发明所述的其它部件的功能。
模块110、112、114、118中的每个模块都可以包括,例如包括用于实现本发明所述的功能性的电子电路的硬件设备。除此之外或作为替代,每个模块110、112、114、118都可被实现为被编码在计算设备100的机器可读存储介质上并且可由处理器130执行的一系列指令。应该注意到,在一些实施例中,一些模块被实现为硬件设备,而其它模块则被实现为可执行指令。
图3为根据一个示例的用于根据指示恶意软件的标记的分组来产生成组信号标记的方法的流程图。尽管下面参照计算设备100说明方法300的执行,但是可以使用执行方法300的其它合适的部件(例如,计算设备500)。此外,用于执行方法300的部件可以被在多个设备间展开。方法300可以被实现为被存储在诸如存储介质520的机器可读存储介质上的可执行指令和/或电子电路的形式。
在302处,计算设备100可以根据规则,对第一组已知恶意软件应用程序代码(例如,使用应用程序的二进制文件)和第二组已知干净应用程序代码(例如,利用应用程序的二进制文件)进行代码分析以产生标记。在二进制文件的情况下,二进制文件可以被如本发明所述地预处理。此外,如上所述,规则可以包括模糊处理容忍规则。
在304处,可以确定指示恶意软件的成组标记。组可以被根据对标记及其与干净或恶意软件代码的关联的机器学习处理来确定。例如,主要自两者产生的标记可能指示标记不需要被用在恶意软件分析中,而更多地是在恶意软件包含代码中产生的标记则可能被认为是更多地指示恶意软件。在一些示例中,得分或其它评估可以被与各个标记相关联,以确定该特定标记指示恶意软件的可能性。
在306处,计算设备100根据指示恶意软件的标记的分组,产生成组信号标记。在一些示例中,信号标记基于机器学习。机器学习可以基于与恶意软件有关的应用程序和已知是良性的应用程序的训练集。在其它示例中,可以使用其它机器语言工具。如上所述,在一些示例中,分组可以包括话费欺诈、引导、滥用权限、作为服务安装的应用程序、敏感数据检索、使用反射、使用动态加载和侵犯隐私中的至少一个或至少两个。其它分组可以基于其它类型的恶意软件。分组也可以基于产生的一个或多个标记的群集或密度。
在一个示例中,话费欺诈可能包括使用发送文本消息功能。此外,引导可以包括获得对执行应用程序的计算设备的特权访问。再者,滥用权限可以包括请求高于特定阈值的权限。此外,敏感数据检索可以包括调用API以检索设备特定的信息。另外,拒绝可以包括使用功能来下载更多指令(例如,从服务器)。信号标记可以被存储在其它位置,并且可以由其它设备或计算设备用来处理应用程序二进制文件或代码,以确定应用程序二进制文件或代码是否包括恶意软件。
图4为根据一个示例的、能够被用来确定未知应用程序是否包括恶意软件的、用于产生信号标记恶意软件可能性数据库的方法的流程图。尽管下面参照计算设备500说明方法400的执行,但是可以使用执行方法400的其它合适的部件(例如,计算设备100)。此外,用于执行方法400的部件可以被在多个设备间展开。方法400可以被实现为被存储在诸如存储介质520的机器可读存储介质上的可执行指令和/或电子电路的形式。
在402处,从数据库检索标记。标记可以被利用代码的静态分析产生。标记还可以与恶意软件应用程序或干净应用程序二进制文件或代码相关联。静态分析可以基于模糊处理容忍规则。标记还可以根据特定的应用程序被分组。在一些示例中,标记可以被附加到发现这些标记的特定应用程序上。在一些示例中,产生标记的时间量也可以被算入,并与标记一起记录。此外,标记与良性的应用程序和/或受恶意软件困扰的应用程序相关联的次数可以被算入并存储到与标记有关的数据结构中。
在404处,计算设备500可以对标记进行训练以产生孤立地指示存在恶意软件的信号标记。信号标记可以基于标记的分组。在一个示例中,标记中的每个标记都可以被根据标记与恶意软件相关联的次数和标记与良性的应用程序相关联的次数,而给予得分。得分能够表示标记有多少可能指示恶意软件。训练可以被用来确定标记的哪些组合更可能指示恶意软件。
信号标记恶意软件可能性数据库可以被根据信号标记产生。信号标记恶意软件可能性数据库可以在处理应用程序的计算设备不知道应用程序是否是恶意软件的情况下,被用来确定恶意软件是否被包括在应用程序中。
在406处,计算设备或另一计算设备可以被用来把信号标记与未知应用程序的标记进行比较,以确定此应用程序是否包括恶意软件。在一个示例中,这可以通过对信号标记进行贝叶斯分类和与通过经由标记化过程处理未知应用程序而产生的标记进行比较来完成。
在一个示例中,贝叶斯分类通过把标记的使用与恶意软件和非恶意软件应用程序相关,而起作用。然后,贝叶斯推断被用来计算应用程序是或不是恶意软件的概率。在一些示例中,该方法可以与对从已知垃圾信息和非垃圾信息邮件产生的标记起作用的朴素贝叶斯垃圾信息过滤相似。
图5为根据一个示例的、能够根据标记的分组来产生指示恶意软件的信号标记的计算设备的框图。计算设备500包括例如处理器510和包括用于产生指示恶意软件的信号标记的指令522、524的机器可读存储介质520。计算设备500可以是例如服务器、桌上型个人计算机,工作站,笔记本电脑,平板计算设备,便携式阅读设备,无线电子邮件设备,手机,或任何其它计算设备。
处理器510可以是至少一个中央处理单元(CPU),至少一个基于半导体的微处理器,至少一个图形处理单元(GPU),其它适于检索和执行存储在机器可读存储介质520中的指令的硬件设备,或者其组合。例如,处理器510可以包括芯片上的多个核,跨多个芯片的多个核,跨多个设备(例如,如果计算设备500包括多个节点设备)的多个核,或其组合。处理器510可以读取、解码并执行指令522、524以实现方法300和/或400。作为检索和执行指令的替代或者附加于检索和执行指令,处理器510可以包括:包括用于执行指令522、524的功能的若干电子部件的至少一个集成电路(IC),其它控制逻辑,其它电子电路,或其组合。
机器可读存储介质520可以是任何包含或存储可执行指令的电子的、磁的、光的或其它物理存储设备。因此,机器可读存储介质可以是,例如随机存取存储器(RAM)、电可擦除可编程只读存储器(EEPROM)、存储驱动器、紧致盘只读存储器(CD-ROM)等等。如此,机器可读存储介质可以是非暂时性的。如在本发明中详细说明地,机器可读存储介质520可以被以用于产生信号标记恶意软件数据库的一系列可执行指令编码。
如进一步在图1-4中所述地,代码分析指令522可以被用来根据诸如模糊处理容忍规则的规则526,对第一组已知恶意软件代码和第二组已知干净代码进行静态代码分析以产生标记。在一些示例中,在进行分析之前,代码可以被从二进制文件预处理。此外,如上所述,静态代码分析可以包括数据流源、结构规则、清单XML、语义分析和控制流中的至少两个。这些可以基于用于产生关于各个类型的分析的标记的规则。
信号标记产生指令524可以被执行来根据标记的分组,产生指示恶意软件的成组信号标记。分组可以基于贝叶斯分类训练。信号标记可以由设备用来确定另一应用程序是否包括恶意软件。