DevSecOps实战
上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