读软件开发安全之道:概念、设计与实施04缓解

1. 缓解

1.1. 安全思维转换为有效行动的方法就是首先预判威胁,然后针对可能的漏洞加以保护

1.2. 主动响应的做法就叫做“缓解”

  • 1.2.1. mitigation

  • 1.2.2. 喂宝宝的时候给孩子围上围嘴,避免掉下来的食物粘在宝宝的衣服上,还有安全带、限速、火灾警报、食品安全操作规范、公共卫生措施和工业安全法规,这些统统都属于缓解措施

  • 1.2.3. 降低问题的严重性、危害性或者缩小影响范围

  • 1.2.4. 都通过主动采取手段来规避或者减少风险所带来的预期损失

1.3. 缓解措施可以降低风险,但不能彻底消除风险

  • 1.3.1. 如果我们可以设法彻底消除风险​,那无论如何都应该采取这样的措施

  • 1.3.2. 比如,删除了一个不安全的旧特性

1.4. 缓解措施关注的是降低攻击发生的可能性,提升发起攻击的难度,或者降低攻击造成的危害

1.5. 那些让利用漏洞的操作更容易被检测出来的措施也可以算是缓解措施

  • 1.5.1. 给自己的商品采用防篡改包装一样,它们都可以促成人们更快做出反应并且进行补救

1.6. 每一项微小的努力都可以提高整个系统的安全性,即使是有限的胜利也可以不断改善系统,构成更理想的保护措施

2. 解决威胁

2.1. 威胁建模可以向我们展示哪里可能出现问题,这样我们就可以把安全的重心放在“刀刃”上

2.2. 明确风险点(即重要事件或者决策阈值)才是缓解风险的最好机会

  • 2.2.1. 我们永远应该首先解决那些最重大的风险,对它们进行最大程度的限制

  • 2.2.2. 对于那些处理敏感个人信息的系统,未经授权而泄露信息的威胁总是如影随形

2.3. 手段

  • 2.3.1. 把能够访问这类数据的范围降至最低

  • 2.3.2. 减少收集的信息总量

  • 2.3.3. 主动删除那些不会再使用的过时数据

  • 2.3.4. 在出现入侵事件的情况下通过审计执行早期检测

  • 2.3.5. 采取行动来降低攻击者泄露数据的能力

2.4. 对最高安全级别的风险提供了保护之后,我们需要有选择地对较低程度的风险进行缓解

  • 2.4.1. 只要缓解手段不会增加太多负担,也不会增加设计的复杂性

2.5. 例子

  • 2.5.1. 将每次登录时提交的密码与加盐密码散列值(salted hash)进行比较,而不是与明文的真实密码进行比较

    • 2.5.1.1. 可以避免保存明文密码

    • 2.5.1.2. 哪怕攻击者入侵了系统,他们也无法获得实际的密码

2.6. 只要有机会就要降低风险

3. 把攻击面减到最小

3.1. 一旦我们判断得出一个系统的攻击面,我们就知道利用漏洞的行为最有可能源自哪里,因此我们采取的一切可以加固系统“外部城墙”的行为都是一场重大的胜利

  • 3.1.1. 考虑每个入口点下游涉及多少代码和数据

  • 3.1.2. 可以让包含漏洞的代码数量更少

3.2. 在客户端/服务器系统中,我们可以把服务器的功能推送给客户端,这样就可以减小服务器的攻击面

  • 3.2.1. 如果客户端拥有必要的信息和计算资源,就不仅可以减少服务器的负载,还可以减小服务器的攻击面

3.3. 把功能从一个面向公众、任何人都可以匿名调用的API转移到需要进行认证的API,也可以有效地减小攻击面

  • 3.3.1. 创建账户不仅可以减缓攻击速度,也可以追踪攻击者,还可以实施速率限制

3.4. 使用内核服务的库和驱动器可以通过最小化内核内部代码和连接内核的接口来达到减小攻击面的目的

  • 3.4.1. 不仅有更少的内核转换被攻击,而且即使攻击取得了成功,用户态代码也无法造成大规模的破坏

