具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1示出了根据本发明一个实施例提供的一种应用程序的注入攻击检测系统的功能结构示意图。其中,本实施例所提供的注入攻击检测系统可以应用于多类系统的应用程序的注入攻击检测及安全防护,尤其对IOS和/或MachOS系统的应用程序具有较优的注入攻击检测效果。
如图1所示,该系统包含有:安全配置生成模块11、检测模块12以及集成模块13。其中,安全配置生成模块11用于生成安全配置文件,检测模块12用于在程序运行过程中,实时检测应用程序是否受到注入攻击,而集成模块13适于将与注入攻击检测相关的模块集成至应用程序。通过本系统中安全配置生成模块11、检测模块12、以及集成模块13的设置,可在应用程序运行时实时检测应用程序是否受到注入攻击,从而便于实时地保障应用程序安全;并且,本方案可基于任意应用程序安装包进行注入防护,具有效率高、结构精简等特点。其中,本系统中各模块的具体功能及实施过程如下方所述:
安全配置生成模块11,适于对应用程序安装包进行解析,根据解析结果生成安全配置文件,其中,安全配置文件中包含有动态库相关信息。
不同于现有技术中在应用程序编译阶段针对每个应用程序编译相应的防注入代码,本实施例可以针对任意已经编译完成(生成有应用程序安装包)的应用程序进行防注入保护,从而大幅降低应用程序的安全防护成本,提升防护效率。
在具体的实施过程中,可以针对任意应用程序的应用程序安装包进行解析。在IOS系统中,应用程序安装包通常为IPA(iPhoneApplication)安装包,则对应用程序安装包进行解析具体包括,对应用程序安装包进行解压缩处理,例如通过unzip命令对IPA安装包进行解压,从而获得多个文件。
其中,在对应用程序安装包进行解析之后,获得的多个文件中包含有info.plist文件及二进制代码文件,从该文件中可获取与该应用程序相关的信息。与应用程序相关的信息具体包含有动态库(又称动态链接库,Dynamic Link Library,简称DLL)相关信息。则安全配置生成模块11可根据该动态库相关信息生成相应的安全配置文件。
可选的,为了避免针对安全配置文件的篡改,进而提升应用程序的安全性,安全配置生成模块11在根据解析结果生成安全配置文件过程中,具体是根据解析结果获取动态库相关信息,并采用预设加密方法对动态库相关信息加密后进行存储。其中,本实施例对具体的预设加密方法不做限定,例如,可采用对称加密算法(如DES算法)对动态库相关信息进行加密。
进一步可选的,在采用预设加密方法对动态库相关信息加密存储之后,可获取与该预设加密方法相对应的解密秘钥,并存储该解密秘钥。其中,本实施例对解密秘钥的具体存储方式等不作限定。例如,可将将解密秘钥存储于二进制文件中的无意义字段,并保证存储位置在程序运行时为可读属性,或者可以修改为可读属性。其中,该无意义字段可以为二进制文件中的某空白或者无用字段,如文件头末尾与代码段开始位置之间的空白区域等。从而提升解密秘钥的隐秘性,并避免占用多余存储内存;又或者,可以创建预设的解密秘钥存储段表,将解密秘钥存储于解密秘钥存储段表中,从而便于解密秘钥的集中管理;还可以将解密秘钥以预设文件形式存储于应用程序安装包中,例如,可以以文本、图片等形式存储于IPA安装包中,从而使得解密秘钥与二进制文件分离,有利于进一步提升应用程序的逆向难度,保障应用程序安全。
在一种可选的实施方式中,为实现对应用程序全方位的注入攻击防护,本实施例中安全配置文件中的动态库相关信息具体包含有:动态库名称、动态库数目、动态库加载顺序、动态库文件路径和/或动态库版本号等多个维度。
检测模块12,适于当应用程序运行时,实时检测应用程序的加载信息,并将应用程序的加载信息与安全配置文件进行比对,确定应用程序是否受到注入攻击。
当程序运行后,检测模块12实时检测应用程序的加载信息。其中,应用程序的加载信息包含有应用程序运行过程中所加载的动态库信息。为便于与安全配置文件进行比对,检测模块12检测的应用程序的加载信息也可包含有多个维度的动态库信息,如动态库名称、动态库数目、动态库加载顺序、动态库文件路径和/或动态库版本号等等。
在检测到应用程序的加载信息之后,将该应用程序的加载信息与安全配置生成模块11生成的安全配置文件中动态库相关信息进行比对。可选的,若安全配置文件中记录的是采用预设加密方法加密后的动态库相关信息,则在将应用程序的加载信息与安全配置文件中动态库相关信息进行匹配时,在一种实施方式中,可获取与该预设加密方法所对应的解密秘钥,利用该解密秘钥对加密后的动态库相关信息进行解密后,利用该解密后的动态库相关信息与应用程序的加载信息进行比对;在另一种实施方式中,可采用该预设加密方法对应用程序的加载信息进行加密,利用加密后的应用程序的加载信息与加密后的动态库相关信息进行比对。本实施例对具体的比对方法不做限定。
可选的,在应用程序的加载信息与安全配置文件中的动态库相关信息比对过程中,可以设定相应的比对阈值(例如,该比对阈值可以为100%,本领域技术人员可根据实际需求自行设置),当某项信息的匹配度大于或等于该比对阈值时,则确定比对成功;否则,则确定比对失败,表明该项信息受到篡改,应用程序当前受到注入攻击。
举例来说,若安全配置文件中的动态库相关信息包含有动态库名称、动态库加载顺序及动态库个数,则当应用程序的加载信息中的动态库名称、动态库加载顺序及动态库个数与安全配置文件中包含有动态库名称、动态库加载顺序及动态库个数完全匹配时,确定当前应用程序未受到攻击;而当应用程序的加载信息中的动态库名称、动态库加载顺序及动态库个数中的任意一项与安全配置文件不匹配时,则确定应用程序受到注入攻击。
可选的,本系统还包含有:防御模块(图中未示出),适于在检测模块检测到应用程序受到注入攻击时,采用相应的防御措施进行防御。
防御模块是在检测模块12检测到应用程序受到注入攻击时触发。具体地,在检测模块12检测到应用程序受到注入攻击时,采用相应的防御措施进行防御。其中,防御措施具体包含有:应用退出、弹出提示窗口、网络访问权限限制、和/或发送报警信号至预设服务端等等,从而可全方位地实现对应用程序的防护。
在一种可选的实施方式中,在保障应用程序安全的基础上,本实施例为提升应用程序使用用户的使用体验,在检测模块12检测到应用程序受到注入攻击时,根据注入攻击的攻击级别,采用与注入攻击的攻击级别相匹配的防御措施进行防御。其中,注入攻击的攻击级别可通过以下方式中的一种或多种来确定:
攻击级别确定方式一:根据注入攻击所涉及的调试动态库类别来确定注入攻击的攻击级别。例如,可预先设置有多种调试动态库类别与对应的攻击级别的对应关系,如将cycript、frida、FLEXDylib等调试类动态库设置为较高的攻击级别。则在当确定应用程序受到注入攻击,且应用程序加载信息中包含cycript、frida、FLEXDylib等调试类动态库时,采用与高攻击级别对应的防御措施进行防御(如应用程序调用安全退出接口直接退出应用程序);而当确定应用程序受到注入攻击,且应用程序加载信息中未包含cycript、frida、FLEXDylib等调试类动态库时,采用与低攻击级别对应的防御措施进行防御(如弹出提示窗口,以提示当前运行环境存在安全风险等等)
攻击级别确定方式二:根据注入攻击所涉及的动态库信息的类别来确定注入攻击的攻击级别。例如,可以为动态库的名称、加载顺序及数量等设置较高的攻击级别;而动态库版本号等设置较低的攻击级别。则当确定应用程序的加载信息中的动态库名称、加载顺序及数量等高攻击级别的信息被篡改时,则采用与高攻击级别对应的防御措施进行防御(如应用程序调用安全退出接口直接退出应用程序)等等。
集成模块13,适于将安全配置生成模块11、检测模块12和/或防御模块集成至应用程序中。
本实施例中是通过后期集成安全配置生成模块11、检测模块12和/或防御模块的方式来实现对应用程序的注入攻击防护,从而本实施例可快速方便地实现对任意应用程序的安全防护。
可选的,集成模块13将安全配置生成模块11、检测模块12和/或防御模块集成至应用程序中可通过以下方式实现:
首先,将安全配置生成模块11、检测模块12和/或防御模块的SDK集成到应用程序中,并提取应用程序安装包中的可执行文件。其中,在IOS系统中,可执行文件通常为Mach-O格式。
进一步,按照预设加载顺序在可执行文件的动态库信息列表中嵌入该SDK的加载信息。具体地,在可执行文件的加载命令中查找到动态库信息列表,并在该动态库信息列表中嵌入该SDK的文件路径和名称等加载信息。其中,预设加载顺序也就是嵌入的代码的运行顺序,例如可以让嵌入的代码最先运行或者按照其他指定的顺序运行。
最后,对与动态库关联的预设信息进行修改。其中,与动态库关联的预设信息包括:动态库加载信息的偏移量信息和长度信息;和/或,原始动态库的加载序号信息和原始动态库对应的代码在可执行文件中的偏移地址信息;和/或,代码段中原始动态库的位置信息的序号信息等等。具体地,可读取可执行文件中的动态库加载信息(如重定向信息、静态绑定信息等);根据嵌入的SDK的文件信息(如动态库名称、文件存放路径、文件大小信息以及结构信息等),修改动态库加载信息的偏移量和长度;并且,由于新添加了SDK,则修改可执行文件中的动态库绑定信息,具体修改原始动态库的加载序号信息和原始动态库对应的代码在文件中的偏移地址信息。同时,还需要修改代码段中原始动态库的位置信息的序号。
由此可见,本实施例中通过安全配置生成模块生成安全配置文件,并通过检测模块在应用程序运行过程中实时地检测应用程序是否受到注入攻击,并在确定应用程序受到注入攻击时,通过防御模块采用相应的防御措施进行防御,从而实时保障应用程序安全;并且,本实施例中通过集成模块将检测模块和/或防御模块集成至应用程序中,从而便于对任意应用程序进行防注入保护。并且,本方案具有效率高、结构精简等特点,便于大规模应用与实施。
图2示出了根据本发明一个实施例提供的一种应用程序的注入攻击检测方法的流程示意图。如图2所示,该方法包括:
步骤S210,对应用程序安装包进行解析,根据解析结果生成安全配置文件;其中,安全配置文件中包含有动态库相关信息。
步骤S220,当应用程序运行时,实时检测所述应用程序的加载信息,并将应用程序的加载信息与安全配置文件进行比对,确定应用程序是否受到注入攻击。
其中,所述应用程序安装包进行解析,根据解析结果生成安全配置文件、和/或当应用程序运行时,实时检测所述应用程序的加载信息,并将所述应用程序的加载信息与所述安全配置文件进行比对,确定所述应用程序是否受到注入攻击,由集成于应用程序的预设模块执行。
可选的,所述动态库相关信息包括:动态库名称、动态库数目、动态库加载顺序、动态库文件路径和/或动态库版本号。
可选的,所述根据解析结果生成安全配置文件进一步包括:
根据解析结果获取动态库相关信息,并采用预设加密方法对所述动态库相关信息加密后进行存储。
可选的,该方法还包括:在确定应用程序受到注入攻击时,采用相应的防御措施进行防御。
可选的,所述在确定应用程序受到注入攻击时,采用相应的防御措施进行防御进一步包括:
在确定应用程序受到注入攻击时,根据所述注入攻击的攻击级别,采用与所述注入攻击的攻击级别相匹配的防御措施进行防御。
可选的,所述防御措施包括以下措施中的至少一种:
应用退出、弹出提示窗口、网络访问权限限制、和/或发送报警信号至预设服务端。
可选的,所述方法还包括:
获取所述预设模块的SDK,将所述预设模块的SDK集成到应用程序中,并提取所述应用程序安装包中的可执行文件;
按照预设加载顺序在所述可执行文件的动态库信息列表中嵌入所述SDK的加载信息;
对与动态库关联的预设信息进行修改。
可选的,所述与动态库关联的预设信息包括:
动态库加载信息的偏移量信息和长度信息;
和/或,原始动态库的加载序号信息和原始动态库对应的代码在可执行文件中的偏移地址信息;
和/或,代码段中原始动态库的位置信息的序号信息。
其中,本实施例所提供的应用程序的注入攻击检测方法中各步骤的具体实施过程,可参照图1所示系统实施例中相应部分的描述,本实施例在不做赘述。
由此可见,本实施例中可预先生成安全配置文件,并在应用程序运行过程中实时地检测应用程序是否受到注入攻击,从而实时保障应用程序安全;并且,本实施例可针对于任意应用程序进行防注入保护,具有较高的灵活性及可拓展性。并且,本方案具有效率高、结构精简等特点,便于大规模应用与实施。
根据本发明一个实施例提供了一种非易失性计算机存储介质,所述计算机存储介质存储有至少一可执行指令,该计算机可执行指令可执行上述任意方法实施例中的应用程序的注入攻击检测方法。
图3示出了根据本发明一个实施例提供的一种计算设备的结构示意图,本发明具体实施例并不对计算设备的具体实现做限定。
如图3所示,该计算设备可以包括:处理器(processor)302、通信接口(Communications Interface)304、存储器(memory)306、以及通信总线308。
其中:
处理器302、通信接口304、以及存储器306通过通信总线308完成相互间的通信。
通信接口304,用于与其它设备比如客户端或其它服务器等的网元通信。
处理器302,用于执行程序310,具体可以执行上述应用程序的注入攻击检测方法实施例中的相关步骤。
具体地,程序310可以包括程序代码,该程序代码包括计算机操作指令。
处理器302可能是中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。计算设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个CPU;也可以是不同类型的处理器,如一个或多个CPU以及一个或多个ASIC。
存储器306,用于存放程序310。存储器306可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
程序310具体可以用于使得处理器302执行以下操作:
对应用程序安装包进行解析,根据解析结果生成安全配置文件;其中,所述安全配置文件中包含有动态库相关信息;
当应用程序运行时,实时检测所述应用程序的加载信息,并将所述应用程序的加载信息与所述安全配置文件进行比对,确定所述应用程序是否受到注入攻击;
其中,所述对应用程序安装包进行解析,根据解析结果生成安全配置文件、和/或所述当应用程序运行时,实时检测所述应用程序的加载信息,并将所述应用程序的加载信息与所述安全配置文件进行比对,确定所述应用程序是否受到注入攻击由集成于应用程序的预设模块执行。
在一种可选的实施方式中,所述动态库相关信息包括:动态库名称、动态库数目、动态库加载顺序、动态库文件路径和/或动态库版本号。
在一种可选的实施方式中,程序310具体可以用于使得处理器302执行以下操作:
根据解析结果获取动态库相关信息,并采用预设加密方法对所述动态库相关信息加密后进行存储。
在一种可选的实施方式中,程序310具体可以用于使得处理器302执行以下操作:
在确定应用程序受到注入攻击时,采用相应的防御措施进行防御。
在一种可选的实施方式中,程序310具体可以用于使得处理器302执行以下操作:
在确定应用程序受到注入攻击时,根据所述注入攻击的攻击级别,采用与所述注入攻击的攻击级别相匹配的防御措施进行防御。
在一种可选的实施方式中,所述防御措施包括以下措施中的至少一种:
应用退出、弹出提示窗口、网络访问权限限制、和/或发送报警信号至预设服务端。
在一种可选的实施方式中,程序310具体可以用于使得处理器302执行以下操作:
获取所述预设模块的SDK,将所述预设模块的SDK集成到应用程序中,并提取所述应用程序安装包中的可执行文件;
按照预设加载顺序在所述可执行文件的动态库信息列表中嵌入所述SDK的加载信息;
对与动态库关联的预设信息进行修改。
在一种可选的实施方式中,所述与动态库关联的预设信息包括:
动态库加载信息的偏移量信息和长度信息;
和/或,原始动态库的加载序号信息和原始动态库对应的代码在可执行文件中的偏移地址信息;
和/或,代码段中原始动态库的位置信息的序号信息。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的应用程序的注入攻击检测系统中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。