以攻击者的视角进行软件安全防护
1. 前言
孙子曰:知彼知己者,百战不殆;不知彼而知己,一胜一负,不知彼,不知己,每战必殆。 摘自《 孙子兵法·谋攻篇 》
在2500 年前的那个波澜壮阔的春秋战国时代,孙子兵法的这段话,给出了作战的三个层次。这个思想同样适用于软件的安全的攻防。
- 充足的防御准备与对攻击者观点的理解相结合,可以更好的为软件安全带来保证;
- 仅靠充足的防御措施可以保护系统免受已知威胁,但软件系统仍容易受到外部的的攻击;
- 缺乏主动防御和对攻击者视角的理解,会让软件系统完全称为待宰的肉鸡。
为了构建安全的软件,构建者必须确保已经保护了所有相关的潜在漏洞。然而,要攻击软件,攻击者通常只需要找到并利用一个暴露的漏洞。
为了识别和缓解软件中的相关漏洞,开发者需要的不仅仅是良好的软件工程和分析实践、对软件安全功能的扎实掌握以及一套强大的工具。所有这些都是必要的,但不是充分的。
为了有效地应对软件攻击,防护者需要牢牢掌握攻击者的观点和用于利用软件系统的方法。
了解对手的运作方式对于有效的网络安全至关重要。
2. 通用攻击模式枚举与分类(Common Attack Pattern Enumeration and Classification(CAPEC))
通用攻击模式枚举与分类(Common Attack Pattern Enumeration and Classification(CAPEC)) 向我们提供了一个攻击者视角的攻击模式,以帮助增强整个软件开发生命周期的安全性,并支持开发人员、测试人员和教育工作者的需求。
CAPEC 以正向和建设性的方式表达攻击者的观点,为各级软件开发人员提供专家级的理解和指导,让他们了解他们的软件可能如何受到攻击,从而使他们能够构建更安全的软件。
CAPEC 通过提供一个全面的已知攻击模式字典来帮助攻击者利用网络能力中的已知弱点。
分析师、开发人员、测试人员和教育工作者可以使用它来促进社区理解和增强防御。
常见攻击模式枚举和分类提供了一个公开可用的常见攻击模式目录,帮助用户了解攻击者如何利用应用程序和其他网络功能中的弱点。
“攻击模式”是对攻击者利用网络能力的已知弱点所采用的常见属性和方法的描述。攻击模式定义了对手可能面临的挑战以及他们如何解决这些挑战。它们源自在破坏性而非建设性环境中应用的设计模式概念,并产生于对特定现实世界漏洞利用示例的深入分析。
每个攻击模式都会获取有关如何设计和执行攻击的特定部分的知识,并提供有关降低攻击有效性的方法的指导。攻击模式可帮助开发应用程序或管理网络功能的人员更好地了解攻击的特定元素以及如何阻止它们成功。
2.1. 节点类别
和 CWE 类似,CAPEC 以树、节点的方式展示攻击模式。
图标 | 节点类型 | 节点描述 |
---|---|---|
| 类别(Category) | 是基于某些常见特征的攻击模式的集合, 是基于效果/意图的攻击模式聚合, 聚合元攻击模式。 基于效果/意图的聚合不是可操作的攻击,因此不是一种攻击行为模式, 它是基于一些常见标准的一组模式。 |
| 元攻击模式(Meta Attack Pattern) | 是对攻击中使用的特定方法或技术的绝对抽象的描述。 元攻击模式通常没有特定的技术或实现,旨在提供对高级方法的理解。 元级别攻击模式是标准级别攻击模式的相关组的泛化。 元级攻击模式对于架构和设计级威胁建模练习特别有用。 |
| 标准攻击模式(Standard Attack Pattern) | 侧重于攻击中使用的特定方法或技术。它通常被视为完全执行的攻击的单个部分。标准攻击模式旨在提供足够的详细信息来了解特定技术以及它如何尝试实现预期目标。标准级别攻击模式是更抽象的元级别攻击模式的一种特定类型。 |
| 详细攻击模式(Detailed Attack Pattern) | 提供较低级别的详细信息,通常利用特定技术并针对特定技术,并表示完整的执行流程。详细的攻击模式比元攻击模式和标准攻击模式更具体,并且通常需要特定的保护机制来缓解实际攻击。详细的级别攻击模式通常会利用链接在一起的许多不同的标准级别攻击模式来实现目标。 |
2.2. 视图
2.2.1. 攻击机制的视图(CAPEC-1000)
视图根据利用漏洞时经常使用的机制分层组织攻击模式。作为该视图成员的类别代表用于攻击系统的不同技术。它们并不代表攻击的后果或目标。根据不同人的观点,某些攻击模式有可能与多个类别保持一致。为了解决这个问题,重点放在了每个类别中呈现的攻击模式,而不是有时,但无一例外地使用一种技术。
- 本视图包含的节点
- | 这个视图 | 全部 |
---|---|---|
攻击模式 | 541 | 541 |
类别 | 9 | 15 |
视图 | 0 | 11 |
总计 | 550 | 567 |
2.2.2. 攻击域的视图(CAPEC-3000)
视图根据攻击域分层组织攻击模式。
- 本视图包含的节点
- | 这个视图 | 全部 |
---|---|---|
攻击模式 | 541 | 541 |
类别 | 6 | 15 |
视图 | 0 | 11 |
总计 | 547 | 567 |
2.2.3. 扩展视图
扩展视图用于表示映射到外部分组(如前 N 个列表)的映射,以及表示由某些外部因素相关的条目子集。
-
CAPEC-333:按 WASC 威胁分类 2.0 查看
- 过滤条件:
/Attack_Pattern_Catalog/*/*[Taxonomy_Mappings/Taxonomy_Mapping[@Taxonomy_Name='WASC']]
- 过滤条件:
-
CAPEC-658:按 ATT&CK 相关模式查看
- 过滤条件:
/Attack_Pattern_Catalog/*/*[Taxonomy_Mappings/Taxonomy_Mapping[@Taxonomy_Name='ATTACK']]
- 过滤条件:
-
CAPEC-659:按 OWASP 相关模式查看
- 过滤条件:
/Attack_Pattern_Catalog/*/*[Taxonomy_Mappings/Taxonomy_Mapping[@Taxonomy_Name='OWASP Attacks']]
- 过滤条件:
2.2.4. 有用的视图
已创建许多其他有用的视图。这些基于特定标准,希望为特定域或用例提供见解。
- CAPEC-703:按工业控制系统(ICS)模式查看
- CAPEC-683:按供应链风险查看
- CAPEC-553:按移动设备模式查看
- CAPEC-2000:按综合 CAPEC 词典查看
- CAPEC-282:按元抽象查看
- CAPEC-283:按标准抽象查看
- CAPEC-284:按详细抽象查看
- CAPEC-483:按已弃用的条目查看
3. 例子:CAPEC-34
标题 | 描述 |
---|---|
名称 | HTTP 响应拆分 |
典型严重性 | 高 |
描述 | HTTP 响应拆分通过发送 HTTP 响应流,使其被解释为两个单独的响应,而不是单个响应,从而导致易受攻击的 Web 服务器响应恶意构建的请求。当用户控制的输入未经验证地用作响应标头的一部分时,这是可能的。攻击者可以让受害者将注入的标头解释为对第二个虚拟请求的响应,从而导致显示并可能缓存构建的内容。为了在易受攻击的 Web 服务器上实现 HTTP 响应拆分,攻击者: 1. 标识导致任意 HTTP 标头注入的用户可控制输入。 2. 制作包含数据的恶意输入以终止原始响应,并使用攻击者控制的标头启动第二个响应。 3. 使受害者向服务器发送两个请求。第一个请求由恶意构建的输入组成,用作 HTTP 响应标头的一部分,第二个请求是虚拟请求,以便受害者将拆分响应解释为属于第二个请求。 |
攻击先决条件 | 用户控制的输入用作 HTTP 标头的一部分 攻击者能够在 HTTP 标头中注入自定义字符串 应用程序中的输入验证不足,无法在将其用作响应标头的一部分之前检查输入的健全性 |
典型的利用可能性 | 中等 |
攻击方法 | 注入 协议操作 |
示例 - 实例 | 在 PHP 5 会话扩展机制中,用户提供的会话 ID 在 Set-Cookie HTTP 头中发送回给用户。由于用户提供的会话 ID 的内容未经过验证,因此可以将任意 HTTP 标头注入响应正文。这立即启用了 HTTP 响应拆分,只需从 Set-Cookie 指令中使用的会话 ID 中终止 HTTP 响应标头即可。CVE-2006-0207 漏洞 |
攻击者技能或所需知识 | 高 - 攻击者需要对 HTTP 协议和 HTTP 标头有深入的了解,并且必须能够构建和注入请求以引出拆分响应。 |
所需资源 | 无 |
探测技术 | 使用可用的源代码,攻击者可以在将用户输入用作输出的一部分之前查看用户输入是否经过验证。这也可以通过静态代码分析工具来实现 如果源代码不可用,攻击者可以尝试注入 CR-LF 序列(通常在输入中编码为 %0d%0a)并使用 Paros 等代理来观察响应。如果生成的注入导致无效请求,则 Web 服务器还可能指示协议错误。 |
标识 - 攻击警告 | 唯一的标识是对 Web 日志中单个请求的多个响应。但是,在没有应用程序筛选器代理或日志分析器的情况下,很难注意到这一点。客户端没有标识 |
解决方案和缓解措施 | 为避免 HTTP 响应拆分,应用程序不得依赖用户可控制的输入来构成其输出响应流的一部分。具体来说,响应分裂是由于注入 CR-LF 序列和附加标头而发生的。来自用户并用作 HTTP 响应标头一部分的所有数据都必须经过严格验证,以执行简单的基于字符的语义筛选,以去除恶意字符序列和标头。 |
攻击动机-后果 | 执行未经授权的代码或命令 获取权限/代入身份 |
上下文描述 | HTTP 响应拆分攻击发生在服务器脚本将用户可控制的数据嵌入 HTTP 响应标头中的位置。当脚本将此类数据嵌入重定向响应的重定向 URL(HTTP 状态代码 3xx)中时,或者当响应设置 Cookie 时脚本将此类数据嵌入 Cookie 值或名称中时,通常会发生这种情况。在第一种情况下,重定向 URL 是 Location HTTP 响应标头的一部分,在 Cookie 设置中,Cookie 名称/值对是 Set- Cookie HTTP 响应标头的一部分。 |
注入向量 | 用户可控制的输入,构成输出 HTTP 响应标头的一部分 |
有效载荷 | 编码的 HTTP 标头和数据由适当的 CR-LF 序列分隔。注入的数据必须包含合法且格式正确的 HTTP 标头以及作为 HTML 正文包含的所需脚本。 |
激活区域 | 应用程序中设置输出响应标头的激活区域 API 调用。 |
负载激活冲击 | 有效负载激活的影响在于,向目标发出两个不同的 HTTP 响应,第一个响应解释为对假定有效请求的响应,第二个响应(导致实际攻击)是对攻击者发出的第二个虚拟请求的响应。 |
CIA 影响 | 机密性影响:高 完整性影响:高 可用性影响:低 |
相关弱点 | CWE113 - HTTP 响应拆分 - 目标 CWE74 - 注入 - 辅助 CWE697 - 比较不足 - 目标 CWE707 - 消息或数据结构执行不当 - 目标 CWE713 - OWASP 2007 年前十名 A2 类别 - 注入缺陷 - 目标 |
安全要求 | 所有客户端提供的输入都必须通过筛选进行验证,并且所有输出都必须正确转义。 |
安全原则 | 不愿信任 |
相关准则 | 永远不要相信用户提供的输入。 |
参考 | G. Hoglund 和 G. McGraw。利用软件:如何破解代码。Addison-Wesley,2004 年 2 月。 |
4. CAPEC 与 ATT&CK 比较
了解对手的行为在网络安全中越来越重要。有两种方法可以组织有关对手行为的知识 – CAPEC 和 ATT&CK,每种方法都专注于一组特定的用例。
CAPEC 和 ATT&CK 之间的相似之处、不同之处和关系,以及它们在网络安全中的作用。
-
常见攻击模式枚举和分类(Common Attack Pattern Enumeration and Classification (CAPEC))
CAPEC 专注于应用程序安全,并描述了攻击者用来利用网络支持功能中的已知弱点的常见属性和技术。(例如,SQL 注入、XSS、会话固定、点击劫持)- 关注应用程序安全性
- 列举针对易受攻击系统的漏洞
- 包括社会工程/供应链
- 与常见弱点枚举(Common Weakness Enumeration (CWE))相关
-
对抗性策略、技术和常识 (Adversarial Tactics, Techniques & Common Knowledge (ATT&CK))
ATT&CK 专注于网络防御,描述了对手生命周期中的操作阶段,即漏洞利用前后(例如,持久性、横向移动、渗透),并详细介绍了高级持续性威胁 (APT) 在网络内定位、妥协和操作时用于执行其目标的特定策略、技术和程序 (TTP)。- 专注于网络防御
- 基于威胁情报和红队研究
- 提供对恶意行为的上下文理解
- 支持防御选项的测试和分析
4.1. 关联
CAPEC 列举的许多攻击模式都是由 ATT&CK 描述的特定技术被攻击者采用的。这样就可以对对手操作生命周期内的攻击模式进行上下文理解。CAPEC 攻击模式和相关的 ATT&CK 技术在适当的时候在这两项工作之间进行交叉引用。
4.2. 使用上的差异
4.2.1. CAPEC 可用于
- 应用程序威胁建模
- 开发人员培训和教育
- 渗透测试
4.2.2. ATT&CK 可用于
- 比较计算机网络防御功能
- 抵御高级的持续威胁
- 搜寻新威胁
- 增强威胁情报
- 对手仿真练习
5. 参考
- CAPEC: https://capec.mitre.org/
- ATT&ACK: https://attack.mitre.org/
相关文章:

以攻击者的视角进行软件安全防护
1. 前言 孙子曰:知彼知己者,百战不殆;不知彼而知己,一胜一负,不知彼,不知己,每战必殆。 摘自《 孙子兵法谋攻篇 》在2500 年前的那个波澜壮阔的春秋战国时代,孙子兵法的这段话&…...

008.精读《Apache Paimon Docs - Table w/o PK》
文章目录 1. 引言2. 基本概念2.1 定义2.2 使用场景 3. 流式处理3.1 自动小文件合并3.2 流式查询 4. 数据更新4.1 查询4.2 更新4.3 分桶附加表 5 总结 1. 引言 通过本文,上篇我们了解了Apache Paimon 主键表,本期我们将继续学习附加表(Append…...

C#实时监控指定文件夹中的动态,并将文件夹中生成的新图片显示在界面上(相机采图,并且从本地拿图)
结果展示 此类原理适用于文件夹中自动生成图片,并提取最新生成的图片将其显示, 如果你是相机采图将其保存到本地,可以用这中方法可视化,并将检测的结果和图片匹配 理论上任何文件都是可以监视并显示的,我这里只是做了…...

使用SQLark分析达梦慢SQL执行计划的一次实践
最近刚参加完达梦的 DCP 培训与考试,正好业务系统有个 sql 查询较慢,就想着练练手。 在深入了解达梦的过程中,发现达梦新出了一款叫 SQLark 百灵连接的工具。 我首先去官网大致浏览了下。虽然 SQLark 在功能深度上不如 DM Manager 和 PL/SQ…...
【人工智能】用Python构建高效的自动化数据标注工具:从理论到实现
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 数据标注是构建高质量机器学习模型的关键环节,但其耗时耗力常成为制约因素。本篇文章将介绍如何用Python构建一个自动化数据标注工具,结合机器学习和NLP技术,帮助加速数据标注过程。我们将从需求分析入…...
Java --- 注解(Annotation)
一.什么是注解? 在Java中,注解(Annotation)是一种元数据(metadata),它为程序中的类、方法、字段等提供额外的描述信息。注解本身不直接改变程序的行为,但可以被编译器、开发工具、框…...

nodejs作为provider接入nacos
需求:公司产品一直是nodejs的后台,采用的eggjs框架,也不是最新版本,现有有需求需求将这些应用集成到微服务的注册中心,领导要求用java。 思路:用spring cloud gateway将需要暴露的接口url转发,…...

SpringBoot3+Micormeter监控应用指标
监控内容简介 SpringBoot3项目监控服务 ,可以使用Micormeter度量指标库,帮助我们监控应用程序的度量指标,并将其发送到Prometheus中并用Grafana展示。监控指标有系统负载、内存使用情况、应用程序的响应时间、吞吐量、错误率等。 micromete…...

Mybatis-plus 简单使用,mybatis-plus 分页模糊查询报500 的错
一、mybtis-plus配置下载 MyBatis-Plus 是一个 Mybatis 增强版工具,在 MyBatis 上扩充了其他功能没有改变其基本功能,为了简化开发提交效率而存在。 具体的介绍请参见官方文档。 官网文档地址:mybatis-plus 添加mybatis-plus依赖 <depe…...
2022 年 12 月青少年软编等考 C 语言三级真题解析
目录 T1. 鸡兔同笼思路分析T2. 猴子吃桃思路分析T3. 括号匹配问题T4. 上台阶思路分析T5. 田忌赛马T1. 鸡兔同笼 一个笼子里面关了鸡和兔子(鸡有 2 2 2 只脚,兔子有 4 4 4 只脚,没有例外)。已经知道了笼子里面脚的总数 a a a,问笼子里面至少有多少只动物,至多有多少只…...

webpack 题目
文章目录 webpack 中 chunkHash 和 contentHash 的区别loader和plugin的区别?webpack 处理 image 是用哪个 loader,限制 image 大小的是...;webpack 如何优化打包速度 webpack 中 chunkHash 和 contentHash 的区别 主要从四方面来讲一下区别&…...

【MySQL】视图详解
视图详解 一、视图的概念二、视图的常用操作2.1创建视图2.2查询视图2.3修改视图2.4 删除视图2.5向视图中插入数据 三、视图的检查选项3.1 cascaded(级联 )3.2 local(本地) 四、视图的作用 一、视图的概念 视图(View)是一种虚拟存…...

第一节:ORIN NX介绍与基于sdkmanager的镜像烧录(包含ubuntu文件系统/CUDA/OpenCV/cudnn/TensorRT)
ORIN NX技术参数 Orin NX版本对比 如上图所示,ORIN NX官方发布的版本有两个版本一个版本是70TOPS算力,DDR为8GB的版本低配版本,一个是100TOPS算法,DDR为16GB的高配版本。 Orin NX的外设框图 两个版本除了GPU和DDR的差距外,外设基本上没有区别,丰富的外设接口,后续开发…...

2024-12-04OpenCV视频处理基础
OpenCV视频处理基础 OpenCV的视频教学:https://www.bilibili.com/video/BV14P411D7MH 1-OpenCV视频捕获 在 OpenCV 中,cv2.VideoCapture() 是一个用于捕获视频流的类。它可以用来从摄像头捕获实时视频,或者从视频文件中读取帧。以下是如何使用…...
D89【python 接口自动化学习】- pytest基础用法
day89 pytest的setup,setdown详解 学习日期:20241205 学习目标:pytest基础用法 -- pytest的setup,setdown详解 学习笔记: setup、teardown详解 模块级 setup_module/teardown_module 开始于模块始末,生…...

七、docker registry
七、docker registry 7.1 了解Docker Registry 7.1.1 介绍 registry 用于保存docker 镜像,包括镜像的层次结构和元数据。启动容器时,docker daemon会试图从本地获取相关的镜像;本地镜像不存在时,其将从registry中下载该镜像并保…...

FlightGear+MATLAB+飞行手柄实现实时飞控视景系统
文章目录 一、软件配置二、FlightGearMATLAB联合仿真第一步 复制文件第二步 新建文件夹第三步 打开demo第四步 demo说明第五步 打开Simulink第六步 连接FlightGear第七步 设置FlightGear第八步 生成FlightGear连接文件FlightGear的设置Network的设置File的设置生成.bat文件 第九…...
深入 Java 基础 XML:高级特性与最佳实践
在上一篇文章中,我们对 Java 基础 XML 有了一个初步的认识,了解了 XML 的基本结构以及在 Java 中常见的解析方式。今天,我们将进一步深入探讨 Java 与 XML 的结合,包括一些高级特性和最佳实践。 一、XML 命名空间 在复杂的 XML …...

【论文阅读】Fifty Years of the ISCA: A Data-Driven Retrospective
学习体会: ISCA会议近五十年文章分析, 了解论文热点方向, 处理器依旧是热点! AI和并行是大趋势, 做XPU相关目前来说还是热点~ 摘录自原文 摘录: 数据来源和分析方法: 作者收集了 ACM 数字图书馆中所有 ISCA 论文,并使用 DBLP、Google Schol…...
TVbox源贡献指南
欢迎各路大佬踊跃提PR,分享爬虫代码。 源码仓库地址 https://github.com/lushunming/AndroidCatVodSpider 快速开始 本工程是一个完整的AndroidStudio工程,请你用AS打开编辑。 工程调试完毕后要需要导出生成jar文件配合软件使用,执行根目…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...

大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...

如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...

基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...