如何进行安全设计评审(转发)

× 文章目录
  1. 1. 如何进行安全设计评审
  2. 2. Resources

转发自 https://github.com/mylamour/blog/issues/41

如何进行安全设计评审

记录一次安全设计评审的过程,当然这也是我第一次进行安全评审。因此做一个总结。安全设计评审应该是SDL落地安全人员参与过程中首当其冲的地方。仅指安全人员自身的功用。如果按照SDL流程来讲,最前期应该是进行安全培训。我们可以看两个微软SDL官方给出的流程图。

image

image

那么在安全设计评审这一阶段,应该怎么去做。我们可以先看下唯品会的SDL中在落地安全设计这一块怎么做的。

image

就我自身而言。是按照以下这个流程进行的。

看着一大堆乱七八糟,自上而下的流程,但是做起来其实很快的。此处默认安全人员熟悉各种基本的开发过程中的安全规范以及一些Checklist(必须要了解公司开发语言对应的安全开发规范),举例: web安全开发规范,Python安全编码规范,Flask安全, Django安全,常用的安全配置,面临哪些攻击点等等。
ps: 明确逻辑是非常重要的,可以说最为重要,如果连逻辑都不明白,谈什么设计评审。

一些比较基础的:

  • HTTPS Everywhere
  • Bcypt 存储Hash
  • OTP
  • 频率限制
  • 盐不要硬编码
  • secret 和 auth-token 不要硬编码
  • 服务器间调用的api不要在app出现
  • CSP, CSRF, HSTS, X-FRAME-OPTIONS, X-XSS-PROTECTION
  • 过滤输入
    等等等….

下面以C2C平台交易部分为例进行说明,可以简单的想一下,在智联买一张火车票,打开了支付宝进行支付。:
image

然后,你知道数字签名当然是很基础的部分了。那么接下来,你就要细化支付流程过程中出现哪些操作,针对这些操作需要做什么样的防护措施。下图是针对用户商户支付方之间的流程:

image

针对每个输入点,自身可控的输入输出的地方,进行过滤,校验等操作。

所以那么问题来了,如果只单单是用户和支付方之间的呢?
image

你也可以思考一下如何进行。

并且在OWASP应用安全设计中,详细指出了其他一些问题(中文版 Version 1.0 5):

  • 数据流:

    • 用户输入是否被直接用于引用业务逻辑的类或函数?

    • 是否有一个数据绑定缺陷?

    • 是否暴露任何后门参数来调用业务逻辑?

    • 应用程序的执行流程是否正确?

  • 身份验证和访问控制:

    • 是否对所有文件实现访问控制?

    • 是否安全地处理会话?

    • 是否存在单点登录?单点登录是否留下后门?

  • 已有或内置的安全控制:

    • 在现有任意安全控制中的弱点;

    • 安全控制的部署是否正确?

  • 架构:

    • 对所有的输入是否有验证?

    • 到外部服务器的连接是安全的吗?

  • 配置或代码文件和数据存储:

    • 配置文件中是否含有敏感数据?

    • 是否支持任何不安全的数据源?

下图(来自OWASP官方文档)详列上述条目以及其他需要检查的地方。
image
image

但是其实并不需要按照上述所有清单做自检,或者说是当你和开发团队在讨论的过程中不需要涉及全部的checklist,可能只需要在架构上,设计上进行检验,以及身份验证和数据检验上。当然,都是需要根据自己的业务场景去实现,因地制宜。

Resources