移动应用程序是常见的攻击目标。敏感数据、支付、个人信息,一切都需要保护。本指南介绍了基本的移动安全实践。
为什么移动安全很重要
敏感数据
应用程序存储有价值的信息。
攻击不断增加
移动是一个日益被探索的载体。
监管
[LGPD0,合规需要保护。
声誉
泄密破坏了信任。
OWASP 移动前 10 名
M1:平台使用不当
不正确使用操作系统安全功能。
M2:不安全的数据存储
不安全位置的敏感数据。
M3:不安全的通信
传输无保护。
M4:不安全的身份验证
身份验证较弱或可绕过。
M5:加密不足
加密实施不当。
M6:不安全授权
访问控制失败。
M7:客户端代码质量
代码中的错误和漏洞。
M8:代码篡改
应用程序修改。
M9:逆向工程
可以分析应用程序。
M10:无关的功能
调试生产中的代码。
安全存储
钥匙串(iOS)
用于凭证和令牌。
密钥库(Android)
硬件支持的安全性。
加密的共享首选项
加密数据。
请勿使用
纯文本文件、日志、不带[加密1]的用户默认值。
安全通信
HTTPS
强制,永远。
证书固定
防止 MITM 攻击。
TLS 1.3
更安全的版本。
网络安全配置
Android:声明安全规则。
身份验证
强密码
复杂性要求。
###艺术硕士
多因素身份验证。
生物识别
面容 ID、触摸 ID、指纹。
会话管理
安全令牌,过期。
授权
最低权限
所需的最低访问权限。
服务器端
始终在服务器上验证。
基于角色
按角色授予权限。
加密
算法
AES-256、RSA-2048+。
###按键
没有硬编码。使用钥匙串/密钥库。
###盐腌
对于密码哈希。
IV 独特
对于[加密2]模式。
代码保护
混淆
使逆向工程变得困难。
ProGuard/R8(Android)
代码混淆。
防篡改
检测修改。
Root/越狱检测
识别受感染的设备。
API 安全
身份验证
基于令牌,[OAuth3 2.0。
速率限制
防止滥用。
输入验证
验证服务器上的所有内容。
输出编码
防止注射。
数据保护
休息时的日期
存储加密。
传输中的数据
HTTPS/TLS。
数据最小化
只收集必要的。
保留
不要保留超过您需要的数量。
安全测试
###先科
静态应用程序安全测试。
达斯特
动态测试。
渗透测试
道德黑客测试。
漏洞扫描
依赖失败。
工具
暴徒SF
移动安全框架。自动分析。
弗里达
动态仪器仪表。
打嗝套件
拦截交通。
OWASP ZAP
漏洞扫描器。
依赖关系
NPM/Gradle 审核
检查是否存在漏洞。
更新
使依赖项保持最新。
供应链
请小心您包含的内容。
iOS 特定
应用程序传输安全
强制使用 HTTPS。
钥匙串服务
安全储存。
数据保护
基于锁屏的保护。
Android 特定
安全网/游戏完整性
检查设备完整性。
网络安全配置
声明网络策略。
加密共享首选项
加密数据。
安全开发
###训练
经过安全培训的开发人员。
代码审查
重点关注安全性进行审查。
威胁建模
尽早识别风险。
安全冠军
团队中的代表。
合规性
LGPD
保护个人数据。
PCI DSS
对于付费应用程序。
健康保险流通与责任法案
对于健康应用程序(美国)。
常见错误
硬编码的秘密
源代码中的密钥。
日志过多
日志中的敏感数据。
仅在客户端验证
服务器必须验证。
###HTTP
未加密的通信。
结论
移动安全需要分层方法。保护数据、安全通信、正确验证并持续测试。安全性不是一个功能,而是一个要求。
##常见问题解答
1) 是否需要证书固定? 强烈推荐用于具有敏感数据的应用程序。
2) 混淆就足够了吗? 不,这是一层保护,而不是完整的保护。
3) 如何测试安全性? 自动化工具+手动笔测试。
4) 可以绕过根检测吗? 是的。作为一层使用,而不是唯一的保护。
5) HTTPS 解决了一切? 不,这是基本的。需要更多层。
另请阅读
- 【数据泄露防护:安全指南4
- [Cloudflare WAF:托管保护实际上会阻止什么,什么会通过55
- [应用程序身份验证:完整的安全性和用户体验指南6
- 【移动应用维护:持续操作指南7
- 【移动性能优化:完整指南8
- [TypeScript 应用程序:TypeScript 开发指南9