趣说产品安全设计的十大经典原则,看一遍就再难忘记!

全设计原则在产品和系统的开发中占据着至关重要的地位。这些原则强调了从一开始就将安全性融入到设计过程中的重要性,而不是作为事后补救措施。通过遵循这些原则,开发者能够创建更加健壮和安全的产品,有效减少潜在的安全漏洞和威胁。接下来博主通过一些有趣案例带大家轻松理解这些原则!

1. 安全设计原则介绍

安全设计原则是指那些在安静业界实践中已经证明是成功的抽象概念的集合,设计师可以运用这种基本的设计原则来进行与开发语言、平台无关的架构设计,保护整个计算机系统避免受到从研发到运营过程中的各种安全故障。

自从1974年麻省理工学院的Jerry Saltzer教授提出了安全设计的八大原则,快50年过去了,后人在其基础上又扩展了2条,共计10条。如果你恰好是架构师、系统工程师或是开发组长,那这十大原则一定要熟记于心!

2. 安全设计十大经典原则

2.1. 最小化权限原则(Least Privilege)

指的是每个用户或程序都应该使用满足其工作需求的最少权限(即知其所需,Need to Know)。这样可以减少潜在的安全风险和攻击面。

在物理安全领域,“最小化权限”意味着员工只能进入他们工作所需的区域。例如,生产线上的工人只被允许进入生产区域,而不是研发实验室

明朝锦衣卫的权力控制

以明朝皇帝直属的特务机构锦衣卫为例,由于其特殊的地位和职责,锦衣卫拥有很大的权力,为了防止其滥用权力,锦衣卫内部有明确的分工。

不同部门负责不同的任务,如监察、缉捕、审讯等,每个部门只拥有完成其职责所需的最低权限。比如南镇抚司管军匠以及本卫的内部监察。北镇抚司管刑狱,狱情可以直接奏报皇帝,不通过锦衣卫上层官员。

2.2. 失败-默认安全原则(Fail-safe Defaults)

访问策略应该基于允许(如白名单策略)而非拒绝(如黑名单策略),即默认情况下不允许访问,保护机制仅用来识别允许访问的场景。这个原则实际包含如下两个子原则:失败安全、默认安全。

2.2.1. 失败安全原则

任何一个复杂系统都应该有一个处理失败后的应急安全机制。

生化危机中的蜂巢系统

比如在《生化危机》第1部电影中,位于浣熊市地下的蜂巢的一名工作人员被病毒感染后,病毒迅速传播,导致蜂巢内的人员相继感染并变成丧尸,蜂巢为防止T病毒泄露而启动了自毁程序。这是为了防止病毒扩散到外界,确保其不被公众知晓。

2.2.2. 默认安全原则

系统在初始状态下,默认配置应该是安全的,通过使用最少的系统服务来提供最大的安全性,只有经过明确授权之后才能降低安全级别。比如产品应该默认打开密码复杂度策略,即不允许用户使用不符合密码复杂度策略的密码。

碟中谍4:幽灵协议

《碟中谍4》是一部动作冒险电影,讲述了特工团队执行高风险任务的故事。在电影中,主角伊桑·亨特和他的团队需要进入一家高度安全的银行内部窃取重要文件。这家银行采用了最先进的生物识别技术和复杂的访问控制系统,只有经过正式授权的员工才能进入银行的各个区域。

银行安全机制如下:

  • 默认状态:银行的门禁系统默认是关闭的,只有在通过指纹、虹膜扫描或其他形式的身份验证后,才允许进入。这意味着除非经过正式授权,否则任何人都无法进入银行。
  • 授权过程:银行员工需要通过多层身份验证,才能获得访问权限。即使对于银行员工来说,进入特定区域也需要经过进一步的身份验证。这确保了只有在经过明确授权的情况下,才能降低安全级别并进入受保护的区域。

这种设计不仅保护了银行资产的安全,还确保了在未经授权的情况下,任何人都无法轻易进入银行内部,这种设计就是应用了“默认安全”原则。

安全 VS 用户体验

不过在许多场景中,安全和产品的体验经常会发生冲突,这时应当选择安全优先,在安全的前提下,可以允许通过手动关闭安全配置或策略来提升产品体验。

2.3. 经济适用原则(Economy of Mechanism)

保持系统的设计和实现尽可能简单:

  • 软件设计越复杂,代码中出现Bug的概率就越高;
  • 删除不需要的冗余代码和功能模块,减少系统的攻击面;
  • 设计可以重复使用的组件减少代码冗余。

《速度与激情7》是一部著名的动作电影,其中有很多涉及高科技和高成本安全措施的场景。然而,在某些场景中,我们可以看到经济适用原则的应用。

