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

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.rhkb.cn/news/448681.html

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

相关文章

SpringBoot项目:mybatis升级mybatis-plus

替换依赖修改sqlSessionFactory bean分页插件不生效问题记录 1.替换依赖&#xff1a; 将原来的mybatis整合springboot的依赖去掉&#xff0c;替换成mybatis-plus <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter…

idea2024年版本

最简单安装2024.2版本idea 内带安装教程 ** 下载链接&#xff1a;https://pan.quark.cn/s/ab24afbaa43f 提取码&#xff1a;KHrq

blender分离含有多个动作的模型,并导出含有材质的fbx模型

问题背景 笔者是模型小白&#xff0c;需要将网络上下载的fbx模型中的动作&#xff0c;分离成单独的动作模型&#xff0c;经过3天摸爬滚打&#xff0c;先后使用了blender&#xff0c;3d max&#xff0c;unity&#xff0c;最终用blender完成&#xff0c;期间参考了众多网络上大佬…

用jsp以及servlet实现获取图片验证码

jsp文件 <% page contentType"text/html;charsetUTF-8" language"java" %> <% request.setCharacterEncoding("UTF-8"); %> <% response.setCharacterEncoding("UTF-8"); %> <html> <head><title&g…

【更新】中国地区粮食播种、粮食产量、灾害等数据(1990-2023年)

数据为中国地区粮食播种、粮食产量、灾害等数据&#xff0c;包括369个指标&#xff0c;各类农作物播种面积、粮食产量、牲畜饲养、受灾面积等。这些指标综合反映了中国农业生产、粮食安全的相关情况 一、数据介绍 数据名称&#xff1a;中国地区粮食播种、粮食产量、灾害等数据…

linux 环境运行 jenkins.war包,有可能会出现字体问题,jdk版本:11 jenkins 版本:2.420

jenkins的目录&#xff1a; /usr/jenkins 启动命令 java -Djava.awt.headlesstrue sudo timedatectl set-timezone Asia/Shanghai-Xmx1024m -jar jenkins.war --httpPort8090 任意目录启动&#xff1a; nohup java -Djava.awt.headlesstrue -Xms1024m -Xmx1024m -jar /usr/j…

Spark高级用法-数据源的读取与写入

目录 数据读取 数据写入 总结 数据读取 读文件 read.json read.csv csv文件有两个部分构成 头部数据&#xff0c;也就是字段数据&#xff0c;行数数据 read.orc 读数据库 read.jdbc(jdbc连接地址,table表名,properties{user用户名,password密码,driver驱动信息}) 缺少连…

西门子变频器SINAMICS V20选型

SINAMICS V20共有五种外形尺寸可供选择&#xff0c;输出功率覆盖0.12kW-30kW&#xff1a; V20订货号 单相230V&#xff1a; 三相380V&#xff1a;

Power BI:链接数据库与动态数据展示案例

一、案例背景 在数据驱动的时代&#xff0c;如何高效、直观地展示和分析数据成为了企业决策和个人洞察的关键。Power BI作为一款强大的商业智能工具&#xff0c;凭借其强大的数据连接能力、丰富的可视化选项以及交互性和动态性&#xff0c;成为了众多企业和个人的首选。本文将…

LabVIEW如何实现高精度定时器

在LabVIEW中实现高精度定时器通常需要考虑以下几个方面&#xff1a;定时器的精度要求、操作系统的调度机制、硬件资源&#xff08;如计时器、触发器&#xff09;等。以下是几种常见的实现方式&#xff1a; ​ 1. 使用 Wait(ms) 或 Wait Until Next ms Multiple VI 这两个函数…

微服务与SpringCloud的概述

微服务概述 微服务的提出&#xff1a;马丁福勒论文 微服务是一种架构模式或者是一种架构风格&#xff0c;它提倡将单一应用程序划分位一组小的服务&#xff0c;每个服务运行在其独立的自己的进程中&#xff0c;服务之间互相协调&#xff0c;互相配合&#xff0c;为用户提供最终…

