编程笔记

你的软件系统安全吗

2024-08-21  本文已影响0人  老瓦在霸都

如果你的软件系统可以通过网络访问, 可以由多人操作, 可以访问或操作敏感数据, 或者可能暴露隐私, 等等, 请一定要保护你的系统.

那么你的软件系统安全吗?

一. 先问自己如下 4 个问题

1. What are we working on? 我们的系统在干啥?

例如电商系统:

2. What can go wrong? 哪一块可能出安全问题?

还是以电商系统为例:

安全威胁种类请见下图

threat

3. What are we going to do about it? 我们可能怎么来解决这些问题?

  1. 定义业务和系统范围

  2. 创建数据流图(DFD):
    制作一个数据流图,它展示了系统中数据流动的路径,包括输入、处理和输出过程。

3 识别实体和信任边界:
确定系统中的用户、数据、进程和其他实体,以及它们之间的信任关系。
例如 超级管理员, 管理员, 用户, 包括运维工程师, 卖家, 买家

  1. 应用 STRIDE 分类:
    根据 STRIDE 模型的六个分类,逐一检查每个组件和数据流,识别可能的威胁

  2. 评估威胁的可能性和影响:
    对每个已识别的威胁进行风险评估,考虑其可能性和对系统的潜在影响。

  3. 设计缓解措施:
    针对每个威胁设计缓解措施,这可能包括技术控制、流程改进或政策变更。

  4. 优先级排序:
    根据威胁的风险等级和业务影响,对缓解措施进行优先级排序。
    按照 bug 的分级 S1(block issue) , S2(critical), ... 为以下威胁和漏洞报 security bug

  5. 实施控制措施:
    实施选定的缓解措施,并确保它们不会对系统的其他部分产生负面影响。
    例如修复安全漏洞(bug),

  1. 验证和测试:
    验证控制措施是否有效,并进行必要的测试以确保它们按预期工作。
  1. 文档和沟通:
    记录整个威胁建模过程和结果,与团队成员和利益相关者沟通,确保透明度和理解。
  1. 监控和迭代:
    持续监控威胁环境的变化,并定期回顾和更新威胁模型。
    每个 release 前更新威胁模型

4. Did we do a good enough job? 我们有没有做好防护

例如:
传输层: 有无启用 HTTPS, TLS, DTLS 和 SRTP
应用层: 有无做好 3A , 防范威胁, 消除漏洞

二. 将可能的威胁进行分类

我们可能应用常见的 STRIDE 模型

Spoofing 欺骗

防止非法获取或者伪造帐号信息, 访问我们的系统

Tampering 篡改

防止篡改或损坏系统中的数据

Repudiation 否认

防止不承认对系统的攻击或者误用
管理员以及用户的关键操作要可追溯

Information Disclosure 信息泄露

Denial of Service 拒绝服务

防止非法的攻击导致服务不可用, 相应的措施有

Elevation of Priviledge 特权提升

三. 将所有威胁和漏洞登记, 逐一解决

例如:

安全测试工具

术语

  1. Authentication 认证要求 - 用户是不是通过认证的合法用户?
  2. Authorization 授权要求 - 用户是不是经过授权的合法用户, 所访问的模块是在其权限范围之内的?
  3. Audit 可审查和追溯要求 - 用户的访问和操作是不是可以审查和追溯的?
  4. 资产: 需要构建防御机制加以保护的关键实体
  5. 漏洞: 系统中可用来危害其安全性的地方
  6. 威胁: 利用潜在漏洞危害系统安全的潜在负面行为或事件
  7. 攻击: 在系统上执行的未经授权的破坏安全性的恶意行为
  8. 风险: 风险是威胁业务成功的诸多因素的组合。
    比如,可以想象一个汽车窃贼(威胁代理)在停车场检查汽车(系统)是否有未上锁的门(漏洞),当他们找到一辆车时,他们打开车门(漏洞利用),并拿走里面的东西(影响)。
  9. SAST: static application security testing (SAST)
  10. DAST: dynamic application security testing (DAST)

参考资料

上一篇 下一篇

猜你喜欢

热点阅读