[发明专利]一种iOS下移动APP安全防护系统及方法有效
申请号: | 201810215031.7 | 申请日: | 2018-03-15 |
公开(公告)号: | CN108595989B | 公开(公告)日: | 2020-06-30 |
发明(设计)人: | 吕秋云;祁伊祯;俞祥祥;王秋华;欧阳潇琴;詹佳程;刘昊 | 申请(专利权)人: | 杭州电子科技大学 |
主分类号: | G06F21/83 | 分类号: | G06F21/83;G06F21/62;H04L9/06;H04L9/08;H04L29/06 |
代理公司: | 杭州君度专利代理事务所(特殊普通合伙) 33240 | 代理人: | 朱月芬 |
地址: | 310018 浙*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 ios 移动 app 安全 防护 系统 方法 | ||
1.一种iOS下移动APP安全防护系统,其特征在于包括安全键盘模块、用户数据安全保存模块、App敏感信息保存模块、源代码保护模块、安全热更新模块;
安全键盘模块:具有防通过坐标获取键盘输入信息、去缓存和防录屏的功能,将自定义的安全键盘模块代替原系统键盘,并通过runtime机制对录屏进程的监听,有效阻止用户输入信息的泄露;
安全键盘模块启动实现过程如下:
①监听用户输入事件;
②拦截系统键盘弹出;
③检测是否在录屏的进程,若发现正在录屏,则弹出警告并收回安全键盘模块;否则启动安全键盘模块,产生一组随机数,将键盘中的键位随机布局;
④键盘根据布局模板进行显示,点击键盘按键显示输入信息;
用户数据安全保存模块:对用户数据进行分类保存,根据不同数据类型以及大小不同给出不同的加密方案;将用户数据分为以下两类:
①用户字段信息,该类型数据量小,并有数据处理的需求,该类数据使用SQLite数据进行保存,大部分SQLite文件会保存Document当中;
②用户处理的文件数据,该类数据因为内存大,直接保存在Documents或Library当中;
针对这两类数据提出相应地安全保存的方法,针对SQLite数据库中用户字段信息的安全存储,提供两种加密方案:
①对数据进行加密,加密以后再保存到数据库当中;
②将数据库sqlite文件转换成二进制,对sqlite的二进制文件进行加密,开发者可以根据需求进行调用;
针对文件安全存储加密方案如下:
首先将用户文件根据文件内存大小,分成小文件和大文件;
对于小文件,因为其内存小直接使用对称密钥进行加密;
对于视频、音频的大文件,首先使用压缩方法对文件进行压缩,然后选择文件对应编码方式使用dataUsingEncoding方法将文件转化成NSData,最后使用base64编码进行加密;
App敏感信息保存模块:实现了SSkeychain安全存储容器,并对plist文件进行加密,具体如下:
首先,安全plist文件保存;
App中的plist文件分成两类,一类为系统自带的info.Plist文件,其中包含了一些应用配置信息,另一类则是开发者自己创建的plist文件;
对于第一类文件直接使用用户数据安全保存模块中的用户字段信息加密API进行加密;
对于第二类文件,因为plist是以XML明文的形式进行保存,直接转为字符串进行加密处理;
其次,使用SSkeychain保存信息;
Keychain Services是OSX和iOS都提供的一种安全地存储敏感信息的工具,对于keychain源代码进行封装,创建了SSKeychain工具类,头文件定义了三个方法:keychain保存、读取和删除数据;然后在实现文件中将定义的三个方法抽成一个方法类;
所述的敏感信息包含用户数据安全保存模块中加密使用的密钥、集成第三方SDK的AppId和AppSecret,以及应用的网络接口信息;
源代码保护模块:对App应用源码中的文件名、方法名和类名进行混淆,分为关键字提取、创建数据库和关键字混淆,具体如下:
首先,关键字提取
在iOS应用编写过程中,对存在的文件名、类名、协议名和函数名四类关键字进行准确提取;
其次,创建数据库
采用SQLite数据库来保存关键字,创建对应表的字段表,字段表包括src和des;src保存原关键字,des保存混淆后名字;
然后,对关键字进行混淆
采用MD5算法对原关键字进行混淆,实现过程如下:
首先提取数据库中的src字段内容,调用shell命中的md5sum函数对src中的内容进行MD5计算,完成后将MD5值存入des字段;
安全热更新模块:热更新脚本使用https协议进行传输,本地执行的热更新脚本代码使用哈希算法验证其完整性,具体实现如下:
首先,热更新脚本安全下发
本发明热更新脚本安全传输过程如下:
①使用一个会话秘钥key对脚本文件进行加密,得到加密脚本;
②对脚本文件进行一次MD5运算,得到脚本文件的信息摘要;
③使用服务器的私钥对会话秘钥key进行加密,得到加密key;
④同时也用私钥对过程②的MD5值进行加密,得到加密MD5;
⑤将加密key、加密脚本以及加密MD5发送至客户端;
⑥客户端使用服务器公钥对加密key进行解密,得到key;
⑦客户端使用服务器公钥加密MD5解密,得到MD5;
⑧使用key解密得到脚本文件;
⑨客户端对脚本文件进行一次MD5操作;
⑩对比过程⑦和过程⑨中的MD5,判断脚本在传输过程中是否遭到修改;
其次,热更新脚本本地安全
当本地客户端调用脚本文件时,首先对脚本文件进行一次MD5计算,然后将计算结果发送至服务器进行验证,即在热更新脚本安全下发过程⑤加入脚本安全验证的过程,只有服务器验证通过,才可以执行脚本文件中的内容。
2.根据权利要求1所述的一种iOS下移动APP安全防护系统的实现方法,其特征在于包括如下步骤:
步骤1.启动安全键盘模块,具体实现如图2:
1-1监听用户输入事件
该过程为当用户使用UITextfield控件输入信息时,监听键盘的弹出事件,其主要实现方法是使用KVO技术监听键盘弹出;
其实现过程如下:
首先创建一个观察者;
然后给观察者添加观察内容,键盘的监听事件有四种状态:
UIKeyboardWillShowNotification键盘即将显示;
UIKeyboardDidShowNotifition键盘已经显示;
UIKeyboardWillHideNotification键盘即将隐藏;
UIKeyboardDidHideNotification键盘完全隐藏;
需要监听UIKeyboardWillShowNotification键盘即将显示事件,添加完成后,即完成了对键盘输入的监听;在控制器viewDidLoad方法中使用addObserver添加观察者,@selector代表观察者触发事件后回调后方法,name代表观察者的触发事件,过程中主要对键盘即将显示事件进行观察;
1-2拦截系统键盘显示
当UIKeyboardWillShowNotification键盘即将显示事件触发时,系统会直接调用系统keyboard进行显示,为了能够显示本文设计的安全键盘,需要对系统键盘进行拦截,并替换成安全键盘,在步骤1-1中的keyboardWillShow方法中添加拦截代码即可实现系统键盘的拦截;
其具体实现过程如下:在iOS系统中支持键盘输入的控件有UITextfield和UITextView,在这两个控件中有FirstResponder(第一响应者)的属性,当用户点击输入框时,系统先调用resign FirstResponder方法取消UITextField第一次响应者的属性,当该属性被取消,系统键盘便会隐藏,达到阻止系统键盘弹出目的;
1-3检测是否存在录屏进程
该过程检测是否存在录屏进程的调用,如果存在则停止安全键盘启动,并通知用户存在恶意录屏;
检测App是否存在录屏进程的实现方法有以下两种:
①.遍历App应用的所有framework,检测是否包含了ReplayKit框架;在iOS系统中,App的可执行文件以mach-O格式进行保存,App在启动时通过load Commands将所有框架动态链接到App中,遍历mach-O文件中load commands,判断App是否包含Replaykit框架,通过检测整个App是否调用replaykit的方式来判断是否存在录屏进程;
②.通过检测Replaykit的方法调用判断是否存在录屏进程,运行时再次判断,进一步消除步骤①的误差;具体如下:在Object-C中一个类的数据结构为结构体,包含了类名name和其所有的方法名数组method_list,所以该检测过程只需要遍历method_list方法列表中所有的方法名,即能够判断是否存在恶意调用录屏进程监听键盘输入;实现过程如下:在Replaykit中RPScreenRecord是录屏功能的操作对象,其中inti方法为RPScreenRecorder对象的创建方法,startRecordingWithMicrophone是RPScreenRecorder启动录屏方法;
使用runtime机制,遍历RPScreenRecorder对象中所有方法是否存创建和启动录屏两个方法,可达到判断是否存在录屏进程的目的;
1-4键盘按键随机布局
通过对键盘上的按键布局进行随机化处理,有效防止攻击者通过用户点击的坐标推断出按键信息:
首先创建一个标准键盘数组保存原键盘布局信息,然后使用arc4random函数产生0到标准键盘数组总个数中的随机数,再创建一个数组保存随机后的数组,将随机数K作为标准键盘数组的下标,顺序放入随机以后的数组中,为了防止下次删除数组越界,将标准键盘数组中最后的元素放入刚取出的位置,并删除最后一个元素,如此循环,直至标准键盘数组为空,键盘随机排序完成;
1-5键盘和输入信息显示
安全键盘是基于UIView和UIButton两种控件实现,具体实现如下:
①将键盘字符数组使用UIButton控件显示,并使用xib模板来实现UIButton布局;
②创建保存UIButton点击输入的字符数组;
③对每一个UIButton控件添加点击事件,并再创建一个新数组保存点击UIButton对应的字符;
④将字符数组合并成字符串,iOS负责系统输入的主要控件有UITextField和UITextView,所以在UITextField中的text属性中提取字符,合并成字符串,即实现了键盘输入信息的显示;
步骤2、用户数据安全保存
2-1SQLite数据库安全存储
对SQLite数据库加密提供两种方案:①首先对数据进行加密,加密以后再保存到数据库当中;②将数据库sqlite文件转换成二进制,对sqlite的二进制文件进行加密;
(1)对数据库中的数据进行加密
具体包括数据加密模块、解密模块和数据库读写三部分;数据加解密采用iOS自带的加密框架CommonCryptor进行加密,该框架提供多种对称加密算法,同一时间内,开启多个线程供不同的CommonCryptor对象进行使用,且保证线程安全;
首先使用getCString函数转将字符串密钥转换成AES密钥的形式,buffer代表申请保存密文的空间,然后调用iOS中CommonCrypor中的AES加密函数进行加密,最后以NSData数据类型返回密码;另外,数据库写入模块使用FMDB;
(2)对数据库文件进行加密
使用sqlcipher框架进行加密:首先输入数据库地址,然后创建SQLite数据库,用sqlite3_exec函数进行加密;
2-2文件安全存储
对于小文件,因为其内存小可直接使用对称密钥进行加密,加密过程如下:将各类型的文件转换成统一的二进制数据格式,在Object-C中,NSData是对数据进行包装的对象,其以二进制数据格式保存在应用当中;
把文件转换成二进制文件以后,使用非对称加密算法对二进制文件进行加密;另外,在加密的过程密钥是加密过程安全的保障,密钥由开发人员在开发阶段保存在App中,或由用户输入;
对于大文件,使用iOS系统提供的压缩API对文件进行压缩,然后选择文件对应编码方式使用dataUsingEncoding方法将文件转化成NSData,最后使用base64编码进行加密;
步骤3、App应用敏感数据安全保存
3-1安全plist文件保护
对于开发者自己创建的plist文件,可直接转为字符串进行加密处理,使用mainBundle方法找到App文件中开发者创建的plist文件地址,调用stringWithContentsOfURL将plist文件中的内容转化成NSString字符串格式,然后使用AES进行加密,并把密文写入ciphertext文档中,最后,使用NSFileManager文件管理者对象删除原plist文件;
步骤4、代码混淆加固
具体分为关键字提取、创建数据库和关键字混淆,详细描述如下:
4-1关键字提取
在iOS应用编写过程中,其存在文件名、类名、协议名和函数名四类关键字,该过程需要对这四类关键字进行准确提取;
(1)文件名获取:在shell命令中,使用find命令获取工程目录下所有的文件;然后使用cat指令从文件中提取文件名;
(2)类名获取:使用“@interface”字段快速定位到类名,使用grep指令其中sort参数为了排序;加入uniq参数去重;
(3)协议名获取:使用“@protocol”关键字,提取出所有协议;
(4)函数名获取:在Object-C中,函数名以“-()”开头,并以“;”或者“{”结尾,因此,以“-()”和”;”,”{”为关键字,提出两个关键字中的内容,并去除内容中变量名即为函数名,同时加入uniq关键字去重;
4-2创建数据库
采用SQLite数据库来保存关键字,创建对应表的字段表,字段表包括src和des;src保存原关键字,des保存混淆后名字;
4-3对关键字进行混淆
采用MD5算法对原关键字进行混淆,其实现过程如下:首先提取数据库中的src字段内容,调用shell命中的md5sum函数对src中的内容进行MD5计算,完成后将MD5值存入des字段;
步骤5、安全热更新
5-1热更新脚本安全下发
传输过程如下:
①使用一个会话秘钥key对脚本文件进行加密,得到加密脚本;
②对脚本文件进行一次MD5运算,得到脚本文件的信息摘要;
③使用服务器的私钥对会话秘钥key进行加密,得到加密key;
④同时也用私钥对过程②的MD5值进行加密,得到加密MD5;
⑤将加密key,加密脚本,以及加密MD5发送至客户端;
⑥客户端使用服务器公钥对加密key进行解密,得到key;
⑦客户端使用公对加密MD5解密,得到MD5;
⑧使用key解密得到脚本文件;
⑨客户端对脚本文件进行一次MD5操作;
⑩对比过程⑦和过程⑨中的MD5,判断脚本在传输过程中是否遭到修改;
5-2热更新脚本本地安全
针对脚本文件在本地存在被篡改的威胁,当客户端调用脚本文件时,首先对脚本文件进行一次MD5计算,然后将计算结果发送至服务器进行验证,即在步骤5-1过程⑤加入脚本安全验证的过程,只有服务器验证通过,才可以执行脚本文件中的内容。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于杭州电子科技大学,未经杭州电子科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201810215031.7/1.html,转载请声明来源钻瓜专利网。