使用Riotee轻松实现无电池TinyML

论文标题&#xff1a;Demo: Battery-free TinyML Made Easy with Riotee 中文标题&#xff1a;演示&#xff1a;使用Riotee轻松实现无电池TinyML 作者信息&#xff1a; Kai Geissdoerfer&#xff0c;Nessie Circuits&#xff0c;邮箱&#xff1a;kai.geissdoerfernessie-circ…

stm32 rtx操作系统 堆(heap) 栈(stack) keil在线监测

STM32内存分为3块区域&#xff1a;全局/静态变量区、栈区、堆区 其中全局/静态变量区用于存放全局/静态变量&#xff08;包括指针变量&#xff09;&#xff0c; 栈区用于存放当前运行的函数及其中定义的局部变量和程序指针等&#xff0c; 堆区用于存放动态申请的内存&#xff0…

AI在医学领域:使用生成式深度学习和信号处理技术增强心脏听诊信号

心血管疾病&#xff08;CVD&#xff09;是全球死亡的主要原因&#xff0c;占2019年所有全球死亡的30%以上。为了有效地治疗CVD&#xff0c;准确诊断和评估心脏状况至关重要。心脏听诊&#xff08;CA&#xff09;是一种非侵入性方法&#xff0c;通过听取心脏产生的声音来检测和监…

日语学习零基础生活日语口语柯桥外语学校|股票用日语怎么说?

在日语中&#xff0c;“股票”可以说&#xff1a; • 株&#xff08;かぶ&#xff09; 这是最常用的表达方式&#xff0c;直接表示“股票”。 例如&#xff1a; 株を買う - 买股票 株を売る - 卖股票 • 株式&#xff08;かぶしき&#xff09; 这个词也是“股票”的意…

【C语言刷力扣】1832.判断句子是否为全字母句

题目&#xff1a; 法一 bool checkIfPangram(char* sentence) {int str[256];memset(str, 0, sizeof(int));for (int i 0; i < strlen(sentence); i) {str[ sentence[i] ];}for (int j a; j < z; j) {if (!str[j]) return false;}return true; } 法二 动态分配 typ…

微课录制 “绊脚石”,电脑录屏时PPT 与画板冲突及解决全析

在教育数字化转型的浪潮中&#xff0c;微课录制成为教师传授知识的新方式。最近&#xff0c;一位用户在评论区提出了一个常见问题&#xff1a;在使用画板功能辅助标注时&#xff0c;PPT无法正常切换&#xff0c;影响了微课的流畅性。这是一个典型的技术冲突问题&#xff0c;关系…

安防综合管理系统EasyCVR视频汇聚平台Linux环境下如何测试UDP端口是否正常开启?

视频汇聚EasyCVR安防监控视频系统采用先进的网络传输技术&#xff0c;支持高清视频的接入和传输&#xff0c;能够满足大规模、高并发的远程监控需求。平台灵活性强&#xff0c;支持国标GB/T 28181协议、部标JT808、GA/T 1400协议、RTMP、RTSP/Onvif协议、海康Ehome、海康SDK、大…

kernel32.dll下载地址:如何安全地恢复系统文件

关于从网络上寻找kernel32.dll的下载地址&#xff0c;这通常不是一个安全的做法&#xff0c;而且可能涉及到多种风险。kernel32.dll是Windows操作系统的核心组件之一&#xff0c;负责内存管理、进程和线程管理以及其他关键系统功能。因为kernel32.dll是系统的基础文件&#xff…

国家海洋环境预报中心李本霞:全国首个海浪智能预报系统已投入业务化运行,AI助力海浪预报多项突破

近日&#xff0c;在第 20 届 CCF HPC China 2024 大会中&#xff0c;第六届海洋数值预报与高性能计算论坛圆满举办。在本次大会上&#xff0c;国家海洋环境预报中心海浪预报室主任李本霞以「人工智能在海浪预报中的应用」为主题展开演讲&#xff0c; HyperAI超神经在不违原意的…