软件安全漏洞挖掘: 基础知识和概念

1. 软件漏洞原理和漏洞检测方法

文章目录

  • 1. 软件漏洞原理和漏洞检测方法
    • 1. 漏洞披露
    • 2. 漏洞定义和分类
      • 1. 漏洞的定义
      • 2. 漏洞的分类
    • 3. 漏洞检测方法
      • 常见方法
        • 1. 程序切片
        • 2. 形式化方法
          • 1. 符号执行
        • 3. 污点分析
          • 污点分析步骤/流程
          • *污点分析流程的详细介绍
            • 1. 识别source和sink点
            • 2. 污点传播分析
          • 显式流分析
          • 隐式流分析
            • 3. 无害处理
          • 污点分析举例
        • 4. fuzzing

1. 漏洞披露

CVE漏洞编号, 哪个项目?版本?函数?来个唯一的编号, 不是数据库, 就是个列表https://cve.mitre.org
CWE是漏洞的类型, 比如缓冲区溢出?注入?提权?是一个树形的结构给漏洞分类, 想看树图在CWE网站里搜CWE-1000或者其他的viewhttps://cwe.mitre.org
NVD美国的公开漏洞数据库, 用的是CVE编号, 但是是数据库https://nvd.nist.gov
CNVD/CNNVD中国的公开漏洞数据库
CVSS漏洞评分, 漏洞的危险程度https://www.first.org/cvss/

CWE我觉得可以作为很好的学习资料

注意里面对每个CWE编号进行了分类

  • P: Pillar - 支柱,通常用于描述更高层次的概念,帮助组织和理解不同类别之间的关系。
  • C: Class - 类别,代表一组相似的弱点。
  • B: Base - 基础类型,指的是最基本的弱点分类。
  • V: variant- 描述在非常低的细节水平上的弱点,通常限于特定语言或技术。
  • V: View - 描述一种对CWE的视图, 比如CWE-1000是research view

2. 漏洞定义和分类

1. 漏洞的定义

由RFC2828定义

RFC2828 page 190:

$ vulnerability

(I) A flaw or weakness in a system’s design, implementation, or operation and management that could be exploited to violate the system’s security policy.

和缺陷(defect), bug的区别是, 缺陷和bug这类错误不一定和安全相关, 比如功能上不符合设计, 逻辑不符合设计, 但是漏洞是和安全相关的, 就是这种错误被利用会导致安全问题(i.e. could be exploited to violate the system’s security policy.)

2. 漏洞的分类

就对着CWE看算了
(后来补)注意有种漏洞检测任务里的漏洞叫克隆漏洞, 虽然触发的方式还是按CWE分的, 但是和一般的漏洞检测不太相同, 克隆漏洞指的是一些漏洞在其他软件中被重用了, 导致表现跟原漏洞相同或相似的行为, 很多都是用的相似性漏洞检测的方法

3. 漏洞检测方法

graph TD;
coding(软件编码阶段)
exe(软件运行测试阶段)
s(软件源代码)
b(二进制文件)
sd(
源代码漏洞检测:
1.基于中间表示- 三地址码- PDG/AST- 程序切片
2. 形式化方法- 抽象解释- 符号执行
3. 污点分析
)
bds(
二进制静态检测:
- 基于模式
- 基于二进制代码匹配
)
bdsd(
二进制动静结合:
- 灰盒测试
- 动态污点分析
)
bdd(
二进制动态检测: 
- fuzzing
)
defect(软件缺陷: defect)
exception(软件异常和故障: exception / fault)
confirm(漏洞确认)
coding --> s
exe --> b
s --> sd
b --> bds
b --> bdsd
b --> bdd
sd --> defect
bds --> defect
bdsd --> exception
bdd --> exception
defect --> confirm
exception --> confirm

常见方法

1. 程序切片

静态切片: 不考虑程序具体输入, 给定变量, 与其有依赖关系的语句/谓词集合就是静态切片

动态切片? : 考虑给定输入的条件下, 执行路径上对某变量有影响的语句/谓词就是动态切片

2. 形式化方法
Abstract InterpretationSymbolic Execution
优点快速分析,
保证能终止
没有False Positive/Negative
(不误报也不漏报)
缺点避免不了的会有False Positive(误报)分析比较慢,
可能不能终止(termination)
1. 符号执行

