文章前言
众多频发的网络安全事件表明当下很多的安全问题都是由于产品自身的代码业务逻辑判断不严谨、输入校验不严格、身份校验缺失、异常处理不合理、访问控制缺失以及不安全的配置等众多的因素引起的,而导致这样的安全问题发生的根本原因是由于在软件开发生命周期中缺乏对业务安全问题的考虑以及缺少对项目流程的安全控制,因此需要一个安全设计的最佳实践来指导软件项目的安全落地,所以SDL安全设计checklist应运而生
核心原则
微软的SDL提出了若干核心的安全设计原则:
-
Basic Privacy:基本隐私
-
Secure Defaults:默认安全
-
Threat Modeling:威胁建模
-
Defense in Depth:纵深防御
-
Least Privilege:权限最小化
-
Attack Surface Reduction:攻击面最小化
基本隐私
用户在使用软件时无可避免的会出现个人信息被收集、使用甚至分发的情况,而负责收集用户个人信息的企业则有责任和义务建立对用户个人信息的进行保护的安全措施利抵御外部/内部攻击,确保用户基本隐私的安全性
隐私安全是建立可信任应用程序的关键因素,在软件设计时考虑用户基本隐私的必要性及意义主要有以下几点:
-
防止堵塞部署
-
增加客户的信赖
-
履行法律规定和义务(隐私合规)
对于特殊软件或者全球性的产品,设计人员需要明确软件的行为及针对人群,尤其是要考虑当地国家的法律法规,例如:美国儿童网路隐私保护法COPPA(Children\\’s Online Privacy Protection Act)等,企业在开发产品、服务时有必要制定明确的隐私准则,对获取、记录、使用用户隐私的相关产品需要有明确的要求和指导建议,同时个人信息的收集应只收集程序必须用到的隐私数据,同时需要明确告知用户并征得用户同意,对于用户隐私数据例如:密码、口令等均需要加密存储,最低要求是SHA256+SALT,对于更高要求的则使用PBKDF2算法加密存储
默认安全
默认安全配置在客户熟悉安全配置选项之前不仅有利于更好的帮助客户掌握安全配置经验,同时也可以确保应用程序初始状态下处于较安全状态,客户可以根据实际使用情况决定应用程序安全与隐私的等级水平是否降低,例如:
-
Win 10操作系统默认启用安全防护软件Windows Defender,用户可选择关闭
-
Win 7之后的操作系统中,DEP(数据执行保护)默认开启,用户可设置选项改变DEP的状态
威胁建模
威胁建模是一种分析应用程序威胁的过程和方法,这里的威胁是指恶意用户可能会试图利用各种手段来破坏系统,而我们常说的漏洞则是一个特定的可以被利用的威胁,例如:缓冲区溢出、SQL注入等
威胁建模作为SDL设计阶段的一部分安全活动,它允许安全设计人员在识别潜在安全问题的同时实施相应缓解措施,在设计阶段把潜在的威胁发现有助于威胁的全面和更有效的解决,同时也有助于降低开发和后期维护的成本,威胁建模的一般流程如下:
-
通过和系统架构师及设计人员沟通了解设计详情
-
使用威胁建模方法分析当前设计潜在的安全问题
-
通过分析提出安全建议及对针对潜在威胁的缓解措施
-
对安全设计进行验证并对整个设计方案进行回顾并再次确认
纵深防御
纵深防御也是设计安全方案时的重要指导思想,纵深防御包含两层含义,首先要在各个不同层面、不同方面实施安全方案以避免出现疏漏,不同安全方案之间需要相互配合构成一个整体,其次要在正确的地方做正确的事情,即在解决根本问题的地方实施针对性的安全方案,纵深防御并不是同一个安全方案要做两遍或多遍,而是要从不同的层面、不同的角度对系统做出整体的解决方案,例如:
-
针对XSS的防护除了要对用户输入的特殊符号进行过滤,还要区分是否是富文本进而进行相应编码操作,在输入时过滤的同时在输出时也进行过滤操作
-
针对XSS的防护即使做了十足的过滤、编码等安全防护,Web站点也可以对Cookie启用HTTP-Only属性,确保即使发生XSS攻击也可以阻止通过脚本访问Cookie的操作
权限最小化
如果一个应用程序或网站被攻击、破坏,权限最小化机制能够有效的将潜在损害最小化,常见的权限最小化实践如下:
-
普通管理员/系统管理员等角色管理
-
进程/服务以所需最小用户权限运行
-
文件只读权限/文件访问权限等访问控制
在进行软件设计时安全设计人员可以评估应用程序的行为及功能所需的最低限度权限及访问级别,从而合理分配相应的权限,如果程序特定情况必须要较高级别的权限也可以考虑特权赋予及释放的机制,即便程序遭到攻击也可以将损失降到最低,例如:
-
最新版本Office程序打开不可信来源的文档时默认是不可编辑的,同时也是默认不可执行代码的,即使存在缓冲区溢出漏洞也不会执行shellcode等恶意代码
-
Windows系统中网络进程、本地服务、用户进程权限都较低且互相独立,分别为NETWORK SERVICE、LOCAL SERVICE、USER权限,只有核心的重要进程使用SYSTEM权限
攻击面最小化
攻击面是指任何能被用户或者其它程序所访问到的应用程序部分,这些暴露给用户的地方往往也是最可能被恶意攻击者攻击的地方,而攻击面最小化即是指尽量减少暴露恶意用户可能发现并试图利用的攻击面数量
软件产品的受攻击面是一个混合体,不仅包括代码、接口、服务,也包括对所有用户提供服务的协议,尤其是那些未被验证或者远程的用户都可以访问到的协议,安全人员在攻击面最小化时首先要对攻击面进行分析,攻击面分析就是枚举所有访问入库、接口、协议以及可执行代码的过程,从高层次来说攻击面分析着重于:
-
降低默认执行的代码量
-
降低代码执行所需权限
-
限制可访问到代码的人员范围
-
限定可访问到代码的人员身份
常见的攻击面分析技巧如下表:
Higher Attack Surface | Lower Attack Surface |
On by default | Off by default |
Open socket | Close socket |
UDP | TCP |
Anonymous access | Authenticated user access |
Constantly on | On as neede |
Internet accessible | Local subnet access |
攻击面最小化在微软的应用实践示例如下:
Windows | RPC需要认证、防火墙默认打开 |
IIS 6.0、IIS 7.0 | 使用Network service权限运行,默认关闭 |
Sql Server 2005/2008 | xp__cmdshell 存储过程默认关闭,默认不开放远程链接 |
VS 2005/2008 | Web Server和SQL Server默认仅本地访问 |
安全实践
下面是美的金融科技SDL安全设计发布的\\”金融科技SDL安全设计Checklist v1.0\\”,内容涵盖了输入验证、输出编码、身份认证、异常处理、会话管理、访问控制、接口调用、权限控制、敏感信息、运行环境、WEB安全防护:
文末小结
安全设计的目的是在程序研发之初就通过威胁建模等方式发现潜在的安全问题并引入安全功能从而规避安全风险并为安全提供有力保障,由此可见安全设计是随着产品业务的变动而变动的(例如:产品线变化、新增功能等)而并非一成不变,上面美的的安全设计CheckList很好的提炼了一些通用的安全设计很是值得借鉴
原创文章,作者:七芒星实验室,如若转载,请注明出处:https://www.sudun.com/ask/34285.html