上QQ阅读APP看书,第一时间看更新
3.1 安全意识和能力提升
研发过程中的安全教育本质上就是两件事:增强安全意识和提升安全能力。没有安全意识就不会觉得安全是重要的,心态上已经有风险。而只有安全意识没有安全能力可能最终效果还是不好,对于一些常见的安全问题如果你不知道或没有了解,即使把代码放到眼前可能还是不知道。安全意识和安全能力在安全教育中缺一不可。
3.1.1 安全意识
系统设计和编码过程中的安全意识主要包括十大设计原则,以CISSP相关资料的统计来看,90%的问题可以借由这些原则来避免。
- 简单易懂。使系统设计保持简单。通常来说,越复杂的设计越容易出错,也越难以审查和评估。
- 最小特权。只授予执行操作所需的最少访问权,并且对于该访问权只允许使用所需的最少时间。
- 故障安全化。系统故障几乎不可避免,应确保在系统发生故障时,能够以安全的方式处理业务逻辑。比如强制报错或自动关闭,这好过于使系统处于非预期状态。
- 保护最薄弱环节。管理学中的“木桶原理”适用于安全风险管理,系统的安全程度取决于最脆弱的环节,因为这部分可能最易受到攻击影响。
- 提供纵深防御。采取多层次的一系列防御措施,以便在一层防御不能发现或阻断风险时,另一层防御将“抓住它”。
- 隔离原则。类似于大型舰船都会在内部分为很多船舱,每个船舱都独立且密封。这样当发生风险或攻击时,一个船舱被破坏不会导致整个舰船沉没,提升了整体的安全性。但需要小心的是,这个措施必须适度,因为分割过多之后整个系统将难以管理。
- 总体调节。需要关注全流程的安全性而不单单是某个点。
- 默认不信任。无论是系统外部还是内部,都有可能存在攻击者,所以良好的系统设计需要默认不信任。
- 保护隐私。一些法律法规明确禁止使用的数据就不要采集,需要保护的客户隐私信息必须经过正确的安全处理,包括脱敏、加密、加密Hash等。
- 公开设计。千万不要假设“藏起来的”设计就是安全的。历史上的DVD解密算法就是一个极好的例证。真正安全的设计,比如大家经常使用的标准加解密算法,公开了所有的数据原理、算法和代码实现,并且经受了无数人不停的攻击尝试却依然安全。这种才是安全的设计。
3.1.2 安全能力
安全能力的内容主要包括以下几个方向。
1. 常见Web安全漏洞原理与防御(也可参考OWASP[4])
- SQL注入漏洞
- XSS漏洞
- CSRF漏洞
- 目录穿越&任意文件读取
- 命令注入漏洞
- XXE漏洞
- 上传漏洞
- SSRF漏洞
- 任意URL跳转
- Clickjacking
- 逻辑漏洞
2. 常见App安全漏洞原理与防御
(1)Android
- Web组件远程代码执行漏洞
- AppKey信息泄露漏洞
- 目录遍历漏洞
- Intent协议解析越权漏洞
- 应用克隆漏洞
- Fragment框架层注入漏洞
- Scheme SQL注入漏洞
- 后门SDK
- Content Provider组件本地SQL注入漏洞
- Content Provider组件数据泄露漏洞
- 私有目录写漏洞
- 不安全随机数算法
- Manifest不安全属性配置
- 强制类型转换本地拒绝服务漏洞
- 弱加解密算法漏洞
- 系统组件本地拒绝服务漏洞
- 密钥硬编码漏洞
- Activity组件暴露风险
- Service组件暴露风险
- BroadcastReceiver组件暴露风险
- ContentProvider组件暴露风险
- 自定义权限滥用风险
- 私有文件泄露风险
- Intent组件数据泄露风险
- TCP/UDP开放端口风险
- 目标API低版本风险
(2)iOS
- XCodeGhost后门
- iBackDoor后门
- AFNetworking中间人漏洞
- 后门/恶意SDK包
- AppKey信息泄露漏洞
- 密钥硬编码漏洞
- 弱加解密算法漏洞
- URI Scheme风险
- 不安全随机数算法
3. 常见二进制安全漏洞原理与防御
- 栈溢出漏洞
- 堆溢出漏洞
- 整数溢出漏洞
- 双重释放漏洞
- 释放后重引用漏洞
- 数组越界访问漏洞
- 类型混淆漏洞
- 条件竞争漏洞
- 格式化字符串漏洞
3.1.3 隐私合规
除了之前安全能力所提到的敏感数据的处理以外,另一个常常被忽视的领域是安全隐私合规类。最近两年国家监管机构也在重点整治移动端App隐私合规问题,该问题也需要非常关注,否则可能会导致应用被下架处理。App常见隐私合规行为如下:
- 敏感权限声明
- 使用接听拨打电话行为
- 使用接收发送短信行为
- 使用摄像头行为
- 使用麦克风行为
- 获取地理位置信息
- 获取通讯录信息
- 获取通话记录信息
- 获取设备信息
- 获取UDID设备标识
- 获取网络信息
- HTTP明文传输
- 权限缺失可用性问题
- 获取设备已安装应用信息
- 使用不正常/恶意的SDK