前言
近期,由通付盾提供安全技术保障服务的最新版“通信大数据行程卡App”已登录各大应用商店,用户搜索"通信行程卡"即可下载使用。
“通信大数据行程卡App”(简称“行程卡”)是在工信部指导下,由中国信息通信研究院与中国电信、中国移动、中国联通三大电信运营商共同推出的行程查询服务,该服务于2020年2月13日面向公众推出,用户可免费查询本人14天内的到访地。上线仅一个多月累计查询量已经超过8.5亿次。
2020年2月13日起,三大运营商提供的短信查询行程服务已覆盖2亿多用户。
2020年2月29日,短信查询升级为扫码查询,并提供了统一的网页查询入口。
2020年3月6日始,在“通信大数据行程卡”上上线了境外到访地的查询功能,可以对手机用户前14天到访的境外国家或者地区的信息进行查验,可及时发现瞒报、漏报、不实申报行程信息的问题。
图 1-1 行程卡App
通付盾凭借自身在移动安全领域与隐私保护领域研发服务实力,成为此次技术保障服务支撑方,为“行程卡”提高安全防护等级,防止代码注入、动态调试、内存注入攻击,让应用免遭破解、二次打包、API攻击、数据窃取等威胁,保护App及其资源的完整性及安全性。
下文将分别从Android,iOS两个平台的App出发,从代码安全、攻防安全、API接口安全三个方面详细描述此次保护方案的具体实施办法及最终的保护效果。
Android保护方案的具体办法
针对程序开发过程中可能产生的安全漏洞风险以及Android系统自身的安全缺陷,为行程卡安卓端设计了一套集合代码安全、攻防安全、完整性安全、数据安全于一体的完整解决方案,使程序反逆向能力更强,安全性更高。
图2-1 Android解决方案功能示意图
1、代码安全
市场上针对Android反编译工具很多,如IDA,dex2Jar,jd-gui等。通过反编译后的程序代码接近源代码,具有极高易读性,极易暴露程序的业务逻辑和处理方式,如服务器数据请求方式、行程结果显示逻辑等。因此,对Android程序代码进行加密保护至关重要。
代码保护采用了DEX加壳与VMP虚拟机技术混合的解决方案。可以有效的防止反编译工具,内存dump等技术对代码造成泄漏或篡改。
1)技术原理
Android主要使用Java进行代码编写,开发完成后,编译器将Java代码打包进安装包中classes.dex文件中,有些程序业务较复杂,编译时会生成多个dex文件。因此,代码保护的首要目标就是Android安装包中的dex文件。
DEX加壳技术:基本原理是对原始的dex文件进行整体加密,隐藏dex文件源码,修改程序入口。运行时通过Dalvik虚拟机动态加载执行解密后的dex文件。具体流程如下:
图2-2 DEX加壳技术流程示意图
VMP保护技术:与传统的加壳工具不同,不是简单地对目标进行加密、压缩。而是修改目标源码,让目标的部分指令在VMP创建的虚拟环境下运行。首先对原始字节码进行加密处理,然后将函数(方法)替换为native属性,转到JNI层去执行,最后在JNI层将字节码解密,并解释执行。具体流程如下:
图2-3 VMP 虚拟机保护技术流程示意图
2)实现效果
通过逆向工具查看经过保护后的DEX文件反编译效果,可见保护后的核心代码得到了保护,无法查看具体函数方法,不易被逆向分析,重要的数据和业务逻辑不易被泄漏,达到了代码保护的目的。
图2-4 代码保护后效果演示图
2、攻防安全
动态攻击指攻击者利用攻击工具如调试工具、拦截器、注入工具等跟踪拦截目标程序,进行代码查看,业务逻辑分析,并对其操作数据进行窃取或篡改。比如:修改行程结果处理逻辑为永远显示绿色码等。
动态攻击防护采用了反调试、防注入、防模拟器以及防界面劫持等多重交叉混合的解决方案。通过添加防护处理,可以有效保护用户的敏感信息安全,防止攻击者通过内存注入等方式窃取。
1)技术原理
反调试:通过双向ptrace保护,阻止其他进程进行ptrace调试操作,同时采用轮询的方式监控重点函数方法,检查其是否处于调试状态,最后监听进程状态。
防注入:动态注入一般使用如hijack工具,向指定进程中注入SO文件。防注入的保护方案通过对市场主流注入工具进行监测,保护整个程序生命周期的进程安全,阻止动态注入攻击。
动态劫持:对相关检测函数添加__attribute__(constructor)属性,保证其在SO加载时优先进行系统运行环境检测,查看是否存在zjdroid、xposed、substrate等劫持工具。
2)实现效果
反调试:采用调试防护策略后的程序在检测到处于调试状态时会强制退出,阻止动态调试操作。
防注入:采用注入防护策略后的程序在监测到发生注入时,会进行加载拦截,让注入无法挂载。
图2-5 保护后的注入效果演示图
防劫持:采用劫持防护策略后的程序在监测到环境中存在劫持工具时,终止程序继续运行或者弹窗提示运行风险。
3、完整性验证
攻击者通过逆向分析,对程序代码、资源文件等进行添加或修改,再打包生成新的程序安装包发布到市场中,即可实现应用钓鱼。在应用中广告SDK,或者通过插入恶意代码窃取用户的登录账号密码、拦截短信验证码,甚至修改行程码的显示结果等。这些被二次打包发布的安装包,对疫情防空会产生严重威胁。因此,需要对程序的完整性进行有效保护。
应用完整性验证保护方案主要从文件校验、签名证书校验、配置文件加密入手。
1)技术原理
文件校验:通过对程序安装包中所有的文件做加密提取处理,再对提取的校验数据及校验代码进行存储保护,程序启动时立即校验所有文件,检测是否发生篡改。
签名证书校验:通过对程序安装包中的证书信息进行加密处理,提取加密后的数据作为校验标准,将校验数据进行存储保护,程序启动时校验当前签名信息是否与校验数据一致。
配置文件加密:遍历提取程序包中的XML配置文件,对文件做加密处理,并提取加密后的数据作为校验标准。程序启动后校验当前的配置文件是否与校验数据一致。
2)实现效果
APK具有完整性校验,只要修改了其中的程序代码、资源文件、配置文件,程序立即终止运行。
4、小结
通付盾的Android保护方案对程序的代码安全,动态攻击防护、程序完整性都起到了很好保护作用,大大增加程序逆向阅读难度,有效阻止动态攻击,保护App及其资源的完整性及安全性。
iOS保护方案的具体办法
相对安卓系统而言,iOS系统的封闭性为其终端上的APP起到了很好的保护作用。但近年来iOS系统漏洞频发,iOS设备上的应用屡遭恶意攻击;此外,安全开发管制缺失,安全编码不规范,缺乏对应用运行环境、传输协议、加密机制等的安全防护,导致应用防护能力极弱。
其次,iOS设备一旦被越狱后系统便失去了安全防护,设备安全性降低。运行在越狱设备上的iOS应用,非常容易遭受破解分析,同时,iOS越狱的漏洞很容易被恶意软件利用,造成用户信息泄露、恶意扣费、设备中毒等安全问题。
为此,针对行程卡App iOS端的程序安全采用了集合代码安全、动态防护以及完整性校验于一体的App保护解决方案。
1. 代码安全
iOS端行程卡的代码保护方案采用的是iPA动态壳保护的模式。整体采用 iPA加固技术,对安装包中的可执行文件进行加壳保护。
1)技术原理
iPA动态壳保护:提取iPA文件中的可执行文件、info.plist等资源文件,通过加密程序对可执行文件链接壳代码、Mach-O文件加密,对保护后的二进制文件进行重打包、重签名后生成受保护IPA,受保护的IPA功能、性能等均不受影响。
图3-1 iPA动态壳保护技术流程示意图
代码混淆:通过在程序代码编译阶段通过进行指令替换、字符串加密等技术手段,增加代码阅读难度,极大提高程序执行逻辑被逆向分析的难度,降低被破解的风险。除此以外,通过将程序代码中的类名、方法名、属性名、变量名等符号进行隐藏或混淆保护。从而使代码安全性更高,能够更好地对抗逆向分析。
2)实现效果
通过Hopper查看经过代码保护后的可执行文件反编译效果,可见反编译后代码段起到了混淆和加密,代码可读性差,达到了代码保护的效果。
图3-2 保护后代码反编译效果图
2. 动态防护
对于 iOS 应用而言,越狱环境的安全性相对较低,应用存在较大的被调试、篡改的风险。因此针对iOS的动态防护实现体现在程序安装运行时,可对运行环境进行安全检测查看是否处于越狱环境,在程序运行时实时监测运行环境是否遭受逆向攻击,全周期保证应用安全。
1)技术原理
截屏/录屏检测(anti- Screen capture):程序运行时,动态监测应用是否正在执行截屏操作,检测到程序正在截屏/录屏操作,启动防护机制,程序告警。
反调试(anti-Debug): 程序运行时,实时检测ptrace状态防止被调试工具如debugserver、lldb等挂载,当检测到程序被调试时,启动防护机制,防止调试工具挂载,处于调试状态时程序退出运行。
反钩子(anti-Hook): 程序运行时,动态监测应用是否正在被 Hook,检测到程序被 Hook,启动防护机制,程序退出运行。
反注入(anti-Inject): 程序运行时,实时动态检测应用的动态库加载情况,一旦发现有新的动态库注入程序退出运行。其次,动态监测应用是否正在被第三方工具进行注入操作,检测到程序被注入,启动防护机制,程序退出运行。反篡改(anti-Tamper): 程序运行时,动态监测应用进程,防止被篡改工具挂载调试篡改。
2)实现效果
当检测到程序处于动态攻击状态时,启动防护机制,终止程序运行。
图3-3 保护后调试效果图(挂载拦截)
3. 完整性校验
iOS端的应用完整性验证保护方案主要从资源文件校验、签名证书校验、可执行文件完整性着手。
1)技术原理
资源文件校验:通过对程序安装包中所有的资源文件做加密提取处理,再对提取的校验数据进行安全存储保护,程序启动时立即校验所有资源文件,检测是否发生篡改。
签名证书校验:通过对程序安装包中的证书信息作为校验数据进行提取并安全存储,程序启动时校验当前签名信息是否与校验数据一致。
可执行文件完整性校验:通过对程序安装包中的可执行文件的数据段做加密处理,程序启动时立即校验程序的数据段是否发生篡改。
2)实现效果
当检测到程序处于动态攻击状态时,启动防护机制,终止程序运行。
4. 小结
通付盾的iOS保护方案对程序的代码安全,动态攻击防护、程序完整性都达到了很好保护作用,对常用的逆向工具、动态攻击工具都起到了很好的拦截阻断作用,应用安全性得到很大提高。同时采用iPA加固技术使整个保护过程更灵活、兼容性更强、具有更高的代码安全性。
0x04 API接口安全保护方案的具体办法
移动App的背后是支撑其运行的后台服务,App与后台服务通过API接口进行数据交换。在移动App安全设计中,API接口安全设计是重中之中,API接口安全的好坏,直接关系整个系统及用户数据的安全。经常会看见一些移动App的后台API接口被非法利用,身份验证信息和敏感数据在传输过程中被不法分子截获,对用户的信息安全造成严重威胁。甚至可以利用API接口漏洞攻击篡改系统数据,造成严重损失。对于API接口安全,我们也向“行程卡”App提供了以下几种安全设计建议,保障了API接口安全。
1)动态Token授权认证,防止未授权用户获取数据及完善身份认证;
2)时间戳超时机制,可有效防止DOS攻击;
3)数据签名机制,防止传输的数据被篡改及完善身份认证;
4)拒绝重复调用,防止接口被重放攻击、防止被恶意采集;
5)采用HTTPS通信协议及有效证书验证,防止数据明文传输及中间人攻击。
结语
通付盾加固解决方案经历了长期技术积累和持续创新过程,采用多种专利技术,并首次将VMP虚拟机保护技术运用到App加固领域,DEX加壳与VMP保护技术相结合的混合加固模式,多种技术交叉融合,纵深防护,达到合规性要求,保护客户的财产、隐私、业务、数据、交易等安全;在iOS加固中,通付盾国内首创IPA动态壳加固,无需提供应用的源代码,可以有效避免源码泄露问题。
此次“行程卡”App的加固技术方案,同时采用了通付盾安全专家提出的DEX加壳与VMP保护技术结合的混合加固模式,以及国内首创的IPA动态壳加固,确保了Android和iOS两种生态运行环境下的数据安全。
在API接口安全保护方面,凭借多年的安全开发、渗透测试、软件源代码审计经验,为“行程卡”App提供了有效的API接口保护设计方案。
近日,通付盾安全专家们针对Android加固方案第一时间完成了Android 12 DP2版本兼容性适配,密切关注着行业最前沿技术动态,确保通付盾加固服务时刻保持完美的兼容效果,不忘初心,严格保证客户服务质量。