《高兼容性的一站式移动应用安全解决方案》刘敏

Razor

2019/07/04 发布于 技术 分类

安卓绿色联盟 

文字内容
1. 安卓绿色联盟·第19期技术沙龙 聚焦Android P版本应用兼容性最佳实践 北京场 2018/8/17 主办单位:
2. 高兼容性的一站式移动应用安全解 决方案 刘敏 360天御高级安全研究员 2
3. 刘敏 360天御技术负责人,高级安全研究 员,毕业于北京邮电大学,专注于 Android移动安全研究领域四年,对 安全加固技术有深入研究,主持研发 的Dex VMP保护方案、So保护技术等, 都为开发者的应用安全性、稳定性保 驾护航。
4. 目录 1 360天御介绍 contents 2 加固原理介绍 3 加固技术演进 4 高兼容性技术方案 4
5. 360天御 - 移动应用安全技术服务  为开发者提供免费安全,免费服务,维护移动端绿色环境  作为第一大免费加固服务提供商,免费加固服务累计超过700万次 技术服务 咨询服务 开发阶段 测试阶段 发布阶段 上线阶段 安全开发 安全开发 安全评估 安全加固 安全加固 安全追踪 开发保 评估保 360加固保 安全键盘SDK 界面防劫持SDK 通信协议加密SDK 防录屏SDK 秘钥白盒 终端环境检SDK 安全评估平台 人工漏洞风险评 估 渗透测试服务 Android/iOS加固 定制化VMP保护 SDK加固 安全开发咨询 SDK使用咨询 安全扫描报告 漏洞修复咨询 7×24H咨询 安卓新版适配 360手游保 防破解 防外挂SDK 变现保 崩溃日志 应用升级 应用热修复 盗版检测 数据分析服务 运营消息服务
6. Android P适配速度介绍  作为最大的免费加固产品,加固保,手游保最快适配Android各新版  和客户分享适配经验,提供技术咨询服务  Aug.8 首家适配Android P 最终版
7. 加固原理介绍 • 加固并不神秘,他是对apk中重要文件进行加密处理,避免反编译的过程 加固前dex文件 加固后dex文件 apk 重要源文件 1. dex文件 2. so文件 3. 资源文件 加固处理技术 1. Dex加密 2. Dex vmp处理 3. 反调试注入 4. So加壳 5. 防内存截取 6. 防篡改 图3. 加固前后的so文件对 比 资源文件保 护后的资源 文件 加固的处理流程 加固前资源 文件 apk 生成文件 1. 加密dex文件 2. libjiagu.so 3. 加密so文件 4. 受保护资源文件 图2. 加固前后的dex文件对 比 加固前so文件 So保护后的so文件
8. 加固技术中兼容性容易出现问题的原因 • Android版本的改进目标是提升Android系统效率和易用性, 同时带来了加固技术的兼容性问题 apk开始运行 1. 运行加固壳 application类 2. 内存加载释放apk 原 始dex文件 1. 内存加载释放apk 原 始so文件 2. 内存加载dex涉及和依赖dexClassLoader 的底层机制和结构 内存加载底层机制和结构在Android各版 本中变化较大 内存加载so需要对各种类型和平台的符号 进行重定位 加载so底层机制对应的内部数据结构在 Android各版本中变化比较大 原始dex文件以虚拟 化方式执行 否 1. 程序结束? 是 程序结束 加固后app运行流程图 2. 虚拟执行引擎,先将原dex字节码转换为自 定义字节码,然后在原安卓虚拟机上重新 解释执行自定义字节码 因为Android个版本的虚拟机的变化,需 要适配个Android版本
9. 高兼容性技术方案保证适配Android P • 加固保的高兼容性和高稳定性经验: • 使用公有API,避免使用私有API • 避免对汇编代码,虚拟机函数结构等信息做修改 • 避免使用拦截(Hook)技术,降低对源程序运行的影响 apk开始运行 运行加固壳application类 内存加载释放apk 原始dex文件 内存加载释放apk 原始so文件 原始dex文件以虚拟化方式执 行 加固保采用了Android P建议的内存加载API InMemoryDexClassLoader 1. 优点:兼容性强;使用方便。 2. 缺点:在可接受的范围内,会稍微影响启动时 间 so保护不依赖系统Linker等内部结构,而是使用长 期积累开发的符号重定位系统 1. 优点:兼容性强; 2. 缺点:需要长期、大规模app、多种手机系统 经验积累 否 程序结束? 是 程序结束 加固后app运行流程 dex vmp的专利技术,采用自研的方法,实现过程未 依赖任何私有函数和属性 1. 优点:安全性强、兼容性强 2. 缺点:被虚拟化的函数,会有很少的性能损耗
10. 360天御Dex保护技术演进 • 代码混淆 • DexClassLoader动态加载 • 内存加载 • 函数抽取 • 节区乱序 • 数据动态抹除 • 运行前解密, 运行后加密 • DexVmp
11. 源码混淆-ProGuard 定义 ProGuard 是一个Java类文件收缩,优化,混淆和预校验器。 收缩步骤中,检测并删 除未使用的类,字段,方法和属性. 优化步骤分析和优化这些方法的字节码。混淆步骤 使用无意义的名称来重命名这些类,字段和方法。这些步骤,使代码库更小,更高效, 更难以反向编译工程。 • 优点 • 压缩:检测和移除封装应用中未使用的类、字段、方法和属性,包括自带代码库中的 未使用项。 • 优化:优化字节码,移除未使用的代码指令。 • 混淆:用短名称或者难以识别的乱码名称混淆其余的类、字段和方法,逆向难度增大。 缺点 • 混淆终究只是混淆,代码还是暴露的,针对防逆向的能力有限。 • 针对重打包插广告或者别的恶意内容的破解方式无效。
12. DexClassLoader动态加载 定义 DexClassLoader是一个加载.jar或.apk文件的类加载器,其中该文件是dex格式,其 可以用来执行Android应用程序之外的其他代码。 • 优点 • 由系统提供的加载外部代码的方式,兼容性好。 • 可以用来做热更新,插件化加载等许多其他功能。 缺点 • 被加载的文件必须释放到本地 • 保护力度很弱
13. 内存加载 定义 在内存当中直接加载dex,不需要把dex释放到本地文件系统,也不会在本地文件系统 生成对应的优化后的文件,有多种实现方式。比如hook方式、直接使用系统函数方式、 自己构造结构方式等。 • 优点 • Dex文件内容全程都在内存当中,不会落地,安全性更高 缺点 • Dex虽然存在于内存当中,仍然可以被dump • 使用系统函数的方式很容易被拦截然后dump • 兼容性跟系统版本有很强的关联
14. 函数抽取 定义 • 加密Dex之前把Dex中的某些函数的函数体抽空,运行的时候动态回填。一般的方法 是hook系统加载类或者函数的函数,在类加载之前将函数体回填到Dex中或者将函数 体回填到对应的系统结构当中。 优点 • 函数体被抽空,即便是内存dump也无法dump出完整的Dex 缺点 • 需要hook系统函数,而且这些系统函数随着版本的变化而改变 • 兼容性差
15. 节区乱序 定义 Dex的结构中分为很多节区, 在内存中只要这些节区的应用关系不乱,可以做到让它 们不连续, 从而达到防暴搜内存dump Dex的目的。 • 优点 • Dex内容在内存中不连续,可以防 止内存dump 缺点 • 难以防止内存重构Dex • 高版本无法兼容
16. 数据动态抹除 定义 Dex被加载起来之后有很多内容已经被放到系统的结构中去了,所以很多信息是可以 删除的。 • 优点 缺点 • 可以防止内存dump • 高级版本的重构Dex难以防住 • 一定程度上防止重构Dex的dump 方式 • 高版本无法兼容
17. 运行前解密, 运行后加密 定义 • 在函数的指令前插入一个解密的函数调用,在函数返回的地方插入一个加密的函数调 用,这样就能保证函数只在执行过程当中会明文存在于内存当中,其它任何时候都是 加密状态。 优点 • 可以防止内存dump • 能够有效防止内存重构 缺点 • 兼容性差 • 效率低 • 加密函数可以被hook住,然后可以继续使用内存重构方式dump
18. DexVmp 定义 • 将Dex中的一些方法变成native属性,然后在so中注册这些函数,使这些函数的执行 被接管。将这些函数的函数体中的所有指令转换成自定义虚拟机的指令格式。函数执 行的时候通过自定义虚拟机的解释引擎将转换过的指令解释执行,使该函数达到跟变 换前一样的效果。 优点 • 可以防止内存dump • 能够防止内存重构 • 可自定义函数进行保护,更灵活 • 兼容性高 • 不受系统版本升级影响 缺点 • 执行效率会有所下降
19. 一些其他手段 • Dex中插入不会使用的无效类、无效方法体 • Dex中插入无效偏移,比如插入一个不会使用的类,类中的annotationOff偏移设置一 个无效值 • 正常函数体中插入无效指令 • Axml中设置无效id • … 使逆向工具崩溃
20. 360天御so保护技术演进 • 将so的text节进行加密,然后插入解密函数到so构造函数中 • upx加壳 • 变种upx加壳 • ollvm(控制流平坦、指令替换、虚假控制流等) • 代码抽取 • 自定义linker • sovmp
21. 360天御兼容性适配举例 项目 跨平台支持X86系统 背景 展讯和Intel合作了X86平台,为了兼容该平台,需要在加固时,加入一个大小 为200K的So文件 其他厂商 解决方案 天御 解决方案 加固时,自动加入支持x86平台的So,开发者不可勾选 • 选择权交予开发者 • 双赢合作 开发者可以自主选择是否加入X86的So x86平台也得到了更好的兼容性 • 多方协调,提出通过系统底层适配的方案,不需要额外增 加x86 So,也可以兼容X86平台
22. 崩溃日志SDK 兼容性强, 更省电 • 崩溃日志SDK获取Java层和Native层的异常 • Java异常处理,使用Android P提供的系统处理机制,兼容性高 • Native异常处理,不额外增加进程,降低电池耗电,适合Android P的省电理念。 程序开始 1. 注册native异常 处理器 注册java异常 处理器 否 程序运行 2. 发生崩溃? Java崩溃 执行 Java异常处理器 Native崩溃 • 业界常用ptrace来获得崩溃进程 的函数栈等信息,会使原应用进 程数翻倍。 • 加固保方式,不依赖原应用进程 数,不额外增加进程,极大减少 内存占用和耗电量 Java异常处理采用系统标准处理机制, 替换系统默认异常处理器; Native崩溃 执行 Native异常处理器 信息收集上报 程序结束 图4. 加固后app运行流程图
23. 通讯协议加密SDK兼容性强, 更安全 • 直接调用系统API,可能出现的安全隐患: • 容易被代码拦截,网上有很多成熟的破解方案 • 在对直接调用系统API的防御方法中,兼容性可能出现问题: • 需要检测的代码拦截点过多,需要适配各种通信库(OkHttp等) • 我们方法兼容性和安全性兼顾 • 1. native方式实现 • 2. 不依赖系统API,提高安全性 • 3. 实现标准tls和http协议,兼容性较高 https会话 白盒秘钥 防数据窃取 server app 证书锁定 防中间人攻击 图5. 通信协议SDK运行流程图
24. 天御兼容性测试方案   加固保完美的兼容性测试方案保障兼容性崩溃少于0.02% 加固保的自动化测试系统每日24小时自动进行兼容性和性能测试 •自动化生成测试用例生成 •自动挑选app •自动挑选android 版本 •自动挑选新机型或者市场占比比较大机型 •自动设置app的操作脚本 •选择有热门SDK的应用 •加固保免费提供线上崩溃日志监控 •每日监控崩溃状况 •Abtest版本切换保证线上正式版本稳定性 •分析每个崩溃问题 •和手机厂商共同分析崩溃和系统问题 图6. Android各系统版本占比图
25. 开发者常见的安全坑 客户端 通讯端 • 只完成标准版加固,没有对重点So文 • 重点通信过程没有使用https协议 件、资源文件等加密 • 没有对通信协议进行重点保护 • Dex VMP没有对关键函数/类进行保护 • 客户端关键秘钥没有做重点保护 • 只在部分渠道使用加固方案 • Android/iOS使用相同的通信协议 • 只有低版本只用加固方案
26. THANKS FOR YOUR LISTENING