国科大软件安全原理期末复习笔记

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.访问控制:

  • 访问控制:是一种安全手段,它控制用户和系统如何与其它系统和资源进行通信和交互,从而保护系统和资源免受未授权访问。
  • 访问:在主体和客体之间进行的信息流动,包括读取、增加、删除、修改信息内容及其属性。
  1. 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 期末复习

完结撒花~

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

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

相关文章

解决虚拟机字体太小的问题

在win11中,安装VMWare软件后,创建好虚拟机,打开终端后,发现终端里显示的字体太小,不方便使用,因此需要修改。 1、打开终端 2、输入"gsettings set org.gnome.desktop.interface text-scaling-factor…

代码随想录算法训练营第五十二天|300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组

代码随想录算法训练营第五十二天|300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组 最长递增子序列 300.最长递增子序列 文章讲解:https://programmercarl.com/0300.%E6%9C%80%E9%95%BF%E4%B8%8A%E5%8D%87%E5%AD%90%E5%BA%8F%E5%88%97.html 题目链…

Android 13.0仿ios的hotseat效果修改hotseat样式

1.概述 在13.0系统产品rom定制化开发中,在项目需求的需要,系统原生Launcher的布局样式很一般,所以需要重新设计ui对布局样式做调整,产品在看到 ios的hotseat效果觉得特别美观,所以要仿ios一样不需要横屏铺满的效果 居中显示就行了,所以就要看hotseat的具体布局显示了 效…

【MATLAB】CEEMD+FFT+HHT组合算法

代码原理 CEEMD(集合经验模态分解)FFT(快速傅里叶变换)HHT(希尔伯特-黄变换)组合算法也是一种常见的信号处理和分析方法。这种组合算法结合了CEEMD、FFT和HHT三个步骤,可以处理非线性和非平稳信…

Vue3+Vite项目搭建

为什么选择vite而不是vue-cli: vite下一代前端开发与构建工具 vite创建的项目默认vue3 优势: 开发环境中,无需打包,可快速的冷启动 轻量快速的热重载(HMR) 真正的按需编译,不在等待整个应用…

Android中两种选择联系人方式

1.在选择联系人方式网上也有很多案例 有的说是使用ContactsContract.CommonDataKinds.Phone.CONTENT_URI也有的说是使用ContactsContract.Contacts.CONTENT_URI其实这两种方式都可以使用 只不过ContactsContract.Contacts.CONTENT_URI这种方式需要多查询一遍 一、使用Contacts…

浅谈专项测试之弱网络测试

一.弱网络测试背景 移动端产品的使用并非完全都是在流畅的wifi环境,大部分用户主要使用4G,3G,2G等网络,另外因为移动端产品使用的场景多变,如进公交,上地铁,坐电梯,使得弱网测试显得尤为重要。考…

HCIA基础知识

IP地址、静态路由、动态路由、交换机 OSPF RIP DHCP VLAN ACL NAT OSI TCP/IP UDP TCP 三次握手,四次挥手,报头 什么是网络? 由网络连接设备通过传输介质将网络终端设备连接起来,进行资源共享、信息传递的平台。 OSI七…

如何购买腾讯云服务器?图文教程超详细

腾讯云服务器购买流程很简单,有两种购买方式,直接在官方活动上购买比较划算,在云服务器CVM或轻量应用服务器页面自定义购买价格比较贵,但是自定义购买云服务器CPU内存带宽配置选择范围广,活动上购买只能选择固定的活动…

2024年学鸿蒙开发就业前景怎么样?

随着科技的不断进步,鸿蒙系统作为华为自主研发的操作系统,逐渐引起了人们的关注。 2024年,鸿蒙开发就业前景如何? 对于那些对鸿蒙开发感兴趣并希望在这一领域寻找职业发展的人来说,这是一个非常重要的问题。 首先&a…

[渗透测试学习] Hospital - HackTheBox

文章目录 信息搜集getshell提权信息搜集 nmap扫描一下端口 发现8080端口和443端口有http服务 然后发现3389端口是启用了ms-wbt-server服务 在对443端口的扫描没有收获,并且只有邮箱登录界面无法注册 接着看向8080端口,我们随便注册用户登录后发现有文件上传功能 getshell …

【SpringMVC】—— 如何配置使用SpringMVC(详细步骤)

目录 引言 使用 1、新建模块 2、导入坐标 3、创建SpringMVC控制器类 4、初始化SpringMVC环境 5、初始化Servlet容器,加载SpringMVC环境 6、配置运行 引言 SpringMVC是一种基于Java实现MVC模型的轻量级Web框架,SpringMVC是表现层(web层)的框架,也…

.Net6使用SignalR实现前后端实时通信

代码部分 后端代码 (Asp.net core web api,用的.net6)Program.cs 代码运行逻辑: ​1. 通过 WebApplication.CreateBuilder(args) 创建一个 ASP.NET Core 应用程序建造器。 2. 使用 builder.Services.AddControllers() 添加 MVC 控…

两周掌握Vue3(五):自定义指令、路由、ajax

文章目录 一、自定义指令1.创建和使用自定义指令2.钩子函数3.使用参数 二、路由1.创建一个router实例2.在components目录中创建组件3.将路由实例挂载到应用4.使用路由 三、Ajax 代码仓库:跳转 当前分支:05 一、自定义指令 自定义指令是Vue.js框架提供的…

基于Springboot的善筹网(众筹网-有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的善筹网(众筹网-有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spring S…

Vue入门七(Vuex的使用|Vue-router|LocalStorage与SessionStorage和cookie的使用)

文章目录 一、Vuex1)理解vuex2)优点3)何时使用?4)使用步骤① 安装vuex② 注册vuex③ 引用vuex④ 创建仓库Store五个模块介绍 5)基本使用 二、Vue-router三、LocalStorage与SessionStorage、cookie的使用 一…

ChatGPT Plus 经验分享:是否值得花钱升级?

ChatGPT Plus 经验分享:是否值得花钱升级? 五星上将麦克阿瑟曾经说过:“在有钱与没钱面前,我选择了or” ChatGPT 的每月订阅方案- ChatGPT Plus 已经推出一段时间了,目前的费用是$20 USD / 月(约TWD 610 / 月)。 Open…

Spirng MVC见解1

1. SpringMVC概述 1.1 MVC介绍 MVC是一种设计模式,将软件按照模型、视图、控制器来划分: M:Model,模型层,指工程中的JavaBean,作用是处理数据 JavaBean分为两类: 一类称为数据承载Bean&#x…

mybatis基本注解、增删改查、结果集映射、一对一、一对多

mybatis注解 基本注解新增删除修改查询 结果映射注解Results结果映射一对一映射一对多映射 基本注解 新增 功能:Insert完成新增操作,类似配置文件的 元素; 说明:新增时所用的参数取值是接口方法的入参,可以是对象&a…

Linux入门级常用命令学习笔记

以下命令是我跟着编程界的大佬鱼皮学习Linux时用的命令,我把它都记下来,权当作笔记,可供自己后期反复练习使用,让我们学习一下最基本的Linux命令吧。 一、Linux实战命令 在dos下 【ssh 服务器ip】可以连接服务器,输入…