笔者在终端安全专题前面的文章中介绍了移动终端硬件安全和操作系统安全,本文主要介绍移动终端应用安全。在本文最前面,笔者想先解答一位朋友的疑问,为什么需要费心打造一个完整的面面俱到的安全体系?
1 移动终端安全的重要性
移动终端尤其手机终端的安全重要性可以归为两大类:对个人的安全和对企业的安全。
1)对个人的安全
1.1)财产安全
- 移动支付:手机作为支付工具,涉及个人银行账户、支付密码、金融交易等财产安全。
- 电子钱包和虚拟货币:涉及数字资产的安全保护。
1.2)隐私数据安全
- 个人数据:短信、通话记录、照片、视频、地理位置等。
- 社交媒体:个人社交活动、联系人信息、聊天记录等。
- 应用数据:包括健康数据、日历、记事本等个人隐私数据。
- 用户行为分析:防止基于用户行为数据的分析结果被滥用或泄露;防止广告商通过追踪用户行为侵犯隐私。
1.3)身份认证安全
- eID和生物信息:电子身份证、指纹、面部识别、虹膜识别等生物信息。
- 多因素认证:通过结合密码、生物特征和其他认证手段防止身份盗用。
2)对企业的安全
2.1)业务数据安全
- 企业应用数据:移动办公应用中的敏感业务数据。
- 客户信息:包括客户的个人信息和交易记录等。
2.2)企业信息安全
- 企业内部通信:通过邮件、即时通讯工具进行的企业内部信息交流。
- 战略信息:企业战略、研发计划等敏感信息的保护。
3)安全的木桶效应
安全的木桶效应是指在一个系统中,整体安全水平往往取决于最薄弱的环节,这个概念来源于“木桶理论”即一个木桶的盛水能力取决于最短的那块木板。在安全领域,这意味着即使系统的其他部分非常安全,但只要存在一个薄弱环节,攻击者就可以利用这个漏洞破坏整个系统的安全性。
3.1)系统最弱环节决定整体安全
系统的安全性由最薄弱的部分决定,如果某个组件的安全性较低,那么攻击者可以利用这个漏洞突破系统的防线。
3.2)综合考虑所有安全因素
构建安全系统时,需要综合考虑所有可能的安全威胁,不能忽视任何一个环节。
3.3)持续改进与评估
安全威胁和攻击手段不断演变,需要定期对系统进行评估和改进,确保每个环节的安全性达到标准。
2 应用安全
移动终端针对应用程序的安全涵盖了多个方面,包括应用程序的开发、安全性测试、分发、运行环境、权限管理、数据保护等。此外应用程序本身是针对业务场景安全应用话,还需要重点进行业务层安全设计,例如手机钱包应用中:公交卡应用、银行卡移动支付、数字车钥匙解锁控车、家门钥匙小区门禁解闭锁等场景下安全交易技术。
1)应用开发阶段的安全技术
- 安全编码规范:在应用开发过程中,开发人员应遵循安全编码规范,避免常见的安全漏洞,如SQL注入、缓冲区溢出、跨站脚本(XSS)攻击等。
- 静态代码分析:使用静态代码分析工具对代码进行审查,检测潜在的安全漏洞和不良编程实践。
2)应用安全测试技术
- 动态应用安全测试(DAST):通过模拟攻击者的行为,对运行中的应用进行安全测试,发现和修复潜在的安全漏洞。
- 渗透测试:专业的安全测试人员通过渗透测试评估应用的安全性,发现可能被攻击者利用的漏洞。
- 模糊测试:通过向应用程序输入随机数据,检测应用的异常行为和潜在的安全漏洞。
3)应用分发和安装阶段的安全技术
- 数字签名:开发者对应用程序进行数字签名,确保应用在分发过程中未被篡改。用户在安装应用时可以验证签名的有效性。
- 应用商店审核:应用在发布到应用商店之前需要经过严格的安全审核,确保没有恶意代码或安全漏洞。
- 安全依赖管理:确保应用程序中使用的第三方库和依赖项是最新的,并且没有已知的安全漏洞;定期审计应用程序的依赖项,确保没有使用存在安全问题的第三方库。
4)应用运行环境的安全技术
- 沙箱技术:移动终端操作系统使用沙箱技术隔离应用程序,防止应用之间相互影响或访问系统资源。
- 权限管理:应用只能在用户授权的情况下访问特定的系统资源和数据。用户可以在安装时或运行过程中授予或撤销应用的权限。
- 应用容器化:通过容器技术将应用隔离在独立的环境中,进一步增强安全性。
5)数据保护技术
- 数据加密:对应用程序的数据进行加密,保护数据在存储和传输过程中的安全,包括对数据库、文件、网络通信等的加密。
- 安全存储:利用移动操作系统提供的安全存储机制(如iOS的Keychain和Android的Keystore)存储敏感数据,如密码、密钥等。
- 安全通信:使用HTTPS、TLS等安全通信协议保护数据在网络传输中的安全,防止中间人攻击。
6)代码混淆和防反编译技术
- 代码混淆:通过混淆代码,使得逆向工程难度加大,防止攻击者分析和篡改应用程序代码。
- 反调试技术:在应用程序中加入反调试技术,检测并防止调试器对应用进行调试和分析。
7)运行时保护技术
- 行为监控:实时监控应用程序的行为,检测和阻止异常或恶意行为。
- 入侵检测和防御:在移动终端上部署入侵检测和防御系统,实时检测和响应潜在的安全威胁。
8)安全更新机制
- 自动更新:通过应用商店或开发者提供的更新渠道,及时为应用程序推送安全补丁和更新,修复已知的安全漏洞。
- 差分更新:使用差分更新技术,仅更新应用程序中有变动的部分,减少更新包的大小和更新时间。
3 业务层安全设计实例
1)公交卡业务安全设计
1.1)用户身份认证
- 多因素认证:结合密码和生物识别(如指纹、面部识别)进行用户身份验证,确保用户身份的唯一性和真实性。
- 动态口令:使用动态口令(如短信验证码、TOTP)作为额外的身份验证手段,增强安全性。
1.2)业务数据保护
- 数据加密:对公交卡数据进行加密存储确保数据的机密性,例如使用强加密算法AES保护用户的公交卡信息。
- 安全存储:利用手机操作系统提供的安全存储机制(如iOS的Keychain、Android的Keystore)存储加密密钥和其他敏感信息。
- 安全通信:所有与服务器的通信都使用HTTPS协议,并启用TLS(传输层安全协议)进行鉴权加密,防止中间人攻击。
1.3)安全交易处理
- 交易协议:需符合当地交通卡公司安全标准,执行与闸机安全认证交易支付。
- 双重确认:每次交易操作(如充值、支付)需要双重确认(如输入密码+短信验证码),防止误操作和恶意交易。
- 交易限额设置:用户可以设置每日交易限额,防止大额交易风险。
1.4)审计和监控
- 日志记录:记录所有关键操作的日志(如充值、支付、余额查询等),便于审计和追踪。
- 异常检测:实时监控用户行为,检测异常活动(如异常登录、频繁充值等),并触发安全警报。
- 反欺诈系统:利用大数据和人工智能技术实时分析交易行为,检测并预防欺诈行为。
2)数字钥匙业务安全设计
2.1)用户身份认证
- 多因素认证:结合密码和生物识别(如指纹、面部识别)进行用户身份验证,确保用户身份的唯一性和真实性。
- 动态口令:使用动态口令(如短信验证码、TOTP)作为额外的身份验证手段,增强安全性。
2.2)业务数据保护
- 数据加密:对数字钥匙证书、权限等数据进行加密存储确保数据的机密性。
- 安全存储:利用手机SE安全存储数字钥匙密钥和其他敏感信息。
- 安全通信:所有与服务器的通信都使用HTTPS协议,并启用TLS(传输层安全协议)进行鉴权加密,防止中间人攻击。
2.3)安全交易处理
- 交易协议:手机与汽车基于数字钥匙进行双向身份认证,协商会话密钥,加密具体的车控指令。需符合行业协议,例如CCC、ICCE、ICCOA数字钥匙标准。
- 双重确认:每次交易操作(如解锁、启动)需启用指纹或人脸认证,防止误操作恶意交易。
- 交易限额设置:用户可以设置离线情况下数字钥匙控车次数限额,防止遗失手机风险。
2.4)安全授权管理
- 权限分级管理:支持不同级别的授权(如一次性授权、时间段授权等),满足不同场景的数字钥匙分享需求。
- 撤销与追踪:用户可以随时撤销已授权的数字钥匙,并追踪钥匙的使用情况,确保安全性。
2.5)审计和监控
- 日志记录:记录所有关键操作的日志(如解锁、分享、注销等),便于审计和追踪。
- 异常检测:实时监控用户行为,检测异常活动(如异常登录、频繁解锁等),并触发安全警报。
- 反欺诈系统:利用大数据和人工智能技术实时分析交易行为,检测并预防欺诈行为。