图片来源于网络

在电影中,主角们需要潜入一个高度安全的地下车库,盗取几辆豪车。这个地下车库配备了先进的监控系统、门禁系统和警报系统。然而,主角们并没有使用昂贵的高科技设备,而是利用一些低成本的方法来完成任务。

  • 低成本监控规避:主角们使用了一些简单的手段,比如遮挡摄像头、制造噪音干扰监控等,这些方法成本低廉但效果显著。
  • 利用已有资源:主角们利用了车库本身的安全系统,比如通过破解车库的门禁系统密码,而不是去购买昂贵的新设备。
  • 分阶段实施:他们将任务分为几个小步骤,每一步都尽量减少对昂贵设备的依赖,而是依靠团队成员的专业技能和协作来完成任务。

通过这种方式,主角们成功地进入了车库(安全控制系统),并盗走了几辆豪车,而没有花费大量资金购买昂贵的安全设备。

2.4. 权限分离原则(Separation of Privilege)

一种保护机制应该需要至少两把"钥匙",从而避免个人权力滥用,导致受保护的对象容易被非法获取。

比如阿里的PolarDB-X数据库支持三权分立模式,改进了传统数据库运维由DBA行使特权的独立控制体系,使得数据库管理员DBA、安全管理员DSA(Department Security Administrator)和审计管理员DAA(Data Audit Administrator)三者的权责更加清晰。其中:

  • 数据库管理员(DBA):只具备DDL(Data Definition Language)权限。
  • 安全管理员(DSA):只具备管理角色(Role)或用户(User)以及为其他账号授予权限的权限。
  • 审计管理员(DAA):只具备查看审计日志的权限。

另一个典型的例子来自唐朝的“三省六部制”。唐朝的中央政府采用了三省六部制来实现行政权力的分权和制衡,从而提高政府运作的效率和安全性。

三省六部

2.5. 完全仲裁原则(Complete Mediation)

对于每个对象的每次访问都必须经过安全检查,即主体试图访问客体时,系统每次都会校验主体是否拥有此权限。

2.6. 心理可承受原则(Psychological Acceptability)

一般涉及人机交互的安全机制可能会降低用户体验,增加用户的额外负担,但这种负担必须是最小的且是合理的。

注:如果系统安全配置方法过于复杂,系统管理员可能无意配置了一个错误选项反而也会让系统变得不安全。

比如携程的用户登录就应用到了心理可承受原则,用户在第一次输入账户和密码正确时直接可以登录平台,但如果多次输入错误就会弹出拼图验证界面。毫无疑问,如果第一次用户信息填写正确的情况下,让用户多做一次拼图验证会降低平台使用体验。

携程登录界面

2.7. 开放设计原则(Open Design)

多数人可能认为只要产品的实现细节不公开就是安全的,最典型的例子就是不少公司或个人自研了私有的加密算法,他们认为只要算法不公开,加密的数据就是安全的,但实际应用中存在如下问题:

  • 攻击者可以通过网络抓包或二进制逆向加密算法进行破解;
  • 对公司不满的员工故意公开算法;
  • 算法源码被恶意软件窃取。

以上任意一种条件满足,此算法就不在安全了。此外,即便以上条件均不满足,私有的加密算法也容易被客户质疑,认为是故意设计的存在缺陷的算法,甚至会认为是预留的后门。

公开的密码算法

正确的做法是使用业界成熟的加密算法。封闭的算法安全性依赖于算法本身的保密,而业界成熟的公开加密算法的安全性依赖于数学难题(如大数的质因数分解)和密钥管理。

注:虽然密码算法要遵循开放设计原则,但密钥却不能随意泄露。

安全性不应该依赖于机制设计与实现的保密性,应当使产品的设计经受充分的检验。

2.8. 最小公共化原则(Least Common Mechanism)

尽量避免多个对象共享同一资源,任意一个对象的潜在问题都会影响到其他对象。

在阿波罗计划中,NASA 设计了多个航天器和模块,其中包括指令舱、服务舱和登月舱。为了确保宇航员的安全,NASA 在设计这些模块时严格遵循了“最小公共化原则”。

为了避免一个模块的故障影响到其他模块,NASA 尽量减少了各个模块之间的直接连接和依赖。例如,指令舱和服务舱在大部分时间内是分离的,只有在关键操作(如发射和返回)时才短暂连接。

2.9. 纵深防御原则(Defense in Depth)

纵深防御体本质是多层防御,使得入侵者必须突破层层堡垒才能接触到核心数据资产。防守方建立起纵深防御体系后,攻击方的入侵难度和入侵成本将大幅度提高,通常远未到终点时就会被发现,这就使得防守方有充足的时间响应和处置,从以前相对被动的地位转为相对主动。