不考虑输入的具体值而以符号代替, 用符号进行推导, 最后得到每个路径的到达条件和值, 用约束求解器(现成工具Z3/SMT)进行求解得到可以到达路径的条件和值

举例:

在这里插入图片描述

3. 污点分析
污点分析步骤/流程
  1. 识别sink点和source点: source点(污点源)表示程序外部数据(比如来自文件, 来自网络啥的), 或者用户所关心的程序内部数据, 是需要标记分析的输入数据, sink点(污点汇聚点)是敏感操作, 表示违反数据完整性或者数据保密性的操作
  2. 污点传播分析, 进行标记: 计算涉及到污点的执行过程, 扩散规则?
  3. 无害处理: 无害处理就是有些地方污点传播会被截断, 比如数据加密

污点分析就是分析, source能不能到sink, 如果不能就是信息流安全到, 如果能说明产生了隐私数据泄露或者危险数据操作

如果信息从污点数据传播给未标记的数据, 那么需要将未标记的标记为污点数据, 如果被标记的污点数据传递到重要数据区域或者信息泄漏点, 那就意味着信息流策略被违反

*污点分析流程的详细介绍
1. 识别source和sink点

有三种方法:

  1. 启发式, 把来自程序外部输入的数据统称为source点, 保守的认为含有恶意攻击数据
  2. 根据机器学习自动标记source和sink
  3. 手工标注, 重要的API和数据类型标记
2. 污点传播分析

就是分析污点标记数据在程序中的传播路径, 按照分析过程中关注的程序依赖关系的不同, 分为显式流分析和隐式流分析

显式流分析

就是分析变量的数据依赖关系

隐式流分析

就是分析控制依赖传播关系

3. 无害处理

污点数据在传播路径中经过无害处理模块就可以移除污点标记, 比如数据加密, 常数赋值

或者外部输入的数据进行加密, 验证

污点分析举例
int main() {int s1 = source();		// 1 source: 来自外部的不安全数据int s2 = source();		// 2int a = s1 + s2;			// 3if (s2 == 1) {				// 4int b = 2;					// 5}sink(a);							// 6sink(b);							// 7 sink: 一个敏感操作
}

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

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

相关文章

Pycharm通过ssh远程docker容器搭建开发环境

本地pycharm通过ssh方式远程连接服务器(Ubuntu)上的docker容器,搭建开发环境。实现功能:将环境依赖打包成docker镜像,并在远程服务器中启动容器(启动时做好端口映射和文件夹挂载),通…

使用vscode导入库失败解决方法

导入库失败原因 在使用vscode写python代码时,有时会遇见导入库失败的情况,如下图:无法解析导入“xxxxx” 或者 运行时报错:ModuleNotFoundError: No module named xxxxx。 原因可能有: 根本没有下载库&#xff1b…

Luminar Neo v1.21.0.13934 图像编辑软件绿色便携版

skylum Luminar Neo 是一款由未来 AI 技术驱动的创意图像编辑器。并且支持微软Windows及苹果Mac OX系统,它使创作者能够将他们最大胆的想法变为现实并乐在其中。借助 Luminar Neo 领先的 AI 技术和灵活的工作流程,完成创意任务并获得专业品质的编辑结果。…

java基础(5)继承与多态

目录 ​编辑 1.前言 2.正文 2.1继承 2.1.1继承概念 2.1.2继承语法 2.1.3子类访问父类 2.1.4super关键字 2.2多态 2.2.1多态概念 2.2.2多态条件 2.2.3重写 2.2.4向上转型与向下转型 2.2.5为什么要使用多态 3.小结 1.前言 哈喽大家好啊,今天继续来为大…

C++ operator new和operator delete的深入讲解

个人主页:Jason_from_China-CSDN博客 所属栏目:C系统性学习_Jason_from_China的博客-CSDN博客 所属栏目:C知识点的补充_Jason_from_China的博客-CSDN博客 前言 关于operator new和operator delete我们需要明确一个概念,这两个都是…

15.5 JDBC数据库编程5——DAO

目录 15.1.1 引言 实体类Product.java 异常类DaoException.java Dao.java ProductDao.java ProductDaoImpl.java ProductDaoTest.java 15.1.1 引言 Java是面向对象编程语言,主要操作对象,而关系数据库的数据并不是对象,Java程序插入…

linux线程 | 线程的控制(下)