3.5. 部署和运维都可以提供很多减小攻击面的机会

  • 3.5.1. 最简单的做法就是把所有资源都挪到防火墙的后面

3.6. 通过网络进行远程管理的设置也是一例

  • 3.6.1. 如果使用率不高,就应该考虑禁用这类特性,只在必要的情况下使用有线接入的方式发起访问

3.7. 不断思考各种方法来减少外部访问、把功能和接口减到最少,对那些不需要暴露给公众的服务提供保护

  • 3.7.1. 我们越是能够理解一个特性应该应用在哪里、应该如何应用,我们就可以找到越多的缓解手段

4. 缩小漏洞窗口

4.1. 缩小漏洞窗口类似于减小攻击面,但是这种策略的目标并不是减小承受攻击的范围,而是把漏洞有可能出现的有效时间间隔减到最小

  • 4.1.1. 猎手会在射击之前打开保险,然后在射击之后重新挂上保险一样

4.2. 低信任数据或者请求与高信任代码进行互操作的那个地方

  • 4.2.1. 为了能够更好地隔离高信任代码,我们需要把这些代码的执行操作减到最少

  • 4.2.2. 应该在调用高信任代码之前首先执行错误校验,确保代码可以继续完成工作后退出

4.3. 代码访问安全

  • 4.3.1. Code Access Security,CAS

  • 4.3.2. 一种如今已经很少使用的安全模型,它完美地说明了缩小漏洞窗口这种缓解措施,因为它提供了对代码有效权限的细粒度控制

4.4. 重要的限制手段包括限制时间窗口、限制地理位置、仅限制账户内金额等

  • 4.4.1. 所有这些缓解手段都有助益,因为这些手段会避免出现入侵行为时发生最坏的情况

5. 把暴露的数据减到最少

5.1. 针对数据泄露的结构性缓解策略是限制内存中敏感数据的保存时间

5.2. 把数据的生命周期减到最小,而不是限制代码以高权限运行的时间

  • 5.2.1. 私钥或者密码之类的认证凭据,我们应该在不需要这些数据的时候,立刻在内存中把它们覆盖掉,这样做是绝对值得的

5.3. Heartbleed漏洞威胁到大量网页的安全,暴露了存储空间的各类敏感数据

  • 5.3.1. 限制这种敏感数据的保留时间完全可以成为一种合理的缓解措施

    • 5.3.1.1. 有可能的话,应该先止损​

5.4. 主动清除数据副本是一种极端的情况,这种操作只应该针对那些最敏感的数据,或者仅在关闭账户这种重要操作发生时执行

6. 访问策略与访问控制

6.1. 标准的操作系统权限机制都会提供非常基本的文件访问控制

  • 6.1.1. 这些权限根据进程的用户和组的所有权,采用全有或全无的方式来控制读(机密性)或写(完整性)访问

6.2. Web服务和微服务被设计为代表那些一般不对应进程所有者的主体来工作

  • 6.2.1. 一个进程会对所有通过了认证的请求提供服务,并要求获得权限来访问所有客户端数据

  • 6.2.2. 只要存在漏洞,所有客户端数据就都有风险

6.3. 缩小“可以访问的资源”与“系统正好允许访问的资源”之间的差异

  • 6.3.1. 可以限制每分钟或者每小时的访问次数

  • 6.3.2. 实施最大的数据量限制

  • 6.3.3. 实施与工作时间相对应的时间限制策略

  • 6.3.4. 根据同行的策略或者历史数据来采取可变的访问限制

6.4. 确定安全访问限制是一项艰难的工作,但是绝对物超所值,因为这可以帮助我们理解应用的安全需求

6.5. 在设定策略的时候留有余地,避免严格的策略妨碍了人们的正常工作

  • 6.5.1. 让个别代理人员提交合理的解释,从而在短时间内提升针对自己的限制值

  • 6.5.2. 通过设置这种“减压阀”​,我们就可以对基本的访问策略实施严格的限制

  • 6.5.3. 申请可以接受审计,如果这种申请次数越来越多,管理人员就应该研究需求是否已经提升,以及需求提升的原因,并且在掌握了这些情况的基础上对限制值进行放松

  • 6.5.4. 使用软限制来创建访问策略,而不用拍脑袋想出来的参数执行“一刀切”政策

