国科大软件安全原理期末复习笔记
1 软件安全总论
1.软件的三大特性:复杂性、互连性、可扩展性;
2.基本概念:缺陷、漏洞、风险
- 缺陷(bug):软件在设计和实现上的错误;
- 漏洞(vulnerability):漏洞是可以导致系统安全策略被违反的缺陷;
- 软件漏洞挖掘 Software Vulnerability Analysis (VA):软件漏洞挖掘是通过测试、代码分析、形式化验证等方法发现软件漏洞的过程
- 风险(risk):安全风险是攻击者利用系统漏洞或人员漏洞影响系统正常功效的概率。
3.基本概念:安全软件、软件安全
- 安全软件:指实现安全功能的模块或软件;
- 软件安全:是一个系统级问题,包括安全机制:比如访问控制、认证加密等;以及使软件能够抵御攻击的软件工程化方法,比如使攻击难以实施的健壮设计;
4.编译过程:预处理、编译、汇编、链接;
5.ELF 二进制文件中常见的section:
- .bss 段:Block Started by Symbol的简称,BSS段属于静态内存分配,用来存放程序中未初始化的全局变量的一块内存区域;
- .data/.data1 段:存放程序中已初始化的全局变量的一块内存区域,静态内存分配;
- .rodata/.rodata1段:保存着只读数据;
- .text 代码段:存放程序执行代码的一块内存区域;
- .debug 段:保存着为符号调试的信息,如:变量名,函数名,结构体等;
- .init 段:该节保存着可执行指令,它构成了进程的初始化代码。当一个程序开始运行时,在main函数被调用之前(c语言中称为main),系统安排执行这个节的中的代码。
- .plt 段:过程链接表(Procedure Linkage Table);
- .got 段:全局的偏移量表(Global offset table) ;
6.小端序、大端序
7. 堆栈
函数栈
2 软件安全基本原理
软件安全的目标:允许对软件进行预期的操作,阻止任何非预期的操作
非预期操作:有可能因非预期使用计算机资源而带来危害。
系统安全基本原则
1.身份认证:
- 核实某人是否是其所宣称的人的过程;
- 分类:某人知道什么(知识)、某人拥有什么(所有权)、某人是什么(特征)
- 身份认证方式:口令、生物特征因子、属性、多因子认证
2.访问控制:
- 访问控制:是一种安全手段,它控制用户和系统如何与其它系统和资源进行通信和交互,从而保护系统和资源免受未授权访问。
- 访问:在主体和客体之间进行的信息流动,包括读取、增加、删除、修改信息内容及其属性。
- CIA:保密性 Confidentiality、完整性 Integrity、可用性 Availability;
隔离原则
隔离 (Isolation):对系统中两个组件进行相互隔离,并通过将两者之间的交互限制在清晰设定(well-defined)的API之内。
安全监视器(Security Monitor):以比各隔离组件更高权限运行,监视并确保各组件遵循隔离要求。
进程抽象通过以下两种机制实现隔离:用户态与内核态两种不同特权运行模式、虚拟内存地址空间。
- 进程抽象:
- 进程 (Process)是一个程序的执行过程。是操作系统的基本执行单元。
- 虚拟内存地址空间(virtual memory address space):操作系统的内存管理单元 (Memory Management Unit, MMU)负责管理虚拟内存。MMU通过页表(page table)机制管理虚拟内存,并将虚拟内存空间划分为用户空间和内核空间。进程只能运行在虚拟地址空间中,而无法直接访问物理内存。
- 用户态(user mode)与内核态 (kernal mode):
- 内核态是操作系统运行在特权级别最高的模式下,具有访问系统资源和执行特权指令的能力。内核态进程可以访问内核空间和该进程的用户空间。
- 用户态是应用程序运行在较低特权级别下的模式。用户态进程只能访问其用户空间。
- 虚拟机、容器:
- SFI (Software-based Fault Isolation):一种纯软件的故障隔离方法,可在同一地址空间内不同模块间实现故障隔离。
最小权限原则
- 最小权限原则(Principle of least privilege):系统中每个组件或用户都只须拥有完成任务所需的最小权限集合。
区域化原则
- 区域化(Compartmentalization):将一个系统的各部分区隔开,以阻止失效(malfunction)或故障在各部分之间传播。
威胁模型与威胁建模
威胁模型(Threat model):用于明确列出危害一个系统的安全的所有威胁。
威胁建模(Threat modeling):对一个系统的所有潜在威胁进行枚举并按优先级排序的过程。
内存与类型安全
-
软件为何存在安全问题?
- 1.过分依赖开发者的“自觉”;2:将程序控制信息和数据混为一谈;3:将数据和元数据混为一谈;4:不负责内存初始化和清理;
-
基于编程语言的安全 (Language-based Security,LS) 是指由编程语言提供的特性或机制,这些特性或机制有助于构建安全的软件。
- 内存安全 (Memory Safety)、类型安全 (Type Safety);
-
内存安全 (Memory safety) 确保程序中的指针总是指向有效的内存区域或内存对象。
- 缺乏边界检查或指针算术操作失误导致的缓冲区溢出 (Buffer Overflow)
- 空指针解引用 (Null Pointer Dereference) 导致的程序崩溃
- 悬空指针 (Dangling pointer)、内存泄露(Memory Leak)、释放后使用(Use After Free)、双重释放 (Double Free)
- 堆内存没有初始化导致的程序错误
空间内存安全 (Spatial Memory Safety) 确保在程序中对指针的所有解引用(dereference) 都在所指向内存对象的有效边界之内(简言之,确保不越界读写)
时间内存安全(Temporal memory safety) 确保在程序中,所有对指针的解引用行为在进行时,指针所指向的内存对象都是有效的
- 类型安全:类型安全是编程语言中的一种概念,它为每个分配的内存对象赋予一个类型,被赋予类型的内存对象只能在期望对应类型的程序点使用。
软件安全攻击手段
- 攻击向量 vs 攻击面
攻击向量是攻击者用来对信息系统进行攻击的方法或手段,典型的有钓鱼邮件、失陷凭证、弱口令等; 攻击面是企业所有资产上面临的所有攻击向量的总和。
- 拒绝服务攻击、信息泄露
- 特权提升 (Privilege escalation) 是指利用操作系统或应用软件中的程序错误、设计缺陷或配置疏忽来以更高的权限访问被程序或用户保护的资源。其结果是,应用程序可以获取比应用程序开发者或系统管理员预期的更高的特权。
- 远程代码执行 RCE (Remote Code Execution)
- 本地权限提升LPE (Local Privilege Escalation)
提权手段:控制流劫持 (Control-flow Hijacking) 攻击、命令注入 (Command Injection) 攻击
- 困惑代理人 (Confused deputy) 问题:Confused Deputy 是一个具有较高权限的程序,它被另一个具有较低权限的程序或用户欺骗,以滥用其在系统上的(更高的)权限,这是一类特殊的提权攻击。
- Shellcode:shellcode 是软件漏洞利用载荷 (payload) 中的一小段代码。之所以称其为“shellcode”,是因为它通常会在受攻击主机上启动一个shell 程序,攻击者可通过它在被攻击的主机上执行任意命令,任何执行类似任务的攻击代码都可称为 shellcode。
栈溢出漏洞
ret2text
ret2shellcode
ROP
返回导向编程 (Return-Oriented Programming, ROP) 是一种非常重要的漏洞利用技术,该漏洞利用技术允许攻击者在目标程序 启用了 DEP 的情况 下劫持程序控制流。
return-to-libc
- 竞争条件漏洞:当一个程序的两个并发线程同时访问共享资源时,如果执行时间和顺序不同,会对结果产生影响,这时就称作发生了竞争条件。竞争条件漏洞(Race Condition Vulnerability)程序存在的因发生竞争条件而违反安全策略的缺陷或(逻辑)错误。
软件安全防御策略
-
软件验证(Software Verification)根据给定的规格说明(specification)证明代码正确性的过程。
-
验证过程:对安全限定条件(constraint),如“不能违反内存或类型安全要求”进行编码,
并作为配置(configuration)参数提供给验证器。 -
对于一个存在漏洞的软件,漏洞缓解(Mitigation)措施可以使其漏洞利用变得更难,但不会修复漏洞,因此漏洞依然存在于软件中。
DEP
- 内存页的权限可以通过 mprotect() 系统调用改变;
- JIT (Just in Time Compilation) 即时编译需要在程序运行过程中生成代码并执行,在存在即时编译机制的程序中,可写可执行的内存页是很常见的;
地址空间布局随机化 ASLR
PIC (position-independent code): 是一种可以在任何内存位置执行的代码,常用于动态链接库(回顾:在 ASLR下动态链接库的加载地址发生了变化,但每次都可以正常运行)。
PIE 是一种用于可执行程序、特殊类型的 PIC,它允许 ELF 可执行程序被系统加载至内存空间的任何位置并正常执行。
栈完整性保护
Fortify Source
将危险函数替换为可自动检查缓冲区边界的对应函数,以防止简单的缓冲区溢出和格式化字符串漏洞
控制流完整性
控制流完整性 (CFI) 是一种软件漏洞缓解机制,用于保护程序免受控制流劫持攻击,成功的 CFI 确保程序的控制流永远不会离开其预定义的有效控制流,这意味着攻击者将无法重定向控制流至任意位置。
代码指针完整性 (Code-Pointer Integrity)
基于编程语言的安全
Rust 采用 Region-based Memory Management,在对象所属 region 的生命周期结束时释放对象。Rust 所有权机制的主要目的是管理堆数据。Rust 编译器通过追踪所有权,将运行时可能产生的错误转换为了编译时的报错。
软件安全分析基础
软件安全分析 (漏洞分析):针对目标软件(分析对象)通过(组合)运用逆向工程、抽象与运算、定制特殊输入数据与受控运行等操作,了解目标软件架构、理解其运行机理,发现并确证其脆弱点(漏洞),为进一步利用或缓解其漏洞提供支持。
静态分析
控制流分析
Callee: Recovering Call Graphs for Binaries with Transfer and Contrastive Learning, Wenyu Zhu, … , Chao Zhang, IEEE S&P’23
数据流分析
- 数据流分析(Data Flow Analysis, DFA) 是一种用来获取相关数据沿着程序执行路径流动的信息分析技术。分析对象是程序执行路径上一组变量值的变化。
抽象解释
静态污点分析
符号执行
动态分析
- 白盒、黑盒、灰盒测试
模糊测试
(1)种子:是模糊测试中用于生成异常输入的基础数据或文件。例如文档、图像文件、数据包等。种子的选择对模糊测试的效果至关重要,因为它们是生成畸形输入的基础。有效地选择和修改种子能使模糊测试更有效地探索程序路径,以发现潜在的漏洞。
(2)模糊测试引擎:在大量畸形输入下自动化地执行目标程序,监控目标程序状态,并收集与记录程序在执行过程中的数据(覆盖率等)和异常行为。
(3)变异:按照一定策略,通过对有效的种子进行修改或扭曲,生成新的畸形输入,以触发目标程序中新的代码路径和错误。常见的变异策略有:
- 覆盖率指导的变异:通过变异生成的畸形输入是否能触及新的、未被覆盖的代码区域
- 基于规则的变异:基于特定的规则或模式进行的变异
- 基于遗传算法的变异:模仿生物进化中的自然选择和遗传原理,在一系列的种子中选择“最有成效”的(即引发最多错误的)进行组合和变异。
3 软件安全研究案例
- 感觉这一章没啥值得考的,就不记录了。。
4 安全的软件开发
软件开发与安全
安全的软件开发三大支柱:风险管理、安全接触点、 安全知识;
软件安全开发方法
感觉无考点。
软件供应链安全
感觉无考点。
5 期末复习
完结撒花~
相关文章:
国科大软件安全原理期末复习笔记
1 软件安全总论 1.软件的三大特性:复杂性、互连性、可扩展性; 2.基本概念:缺陷、漏洞、风险 缺陷(bug):软件在设计和实现上的错误;漏洞(vulnerability):漏洞…...
人工智能软件测试2024年主要趋势
人工智能软件测试领域在未来可能面临多个发展趋势,其中一些趋势可能会对测试方法、工具和流程产生深远的影响。以下是塑造人工智能软件测试未来的主要趋势: 自动化和自动学习测试:随着人工智能的发展,测试自动化将变得更加智能和自…...
【JAVA】Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
🍎个人博客:个人主页 🏆个人专栏:JAVA ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 懒汉式(Lazy Initialization): 双重检查锁定(Double-Checked Locking)…...
常见的反爬虫风控 | 验证码风控
一.前言 在当今信息技术迅速发展的背景下,网站和在线服务面临着日益增长的自动化访问威胁,这些大多来自于各类爬虫程序。这种大量的自动化访问不仅对网站的正常运行构成压力,还可能导致敏感数据的泄露,甚至被用于不正当竞争和恶意…...
ClickHouse(21)ClickHouse集成Kafka表引擎详细解析
文章目录 Kafka表集成引擎配置Kerberos 支持 虚拟列 资料分享参考文章 Kafka表集成引擎 此引擎与Apache Kafka结合使用。 Kafka 特性: 发布或者订阅数据流。容错存储机制。处理流数据。 老版Kafka集成表引擎参数格式: Kafka(kafka_broker_list, kaf…...
JSP-概念
一、引子 很多读者可能听过JSP,并且知道这是一门过时的技术了。在Spring,SpringBoot已经成为主流的今天,笔者为什么还要介绍JSP的相关内容呢?笔者常常提到一个概念:理解一门技术,要理解这个技术为什么产生…...
sqlite插入语句id自增列问题
sqlite给主键id设置AUTOINCREMENT自增在插入数据的时候报错table has x columns but x-1 values were supplied 为什么自增列要显示不提供,sqlite需要提供自增列table ResTools has 7 columns but 6 values were supplied SQL Statement:insert into ResTools values(管理系统w…...
C#,字符串匹配(模式搜索)AC(Aho Corasick)算法的源代码
Aho-Corasick算法简称AC算法,也称为AC自动机(Aho-Corasick)算法,1975年产生于贝尔实验室(The Bell Labs),是一种用于解决多模式字符串匹配的经典算法之一。 the Bell Lab 本文的运行效果: AC算法以模式树…...
【网络取证篇】Windows终端无法使用ping命令解决方法
【网络取证篇】Windows终端无法使用ping命令解决方法 以Ping命令为例,最近遇到ping命令无法使用的情况,很多情况都是操作系统"环境变量"被改变或没有正确配置导致—【蘇小沐】 目录 1、实验环境(一)无法ping命令 &a…...
electron+vue网页直接播放RTSP视频流?
目前大部分摄像头都支持RTSP协议,但是在浏览器限制,最新版的浏览器都不能直接播放RTSP协议,Electron 桌面应用是基于 Chromium 内核的,所以也不能直接播放RTSP,但是我们又有这个需求怎么办呢? 市场上的方案…...
【Delphi 基础知识 19】Assigned的用法
在Delphi中,Assigned 是一个用于检查指针是否已分配内存的函数。它通常用于检查对象或指针是否已经被分配内存,以避免在未分配内存的情况下引用或操作它。 以下是 Assigned 的一些用法示例: 检查对象是否已分配内存: varMyObject…...
多线程在编程中的重要性有什么?并以LabVIEW为例进行说明
多线程在编程中的重要性体现在以下几个方面: 并行处理: 多线程允许程序同时执行多个任务,这在现代多核心处理器上尤其重要。通过并行处理,可以显著提高程序的执行效率和响应速度。 资源利用最大化: 通过多线程&#x…...
K8S---kubectl top
一、简介 该命令类似于linux–top命令,用于显示node和pod的CPU和内存使用情况 二、命令行 1、help命令 k top --help Display resource (CPU/memory) usage. The top command allows you to see the resource consumption for nodes or pods. This command requires Metri…...
Linux部署前后端项目
部署SpringBoot项目 创建SpringBoot项目 先确保有一个可以运行的springboot项目,这里就记录创建项目的流程了,可以自行百度。 命令行启动 2.1、在linux中,我是在data目录下新创建的一个project目录(此目录创建位置不限制&…...
一文搞懂系列——Linux C线程池技术
背景 最近在走读诊断项目代码时,发现其用到了线程池技术,感觉耳目一新。以前基本只是听过线程池,但是并没有实际应用。对它有一丝的好奇,于是趁这个机会深入了解一下线程池的实现原理。 线程池的优点 线程池出现的背景…...
stable diffusion代码学习笔记
前言:本文没有太多公式推理,只有一些简单的公式,以及公式和代码的对应关系。本文仅做个人学习笔记,如有理解错误的地方,请指出。 本文包含stable diffusion入门文献和不同版本的代码。 文献资源 本文学习的代码&…...
腾讯云服务器怎么买?两种购买方式更省钱
腾讯云服务器购买流程很简单,有两种购买方式,直接在官方活动上购买比较划算,在云服务器CVM或轻量应用服务器页面自定义购买价格比较贵,但是自定义购买云服务器CPU内存带宽配置选择范围广,活动上购买只能选择固定的活动…...
基于SpringBoot自定义控制是否需要开启定时功能
在基于SpringBoot的开发过程中,有时候会在应用中使用定时任务,然后服务器上启动定时任务,本地就不需要开启定时任务,使用一个参数进行控制,通过查资料得知非常简单。 参数配置 在application-dev.yml中加入如下配置 …...
“确定要在不复制其属性的情况下复制此文件?”解决方案(将U盘格式由FAT格式转换为NTFS格式)
文章目录 1.问题描述2.问题分析3.问题解决3.1 方法一3.2 方法二3.3 方法三 1.问题描述 从电脑上复制文件到U盘里会出现“确定要在不复制其属性的情况下复制此文件?”提示。 2.问题分析 如果这个文件在NTFS分区上,且存在特殊的安全属性。那么把它从NT…...
视频监控系统EasyCVR如何通过调用API接口查询和下载设备录像?
智慧安防平台EasyCVR是基于各种IP流媒体协议传输的视频汇聚和融合管理平台。视频流媒体服务器EasyCVR采用了开放式的网络结构,支持高清视频的接入和传输、分发,平台提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联…...
15.鸿蒙HarmonyOS App(JAVA)进度条与圆形进度条
15.鸿蒙HarmonyOS App(JAVA)进度条与圆形进度条 progressBar2.setIndeterminate(true);//设置无限模式,运行查看动态效果 //创建并设置无限模式元素 ShapeElement element new ShapeElement(); element.setBounds(0,0,50,50); element.setRgbColor(new RgbColor(255,0,0)); …...
【FastAPI】路径参数
路径参数 from fastapi import FastAPIapp FastAPI()app.get("/items/{item_id}") async def read_item(item_id):return {"item_id": item_id}其中{item_id}就为路径参数 运行以上程序当访问 :http://127.0.0.1:8000/items/fastapi时候 将会…...
【docker笔记】DockerFile
DockerFile Docker镜像结构的分层 镜像不是一个单一的文件,而是有多层构成。 容器其实是在镜像的最上面加了一层读写层,在运行容器里做的任何文件改动,都会写到这个读写层。 如果删除了容器,也就是删除了其最上面的读写层&…...
React项目搭建流程
第一步 利用脚手架创建ts类型的react项目: 执行如下的命令:create-react-app myDemo --template typescript ; 第二步 清理项目目录结构: src/ index.tsx, app.txs, react-app-env.d.ts public/index.ht…...
QT DAY1作业
1.QQ登录界面 头文件代码 #ifndef MYWIDGET_H #define MYWIDGET_H#include <QWidget> #include <QIcon> #include <QLabel> #include <QPushButton> #include <QMovie> #include <QLineEdit>class MyWidget : public QWidget {Q_OBJECTpu…...
Java后端开发——Mybatis实验
文章目录 Java后端开发——Mybatis实验一、MyBatis入门程序1.创建工程2.引入相关依赖3.数据库准备4.编写数据库连接信息配置文件5.创建POJO实体6.编写核心配置文件和映射文件 二、MyBatis案例:员工管理系统1.在mybatis数据库中创建employee表2.创建持久化类Employee…...
【UE Niagara 网格体粒子系列】02-自定义网格
目录 步骤 一、创建自定义网格体 二、创建Niagara系统 步骤 一、创建自定义网格体 1. 打开Blender,按下ShiftA来创建一个平面 将该平面旋转90 导出为fbx 设置导出选定的物体,这里命名为“SM_PlaneFaceCamera.fbx” 按H隐藏刚才创建的平面&#x…...
k8s 检测node节点内存使用率平衡调度脚本 —— 筑梦之路
直接上脚本: #! /bin/bash#对实际使用内存大于85%的机器停止调度,对实际使用内存小于70%的 关闭调度# 获取实际内存小于或等于70%的机器 memory_lt_70kubectl top nodes |awk NR>1{if($50<70) print $1} # 获取实际内存大于或等于85%的机器 memor…...
React Native集成到现有原生应用
本篇文章以MacOS环境开发iOS平台为例,记录一下在原生APP基础上集成React Native React Native中文网 详细介绍了搭建环境和集成RN的步骤。 环境搭建 必须安装的依赖有:Node、Watchman、Xcode 和 CocoaPods。 安装Homebrew Homebrew是一款Mac OS平台下…...
完全卸载grafana
先停掉grafana sudo systemctl stop grafana-server 查看要卸载的包的名字 yum list installed yum remove grafana-enterprise.x86_64 成功 删除grafana的数据目录 sudo rm -rf /etc/grafana/sudo rm -rf /usr/share/grafana/sudo rm -rf /var/lib/grafana/...
php笔记网站/今日军事新闻热点事件
一、常用合计方案 在有专业报表工具之前,常用的实现方案有: 1) SQL “select sum(字段) from 表 group by 字段 order by 字段“可以实现简单的分组数据合计、条件合计,这种方式有一个很明显的缺点,就是随着合计需求…...
建设厅网站上人员怎么导出/关键词优化排名怎么做
HTML <button click"getMouseXY($event)">点击获取鼠标坐标</button> JS getMouseXY(e){this.x e.pageX //获取鼠标的X坐标(鼠标与屏幕左侧的距离,单位为px)this.y e.pageY //获取鼠标的Y坐标(鼠标与…...
城乡建设与管理委员会网站/百度seo新站优化
控制图(Control Chart)又称管理图、休哈特图。是一种将显著性统计原理应用与控制生产过程的图形方法(GB/T 4091-2001《常规控制图》),是用来区分过程中的偶然波动和异常波动,并判断过程是否处于SPC统计过程状态的一种工具。SPC控制图应用步骤1. 选定SPC控…...
wordpress仿小刀主题/百度识图查另一半情头
Cron表达式是一个表示时间周期的字符串。分为6或7个域,每一个域代表一个含义。 格式:{秒} {分} {时} {日} {月} {周} {年(可选)} 摘抄自:https://blog.csdn.net/weixin_39921689/article/details/111860299...
wordpress底部制作/重庆seo排名扣费
原因:没有导入servlet-api.jar和jsp-spi.jar;解决方法:点击File--->Project Structure----->Modules点击左边的绿色“”按钮,选第一个JARs or directories...然后找到tomcat目录下的lib目录下的servlet-api.jar和jsp-spi.ja…...
嘉定做网站/seo营销培训
目录前言安装步骤其他安装:前言 之前文章中介绍了安装Ubuntu系统的方法,但当我们为笔记本安装,特别是笔记本有集显和nvida独显两块显卡时,按照之前方法安装Ubuntu系统大概率会直接黑屏,而无法进入系统,网上…...