SDLC个人经验-安全设计
在做完安全需求分析之后要进入的就是设计阶段了,安全设计指的就是在软硬件产品设计过程中,充分考虑软硬件产品的安全性、消除一些不安全因素的设计。安全需求得以落地就需要对产品进行充分的设计,将所有潜在的威胁点都通过预先设计好的方案来削减或者规避。
安全设计考虑的点包含如下内容:身份认证、会话管理、日志审计、访问控制、安全配置、隐私保护、接口安全、防攻击、软件完整性、秘钥安全等,当中一个点在星球或者互联网上都能找到一些辅助材料,这些我就不再次重复了,我下面讲一些我认为需要关注的重点吧。
1. 安全架构
应用安全架构设计是根据系统架构设计叠加安全控制措施的设计方法论,当你在进行安全架构设计的时候需要先把这个系统本身的架构弄清楚:系统组件、开发语言、使用框架、第三方组件、开发框架、业务数据流向、功能视图、解决的最终问题是什么,形成安全架构设计方案。
2. 安全设计TOP10.
在进行安全设计落地的时候总是可以总结出公司在过去几年当中发生安全问题最多的风险点,基于这些风险点来进行安全设计,出具专项安全风险设计方案。比如常见的问题有SQL注入、xss漏洞、上传漏洞、明文存储、不安全的算法、越权、弱口令、配置错误等。正确的做法就可以根据这些问题进行整理归纳,出具专门的安全设计方案,帮助大家在实际开发过程中规避这些问题。做这种Top10的专项安全设计有比较好的效果,因为历史高速我们,教训总是一而再,再而三重复,一个公司的文化和习惯总是很难改的,所以这些方案形成的知识库对于安全知识的传递和沉淀有非常正面的影响。对于专项设计方案的基本格式要求我也简单列个提纲:a)问题描述。B)场景分析。C)过往公司典型案例分析。D)安全测试方法。E)方案防护方案(如果有多重将多种方案写进去)。
3. 安全框架的引入。
由于开发人员安全知识技能和水平参差不齐,加上规范和文档每份都几十上百页,相对来说比较快速有效的方式就是将安全框架引入到咱们产品开发框架当中来。实践证明:通过使用成熟的安全框架比开发人员自我实现安全特性或者黑名单等方式过滤更加高效靠谱。如果是基于spring开发的可以先把spring security框架引入进来,sping框架解决了一些身份认证、鉴权、会话管理、xss、csrf等功能,详细的安全特性可以在星球搜索spring security来实现,当然这只是解决了一部分的安全问题,我之前在ppt里面也提到了owasp提供了开源的esapi框架给大家使用,当然还有其他的安全框架(参考 PPT内容),大家需要根据自己实际的情况进行选用。
4. 安全设计checklist
我看了下我这边应用安全设计规范好几十页,app安全设计规范又是好几十页。连自己都不是很愿意将这些细则看完,有怎么可能奢望开发人员去一个字一个字的看呢,安全设计应该将所有的内容改造成checklist表单,而且进行分类方便使用者进行筛选:
A) 安全问题 Top 10
B) 必须类、建议类、竞争类
C) 身份认证、授权、会话、日志、秘钥、安全配置…….
D) 基础安全、等保三级、27001、个人信息保护、GDPR、PCI DSS……
5. 安全设计威胁及削减知识库
安全设计的目的是为了解决所有来自于有意或者无意的安全威胁,每一个公司都应该建立一个好的安全威胁知识库。安全不是解决的Top 10 问题就行了,攻防的不对等导致安全工作必须全面且完整,每次发现的安全问题都整理成对应的知识库,在通过日常的时间补齐相关短板。
安全设计的内容暂时告一段路,下周再讲讲安全开发相关的内容。