7. 接口

7.1. 安全分析中的重中之重

7.2. 接口可以揭示数据流和控制流

7.3. 接口会充当明确定义的信息节点,我们就应该在这里实施缓解措施

  • 7.3.1. 只要存在信任边界,那么最主要的安全关注点都应该着眼于数据流和控制流从低信任组件流向高信任组件的地方

7.4. 在大型系统中,网络之间、进程之间,甚至进程内部一般都会包含接口

  • 7.4.1. 端点设备之间的交互几乎必然会通过线路来完成,其他类型的接口情况更加复杂

  • 7.4.2. 进程之间通信接口的可信度几乎和网络接口的别无二致

    • 7.4.2.1. 进程间的通信和网络接口也就成了威胁建模的主要焦点

7.5. 从攻击者的角度看,进程内的边界是非常容易突破的

7.6. 所有大型软件的设计方案都面临相同的问题,那就是如何构建组件才能把高权限访问的区域降到最低限度,以及如何限制敏感信息流从而减小安全风险

  • 7.6.1. 把信息访问限制到一个最小的组件范围,相关组件又得到了良好的隔离,那么攻击者想要访问敏感数据,难度就会大得多

7.7. 接口架构是决定系统能否成功保护资产的核心因素

8. 通信

8.1. 通信对几乎任何软件系统都是基本组件,当然这里的通信包括互联网络通信、私有网络通信,或者通过蓝牙、USB等协议实现的外围连接通信

  • 8.1.1. 要么信道在物理上足够安全,针对窃听和嗅探提供了防护手段

  • 8.1.2. 要么数据进行了加密,使数据的完整性和机密性能够得到保障

8.2. 物理安全往往都不十分可靠,因为只要攻击者绕过了这些物理安全防护手段,往往就能够访问到完整的数据,而且这种入侵方式很难被发现

8.3. 现有计算负载的基础上增加加密运算也没有什么问题,所以不对通信进行加密的理由一般都不怎么充分

8.4. 哪怕是最好的加密措施也不是什么灵丹妙药,因为还有一种威胁存在,那就是加密无法掩饰通信的发生

  • 8.4.1. 如果攻击者可以读取到信道中的原始数据,即使他们无法对数据的内容进行解密,也可以看到有数据在信道中进行收发,因此也就可以粗略地估算出数据总量

  • 8.4.2. 如果攻击者可以对通信信道进行篡改,他们就有可能让通信造成延迟,甚至直接阻塞通信传输

9. 存储

9.1. 保存数据就相当于把数据发送给“未来”​,以备人们在未来提取使用

9.2. 存储介质中的静态数据很容易遭到攻击,就像在线缆中传输的通信数据很容易遭到攻击一样

  • 9.2.1. 保护静态数据不受篡改和泄露需要同时借助物理安全措施和加密

  • 9.2.2. 所存储数据的可用性也依赖数据备份或者物理层面的保护措施

9.3. 在系统设计方案中,存储同样是无处不在的,这类系统常常把保护数据安全的具体措施推迟到操作的时候再来处理,这就会错失在设计方案中减少数据丢失的机会

9.4. 我们备份的既可以是完整的数据集,也可以是增量数据、交互记录,这些信息累加起来就可以准确地重建数据

  • 9.4.1. 它们都应该进行独立、可靠的存储,并且按照一定的频率进行备份,同时保证延迟时间在合理范围之内

  • 9.4.2. 云架构可以用近乎实时的方式提供冗余数据复制功能,这可能就是最理想的连续备份解决方案,当然这种解决方案不是免费的

9.5. 所有静态数据(包括备份数据)都存在被非法访问的风险,所以我们必须在物理上对数据进行保护或者加密

  • 9.5.1. 我们创建的备份数据越多,泄露的风险也就越大,因为每份副本都有可能泄露

  • 9.5.2. 要求我们在数据丢失风险和数据泄露风险之间进行权衡,我们不可能同时把两种风险都降到最低,但是我们可以用很多方式来判断两种风险之间最理想的平衡点