前言: 本节内容是线程的控制部分的第二个小节。 主要是列出我们的线程控制部分的几个细节性问题以及我们的线程分离。这些都是需要大量的代码去进行实验的。所以, 准备好接受新知识的友友们请耐心观看。 现在开始我们的学习吧。 ps:本节内容适合了解线程…

动态内存管理(C语言 VS C++)

目录 一.动态内存管理的前置知识 1.栈区 a.栈区的特点 b.注意事项 2.堆区 a.堆区的特点 b.注意事项 3.全局/静态区 a.作用域和生命周期 b.注意事项 4.常量区 二.C语言动态内存管理 1.malloc 函数 a.接口简介与使用实例 b.注意要点 2.calloc 函数: 3.…

Flink Web UI 是使用和调试保姆级教程(持续更新)

Flink Web UI 是调试和监控 Flink 应用程序的重要工具,通过它,你可以实时查看正在运行的 Flink 任务的详细信息,包括作业的状态、性能指标、各子任务的运行情况、故障恢复情况等。Flink Web UI 的这些功能为开发者和运维人员提供了调试和优化…

软考系统分析师知识点十三:软件需求工程

前言 今年报考了11月份的软考高级:系统分析师。 考试时间为:11月9日。 倒计时:24天。 目标:优先应试,其次学习,再次实践。 复习计划第一阶段:扫平基础知识点,仅抽取有用信息&am…

FPGA采集adc,IP核用法,AD驱动(上半部分)

未完结,明天补全 IP核:集成的一个现有的模块 串口写好后基本不会再修改串口模块内部的一些逻辑,将串口.v文件添加进来,之后通过他的上层的接口去对他进行使用,所以我们打包IP,之后就不用去添加源文件了&a…

仿 Mac 个人网站开发 |项目复盘

一、前言 1.1 灵感来源 早年有幸看到国外大佬做的一个 基于 Web 的 Windows XP 桌面娱乐系统, 那时刚好有搭建一个个人博客的想法, 所以就想是否可以基于 WEB 实现一个仿 Mac UI 的个人博客, 以应用的形式来展示博客各个功能! 1.2 相关链接(求个 Star) 前端开源代码后端开源…

Linux之实战命令32:chroot应用实例(六十六)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【…

ali 231普通滑块82y版本

有需求可以联系博主 let v Died_in2021

【含开题报告+文档+PPT+源码】基于人脸识别的课堂考勤系统的设计与实现

开题报告 随着科技的不断发展,人脸识别技术已经逐渐渗透到各个领域,包括教育领域。传统的课堂考勤方式通常依赖于学生签到或教师手动记录,这种方式存在着许多不足之处,例如容易出现人为错误、耗费时间和资源等。为了解决这些问题…

诺贝尔经济学奖历史名单数据集(1969-2024年)

2024年诺贝尔经济学奖授予了达龙阿西莫格鲁(Daron Acemoglu)、西蒙约翰逊(Simon Johnson)和詹姆斯A罗宾逊(James A. Robinson),以表彰他们在理解制度如何影响经济发展方面的贡献。(“…

jmeter用csv data set config做参数化

在jmeter中,csv data set config的作用非常强大,用它来做批量测试和参数化非常好用。 csv data set config的常用配置项如下: Variable Names处,写上源文件中的参数名,用于后续接口发送请求时引用 Ignore first line…

泰克MDO3054示波器特性和规格Tektronix MSO3054 500M 四通道

Tektronix MDO3054 示波器,混合域,500 MHz,4 通道,5 GS/s 泰克 MDO3054 混合域示波器是终极 6 合 1 集成示波器,包括可选的集成频谱分析仪、任意函数发生器、逻辑分析仪、协议分析仪和数字电压表/计数器。泰克 MDO305…

python项目实战——下载美女图片

python项目实战——下载美女图片 文章目录 python项目实战——下载美女图片完整代码思路整理实现过程使用xpath语法找图片的链接检查链接是否正确下载图片创建文件夹获取一组图片的链接获取页数 获取目录页的链接 完善代码注意事项 完整代码 import requests import re import…

Java算术运算符 C语言的二维数组初始化

1. //算术运算符 public static void main(String[] args) {System.out.println(3.25.01);//若有小数参与,有可能不精确System.out.println(5-1);System.out.println(5*2);System.out.println(10.0/3);//这里不精确System.out.println(10%2);System.out.println();…