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