9.6. 推荐大家使用那些广泛使用的开放标准,因为一旦官方不再支持私有格式,就只能进行逆向工程了

  • 9.6.1. 保存的时间周期越长,转换文件格式的必要性就越高,因为软件标准是在不断进化的,应用也会放弃对“古老”格式的支持

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/877534.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ansync/await 运行流程图

1、流程图: 2、await 之后的方法是何时执行,如何执行的? await 的方法在 Task 执行完成之后,通过调用 Finish 方法执行的。 具体的执行步骤是先将 MoveNext 方法注册到 Task 的回调里,然后在 Task 执行完后调用这个方法…

ID3算法详解:构建决策树的利器

目录 引言 ID3算法概述 算法基础 信息熵 ​编辑 信息增益 ID3算法步骤 决策树 概念: 核心: 节点 1. 根节点 2. 非叶子节点 3. 叶子节点 引言 在机器学习领域,决策树是一种非常流行的分类和回归方法。其中,ID3算法作为决策树算法…

jenkins最佳实践(二):Pipeline流水线部署springCloud微服务项目

各位小伙伴们大家好呀,我是小金,本篇文章我们将介绍如何使用Pipeline流水线部署我们自己的微服务项目,之前没怎么搞过部署相关的,以至于构建流水线的过程中中也遇到了很多自己以前没有考虑过的问题,特写此篇&#xff0…

使用 Python 进行 PDF 文件加密

使用 Python 解密加密的 PDF 文件-CSDN博客定义一个名为的函数,该函数接受三个参数:输入的加密 PDF 文件路径input_pdf、输出的解密 PDF 文件路径output_pdf和密码password。https://blog.csdn.net/qq_45519030/article/details/141256661 在数字化时代…

Linux驱动开发基础(设备树)

所学来自百问网 目录 1. 引入设备树的原因 2. 设备树语法 2.1 Devicetree格式 2.1.1 DTS文件格式 2.1.2 node的格式 2.1.3 properties的格式 2.1.4 dts 文件包含dtsi文件 2.2 常用属性 2.2.1 #address-cells、#size-cells 2.2.2 compatible 2.2.3 model 2.2.4 st…

Total Commander 右键卡死问题,百度云冲突

一段时间TC总是右键卡死,后来发现是跟百度云冲突了,只要把右键菜单里的百度云删除即可 不仅仅是跟TC冲突,资源管理器也受累的 可以通过360安全卫士的右键菜单管理搞定,也可以注册表删除,可以先备份注册表 运行里 re…

一步解决Ubuntu中/mnt/hgfs无共享文件夹的问题

当我们启用了共享文件夹后,但是在终端/mnt/hgfs任然没有文件 在终端输入 sudo vmhgfs-fuse .host:/ /mnt/hgfs/ -o allow_other 之后,就可以查到共享文件了

复现 LET-NET

摘要 稀疏光流法是计算机视觉中的一项基本任务。然而,它依赖于恒定的假设限制了其在高动态范围(HDR)场景中的适用性。在本研究中,我们提出了一种新的方法,旨在通过学习一个对光照变化具有鲁棒性的特征映射来超越图像的…

【TC3xx芯片】TC3xx芯片CAN模块详解

目录 前言 正文 1.CAN硬件资源】 1.1. CAN硬件单元 1.2. CAN时钟 1.2.1. CAN时钟设计 1.2.2. MCMCAN配置实例 1.3. CAN中断 1.3.1. TC3xx芯片CAN中断设计 1.3.2. 通过查看寄存器看中断配置和产生状态 1.3.3. 实际AUTOSAR工程CAN中断配置 2.功能描述 2.1. 操作模式…

KubeSphere核心实战_kubesphere部署redis01_为redis指定配置文件_指定存储卷_配置服务---分布式云原生部署架构搭建047