来源:https://www.tonghaoinfo.com/news/211.html

但是,纵深防御机制设计得过于复杂时,也增加了系统的复杂性,从而导致为了解决某些安全问题而引入了其它的安全问题。

2.10. 保护最薄弱环节原则(Protecting the weakest link)

护最薄弱环节是指在安全设计中,系统的安全性往往是由其最薄弱的环节决定。以下介绍一个案例说明这一原则。

凯文.米特尼克(Kevin Mitnick)是美国著名的黑客,他在20世纪80年代-90年代通过社会工程和技术手段进行了一系列高调的黑客攻击,最终被捕入狱。在一次著名攻击中,他成功入侵了一家大型公司的内网,这次攻击中就反向应用了“保护最薄弱环节原则”。

黑客教父Kevin Mitnick

尽管这家大型公司拥有强大的技术防御措施(IPS等),但尼克知道公司员工很可能是其最薄弱的环节,便通过电话伪装成公司的IT支持人员,与一名普通员工取得联系,声称需要进行紧急系统维护,并要求这名员工提供他的用户名和密码。由于这名员工缺乏安全意识,便把敏感信息提供了出去。尼克通过此用户名和密码成功绕过了公司的所有技术防御措施,窃取了大量敏感数据,并进一步的扩大了攻击范围。

注:基于此原则,企业应该考虑将安全预算花费在保护最严重问题和高危漏洞上,将钱花在刀刃上。

如果你对安全设计感兴趣,推荐你阅读:

  • 软件安全的未来之路:构建默认安全的软件
  • 安全设计 | 安全设计不得马虎!微软STRIDE威胁建模方法可快速发现应用安全隐患
  • 安全设计 | Microsoft 威胁建模工具Threat Modeling Tool安装及使用详解(含样例)

参考链接

  • https://nob.cs.ucdavis.edu/classes/ecs153-2000-04/design.html
  • https://doc.polardbx.com/dev-guide/topics/triple-authority-introduction.html
  • https://www.tonghaoinfo.com/news/211.html

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

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

相关文章

1006:A+B问题

【题目描述】 大部分的在线题库,都会将AB问题作为第一题,以帮助新手熟悉平台的使用方法。 AB问题的题目描述如下:给定两个整数A和B,输出AB的值。保证A、B及结果均在整型范围内。现在请你解决这一问题。 【输入】 一行,…

【回溯】力扣 77.组合

一、题目 二、思路 采用回溯算法,注意点: 递归出口:已经选够 k k k 个数参数传递:由于不可以重复选择相同的数字,因此每选一个数就会使得可选择的范围对应缩小。不妨设定选择的顺序是从 1 1 1 到 n n n 依次进行选…

疯狂Spring Boot讲义[推荐1]

《疯狂Spring Boot讲义》是2021年电子工业出版社出版的图书,作者是李刚 《疯狂Spring Boot终极讲义》不是一本介绍类似于PathVariable、MatrixVariable、RequestBody、ResponseBody这些基础注解的图书,它是真正讲解Spring Boot的图书。Spring Boot的核心…

『 Linux 』网络传输层 - TCP(二)

文章目录 TCP六个标志位TCP的连接三次握手 四次挥手为什么是三次握手和四次挥手 重传机制 TCP六个标志位 在TCP协议报文的报头中存在一个用于标志TCP报文类型的标志位(不考虑保留标志位),这些标志位以比特位选项的方式存在,即对应标志位为0则表示为假,对应标志位为1则为真; SYN…

LeetCode --- 421周赛

题目列表 3334. 数组的最大因子得分 3335. 字符串转换后的长度 I 3336. 最大公约数相等的子序列数量 3337. 字符串转换后的长度 II 一、数组的最大因子得分 数据范围足够小,可以用暴力枚举移除的数字,得到答案,时间复杂度为O(n^2)&#…

动态规划-回文串问题——5.最长回文子串

1.题目解析 题目来源:5.最长回文子串——力扣 测试用例 2.算法原理 1.状态表示 判断回文子串需要知道该回文子串的首尾下标,所以需要一个二维数组且数据类型为bool类型来存储每个子字符串是否为回文子串, 即dp[i][j]:以第i个位置为起始&a…

【AI日记】24.10.31 学习LangChain和寻找AI研究报告(比如麦肯锡)

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 工作 工作1 内容:学习deeplearning.ai的免费课程地址:LangChain for LLM Application DevelopmentB站中英文地址:https://www.bilibili.com/video/BV1TJ4zemETf时间&#…

