工作中的安全风险评估
参考链接:
https://zhuanlan.zhihu.com/p/22369557
https://www.secrss.com/articles/3298
前言
风险评估的目的是:
- 识别系统面临的威胁
- 判断这种威胁转变成现实后可能带来的影响
- 判断这种转变的可能性或难易度
- 常见的风险评估步骤:
资产识别/系统分析 > 威胁分析 > 识别风险/安全测试 > 消减措施响应
1.资产识别/系统分析
- 资产识别是指识别出系统中的关键资产,也就是回答“需要保护什么?”这个问题。一般来说,一个系统的关键资产是这个系统的业务和数据,包括核心业务组件、用户的数据、用于鉴权和认证的密码、密钥等。
- 系统分析是进行威胁分析的前提,只有充分了解被评估系统的功能、结构、业务流等信息后,威胁分析才有依据。对被分析系统有一个高层次的认识,之后通过多个维度对系统进行分解,最后通过业务流将各分解后的组件串联起来,实现“整体-局部-整体”的分析过程。需要注意的是,在进行系统分析前,必须根据项目的目的和限制条件对系统分析进行约束,否则,系统分析是分析不完的。
- 如果可以的话,建议是画出总体的系统架构图。一般来说可以做以下的分析:
- 系统的组网情况(处在什么位置/周边系统等)
- 软件架构分析(OS/DB/PLAFORM/WEB后台等)
- 内/外部结构分析(维护接口、业务接口、调试接口等)
- 典型业务流程/场景分析(业务场景1/业务场景2/...)
- 管理/维护场景分析(近端维护场景/远程维护场景/...)
- 关键事件分析(登录/鉴权/认证/数据读写/...)
2.威胁分析
- 什么是威胁,可以从安全三元组来解释:即机密性、完整性、可用性,一般来说,还需要还再加上一个抗抵赖性。
- 威胁分类:
- 对机密性的威胁
通过嗅探、暴力破解等手段窃取用户身份,认证信息,仿冒合法用户访问系统。 攻击者非法获得系统中保存的或传输过程中的机密数据,如用户认证信息、用户 - 对完整性的威胁
通过修改发送给系统的数据或从系统收到的数据,影响系统业务逻辑,比如绕过认证机制、欺骗计费系统、执行越权操作等 - 对可用性的威胁
通过Flood、畸形报文等攻击等手段造成系统不能提供正常的服务 - 对抗抵赖性的威胁
通过修改系统访问日志、审计日志来隐藏攻击痕迹、修改业务行为记录
- 对机密性的威胁
- 威胁分析就是识别威胁,总结成一个句子就是:
攻击者(威胁源),利用XXX漏洞(漏洞),通过XXX(攻击面/攻击手段)方式,对XXX(关键资产)产生了XXX威胁(后果) - 威胁分析的套路很多,只要识别出威胁就可以,业界也有一些比较成熟的建模,比如X.805分层分析、攻击树模型、微软的STRIDE威胁建模等
3.STRIDE威胁建模
把威胁分成6个维度来考擦,如下:
威胁 | 定义 | 对应的安全属性 |
---|---|---|
spoofing | 冒充 | 认证 |
tampering | 修改数据或代码 | 完整性 |
reputation | 否认 | 不可抵赖性 |
information disclosure | 信息泄露 | 机密性 |
denial of service | 拒绝服务 | 可用性 |
elevation of privilege | 未授权访问 | 授权 |
-- spoofing(仿冒),举例:伪基站、外挂
-- tampering(篡改),举例:修改定位信息,任意地点考勤打卡
-- reputation(抵赖),指保留必要的审计日志,攻击事件后溯源
-- elevation of privilege(权限提升),例如垂直越权
-
STRIDE建模的第一步就是分解业务场景,绘制业务场景的数据流图
具体可以使用microsoft threat modeling tool绘制
核心元素包含:进程、数据存储、数据流、外部实体
-
绘制完数据流图以后,就是对数据流中的每个元素可能面临的威胁逐个进行分析,但不是每个元素的STRIDE六类威胁都要去分析
-
输出威胁列表和消减方案
组件 web程序用户身份验证过程
威胁描述 攻击者通过监视网络获取身份验证凭据
威胁类型 I
攻击方法 利用网络监视软件
消减方案 利用SSL提供加密通道
危险评级
这里叫“消减方案”而不是“消除方案”是因为在实际做STRIDE威胁分析时,我们发现的每个威胁,由于各种实际原因不一定能肯定根除。
根据威胁造成的危险对其进行评价。这样就能够首先解决危险最大的威胁,然后再解决其他的威胁。实际上,解决所有找出的威胁也许在经济上是不可行的,可以进行决策,忽略掉一些 -
DREAD威胁评级模型
DREAD分别是威胁评级的6个指标的英文首字母。
潜在损失(Damage Potential) 如果缺陷被利用,损失有多大?
重现性(Reproducibility) 重复产生攻击的难度有多大?
可利用性(Exploitability) 发起攻击的难度有多大?
受影响的用户(Affected users) 用粗略的百分数表示,有多少用户受到影响?
可发现性(Discoverability) 缺陷容易发现吗?
附:十大安全设计原则
原则1 最小攻击面
原则2 默认安全
原则3 权限最小化
原则4 纵深防御
原则5 失败安全
原则6 不信任第三方系统
原则7 业务隔离
原则8 公开设计
原则9 简化系统设计
原则10 使用白名单