然后我们再来,部署一下redis,可以看到,首先去容器官网去找到对应的redis的镜像然后 可以看到镜像中都有说的,如何启动,以及 --appendonly yes 是指定持久化.然后 /data表示数据存储的位置. 可以看到数据存储位置 然后还有配置文件的位置. 可以看到,我们首先去创建配置文件,然后…

LNMP 架构(Linux+NGINX+memcache+PHP)

目录 1 源码编译PHP与NGINX 1.1 NGINX 源码编译 1.2 PHP 源码编译安装 2 实现PHP与NGINX的连接 2.1 php-fpm的详细介绍 2.2 LNMP与LAMP的区别 2.3 PHP配置文件的介绍 2.4 实例实现php-fpm 与 NGINX的连接 2.4.1 指定pid的存放位置 2.4.2 php-fpm设置监听自己端口与IP 2.4.3 主配…

配置 昇腾 Ascend C/C++ 开发环境

配置 昇腾 Ascend C/C 开发环境 flyfish 这里以Orange Pi Ai Pro 为例 先说如何配置MindStudio,然后再说如何查看Orange Pi Ai Pro的一些信息 Orange Pi AI Pro 开发板是香橙派联合华为精心打造的高性能AI 开发板,其搭载了昇腾 AI 处理器。Linux 桌面…

VSCode系列 - 如何用VSCode搭建C++高效开发环境(2)

1. 插件的用法 1.1. C/C 1.1.1. 插件介绍1.1.2. 插件配置 1.2. Clang-Format1.3. cpp-check-lint 1.3.1. cpplint1.3.2. cppcheck1.3.3. 插件的使用 1.4. C/C Advanced Lint 1.4.1. 插件介绍1.4.2. 插件配置 1.5. Bracket Pair Colorizer 1.5.1. 插件介绍1.5.2. 功能配置 1.6. …

海外独立站站外推广:拓展全球市场的策略与实践

海外独立站的站外推广是一个系统工程,涉及市场研究、品牌本土化、多渠道推广、广告投放、网站体验优化、客户服务和数据分析等多个方面。通过本文的探讨,企业可以更好地理解海外推广的策略和实践,把握全球化电商的发展趋势,实现企…

【机器学习】探索机器学习在旅游业的革新之旅

📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀目录 🔍1. 引言📒2. 机器学习在旅游需求分析中的应用🌞用户行为数据分析🌙旅客偏好预测模型⭐…

Java面试八股之如何保证消息队列中消息不重复消费

如何保证消息队列中消息不重复消费 要保证消息队列中的消息不被重复消费,通常需要从以下几个方面来着手: 消息确认机制: 对于像RabbitMQ这样的消息队列系统,可以使用手动确认(manual acknowledge)机制来…

vue里组件化引入svg图标的方式

配置好后可以轻松从iconfont导入svg图标或者任意svg图标。 参考:https://blog.csdn.net/weixin_39729729/article/details/137348970 https://blog.csdn.net/CMDN123456/article/details/139854354 官网https://www.iconfont.cn/help/detail?spma313x.help_detai…

C++ 设计模式——策略模式

策略模式 策略模式主要组成部分例一:逐步重构并引入策略模式第一步:初始实现第二步:提取共性并实现策略接口第三步:实现具体策略类第四步:实现上下文类策略模式 UML 图策略模式的 UML 图解析 例二:逐步重构…

Flask-SQLAlchemy 和 Alembic 的结合

Flask-SQLAlchemy 和 Alembic 的结合 安装必要的库配置 Flask-SQLAlchemy定义数据库模型初始化 Alembic配置 Alembic配置 env编写迁移脚本应用迁移后续迁移Flask-SQLAlchemy 和 Alembic 是两个非常流行的 Python 库,它们通常一起使用来管理 Flask 应用中的数据库迁移。Flask-S…

低功耗神经网络

低功耗神经网络(Low-Power Neural Networks)是指在有限能源或资源条件下设计和实现的高效神经网络模型。这些网络旨在减少能耗,同时在性能上保持与传统神经网络相近的水平。随着深度学习在移动设备、物联网(IoT)和边缘…