近十年,移动互联网的飞速发展,智能移动终端在人们学习、工作和生活中的普及率越来越高,手机终端的广大用户群体的良好体验正吸引着越来越多的开发及应用者参与到手机应用程序的开发和使用中来,但是部分免费开源的平台特性不仅给予了开发者更广阔的开发空间,也给使用者增加了许多安全隐患,即使有基于自主平台上开发的移动应用,也会遭到黑客攻击,存在一定的安全隐患。
相关数据显示,89%的热门应用存在仿冒,18个行业的Top10应用中98%的应用都存在漏洞。这些漏洞一旦被利用,将会给开发者和用户带来很大的影响。
在本文中,我们探讨Android应用程序开发过程中都有哪些安全开发要求。
程序保护
通过混淆、加密、签名、加壳、动态加载等技术为移动应用进行全面的安全加固,对抗代码注入、篡改、反编译、逆向工程等恶意行为,具备反篡改/盗版/二次打包能力。
基本要求
1、Dex加固,可对编译后的Dex进行加壳、类加载、类抽取、函数Native转换、指令VMP选择加固处理。
2、SO加固,可对导出函数加密,对SO文件中的字符串进行混淆或加密,对编译后的SO文件中代码段加密。
3、反调试,防止进程/线程附加,如果检测到被保护APK被附加则程序退出;抵抗进程注入,如果检测到被保护APK的内存空间非法访问则程序退出;对市面上常用的调试器进行检测,如果检测到调试器启动,被保护的APK程序自行退出。
4、签名校验,加固前与加固后,如果应用采用不同的签名,则程序启动后退出;如果修改加固后应用的任意资源文件,并使用非加固前的签名,则程序启动后退出;壳自身组件启用交叉自校验模式,如果自身组件遭受篡改,则程序启动后退出。
5、资源文件保护进行签名保护。
6、APP禁止运行在模拟器环境中。
7、反内存Dump,程序运行时内存空间需有安全保护机制,防止被保护SO、Dex等文件从内存中Dump出来。
增强要求
1、具有抗逆向分析、抗反汇编等安全性防护措施,防范攻击者对移动应用的调试、分析和篡改。
2、反内存Dump,程序运行时内存空间需有安全保护机制,防止被保护SO、Dex等文件从内存中Dump出来。
3、签名校验禁止被绕过,使用公钥算法验证APK包的完整性,私钥不存储。在验证时生成,并且私钥与程序代码完整性相关。
4、Dex加花保护。
5、需避免系统生成临时的完整Dex缓存文件。
6、自行开发的SO文件必须加壳保护。
7、SO文件应储存为私有格式(畸形SO)。
8、反调试与Dex壳进行相互校验,确保整个Dex壳和反调试的完整性,如果检测到被保护的APK中Dex壳和反调试部分被篡改,则被保护APK程序自行退出。
9、防止壳启动调试。
10、防ZjDroid插件内存,防止Dump Dex。
11、防内存篡改。
12、防系统核心库被HOOK(劫持)攻击。
代码保护
在程序开发过程中,进行安全编码,杜绝缺陷代码,避免编码过程引入安全漏洞。
基本要求
1、应对生产库源代码版本进行控制,保证当前系统始终为最新的稳定版本。
2、应确保提供软件设计的相关文档和使用指南,并由专人负责保管。
3、应确保对程序资源库的修改、更新、发布进行授权和批准。
4、应严格控制对生产版本源代码的访问。
5、在软件开发过程中,应同步完成相关文档手册的编写工作,保证相关资料的完整性和准确性。
6、进行异常处理。
7、禁止使用硬编码定义敏感内容。
8、File模式安全配置。
9、SharedPreference安全配置。
10、不得在代码注释中包含敏感信息,不得将用户的私钥或加密密钥嵌入客户端程序中。
11、数据库应使用存储过程或参数化查询,并严格定义数据库用户的角色和权限。防SQL注入,参数化查询,对输入进行类型和格式检查。
12、避免代码逻辑缺陷导致的跨界。
增强要求
1、确保APP插件调用第三方代码或库文件来源的可靠性,验证第三方接口或组件的合法性(确保来源是否可靠、是否有支持维护、是否不含后门等),并及时更新第三方库。
2、采用NDK开发核心模块。
3、应开发安全的接口,如通过避免语句的完全解释或采用参数化接口等方式实现。
4、应用程序必须能够处理不可预知的用户操作。
5、应进行代码审查,防范应用程序中不可信数据被解析为命令或查询语句等。
6、基于相关安全编码指南,避免通常会出现的编码漏洞,包括但不限于:无效输入、失效访问控制、失效的身份认证和会话管理、跨站脚本攻击、拒绝服务攻击、不安全存储。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!