高完整性系统(3):Threat Modelling

news2024/12/24 20:15:18

文章目录

  • 基础安全性质
    • 保密性(Confidentiality)
    • 完整性(Integrity)
    • 可用性(Availability)
    • 认证(Authentication)
    • 不可抵赖性(Non-repudiation)
    • 访问控制(Access Control)
  • STRIDE 威胁建模
    • Spoofing (欺骗)
    • Tampering(篡改)
    • Repudiation(否认)
      • Information Disclosure(信息泄露)
    • Denial of Service(服务拒绝)
    • Elevation of Privilege(权限提升)
  • Attack Tree

基础安全性质

保密性(Confidentiality)

保密性是指信息只被需要或有权查看它的人看到。 如果你的系统可以保持秘密信息的秘密性,那么它在保密性方面就做得很好。

完整性(Integrity)

完整性是指你存储的数据是正确的。完整性的关键在于,确保只有有权修改信息的人才能修改它。这是因为你可能担心攻击者会偷偷更改信息。(如果学生想偷偷在教务系统上修改成绩,那么就是在试图破坏 integrity

可用性(Availability)

可用性是指一个系统始终可以被访问,并在用户请求时为其提供服务。 常见的攻击方法是拒绝服务攻击,阻止用户从他们应该能够使用的系统中获得服务。(洪水攻击等瘫痪服务器的方式,就破坏了系统的可用性)

认证(Authentication)

认证是 证明你是你所说的人。当你登录任何系统时,你需要提供你自己独有的账户和密码来证明你是你,常见的攻击包括允许未经证明身份的人访问系统,或通过暴力破解密码的方式攻击,一旦某些账号密码被泄露,那么当别人拿着我的密码冒充我的身份,authentication 就被破坏了

不可抵赖性(Non-repudiation)

不可抵赖性是一种比较少见的安全性质,它的含义是事情发生后,涉事者不能否认他们的行为。例如,如果一个人发送了一个消息,然后试图否认他发送了那个消息,不可抵赖性就会防止他这样做。

访问控制(Access Control)

明显的是,要在系统中执行某项操作,你需要有执行它的权限。你不能在系统中随意做你想做的事情。

STRIDE 威胁建模

当我设计我的安全系统时,我应该担心什么类型的威胁?

  • 一种方法是去考虑这些不同的安全性质(safety properties) 在何时不成立。因此,每个 properties都给我们提供了一个类别的威胁 (threat),这些威胁是我们可能需要关心的。就像上一节的 HAZOP 中通过 guide words 来进行头脑风暴进而得出所有可能的 hazards,每一个 guide word 都提供了一种系统地改变你的系统预期行为(intended behaviors)的方法。
  • 类似的,在一个系统中,分别考虑这些 safety properties 如何失败,或者攻击这些 safety properties 的方法,基本上就给你提供了一种 系统地枚举不同威胁的方法。这就是威胁建模方法,它是专门设计来帮助你进行 创造性的头脑风暴过程,考虑你的系统可能面临的不同类型的威胁或安全风险。

在这里插入图片描述

现在,我们深入了解 STRIDE,它是一种威胁模型,代表了:

  • Spoofing (欺骗)
  • Tampering (篡改)
  • Repudiation (否认)
  • Information Disclosure (信息泄露)
  • Denial of Service (拒绝服务)
  • Elevation of Privilege (提升权限)
  • 每一个术语都代表了我们的系统可能面临的一种威胁或攻击。关键的是,这些术语也对应着安全性属性的潜在失败。让我们依次看看它们。
  • STRIDE让人们 通过图形化的方式来理解系统的威胁模型这种方法要求从系统的各个组件开始,然后考虑这些组件之间的连接。

信任边界:

  • "Trust Boundary"这个概念主要在计算机安全和系统设计中使用。在任何系统中,都存在一些部分我们可以信任,也有一些部分我们无法或者不应该信任。一个"trust boundary"就是这两个区域的分界线。
  • 一般来说,我们可以把一个系统分成许多不同的组件,每个组件有自己的责任和功能。 当我们说一个组件是"可信的",就是说我们相信这个组件能够按照我们的预期来执行它的职责,并且不会发生我们不希望发生的事情。而对于"不可信的"组件,我们就无法对它有这样的期待。
  • 那么为什么我们需要"trust boundary"呢?主要是因为它有助于我们理解和管理系统的安全性。在设计和评估一个系统的时候,我们需要明确哪些部分是可以信任的,哪些部分是不能信任的,然后在这两个部分之间设置一个明确的"trust boundary"。这样做可以帮助我们更好地管理和控制系统的风险,因为 我们知道所有的风险都可能来自于"trust boundary"的另一边。
  • 例如,让我们来看一个简单的网站系统。这个系统的一个组件是处理用户输入的模块。因为用户的输入是不可控制的,所以我们不能信任这个组件,因为用户可能会输入恶意的代码或者数据。所以我们就在用户输入模块和其它部分之间设置一个"trust boundary",并且确保所有来自用户的输入在通过这个"trust boundary"之前都要经过严格的检查和过滤。

总的来说,“trust boundary"是一种非常重要的系统设计和安全管理工具。通过明确地定义和管理"trust boundary”,我们可以更好地理解和控制系统的风险。

Spoofing (欺骗)

欺骗是指攻击者冒充另一个用户或系统的情况。这可能是简单地窃取某人的用户名和密码以获得他们的账户访问权限,也可以是建立一个与合法网站非常相似的网站,以欺骗用户交出他们的个人信息。

在这里插入图片描述

我们的系统可能面临的一些欺骗威胁包括:

  • 攻击者冒充网页服务器 webserver,欺骗用户登录一个假网站并窃取他们的凭证(fishing)。
  • 用户窃取另一个用户的密码并冒充他们的账户。
  • 攻击者建立一个伪装成业务逻辑服务器的服务器,如果没有适当的认证措施,他们可以直接查询数据库。

Tampering(篡改)

篡改则是指未经授权更改数据或系统配置。 这可能涉及用户修改他们的账户信息以获得额外的权限,或者攻击者注入恶意代码到系统中,以破坏其操作。

在这里插入图片描述

可能的篡改威胁可能包括:

  • 攻击者利用糟糕的输入验证,为系统提供意想不到的或恶意的输入。

  • 数据库篡改:数据库存储在不同的信任边界内,可能存在篡改的威胁。攻击者可能会获得后端数据库的权限,并且修改数据。例如,一个不满的管理员可能会决定删除数据库的内容,或者后端托管提供商可能遭受到勒索软件攻击,从而修改数据库。SQL注入攻击,攻击者通过操纵对数据库的查询,获得未授权的数据访问权限或破坏系统。

  • 数据在传输中的篡改:数据在传输过程中可能会被篡改。攻击者可能会修改正在传输的数据,这是一种明显的篡改威胁。

  • 网站篡改(defacement):虽然这种情况现在并不常见,但攻击者可能会利用Web服务器的漏洞来篡改网页内容。

  • 日志篡改:日志记录是防止否认(repudiation)威胁的关键,因此它们的完整性很重要。攻击者可能会尝试篡改日志,以否认他们所做的事情。因此,需要确保日志无法被篡改。

Repudiation(否认)

一个用户执行了恶意行为,然后否认曾经执行过,例如,一个用户发送了恶意请求,然后否认曾经发送过。 如果系统没有足够的审计机制,那么这类问题就会很难解决。
在这里插入图片描述

  • 因此通过 log 来记录正确的用户操作是非常重要的
  • 但日志文件同样有可能被篡改 (tampering)

Information Disclosure(信息泄露)

保密的数据被未经授权的人员获取,例如,通过窃听或者数据库的注入攻击。

在这里插入图片描述

讲者提到了以下几种可能导致信息披露的攻击方式:

  • 钓鱼攻击:这种攻击是一种欺诈行为,攻击者通常会通过伪装成可信任的实体来获取用户的敏感信息,例如密码。虽然这也可以被视为一种欺骗攻击,但它最终允许攻击者获取不应披露的信息,从而违反了身份验证。

  • SQL注入:这是一种攻击技术,攻击者试图通过插入恶意SQL代码来读取数据库中的信息。尽管这可能被视为一种篡改攻击,因为它是通过篡改Web服务器预期接收的正常请求内容来完成的,但它在本质上仍然是一种信息披露攻击。

  • TLS私钥盗窃:如果有人窃取了你的TLS私钥,他们就可以冒充Web服务器。虽然这看起来像是一种欺骗攻击,但实际上它可能导致攻击者获取其他敏感信息,因此,窃取服务的私钥实际上是一种信息披露攻击。

    • 在互联网通信中,公钥和私钥是用于加密和解密数据的两个关键要素。公钥用于加密数据,私钥则用于解密数据。这两个钥匙构成了一对,通常称为密钥对。
    • TLS (Transport Layer Security),是一个用于保护网络通信的协议。它通常用于确保网站和其用户之间的通信是安全的。在TLS中,服务器具有一个公钥和一个私钥。公钥是公开的,任何人都可以获得它,并使用它来加密他们发送到服务器的信息。而私钥是私有的,只有服务器知道它。服务器使用私钥来解密收到的加密信息。
    • 当你访问一个使用TLS的网站时,你的浏览器会获取该网站的公钥并验证它的有效性。这通常是通过检查由受信任的证书颁发机构(CA)签发的数字证书来完成的。如果证书有效,浏览器就会用公钥加密它要发送的信息。
    • 如果有人窃取了服务器的私钥,他们就可以冒充服务器。这是因为他们可以使用私钥解密发送到服务器的信息,并使用公钥加密他们发送出去的信息。这样,他们就可以阅读、修改、甚至冒充服务器发送的所有通信。这就是为什么保护私钥的安全是如此重要的原因。如果私钥被窃取,那么所有使用该密钥的通信都可能被攻击者读取或篡改。
  • 管理员读取数据库:如果一个不值得信任的数据库管理员选择复制数据库的内容,而不是删除它,那么这就可能会成为一种信息披露攻击。

  • 密码文件被窃取:如果某人窃取了你的密码文件,那么这也会是一种信息披露攻击。这种攻击中,攻击者可能获取系统中所有用户的密码。

Denial of Service(服务拒绝)

攻击者使系统无法对正常的请求做出响应,例如,通过发送大量的请求来使服务器崩溃。
在这里插入图片描述

对于拒绝服务攻击(Denial of Service, DoS),主要讨论集中在以下几种可能的攻击类型:

  • 数据库故障:数据库,无论是本地还是远程,都是Web应用程序的关键组成部分。如果数据库停止运行或变得不可访问,那么这将导致对Web应用程序的服务中断,构成了拒绝服务攻击。

  • 分布式拒绝服务攻击(Distributed Denial of Service, DDoS):这是一种攻击方式,攻击者通过从不同的来源发起大量的请求来试图使一个网站或服务瘫痪。一种可能的情况是攻击者租用一群被危害的机器(称为僵尸网络),并指示这些机器同时访问目标网站,从而导致服务器过载无法处理合法用户的请求。

  • 意外的流量浪潮:例如,如果网站被列入热门新闻聚合站点(如Hacker News或过去的Slashdot),那么可能会引发大量的流量涌入,使网站无法为所有访问者提供服务。这是一种更温和的拒绝服务情况,但其结果仍会导致合法用户无法访问网站。

  • 数据库提供商停止运行:如果使用的是远程数据库,并且数据库提供商遇到问题导致服务中断,那么这也将阻止应用程序能够提供服务。

总的来说,拒绝服务攻击的目的是阻止合法用户访问和使用一个网络服务或应用程序。这些攻击可以以许多形式出现,并可能针对各种系统的各个部分,包括数据库、Web服务器等。

Elevation of Privilege(权限提升)

攻击者提升他们的权限,从而能够执行他们原本无法执行的操作,例如,通过利用系统的漏洞来获取管理员权限。

在这里插入图片描述

  • 缓冲区溢出攻击:一个用户可能执行像缓冲区溢出这样的攻击来破坏程序(如Web服务器)的内存。例如,Web服务器可能在内存中有一个标志,表明当前登录用户是否为管理员。攻击者可以通过执行缓冲区溢出攻击或其他内存破坏攻击来覆盖该标志的内容,并使Web服务器误认为攻击者是管理员。这样的低级别攻击(如缓冲区溢出等)是进行权限升级的有效方法。

  • 路径访问攻击:Web浏览器可能会以某种方式获得对应该仅管理员能访问的特定网站路径的访问权限。例如,如果Web服务器配置不当,攻击者可能通过输入特殊的URL来让网站访问服务器上不应该显示给用户的文件。这样可能使用户获得对他们不应该访问的内容的访问权,例如只有管理员应该能够访问的内容。

  • 直接连接到业务逻辑服务器:虽然这个例子不如前两个强,但它提到了Web服务器可能存在一个漏洞,允许用户的Web浏览器直接与业务逻辑服务器进行通信,这在某种程度上也可视为权限提升。

  • 请求其他用户的内容:例如,如果内容分发网络 (CDN)没有正确地将一个用户的内容与另一个用户的内容隔离开来,那么一个用户可能会访问到另一个用户的内容。尽管这个例子也可以被视为信息披露攻击,但其本质是一种权限提升攻击,因为用户能够访问他们本不应该能够访问的内容。

Attack Tree

教授通过一个例子详细解释了攻击树(attack tree)的概念和构建方法。攻击树是一种安全工程工具,它将攻击(例如,黑客入侵)的各种可能途径可视化,从而帮助我们更好地理解和防御这些攻击。

  • 之前学过 fault tree,fault tree是一个分析系统中可能的故障方式的图形工具,通常包含“与门”和“或门”。与门表示两个或两个以上的事件都需要发生才会导致最终的故障,而或门表示任一事件发生就会导致故障。然而,在这个讲座中,教授提到的 attack tree 仅使用了“或门”,这使得其比故障树简单。

  • 一个简单的物理安全例子(如何进入一栋大楼)来示范如何构建攻击树。从最初的攻击目标(进入大楼)开始,然后倒推回去,思考达成该目标所需的最直接的步骤或事件。这些可能包括通过门、窗或墙等进入。然后,再为这些事件中的一个(例如,通过门进入)制作更详细的攻击树,考虑可以通过哪些方式实现(例如,门未上锁、钻锁、撬锁、使用钥匙、社会工程等)。

  • 讲解中也提到了社会工程攻击,这是一种通过欺骗别人来获取他们不应提供的信息的攻击方式。此外,教授还强调,分析的粒度取决于我们自己,最重要的是始终关注最直接的原因。

  • 最后,虽然这次讲解的例子较为简单,但在处理更复杂的例子时,我们可能会需要像 fault tree 那样使用“与门”和“或门”,并考虑每种事件发生的概率,以更准确地估计攻击成功的整体概率。
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

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

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

相关文章

从开源软件看动态内存分配

动态内存分配 我们通常在C里面动态分配内存,会写出下面这样的代码: struct header {size_t len;unsigned char *data; }; 随后为data malloc一段内存出来,那么还有其他办法吗? 那便是弹性数组!在阐述本节之前&#xff…

数据安全有隐患?金仓数据60秒邀你闯关破题赢奖品

数字时代 数据成为宝贵资产 数据的安全 更是关乎行业可持续发展 关乎社会的稳定和国家战略 数据库作为 数据安全的首要防线 如何纵深防御 保障数据安全合规 满足新应用新场景下的安全防护要求 金仓数据60秒 发布多个视频为您详细剖析 同时,小编发起“闯关挑战”活动…

【Linux】14. 文件缓冲区

1. 文件缓冲区的引出 如上现象,在学习完文件缓冲区之后即可解释 2. 认识缓冲区 缓冲区的本质就是内存当中的一部分,那么是谁向内存申请的? 是属于谁的? 为什么要存在缓冲区呢? 道理是如此,在之前的学习过…

基于matlab仿真带有飞机的虚拟场景

一、前言 此示例演示如何通过 MATLAB接口使用空间鼠标。 开始此示例后,带有飞机的虚拟场景将显示在 Simulink 3D 动画查看器中。您可以使用空格鼠标在场景中导航平面。通过按下设备按钮 1,您可以在当前平面位置放置标记。 此示例需要空间鼠标或其他兼容设…

Neuralangelo AI - 视频生成3D模型

NVIDIA Research 宣布了 Neuralangelo,这是一种创新的 AI 模型,它利用神经网络的力量从 2D 视频剪辑中重建详细的 3D 结构。 Neuralangelo 能够生成逼真的建筑物、雕塑和其他现实世界物体的虚拟复制品,展示了 AI 在 3D 重建领域的非凡潜力。…

十个国内可用的智能AI模型

AI语言模型,就是一种利用机器学习和自然语言处理技术进行文本生成的算法。其基于大量已有的语料库进行训练,建立出一个能够理解自然语言规律和特征的语言模型。对于输入的文本、任务和目标,AI语言模型可以快速生成对应的结果。 在实际应用中&…

Flume入门监控端口数据官方案例

Flume安装部署 相关地址 Flume官网地址:http://flume.apache.org/文档查看地址:http://flume.apache.org/FlumeUserGuide.html下载地址:http://archive.apache.org/dist/flume/ 安装 将apache-flume-1.9.0-bin.tar.gz上传到linux的/opt/s…

责任链模式的学习与使用

1、责任链模式的学习 责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它允许你将请求沿着处理链进行传递,直到有一个处理者能够处理该请求。责任链模式将请求的发送者和接收者解耦,使多个对象都有机…

计算机网络通信过程

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和…

案例|某城商行Zabbix 监控架构分享

编者荐语: 东莞银行董天保将出席7月份Zabbix大会分享案例经验,欢迎参加! 以下文章来源于有田菜也香 ,作者AcidGo 东莞银行董天保先生将于7月份参加Zabbix大会分享使用经验,欢迎扫码参加! 【导读】某银行…

openCV(三)绘制几何图形

openCV内置了几何图形绘制函数,通过简单的操作就可以绘制几何图形。例如,可以绘制直线、矩形、圆形、椭圆、多边形、文字等,分别对应函数cv2.line()、cv2.rectangle()、cv2.circle()、cv2.ellipse()、cv2.polylines()、cv2.putText()。 下面来…

Mysql进阶【3】论述Mysql优化

1.通过explain查看sql的详细信息 Mysql的sql优化企业里边主要是对慢sql进行优化,对语句进行优化,对索引进行优化 通过explain查看sql的详细信息,并且分析sql语句存在的问题,比如有没有使用到索引、使用了索引还是慢是不是索引设…

第一章_从减库存聊起

在多线程高并发场景下,为了保证资源的线程安全问题, jdk 为我们提供了 synchronized 关键字和 ReentrantLock 可重入锁,但是它们只能保证一个 jvm 内的线程安全。在分布式集群、微服务、云原生横行的当下,如何保证不同进程、不同…

2023年京东618预售数据:传统滋补成预售黑马,预售额超27亿

这一期主要分享一下此次京东618预售期间的一个黑马行业——传统滋补。不管是从预售量和预售额来看,传统滋补品类的成绩都是此次大促中的佼佼者。 究其原因,近几年养生滋补也掀起了一股“国潮风”。在小红书、抖音等社交平台上,关于“健康养生…

车载摄像头专用——拓尔微低功耗超高集成PMIC TMI7205B

“2023将是汽车行业的大变革之年,全球迎来L2向L3/L4跨越窗口。”越高级别的自驾对周围环境感知要求越高,车载摄像头“高清化”势不可挡,目前已从传统的100万直接跃升至800万像素摄像头,甚至在供应层面,已有超1500万高像…

Vue.js 中的 $forceUpdate 方法是什么?有什么作用?

Vue.js 中的 $forceUpdate 方法是什么?有什么作用? 在 Vue.js 中,$forceUpdate 方法是一个很常见的方法之一。它可以强制组件重新渲染,从而让组件的视图更新。本文将介绍 $forceUpdate 方法的使用方法和作用,并给出一…

代码随想录算法训练营第二天| 977.有序数组的平方 209.长度最小的子数组 59.螺旋矩阵||

LeetCode977.有序数组的平方 链接:有序数组的平方 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 看到这道题,我第一反应就是把每个数的平方算出来然后排序&#xff…

结构体大小的计算

结构体计算要遵循字节对齐原则。 结构体默认的字节对齐一般满足三个准则: 结构体变量的首地址能够被其最宽基本类型成员的大小所整除;结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需…

【并发篇】04 线程池核心参数

这道题其实就是在问java中线程池的实现类ThreadPoolExecutor,这个类参数最多的构造方法有7个参数。 线程池本质上就是管理一组线程,用来执行提交给线程池的任务。提交任务用的是submit(task)。 corePoolSize设置核心线程数。核心线程执行完任务后仍然需…

java培训机构学校教学教务选课管理平台springboot+vue

近年来,随着培训机构机构规模的逐渐增大,人工书写的方式已经不能满足如此庞大的数据。为了更好的适应信息时代的高效性,一个利用计算机来实现培训机构教务管理工作的系统将必然诞生。基于这一点,设计了一个培训机构教务管理系统&a…