微积分复习笔记 Calculus Volume 1 - 4.4 The Mean Value Theorem

4.4 The Mean Value Theorem - Calculus Volume 1 | OpenStax

docker engine stopped

1)环境:win 10 2)docker安装时已经已经安装了虚拟机 3)启用网络适配器 4)启用docker服务(依赖服务LanmanServer) 5)全都弄好了,docker还是打不开,没办法了&a…

【VM实战】VMware迁移到VirtualBox

VMware 虚拟机开机卸载VMware Tools 调整虚拟磁盘 对于Windows 10及以上的虚拟机,一般VMware默认都会选Nvme固态硬盘。在导出前必须将其改为SATA,否则VirtualBox导入会报Appliance Import错误 (E_INVALIDARG 0x80070057) 先删掉当前盘的挂载&#xff…

某本书上的一张序列图评点

贝贝 2019-8-24 10:56 潘老师,这个图是不是不太对。插卡,输入密码并不是ATM的职责? UMLChina潘加宇: 这种图用建模思维一挤压,脓包太多了。 问题一、几个生命线上的实例,抽象级别不一致。 ATM用户--系统&#xff0…

Docker | 校园网上docker pull或者docker run失败的一种解决方法

场景 需要从仓库拉取镜像 无论使用命令docker pull 还是 docker run 但是总是显示如下的错误: 解决方法 查看虚拟机网络连接方式 Linux上检查校园网是否登录 有界面 无界面 只是命令行操作的Linux 关于Linux服务器端更新命令apt update没有效果问题总结(校园网认证)

推荐一款功能强大的AI实时变声器:FliFlik Voice Changer

FliFlik VoiCE Changer是一款专注于声音变换与音频处理的创新软件,旨在满足从日常娱乐、游戏直播到播客制作、专业音频编辑的多种应用场景需求。无论是想在游戏中变换声音逗乐队友,还是在播客中塑造个性化的音效,这款软件都能提供灵活而强大的…

Java第二阶段---15异常---第三节 自定义异常

1. 为什么要使用自定义异常 在Java中,异常的类型非常的多,要想使用这些异常,首先必须要熟悉它们。这无疑是一个巨大的工作量,很耗费时间。如果我们可以自定异常,则只需要熟悉 RuntimeException 、 Exception 和 Throw…

【2】Elasticsearch 查询从基础到高级

文章目录 一、引言二、常用查询方式(一)简单查询(二)聚合查询(三)复杂查询三、查询关键词(一)比较关键词(二)逻辑关键词(三)其他关键词四、常用统计类查询(一)计数统计(二)平均值统计五、总结一、引言 Elasticsearch是一款强大的分布式搜索和分析引擎,在数据…

【前端】在 Next.js 开发服务器中应该如何配置 HTTPS?

在 Next.js 的开发环境中,默认情况下是使用 HTTP 协议的。但是,您可以通过一些配置来启用 HTTPS。这在开发阶段可能很有用,尤其是在需要测试涉及安全传输的应用场景时。 下面是如何在 Next.js 开发环境中配置 HTTPS 的步骤: 方法…

[供应链] 公开招标

公开招标(Public Invitation to Bid) 是招标采购方式的一种,通常在政府采购、工程项目或大型商业合同中使用 公开招标旨在通过市场竞争机制,选出最合适的供应商或承包商,确保项目能够以合理的价格、良好的质量以及规定的时间完成 公开招标也…

移植 AWTK 到 纯血鸿蒙(HarmonyOS NEXT)系统 (0) - 序

移植 AWTK 到 纯血鸿蒙 (HarmonyOS NEXT) 系统 (0) - 序 前段时间纯血鸿蒙系统 HarmonyOS 5.0(又称 HarmonyOS NEXT)正式推出,这是继苹果 iOS 和安卓系统后,全球第三大移动操作系统。纯正国产操作系统登场,国人无不欢…

沙盒正在源代码防泄漏行业盛行

SDC沙盒技术采用了零信任的核心理念——“永不信任,总是验证”。这意味着对每一个访问请求都进行严格的身份验证和授权,无论请求来自内部还是外部。SDC沙盒提供了一个隔离的环境,用于隔离本机,实现一机两用,起到保护系…

Go Modules和 雅典项目

本篇内容是根据2016年9月份Go modules and the Athens project音频录制内容的整理与翻译, 小组成员 Mat Ryer 和 Carmen Andoh 以及客座小组成员 Marwan Sulaiman 和 Aaron Schlesinger 一起讨论 Go 模块和 Athens 项目。 过程中为符合中文惯用表达有适当删改, 版权归原作者所…