CN108595989B - 一种iOS下移动APP安全防护系统及方法 - Google Patents

一种iOS下移动APP安全防护系统及方法 Download PDF

Info

Publication number
CN108595989B
CN108595989B CN201810215031.7A CN201810215031A CN108595989B CN 108595989 B CN108595989 B CN 108595989B CN 201810215031 A CN201810215031 A CN 201810215031A CN 108595989 B CN108595989 B CN 108595989B
Authority
CN
China
Prior art keywords
keyboard
file
key
script
app
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201810215031.7A
Other languages
English (en)
Other versions
CN108595989A (zh
Inventor
吕秋云
祁伊祯
俞祥祥
王秋华
欧阳潇琴
詹佳程
刘昊
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhejiang Qiangua Information Technology Co.,Ltd.
Original Assignee
Hangzhou Dianzi University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hangzhou Dianzi University filed Critical Hangzhou Dianzi University
Priority to CN201810215031.7A priority Critical patent/CN108595989B/zh
Publication of CN108595989A publication Critical patent/CN108595989A/zh
Application granted granted Critical
Publication of CN108595989B publication Critical patent/CN108595989B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/82Protecting input, output or interconnection devices
    • G06F21/83Protecting input, output or interconnection devices input devices, e.g. keyboards, mice or controllers thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • G06F21/6209Protecting access to data via a platform, e.g. using keys or access control rules to a single file or object, e.g. in a secure envelope, encrypted and accessed using a key, or with access control rules appended to the object itself
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/04Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks
    • H04L63/0428Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks wherein the data content is protected, e.g. by encrypting or encapsulating the payload
    • H04L63/045Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks wherein the data content is protected, e.g. by encrypting or encapsulating the payload wherein the sending and receiving network entities apply hybrid encryption, i.e. combination of symmetric and asymmetric encryption
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0643Hash functions, e.g. MD5, SHA, HMAC or f9 MAC
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0861Generation of secret information including derivation or calculation of cryptographic keys or passwords

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Theoretical Computer Science (AREA)
  • Signal Processing (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Power Engineering (AREA)
  • Storage Device Security (AREA)

Abstract

本发明公开了一种iOS下移动APP安全防护系统及方法。本发明包括安全键盘模块、用户数据安全保存模块、App敏感信息保存模块、源代码保护模块、安全热更新模块的五大安全防护模块对于现有的iOS移动APP存在缺陷和问题进行安全防护。本发明将现存iOS‑App开发过程中常遇到的五个安全问题的解决方案集成到一种安全防护框架方法当中,开发者只需要将安全防护方法运用到App中,正确部署即可对App做出有效的安全防护,方便开发者解决App安全问题,减少开发时间,提高App的安全性。

Description

一种iOS下移动APP安全防护系统及方法
技术领域
本发明属于移动安全的技术领域,具体为一种iOS下移动APP安全防护方法。
技术背景
iOS和Android是用户使用率最高的移动操作系统,其中iOS系统源码不公开,以及严格统一的App应用上架审核机制,比Android具有较高的安全性;另外,苹果公司为iOS系统设计了一系列安全机制,如:代码签名、沙盒机制、ASLP、加密保护等。
虽然iOS有较完善的安全机制,但是因为开发者对应用安全的疏忽,还是存在一些常见的安全威胁。本方法主要针对开发中常遇到的五个安全威胁进行防护:
(1)系统键盘安全威胁,用户在使用App时,经常会遇到账户密码输入等敏感信息输入问题,特别是针对金融类App,防止键盘输入内容被监听,对用户数据的保护非常重要。
(2)用户数据本地保存安全威胁,用户在使用App时会产生许多用户信息,一部分数据采用数据库的形式进行保存,另外一部分数据以word,PDF等大文件的形式保存在本地App中,这些数据如果没有防护措施,易造成数据泄露。
(3)App敏感信息保存安全威胁,在日常开发过程中,避免不了对一些App敏感信息的处理例如App加密密钥,多数开发者采用硬编码形式或plist文件进行保存,但是其存在巨大的安全隐患,一旦App被逆向,以上信息都会遭到泄露。
(4)App源代码泄露威胁,在日常开中,因为苹果现有的安全加固技术,开发者容易忽视对App源代码进行保护,攻击者可以通过逆向的方法从源代码中得到通信协议或者代码逻辑,对App进行攻击。
(5)热更新脚本篡改威胁,为了满足快速变化的需求,热更新技术已经被众多App使用,但是热更新脚本代码的获取与保存还存在一些安全问题。
发明内容
本发明的目的是针对现有技术的不足,提供一种iOS下移动APP安全防护系统及方法。
本发明解决其技术问题所采用的技术方案如下:
一种iOS下移动APP安全防护系统,包括安全键盘模块、用户数据安全保存模块、App敏感信息保存模块、源代码保护模块、安全热更新模块;
安全键盘模块:具有防通过坐标获取键盘输入信息、去缓存和防录屏的功能,将自定义的安全键盘模块代替原系统键盘,并通过runtime机制对录屏进程的监听,有效阻止用户输入信息的泄露。安全键盘模块启动实现过程如下:
①监听用户输入事件。
②拦截系统键盘弹出。
③检测是否在录屏的进程,若发现正在录屏,则弹出警告并收回安全键盘模块;否则启动安全键盘模块,产生一组随机数,将键盘中的键位随机布局。
④键盘根据布局模板进行显示,点击键盘按键显示输入信息。
用户数据安全保存模块:对用户数据进行分类保存,根据不同数据类型以及大小不同给出不同的加密方案。将用户数据分为以下两类:
①用户字段信息,例如用户名,密码等,该类型数据量小,并有数据处理的需求:例如排序,取最大数等,该类数据一般使用SQLite数据进行保存,大部分SQLite文件会保存Document当中。
②用户处理的文件数据,例如word,PPT,视频文件等,该类数据因为内存大,直接保存在Documents或Library当中,针对这两类数据提出相应地安全保存的方法。
针对SQLite数据库中用户字段信息的安全存储,提供两种加密方案:
①对数据进行加密,加密以后再保存到数据库当中。
②将数据库sqlite文件转换成二进制,对sqlite的二进制文件进行加密,开发者可以根据需求进行调用。
针对文件安全存储加密方案如下:
首先将用户文件根据文件内存大小,分成小文件和大文件;
对于小文件,因为其内存小可直接使用对称密钥进行加密。
对于视频、音频等大文件,由于移动端计算能力不高,如果直接转成NSData后加解密,不仅需要等待较多时间,而且消耗大量CPU和内存进行计算。因此本发明首先使用压缩方法对文件进行压缩,然后选择文件对应编码方式使用dataUsingEncoding方法将文件转化成NSData,最后使用base64编码进行加密。
App敏感信息保存模块:实现了SSkeychain安全存储容器,并对plist文件进行加密,具体如下:
首先,安全plist文件保存
App中的plist文件分成两类,一类为系统自带的info.Plist文件,其中包含了一些应用配置信息,例如应用名,应用版本号等等,另一类则是开发者自己创建的plist文件。
对于第一类文件,因为含有系统信息,如果对其加密,系统则无法识别内容而导致App崩溃,所以不能直接对inof.plist进行加密,该过程可以直接使用用户数据安全保存模块中的用户字段信息加密API进行加密。
对于第二类文件,因为plist是以XML明文的形式进行保存,可直接转为字符串进行加密处理。
其次,使用SSkeychain保存信息
Keychain Services是OSX和iOS都提供的一种安全地存储敏感信息的工具,比如:存储用户ID、密码和证书等。由于keychain方法的代码冗余度高,可读性差,因此在keychain的基础上设计了SSKeychain,对keychain的方法类进行封装,大大方便开发者对keychain的使用。
本发明设计对于keychain源代码进行封装,创建了SSKeychain工具类,头文件定义了三个方法:keychain保存、读取和删除数据;然后在实现文件中将定义的三个方法抽成一个方法类;以存储方法为例,每一个存储方法唯一不同的是存储的键key和键值value不一样,而其他的调用查看是否已存在,更新键值,创建新键值对的方法都是一样的。
所述的敏感信息包含用户数据安全保存模块中加密使用的密钥、集成第三方SDK的AppId和AppSecret,以及应用的网络接口等信息。
源代码保护模块:对App应用源码中的文件名、方法名和类名等进行混淆,分为关键字提取、创建数据库和混淆,具体如下:
首先,关键字提取
在iOS应用编写过程中,对存在的文件名、类名、协议名和函数名四类关键字进行准确提取。
其次,创建数据库
本发明采用SQLite数据库来保存关键字,SQLite具有支持多个主流的操作系统;其核心引擎本身不依赖第三方软件;不需要安装;所有信息(例如表,视图,触发器等)都包含在一个文件内等优点。创建对应表的字段如下4-1表,src保存原关键字,des保存混淆后名字。
表4-1混淆数据库表
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,判断脚本在传输过程中是否遭到修改。
本发明使用https传输协议对以上过程进行实现。
其次,热更新脚本本地安全
当本地客户端调用脚本文件时,本方法会对脚本文件进行一次MD5计算,并将计算结果发送至服务器进行验证,即在热更新脚本安全下发过程⑤加入脚本安全验证的过程,只有服务器验证通过,才可以执行脚本文件中的内容。
本发明有益效果如下:
本发明研究分析了现有分析了iOS-App开发过程中常遇到的五个安全问题,提出了一种iOS-App安全防护方法。该发明将五个安全威胁的解决方案集成到一种安全防护框架方法中,开发者只需要将安全防护方法运用到App中,正确部署即可对App做出有效的安全防护,方便开发者解决App安全问题,减少开发时间,提高App的安全性。
附图说明
图1总体架构设计图
图2安全键盘设计流程图
图3Mach-O文件结构图
图4安全键盘字符随机化的过程
图5安全键盘布局图
图6两种用户数据加密的方案
图7两种文件存储方案流程图
图8热更新代码安全下发流程图
图9脚本文件验证过程
具体实施方式
为使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,下面结合附图对本发明作进一步的说明。
如图1所示,一种iOS下移动APP安全防护系统主要包含以下五个安全模块:键盘信息的安全输入模块、用户数据安全存储模块、应用敏感信息安全保存模块、代码混淆模块和安全热更新模块。以下对各模块进行详细描述:
(1)安全键盘模块:该功能包括防攻击者通过点击坐标获取输入信息攻击,防止键盘缓存保存用户敏感信息,以及键盘信息输入时录屏接口的监听。
(2)用户数据安全保存模块:该模块功能对常用的本地存储数据文件类型进行了安全保护,包括数据库文件和普通文件。
(3)应用敏感信息安全保存模块:针对应用敏感信息,设计实现SSKeychain对应用敏感信息进行保存,另外,对保存应用信息plist文件也进行加密。
(4)代码混淆模块:该模块功能对应用源代码进行混淆,包括方法名混淆,类名混淆和文件名混淆。
(5)安全热更新模块:该模块对热更新脚本从服务器安全获取和本地安全保存。
一种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是否存在录屏进程的实现方法有以下两种:
1.遍历App应用的所有framework,检测是否包含了ReplayKit框架。在iOS系统中,App的可执行文件以mach-O格式进行保存,其文件结构如图3所示,App在启动时通过loadCommands将所有框架(例libobjc.A.dylib,libsystem等)动态链接到App中,遍历mach-O文件中load commands,判断App是否包含Replaykit框架。该方法通过检测整个App是否调用replaykit的方式来判断是否存在录屏进程,判断过于严格,易于造成误判。
2.通过检测Replaykit的方法调用判断是否存在录屏进程,运行时再次判断,进一步消除上述方法的误判。其原理是:Object-C是动态语言,程序中的方法调用不是编译时决定,而是运行时,其动态性实现的主要技术是Runtime机制,简称运行时,是一套由纯C代码编写的API,在Object-C中一个类的数据结构为结构体如下代码所示,其中包含了类名name和其所有的方法名数组method_list,所以该检测过程只需要遍历method_list方法列表中所有的方法名,即可以判断是否存在恶意调用录屏进程监听键盘输入;其主要实现过程如下:在Replaykit中RPScreenRecord是录屏功能的操作对象,其中inti方法为RPScreenRecorder对象的创建方法,startRecordingWithMicrophone是RPScreenRecorder启动录屏方法。本文在安全启动时,使用runtime机制,遍历RPScreenRecorder对象中所有方法是否存创建和启动录屏两个方法,可达到判断是否存在录屏进程的目的。
开发者可以根据App的安全要求选择其中两个方法的一种对是否存在录屏进程进行判断。
1-4键盘按键随机布局
该过程通过对键盘上的按键布局进行随机化处理,有效防止攻击者通过用户点击的坐标推断出按键信息,其基本原理是将所有字符按照标准键盘排布的顺序加入到数组中,然后对该数组进行随机排列处理如图4所示。
首先创建一个标准键盘数组保存原键盘布局信息,然后使用arc4random函数产生0到标准键盘数组总个数中的随机数,再创建一个数组保存随机后的数组,将随机数K作为标准键盘数组的下标,顺序放入随机以后的数组中,为了防止下次删除数组越界,将标准键盘数组中最后的元素放入刚取出的位置,并删除最后一个元素,如此循环,直至标准键盘数组为空,键盘随机排序完成。
1-5键盘和输入信息显示
本过程为显示安全键盘显示的过程。本发明提出的安全键盘是基于UIView和UIButton两种控件实现,具体实现如下:
①将键盘字符数组使用UIButton控件显示,并使用xib模板来实现UIButton布局,如图5所示。
②创建保存UIButton点击输入的字符数组。
③对每一个UIButton控件添加点击事件,并再创建一个新数组保存点击UIButton对应的字符。
④将字符数组合并成字符串,iOS负责系统输入的主要控件有UITextField和UITextView,所以在UITextField中的text属性中提取字符,合并成字符串,即实现了键盘输入信息的显示。
步骤2、用户数据安全保存
2-1SQLite数据库安全存储
本发明对SQLite数据库加密提供两种方案:①首先对数据进行加密,加密以后再保存到数据库当中。②将数据库sqlite文件转换成二进制,对sqlite的二进制文件进行加密,如图6所示,开发者可以根据需求进行调用。
(1)对数据库中的数据进行加密
该方法实现包括数据加密模块、解密模块和数据库读写三部分。数据加解密采用iOS自带的加密框架CommonCryptor进行加密,该框架提供多种对称加密算法,同一时间内,开启多个线程供不同的CommonCryptor对象进行使用,且保证线程安全。
首先使用getCString函数转将字符串密钥转换成AES密钥的形式,buffer代表申请保存密文的空间,然后调用iOS中CommonCrypor中的AES加密函数进行加密,最后以NSData数据类型返回密码。另外,数据库写入模块本文使用FMDB,它是一款简洁、易用的数据库封装库,其本质是对libsqlite3框架进行封装,并且它对于多线程的并发操作进行了处理,所以是线程安全的。
(2)对数据库文件进行加密
该方法使用sqlcipher框架进行加密,该框架是第三方开源的,具有跨平台,加密效率高的优点。首先输入数据库地址,然后创建SQLite数据库,用sqlite3_exec函数进行加密。
2-2文件安全存储
对于小文件,因为其内存小可直接使用对称密钥进行加密,加密过程如图7中①所示:因为文件类型多种多样,需要将各类型的文件转换成统一的二进制数据格式,在Object-C中,NSData是对数据进行包装的对象,其以二进制数据格式保存在应用当中,它屏蔽了数据之间的差异,文本、音频、图像等数据都可使用NSData存储。
把文件转换成二进制文件以后,使用非对称加密算法对二进制文件进行加密,因为AES是机密性好,加密效率高,所以本文采用AES算法对文件进行加密。另外,在加密的过程密钥是加密过程安全的保障,本文中的密钥可以由开发人员在开发阶段保存在App中,也可以由用户输入。
对于视频,音频等大文件,由于移动端计算能力不高,如果直接转成NSData后加解密,不仅需要等待较多时间,而且消耗大量CPU和内存进行计算。针对该问题,本文提出的解决方案如图7中②所示:使用iOS系统提供的压缩API(createZipFileAtPath)对文件进行压缩,然后选择文件对应编码方式使用dataUsingEncoding方法将文件转化成NSData,最后使用base64编码进行加密。
步骤3、App应用敏感数据安全保存
3-1安全plist文件保护
对于开发者自己创建的plist文件,可直接转为字符串进行加密处理,使用mainBundle方法找到App文件中开发者创建的plist文件地址,调用stringWithContentsOfURL将plist文件中的内容转化成NSString字符串格式,然后使用AES进行加密,并把密文写入ciphertext文档中,最后,使用NSFileManager文件管理者对象删除原plist文件。
步骤4、代码混淆加固
本发明提出的App源代码代码混淆分为关键字提取,创建数据库,混淆三个步骤,下文对这三步进行详细描述。
4-1关键字提取
在iOS应用编写过程中,其存在文件名,类名,协议名,函数名四类关键字,该过程需要对这四类关键字进行准确提取。
(1)文件名获取:在一个iOS应用中包含.framework、.a、.m、.h等类型的文件,其中.framework和.a属于框架型文件是公开的,不需要对其进行混淆,本文的目标是对”.h”和”.m”文件进行混淆。在shell命令中,可以使用find命令获取工程目录下所有的文件。
find $ROOTFOLDER-type f|sed"/\/\./d">f.list
然后使用cat指令从文件中提取文件名。
cat f_rep.list|awk-F/'{print$NF;}'|awk-F.'{print$1;}'|sed"/^$/d"|sort|uniq)
(2)类名获取:在Object-C中,.h文件声明了所有的方法名,.m文件实现.h中声明的方法。该步骤需要提取.h和.m所有的方法名,使用“@interface”字段快速定位到类名,使用grep指令其中sort参数为了排序;因为.h和.m中方法名会重复,所以加入uniq参数去重。
Figure BDA0001598355960000121
(3)协议名获取:在Object-C中,协议是一种特殊的程序设计结构,用于声明专门被别的类实现的方法。可以使用“@protocol”关键字,从.h文件中提取出所有协议。
Figure BDA0001598355960000122
(4)函数名获取:在Object-C中,函数名以“-()”开头,并以“;”或者“{”结尾,因此,以“-()”和”;”,”{”为关键字,提出两个关键字中的内容,并去除内容中变量名即为函数名,但是,”.h”可能存在”.m”中函数名的声明,两个文件找到的函数名可能会重复,所以需要加入uniq关键字去重。
Figure BDA0001598355960000123
4-2创建数据库
本发明采用SQLite数据库来保存关键字,SQLite具有支持多个主流的操作系统;其核心引擎本身不依赖第三方软件;不需要安装;所有信息(例如表,视图,触发器等)都包含在一个文件内等优点。创建对应表的字段如下,src保存原关键字,des保存混淆后名字。
表4-1混淆数据库表
src原关键字 des混淆后的关键字
4-3对关键字进行混淆
为满足混淆后的关键字不可逆,且长度相同的需求,文本采用MD5算法对原关键字进行混淆,该算法具有压缩性、计算效率高、抗修改性、强抗碰撞的特点,符合混淆不可逆且安全的需求。其实现过程如下:首先提取数据库中的src字段内容,调用shell命中的md5sum函数对src中的内容进行MD5计算,完成后将MD5值存入des字段,其代码如下:
echo-n'需要混淆的字符串'|md5sum|cut-d”-f1
步骤5、安全热更新
5-1热更新脚本安全下发
在应用请求服务器更新脚本时,因为JavaScript脚本可以调用任意Object-C方法,权限非常大,如果传输过程代码被攻击获取或篡改,对App会造成较大的威胁。另外,脚本中可能包含应用敏感信息,所以脚本内容也必须具有保密性,本发明设计的热更新脚本安全下发方案如图8所示,设计传输过程如下:
①使用一个会话秘钥key对脚本文件进行加密,得到加密脚本。
②对脚本文件进行一次MD5运算,得到脚本文件的信息摘要。
③使用服务器的私钥对会话秘钥key进行加密,得到加密key。
④同时也用私钥对过程②的MD5值进行加密,得到加密MD5。
⑤将加密key,加密脚本,以及加密MD5发送至客户端。
⑥客户端使用服务器公钥对加密key进行解密,得到key。
⑦客户端使用公对加密MD5解密,得到MD5。
⑧使用key解密得到脚本文件。
⑨客户端对脚本文件进行一次MD5操作。
⑩对比过程⑦和过程⑨中的MD5,判断脚本在传输过程中是否遭到修改。
本发明使用https传输协议对以上过程进行实现。
5-2热更新脚本本地安全
针对脚本文件在本地存在被篡改的威胁,本发明提出了以下方案如图9所示。当客户端调用脚本文件时,本方法会对脚本文件进行一次MD5计算,并将计算结果发送至服务器进行验证,即在5-1过程⑤加入脚本安全验证的过程,只有服务器验证通过,才可以执行脚本文件中的内容。

Claims (2)

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过程⑤加入脚本安全验证的过程,只有服务器验证通过,才可以执行脚本文件中的内容。
CN201810215031.7A 2018-03-15 2018-03-15 一种iOS下移动APP安全防护系统及方法 Active CN108595989B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810215031.7A CN108595989B (zh) 2018-03-15 2018-03-15 一种iOS下移动APP安全防护系统及方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810215031.7A CN108595989B (zh) 2018-03-15 2018-03-15 一种iOS下移动APP安全防护系统及方法

Publications (2)

Publication Number Publication Date
CN108595989A CN108595989A (zh) 2018-09-28
CN108595989B true CN108595989B (zh) 2020-06-30

Family

ID=63626478

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810215031.7A Active CN108595989B (zh) 2018-03-15 2018-03-15 一种iOS下移动APP安全防护系统及方法

Country Status (1)

Country Link
CN (1) CN108595989B (zh)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109558375B (zh) * 2018-12-05 2021-03-16 武汉斗鱼网络科技有限公司 一种优化的文件存储方法、存储介质、设备及系统
CN109743305A (zh) * 2018-12-27 2019-05-10 浪潮软件股份有限公司 实现智能对话系统应用中应用文本数据保护的方法
CN110162964B (zh) * 2019-05-29 2021-09-24 中国银行股份有限公司 一种文件篡改的检查方法、装置及系统
CN110414215B (zh) * 2019-06-21 2021-12-10 北京奇艺世纪科技有限公司 应用程序隐私权限声明校正方法、装置及电子设备
CN110377852A (zh) * 2019-06-24 2019-10-25 平安科技(深圳)有限公司 页面展示数据清除方法、装置、计算机设备和存储介质
CN110362967A (zh) * 2019-07-15 2019-10-22 北京奇艺世纪科技有限公司 应用程序防篡改的检测方法、装置、终端设备及存储介质
CN110489942B (zh) * 2019-08-06 2021-03-02 南开大学 一种WebAssembly文件的处理方法及系统
CN110795699B (zh) * 2019-10-04 2022-12-02 易方信息科技股份有限公司 基于iPhone系统状态栏的iOS11以下的防录屏方法
CN111124956B (zh) * 2019-11-22 2023-03-07 海光信息技术股份有限公司 一种容器保护方法、处理器、操作系统及计算机设备
CN111310175A (zh) * 2019-12-30 2020-06-19 上海上讯信息技术股份有限公司 基于插件化的iOS应用安全监测与防护方法及装置
CN111208911A (zh) * 2019-12-31 2020-05-29 北京指掌易科技有限公司 移动端输入方法、装置、设备及存储介质
CN111310217B (zh) * 2020-02-26 2023-04-11 超越科技股份有限公司 数据安全采集汇总方法、计算机设备和存储介质
CN111400132B (zh) * 2020-03-09 2023-08-18 北京版信通技术有限公司 上架app的自动监测方法及系统
CN111949608B (zh) * 2020-07-27 2022-12-23 广州掌淘网络科技有限公司 App中文本查找方法及设备
CN112199713B (zh) * 2020-12-03 2021-03-16 成都中科大旗软件股份有限公司 一种ios系统软件运行算法的混淆加密方法
CN112905971B (zh) * 2021-03-25 2022-08-09 建信金融科技有限责任公司 一种处理信息的方法和装置
CN113747244B (zh) * 2021-07-28 2024-03-22 深圳市华曦达科技股份有限公司 多媒体数据的保护方法、终端设备及服务器
CN113824594B (zh) * 2021-09-29 2023-12-29 新华三信息安全技术有限公司 一种报文发送方法及设备

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102737190A (zh) * 2012-07-04 2012-10-17 复旦大学 基于静态分析的Android应用日志中信息泄漏隐患的检测方法
CN102760219A (zh) * 2011-12-20 2012-10-31 北京安天电子设备有限公司 一种Android平台软件保护系统、方法及设备
CN104469767A (zh) * 2014-10-28 2015-03-25 杭州电子科技大学 一套移动办公系统中集成式安全防护子系统的实现方法
WO2015196982A1 (zh) * 2014-06-27 2015-12-30 北京金山安全软件有限公司 一种Android恶意程序检测和处理方法、装置及设备

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102760219A (zh) * 2011-12-20 2012-10-31 北京安天电子设备有限公司 一种Android平台软件保护系统、方法及设备
CN102737190A (zh) * 2012-07-04 2012-10-17 复旦大学 基于静态分析的Android应用日志中信息泄漏隐患的检测方法
WO2015196982A1 (zh) * 2014-06-27 2015-12-30 北京金山安全软件有限公司 一种Android恶意程序检测和处理方法、装置及设备
CN104469767A (zh) * 2014-10-28 2015-03-25 杭州电子科技大学 一套移动办公系统中集成式安全防护子系统的实现方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
《A digital memories based user authentication scheme with privacy preservation》;JunLiang Liu等;《PLOS ONE》;20171130;第100-102页 *
《iOS系统数据安全研究》;陈佳霖;《信息安全于通信保密》;20120831(第08期);全文 *

Also Published As

Publication number Publication date
CN108595989A (zh) 2018-09-28

Similar Documents

Publication Publication Date Title
CN108595989B (zh) 一种iOS下移动APP安全防护系统及方法
JP6257754B2 (ja) データの保護
US7975308B1 (en) Method and apparatus to secure user confidential data from untrusted browser extensions
CN104318135B (zh) 一种基于可信执行环境的Java代码安全动态载入方法
US8874932B2 (en) Method for order invariant correlated encrypting of data and SQL queries for maintaining data privacy and securely resolving customer defects
KR101216995B1 (ko) 인덱스 테이블 기반 코드 암호화 및 복호화 장치 및 그 방법
CN110008745B (zh) 一种加密方法、计算机设备和计算机存储介质
CN113010856A (zh) 一种动态非对称加解密的JavaScript代码混淆方法与系统
WO2023029447A1 (zh) 模型保护方法、装置、设备、系统以及存储介质
US20230027142A1 (en) Method and apparatus for encrypting and decrypting and reading and writing messages, computer device, and storage medium
CN111191195A (zh) 一种用于保护apk的方法和装置
CN113468576B (zh) 一种基于角色的数据安全访问方法及装置
Demsky Cross-application data provenance and policy enforcement
CN106682521B (zh) 基于驱动层的文件透明加解密系统及方法
Kotov et al. Understanding crypto-ransomware
CN106326733A (zh) 管理移动终端中应用的方法和装置
Bonner et al. Implementing the payment card industry (pci) data security standard (dss)
Lee et al. Classification and analysis of security techniques for the user terminal area in the internet banking service
CN106789051A (zh) 一种保护文件的方法、装置和计算设备
Petrov Android password managers and vault applications: data storage security issues identification
CN110147655A (zh) 应用程序的安全防护系统及方法
CN107579987A (zh) 一种服务器云端诊断系统规则库二级加密、访问方法及系统
Sun et al. An active android application repacking detection approach
CN117459327B (zh) 一种云数据透明加密保护方法、系统及装置
Muhammad et al. Android Mobile Banking Application Security from Reverse Engineering and Network Sniffing

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20230827

Address after: Room 2002, Zone A, Huazhou Business Center, No. 1038 Jiangnan Avenue, Changhe Street, Binjiang District, Hangzhou City, Zhejiang Province, 310051

Patentee after: Zhejiang Qiangua Information Technology Co.,Ltd.

Address before: 310018 No. 2 street, Xiasha Higher Education Zone, Hangzhou, Zhejiang

Patentee before: HANGZHOU DIANZI University

TR01 Transfer of patent right