如何进行安全设计评审

如何进行安全设计评审

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

 

如何进行安全设计评审

如何进行安全设计评审

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

如何进行安全设计评审

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

如何进行安全设计评审

看着一大堆乱七八糟,自上而下的流程,但是做起来其实很快的。此处默认安全人员熟悉各种基本的开发过程中的安全规范以及一些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平台交易部分为例进行说明,可以简单的想一下,在智联买一张火车票,打开了支付宝进行支付。:
如何进行安全设计评审

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

如何进行安全设计评审

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

所以那么问题来了,如果只单单是用户和支付方之间的呢?
如何进行安全设计评审

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

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

  • 数据流:
    • 用户输入是否被直接用于引用业务逻辑的类或函数?
    • 是否有一个数据绑定缺陷?
    • 是否暴露任何后门参数来调用业务逻辑?
    • 应用程序的执行流程是否正确?
  • 身份验证和访问控制:
    • 是否对所有文件实现访问控制?
    • 是否安全地处理会话?
    • 是否存在单点登录?单点登录是否留下后门?
  • 已有或内置的安全控制:
    • 在现有任意安全控制中的弱点;
    • 安全控制的部署是否正确?
  • 架构:
    • 对所有的输入是否有验证?
    • 到外部服务器的连接是安全的吗?
  • 配置或代码文件和数据存储:
    • 配置文件中是否含有敏感数据?
    • 是否支持任何不安全的数据源?

下图(来自OWASP官方文档)详列上述条目以及其他需要检查的地方。
如何进行安全设计评审
如何进行安全设计评审

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

Resources

发布者:常山赵子龙,转载请注明出处:https://www.qztxs.com/archives/science/technology/11429

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年5月28日 下午10:11
下一篇 2022年5月28日 下午10:12

相关推荐

  • MySQL事务已提交,数据却丢了(MySQL事务提交,数据丢失)

    有个水友提问: 老师,我们有一次MySQL崩溃,重启后发现有些已经提交的事务对数据的修改丢失了,不是说事务能保证ACID特性么,想问下什么情况下可能导致“事务已经提交,数据却丢失”呢?   这个问题有点复杂,得先从redo log说起。   为什么要有redo log? 事务提交后,必须将事务对数据页的修改刷(fsync)到磁盘上,才能保证事务的ACID特性...

    2022年5月10日
    4100
  • 不用缓存服务,还能怎么缓存数据?

    除了常见的redis/memcache等进程外缓存服务,还能怎么缓存数据? 缓存还有一种常见的玩法,进程内缓存。   什么是进程内缓存? 将一些数据缓存在站点,或者服务的进程内,这就是进程内缓存。   进程内缓存的实现载体,最简单的,可以是一个带锁的Map。又或者,可以使用第三方库,例如leveldb。   进程内缓存能存储啥? redis/memcache...

    2022年5月15日
    4600
  • MySQL缓冲池(buffer pool),终于懂了!!!(收藏)

    应用系统分层架构,为了加速数据访问,会把最常访问的数据,放在缓存(cache)里,避免每次都去访问数据库。   操作系统,会有缓冲池(buffer pool)机制,避免每次访问磁盘,以加速数据的访问。   MySQL作为一个存储系统,同样具有缓冲池(buffer pool)机制,以避免每次查询数据都进行磁盘IO。   今天,和大家聊一聊InnoDB的缓冲池。...

    2022年5月10日
    3100
  • Linux后门入侵检测工具使用

    0x00 描述 当我们的应用系统被入侵后,系统是否已被黑客上传webshell甚至植入木马后门程序。如果依靠人工排查,一是工作量大,二是需要一定程度的技术知识和业务知识才能判断什么是正常什么是异常。工作量大决定排查工作不可能由个别具有技术知识和业务知识的人来完成工作而需要其他人员参与,而如果这些没有“一定程度的技术知识和业务知识”的人员参与基本必然后导致大量...

    2022年6月2日
    9400
  • 究竟为啥总在凌晨上线,如何进行无损发布

    为什么很多互联网公司升级系统,选择在晚上上线? 美名其曰,晚上上线,对用户影响最小。   为什么会对用户产生影响? 很多人认为,系统升级往往需要重启,重启的过程中,正在访问的用户会访问失败。   例如,如果升级的是web-server: 如上图,重启ip1上的tomcat时,tomcat上或许有1000个http请求正在处理,这些请求就会失败。   又例如,...

    2022年5月15日
    4700

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信