logo资料库

软件安全原理.pdf

第1页 / 共50页
第2页 / 共50页
第3页 / 共50页
第4页 / 共50页
第5页 / 共50页
第6页 / 共50页
第7页 / 共50页
第8页 / 共50页
资料共50页,剩余部分请下载后查看
软件安全原理 教学目的:以基础软件、BS架构支撑软件、移动APP为重点,讲解软件技术发展 过程中安全威胁与防御机制的博弈演讲,以及确保软件安全的正确方法。从安全 视角重新认识软件,掌握围绕软件攻防的白帽与黑帽方法,理解软件的安全内 构。 1. 软件安全防御:论述软件安全的基本原理,从白帽视角论述软件的各类安全 防御机制 2. 软件分析与攻击:从黑帽视角论述软件存在的各种安全脆弱性问题,以及如 何利用它们形成有效攻击 3. 安全的软件开发:确保软件安全的工程化方法,BSI内构安全是其核心 操作系统安全与虚拟化技术 计算机基础软件概述 CPU和现代操作系统 操作系统是管理计算机硬件的程序,为应用程序提供基础 分段、分页与特权级 分段 1978年intel 8086处理器首次加入分段机制。 基本思路:地址空间中,对程序中每一个逻辑单元设立 一个独立的、从0开始、线性连续地址空间。每个程序 若干段,代码段、数据段、堆栈段、其他段。 分段机制出现前,程序所使用的内存空间不是相互隔离 的。 分段机制将程序运行所需的内存空间从虚拟空间映射到 某个物理空间。 实模式 早期8086是16位,两个字节 物理地址=段值*16+偏移 只能访问1M地址空间 保护模式 CPU为32位,寻址空间达到4G 保护模式下16位寄存器表示的段值只是一个索 引,称为段选择符,其作用是选择包含段特征的
段描述符。 段选择符有三个域,13位索引域(描述符在描述 符表中的索引)、1位选择域(1-局部描述符 表/0-全局描述符表)、2位选择符特权级 RPL(用来与描述符的特权级比较大小实现一定 的保护) 段描述符64位,表述了段的存储位置和相关的段 属性,含基地址、DPL等 分页 1985年80386处理器第一次引入分页和特权级 线性地址被分为固定长度为单位的组,称为页。 页框:分页单元将RAM分为固定长度4K大小的页框 页表:把线性地址映射到物理地址 页目录表:为页表建立目录索引 寄存器:CR0中PG位控制是否启动分页机制、CR3位页 目录寄存器 特权级 出现背景 分段机制带来一些问题: 1. 地址空间缺乏保护机制 2. 用来改变段寄存器内容的指令不是特权指令 ——使得进程可以访问内存中任何单元 80386保护模式,通过分级把代码隔离了起来 段保护 引入CPL、DPL、RPL进行权限控制 CPL-当前运行代码权限,CS寄存器的0、1位表示 Ring0-3共4个级别 只有当CPL<=DPL&&RPL<=DPL时,访问才被 允许。 页保护 在页目录项、页表项中引入User/Supervisor位 0-Supervisor,对应CPL=0,1,2 1-User,对应CPL=3 程序运行在CPL=0,1,2情形下可以访问所有内 存页,CPL=3只能访问user内存页 宏内核与微内核
宏内核,整个核心程序都是以核心空间以及监管者模式运行; 效率高、灵活性差 微内核,只有最基本的操作功能放在内核中;优:一致接口、 可扩展性、灵活性、可移植性、可靠性、 固件攻防技术演进 固件是一种特定的计算机软件类,为设备的特定硬件提供低级控制。 为设备复杂的软件提供标准化操作环境,或是充当简单设备的完整操 作系统。 嵌入式系统、消费设备、计算机、计算机外设等几乎所有电子设备都 包含固件。 BIOS是计算机主板上最重要最核心的计算机固件。计算机加电时, CPU取得的第一条指令就存储在BIOS中。 BIOS功能:开机自检、系统初始化、提供常驻内存的运行时服务、 系统设置、引导操作系统 固件威胁 第三方创建自定义固件,固件黑客通常利用许多设备上的固件 更新工具来安装或运行自己的代码。 固件安全防护 硬件写保护、双BIOS(一部分写保护对其他部分验证)、软 件写保护、签名机制、安全升级、禁止非授权回滚 操作系统安全机制演进 操作系统脆弱性和保护机制概述 操作系统攻击的危害: 破坏系统数据、干扰系统运行、攻击文件、抢占系统资源、干扰IO 设备、导致系统性能下降、攻击存储器、敏感信息窃取、网络破坏 计算机安全防护: 一方面,硬件提供支持,另一方面从设计之初就要考虑安全问题 写保护、执行保护技术 早期典型攻击技术 HOOK技术 rootkit通过HOOK内核关键数据结构如SSDT表、IDT 表、GDT表等实现恶意目的。 缓冲区溢出
缓冲区溢出,向缓冲区提供多于其存储容量的数据,若 精心构造溢出数据,可能获得系统控制权。 eg:strcpy覆盖原有的返回地址,使其指向shellcode 写保护 CR0是系统的控制寄存器之一,控制寄存器决定了当前处理器 的操作模式和正在执行任务的特征。 80486的处理器在CR0中加入了“写保护WP”位,控制是否 允许处理器向标记为只读属性的内存页写入数据。以保护内核 关键数据,如SSDT表,IDT表,GDT表,防止被恶意篡改。 规则:CR0.WP = 0,可以任意写;WP=1,只可写页表项 R/W位为1的页 写保护位有利于UNIX类操作系统在创建进程时实现写时复 制,即起子进程时并不复制整个进程地址空间,而是需要写入 时数据才被复制,避免拷贝大量不被使用的数据。 但是写保护可以被关闭。 Canary 在栈上函数返回值附近放置一个难以预测的值,函数返回时检 查这个值是否被改变 执行保护 NX/XD AMD提出NX,在内存中的某些关键段关闭执行权限。 XD-intel,执行禁止位,在内存界面的数据区域设置某 些标志,CPU检测到内存页面有这些标志时就拒绝执 行。 DEP windows的安全机制,将只包含数据的内存位置标记为 非可执行,当尝试执行时CPU抛出异常。 ROP/JOP 2000年提出,面向返回编程ROP:用小程序地址填充堆 栈,每个小程序片段都一RET及其类似指令为结尾。 面向跳转编程JOP:基本单元是以转移指令结尾的指令 片段 地址随机化技术 Ret2libc
1999年出现,可绕过非可执行段,直接在共享库段找执行代 码。 libc提供类UNIX系统中的C运行时支持,总会被链接到程序 中,且提供了一些对攻击者有用的函数。 ret2libc攻击利用缓冲区溢出将战中的返回地址修改为libc函数 的入口地址,并通过栈传参 地址空间随机化ASLR 2001年提出,一开始只对栈地址实施随机化,后来推广到 堆、共享库。 目的:降低攻击成功概率;使得攻击方法不能简单移植 主要思想:对进程的堆栈代码段数据段共享库等装在地址进行 随机化排布,使得攻击者无法得知这些段的具体位置。 使用:VS的链接选项 粗粒度的ASLR只是随机处理数据区域的基地址,有人提出了 细粒度的,基于对象的随机化。 绕过:return-to-plt,调用动态连接器的符号解析过程,获得 符号地址。plt为链接过程表,与动态链接相关;GOT表保存 动态链接库函数的地址。ret2plt的思想是通过修改GOT表 (通过多次strcpy函数拼凑system函数地址),使用plt机制 劫持控制流。 堆喷射技术 2004年,将包含攻击者代码的对象大面积地分配在进程的堆 中,提高引用/执行这些代码的成功率。 实现原理:shellcode前面加大量滑板指令,申请大量内存, 反复注入填充。使用其他漏洞攻击技术控制程序流,使其执行 到堆上。 优点:增加了缓冲区溢出的成功率,容易被察觉,只能协同攻 击,有一定失败率。 JIT喷射:JIT生成代码存放在可读写执行的代码缓存中,JIT喷 射强制即时编译器产生大量代码进行堆喷射。 可信计算 基本思想: 1. 先在计算机系统中建立一个信任根(由物理安全、技术安全、 管理安全共同保证) 2. 再建立一条信任链,从信任根开始,到硬件平台、操作系统、 应用,一级度量一级,一级信任一级,将信任扩展到整个计算 机系统。 信任根是基于密码学和物理保护的信任源头(TPM、TCM、 TPCM)
TPM 国际可信计算组织TCG在现有体系结构上引入TPM。 信任根完成可信度量的存储等功能 TSS 是可信计算平台上TPM的支撑软件,为操作系统和应用软件提 供使用TPM的接口。 结构上可分为内核层、系统服务层、用户程序层 相关技术 intel TXT 通过使用高级的TXT模块芯片,配合主机板芯片组及虚 拟机软件,协助保护系统重要数据并避免其受到攻击。 依赖于一系列支持TXT技术的硬件、软件、固件 ARM TrustZone 将单个的物理处理器分成两个虚拟处理器核,普通和安 全。这种硬件架构为普通操作系统和安全操作系统提供 了基础。 AMD-SP 利用TrustZone技术将CPU分为两个虚拟区域,敏感任 务在安全区域运行,其他任务在普通模式下运行。 控制流安全 控制流劫持 控制流劫持攻击通过劫持函数返回地址或代码指针将控制流跳 转到攻击者指定的代码地址并执行。 分为注入和非注入两种。 注入攻击 利用漏洞将包含shellcode的代码注入到内存可执行区 域,并想办法执行 攻击条件: 1. 注入漏洞 2. 控制程序原有执行流程并跳转 3. 攻击代码可被执行
非注入类 代码重用攻击 重用目标程序中的工具代码片段(Gadget)构造 攻击代码 ROP 2000年提出,面向返回编程ROP:用小程 序地址填充堆栈,每个小程序片段都一RET 及其类似指令为结尾。 最早2000年,ret2libc绕过了DEP,局限执 行顺序为线性,不能分支、跳转,恶意程 序只能是程序的代码段或加载的库函数。 2007年,通过在libc等库中寻找以ret结尾 的指令序列gadget,将这些gadget串联完 成复杂操作。 JOP 使用以JMP或call间接跳转指令结尾的 gadget COOP 针对前向CFI的攻击方式 动态生成代码 不依赖漏洞注入,不依赖程序中存在合法攻击代 码段,通过设计程序输入完成攻击代码注入或攻 击代码段构造 防御机制 DEP和ASLR ASLR防御代码复用攻击:代码复用攻击绝大多数依赖于 程序的内存布局,若程序布局不可预知,会大大增加代 码复用的难度。 控制流完整性保护CFI 通过检查控制流非正常跳转而防止程序控制流被劫持的 防御方法。
细粒度CFI 通过一些方法严格控制每一个间接跳转指令的转 移目标,在目标地址前插入标记,在控制流转移 前检查标记。 虽简单但开销大 粗粒度CFI 主要基于攻击特征的检查,包括实施代码复用攻 击时指令序列的特征和程序正常执行时的安全规 则。 微软CFG 通过代码编译和程序运行时相结合的方式实现对 call的间接跳转目标的限制。 intel CET Intel推出的用于防护ROP/JOP的芯片级解决方 案。 影子堆栈:对返回地址进行保护,预防ROP 原理:影子堆栈保存返回地址,函数返回时进行 对比。为保证影子堆栈不被篡改,在页表保护中 提供新的扩展属性,被标记为shadow stack的内 存页普通软件和指令无法对其进行写操作。新的 寄存器SSP指向shadow stack的栈顶。 间接分支跟踪:对跳转分支保护,预防JOP 原理:提供新指令,标记合法的间接call/jmp目 标 闪避防御技术 将软件多样化技术应用到动态代码生成上增加生成代码 的不确定性,生成多变形态功能相同的代码,减少攻击 者对于生成代码的知识,降低攻击成功率。 访问控制 在身份认证的基础上,依据授权对资源访问请求加以控制。(限制已 授权的用户、程序、进程或网络中其它系统对本系统资源的访问) 自主访问控制DAC 特点:允许授权用户改变客体访问控制属性
分享到:
收藏