文章目录
- 第一章 软件安全概述
- 1.1 信息定义
- 1.2 信息的属性
- 1.3 信息安全
- 1.4 软件安全
- 1.5 软件安全威胁及其来源
- 1.5.1 软件缺陷与漏洞
- 1.5.1.1 软件缺陷
- 1.5.1.2 漏洞
- 1.5.1.3 软件漏洞
- 1.5.1.4 软件缺陷和漏洞的威胁
- 1.5.2 恶意软件
- 1.5.2.1 恶意软件的定义
- 1.5.2.2 恶意软件的威胁
- 1.5.3 软件破解
- 1.6 如何加强软件安全防护
- 1.6.1 安全设计
- 1.6.2 保障运行环境
- 1.6.3 加强软件自身行为认证
- 1.6.4 恶意软件检测与查杀
- 1.6.5 黑客攻击与防护
- 1.6.6 系统还原
- 1.6.7 虚拟隔离
- 1.7 本章小结
- 第二章 软件安全基础
- 2.1 计算机磁盘的管理
- 2.1.1 磁盘结构简介
- 2.1.2 主引导扇区结构
- 2.1.3 文件系统
- 2.1.3.1 FAT32文件系统
- 2.1.3.2 NTFS文件系统
- 2.2 计算机系统引导过程
- 2.2.1 BIOS的定义
- 2.2.2 BIOS引导模式
- 2.2.2.1 传统BIOS引导
- 2.2.2.2 UEFI BIOS引导
- 2.3 PE文件格式
- 2.4 本章小结
- 第三章 软件漏洞利用与防护
- 3.1 软件漏洞
- 3.2 漏洞分类及其标准
- 3.2.1 漏洞分类
- 3.2.2 软件漏洞产生的原因
- 3.2.2.1 技术因素
- 3.2.2.2 非技术因素
- 3.3 软件漏洞的利用方式
- 3.3.1 本地攻击模式
- 3.3.2 远程主动攻击模式
- 3.3.3 远程被动攻击模式
- 第四章 典型软件漏洞机理分析
- 4.1 缓冲区溢出漏洞
- 4.1.1 栈溢出
- 4.1.2 堆溢出
- 4.1.3 格式化串漏洞
- 4.2 Web应用程序漏洞
- 4.2.1 Web应用安全概述
- 4.2.2 SQL注入漏洞
- 4.2.3 跨站脚本(XSS)
- 4.2.4 跨站请求伪造(CSRF)
- 4.2.5 其他Web漏洞
- 第五章 软件漏洞的利用和发现
- 5.1 Exploit 结构
- 5.2 漏洞利用的具体技术
- 5.3 Shellcode开发
- 5.4 软件漏洞挖掘技术及工具
- 第六章 Windows 系统安全机制及漏洞防护技术
- 第七章 构建安全的软件
- 第八章 恶意代码及其分类
第一章 软件安全概述
1.1 信息定义
香农提出“信息是用来消除随机不确定性的其他东西”,其他相关观点:
- 信息是主体相对于客体的变化。
- 信息是确定性的增加。
- 信息是反应客观世界中各种事物特征和变化的知识,是数据加工的结果,信息是有用的数据。
- 信息是有价值的消息。
信息的主要特点:
- 信息是有价值的:信息的价值是相对的;
- 信息是流动的:信源→信道→信宿。
1.2 信息的属性
①真实性:对信息来源进行判断,能对伪造来源的信息予以鉴别;
②保密性:保证机密信息不被窃听,或窃听者不能了解信息的真实含义;
③完整性:保证数据的一致性,防止数据被非法用户篡改;
④可用性:保证合法用户对信息和资源的使用不会被不正当地拒绝;
⑤不可抵赖性:建立有效的责任机制,防止用户否认其行为;
⑥可控制性:对信息的传播及内容具有控制能力;
⑦可审查性:对出现的网络安全问题提供调查的依据和手段。
1.3 信息安全
信息安全是对信息的保密性、完整性和可用性的保持。
1.4 软件安全
软件安全是使软件在受到恶意攻击的情形下依然能够继续正确运行的工程化软件思想。
1.5 软件安全威胁及其来源
1.5.1 软件缺陷与漏洞
1.5.1.1 软件缺陷
软件缺陷,常常又被称作Bug,是指计算机软件或程序中存在的某种破坏正常运行能力的问题、错误,或者隐藏的功能缺陷。缺陷的存在会导致软件产品在某种程度上不能满足用户的需要。
1.5.1.2 漏洞
漏洞,是在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,从而使攻击者能够在未授权的情况下访问或破坏系统。
1.5.1.3 软件漏洞
软件漏洞,是指软件在设计、实现、配置策略及使用过程中出现的缺陷,其可能导致攻击者在未授权的情况下访问或破坏系统。
1.5.1.4 软件缺陷和漏洞的威胁
①软件正常功能被破坏:如原有软件功能无法正常运行;
②系统被恶意控制:攻击者获得对目标系统的控制权;
③信息泄露:重要信息被攻击者获取到。
1.5.2 恶意软件
1.5.2.1 恶意软件的定义
“恶意软件”是指那些设计目的是为了实施特定恶意功能的一类软件程序。最典型的恶意软件包括:计算机病毒、特洛伊木马、后门、僵尸、间谍软件、勒索软件等。
1.5.2.2 恶意软件的威胁
①已有软件的功能被修改或破坏:
- 恶意软件运行之后,可对同一运行环境中的其他软件进行干扰和破坏,从而修改或破坏其他软件的行为。
②目标系统中的重要数据被窃取:
- 恶意软件运行之后,可以浏览、下载目标系统磁盘中的所有文件,甚至对目标系统的键盘击键(如各类系统的登录用户名和口令)进行记录和回传。
③目标系统中的用户行为被监视:
- 对目标系统进行屏幕监视、视频监视、语音监听等,这也是目前绝大部分特洛伊木马所拥有的基本功能。
④目标系统被控制:
- 在屏幕监视的基础上操控目标系统的键盘和鼠标输入,从而达到对目标进行屏幕控制的目的。
1.5.3 软件破解
软件破解,即通过软件自身程序进行逆向分析,发现软件的注册机制,对软件的各类限制实施破解,从而使得非法使用者可以正常使用软件。
1.6 如何加强软件安全防护
1.6.1 安全设计
强化软件工程思想,将安全问题融入到软件的开发管理流程之中,在软件开发阶段尽量减少软件缺陷和漏洞的数量。
- 微软:信息技术安全开发生命周期流程(Secure Development Lifecycle for Information Technology,缩写为SDL-IT)。
1.6.2 保障运行环境
保障软件自身运行环境,加强系统自身的数据完整性校验。
- 软件完整性校验:目前很多安全软件在安装之初将对系统的重要文件进行完整性校验并保存其校验值。
- 系统完整性校验:目前有些硬件系统从底层开始保障系统的完整性。
1.6.3 加强软件自身行为认证
加强系统自身软件的行为认证——软件动态可信认证:
- 在确保系统数据完整性的前提下,如何确保软件的行为总是以预期的方式,朝着预期的目标运行,这就是软件动态行为可信问题。
1.6.4 恶意软件检测与查杀
- 恶意软件是软件安全的一个主要安全威胁来源,针对系统的外来入侵通常都离不开外来恶意软件的支撑。
- 反病毒软件主要用来对外来的恶意软件进行检测。通常采用病毒特征值检测、虚拟机、启发式扫描、主动防御、云查杀等几种方法来对病毒进行检测。
1.6.5 黑客攻击与防护
- 防火墙:网络,主机防火墙(如天网、OutPost等)可依据黑客防护策略对进出主机的网络流量进行有效拦截。
- 入侵检测系统IDS
- 入侵防护系统IPS:基于网络、基于主机(HIPS)
基于主机的漏洞攻击阻断技术:EMET
1.6.6 系统还原
系统还原技术的核心思想是将关键系统文件或指定磁盘分区还原为之前的备份状态,从而将已有系统中的恶意程序全部清除,以保护系统安全。
- Windows自带的“系统还原”功能
- Ghost还原软件
- 还原卡、影子系统(PowerShadow)
1.6.7 虚拟隔离
虚拟机(如VmWare)
- 隔离风险:用户可以通过在不同的虚拟机中分别进行相关活动(如上网浏览、游戏或网银等重要系统登录),从而可以将危险行为隔离在不同的系统范围之内,保障敏感行为操作的安全性。
沙箱,也叫沙盘或沙盒(如SandBoxIE)
- 隔离风险:在沙箱之中的软件行为及其产生的系统修改是被隔离起来的
- 常用于运行一些疑似危险样本,从而可以隔离安全威胁,也可用于恶意软件分析。
1.7 本章小结
1.什么是信息安全?信息为什么会存在安全问题?
2.什么是软件安全?软件为什么会存在安全问题?
3.软件面临的具体安全威胁有哪些?
4.什么是软件缺陷和软件漏洞?软件缺陷和漏洞有何区别?软件漏洞是否有可能转变为软件后门,为什么?
5.什么是恶意软件?其对系统安全的具体影响包括哪些?
6.什么是软件逆向工程?请举例分析软件逆向工程的积极意义,以及可能带来的安全隐患。
7.为了保障软件安全,目前典型的防护手段有哪些?
- 什么是沙箱与虚拟机?其在软件安全领域有哪些具体应用?
第二章 软件安全基础
2.1 计算机磁盘的管理
硬盘是
- 控制代码的静态存储仓库:系统引导代码、各类程序与数据等
- 恶意软件进行控制权争夺的中心
2.1.1 磁盘结构简介
磁盘的三个基本参数:
- 磁头数(Headers):表示目标扇区所在的硬盘磁头编号,硬盘是由多个盘片组成的,而每个盘片上都有一个读写磁头负责该盘片的读写操作,磁头数最大为255(8个二进制位存储)。每个盘片有两个面,每个面有一个读写磁头。
- 柱面数(Cylinders):表示目标扇区所在盘片的磁道号,最大为1023(10个二进制存储)。每个盘片的半径均为相同值R的同心圆(磁道)。
- 扇区数(Sectors):表示目标扇区所在的在磁道扇区号,最大为63(6个二进制存储),每个扇区一般是512个字节。每个磁道被划分为几十个扇区。
硬盘寻址方式:
- 老式硬盘:每个磁道的扇区数相等,外道的记录密度要远低于内道
- 当前硬盘:采用“等密度结构”提高硬盘容量,寻址方式采用线性逻辑块寻址,即以扇区为单位进行线性寻址
2.1.2 主引导扇区结构
主引导扇区也就是硬盘的第一个扇区(0面0磁道1扇区):
- 主引导记录(MBR):前446个字节,存放着系统主引导程序(负责从活动分区中装载并运行系统引导程序)
- 硬盘主分区表(DPT):占64个字节,记录了磁盘的基本分区信息,四个分区项,每项16字节,分别记录了每个主分区的信息(最多四个主分区)
- 引导扇区标记(ID):占2个字节,对于合法引导区,它等于0xAA55,判别引导区是否合法。
2.1.3 文件系统
文件系统是操作系统在计算机硬盘存储和检索数据的逻辑方法
2.1.3.1 FAT32文件系统
FAT32文件系统:文件分配表FAT是32位的,逻辑盘被划分为三部分:引导区(BOOT区)、文件分配表(FAT区)、数据区(DATA区)
2.1.3.2 NTFS文件系统
NTFS是一个功能强大、性能优越的文件系统,它是以簇作为磁盘空间分配和回收的基本单位
2.2 计算机系统引导过程
2.2.1 BIOS的定义
BIOS(Basic Input and Output System):基本输入输出系统
- 存储在主板BIOS Flas(或ROM)芯片
- 为计算机提供最底层的、最直接的硬件设置于控制
2.2.2 BIOS引导模式
2.2.2.1 传统BIOS引导
开机→BIOS初始化→POST自检→MBR→DBR→bootmgr(或NTLDR)→读取BCD(或boot.ini)→启动对应的系统
2.2.2.2 UEFI BIOS引导
UEFI(Unified Extensible Firmware Interface):统一可扩展固件接口,类似于一个低阶操作系统,取消了POST自检,速度快
开机→BIOS初始化→启动管理器(EFI分区bootxxx.efi)→读取BCD→启动对应的系统
2.3 PE文件格式
PE就是Portable Executable(可移植的执行体),它是Win32可执行文件的标准格式
2.4 本章小结
1.硬盘主引导区由哪几个部分构成?fdisk/mbr命令会重写整个主引导扇区吗?
2.打开一台计算机,描述从按下Power 键开始计算机每一步所做的具体工作。
6.请比较“删除文件到回收站”与“永久删除文件”的具体技术区别,对于后者,如何手工恢复?请实践。
7.快速格式化、普通格式化以及低级格式化的具体技术区别有哪些?请具体实践和分析。
8.在使用某些数据恢复软件进行数据恢复时,为何恢复.jpg和.doc类文件的成功率要高于.txt类文件?
第三章 软件漏洞利用与防护
3.1 软件漏洞
漏洞,通常也称脆弱性(vulnerability),RFC2828将漏洞定义为“系统设计、实现或操作管理中存在的缺陷或者弱点,能被利用而违背系统的安全策略”。软件漏洞的要素:
- 受影响的软件版本
- POC(验证漏洞存在的代码,Proof of Concept)
- 漏洞触发的条件
- 攻击能力
3.2 漏洞分类及其标准
3.2.1 漏洞分类
按漏洞可能对系统造成的直接威胁,可分为:
- 获取访问权限漏洞
- 权限提升漏洞
- 拒绝服务攻击漏洞
- 恶意软件植入漏洞
- 数据丢失或泄露漏洞
按漏洞的成因,可分为:
- 输入验证错误
- 访问验证错误
- 竞争条件错误
- 意外情况处理错误
- 设计错误
- 配置错误
- 环境错误
按漏洞的严重性的分级,可分为:
- A类漏洞(高):远程和本地管理员极限。威胁性最大的漏洞,往往有较差的系统管理或错误设置造成。
- B类漏洞(中):普通用户权限、权限提升、读取受限文件,以及远程和本地拒绝服务。较为严重的漏洞,例如允许本地用户获得增加的和未授权的访问。
- C类漏洞(低):远程非授权文件存取、口令恢复、欺骗,以及服务器信息泄露。严重性不是很大的漏洞,例如允许拒绝服务的漏洞。
按照对漏洞被利用方式的分类,可分为:
- 主动攻击
- 远程主动攻击
- 远程被动攻击
3.2.2 软件漏洞产生的原因
3.2.2.1 技术因素
1.输入验证错误:缺少输入验证或输入验证存在缺陷,是造成许多严重漏洞的主要原因。这些漏洞包括缓冲区溢出、SQL注入以及、跨站点执行脚本,常见于web上的动态交互页面,比如ASP页面等。产生输入验证错误漏洞的原因是未对用户提供的输入数据的合法性做充分的检查。原因主要有:
- 没有在安全的上下文环境中进行验证
- 验证代码不集中
- 不安全的组件边界
2.访问验证错误:访问验证错误漏洞的产生是由于程序的访问验证部分存在某些可利用的逻辑错误或用于验证的条件不足以确定用户的身份而造成的。可分为:
- 会话管理薄弱或缺失
- 身份鉴别薄弱或缺失
- 授权薄弱或缺失
3.竞争条件:竞争条件攻击是一种异常行为,是对事件相对紧凑的依赖关系的破坏而引发的,多线程并发访问破坏事件间的依赖关系引发状态的不一致。具备两个必要条件:
- 有两个或两个以上的事件发生:两个事件间有一定的时间间隔并且有一定的依赖关系
- 攻击者可以改变两个事件间的依赖关系
4.意外情况处置错误:意外情况处置错误漏洞的产生是由于程序在它的实现逻辑中没有考虑到一些本应该考虑到的意外情况。
5.逻辑设计错误:包含了系统设计和系统实现上的错误,如整数溢出,密码找回。
6.配置错误:配置错误漏洞的产生是由于系统和应用的配置有错误,或者是软件安装在错误的位置,或是参数配置错误,或是访问权限配置错误等。
7.环境错误:是一些由于环境变量的错误或恶意设置而造成的漏洞。
3.2.2.2 非技术因素
- 缺乏软件开发规范
- 缺乏进度控制
- 缺乏安全测试
- 缺乏安全维护
- 不稳定的开发团队
3.3 软件漏洞的利用方式
3.3.1 本地攻击模式
本地攻击模式的攻击者是系统本地的合法用户或已经通过其他攻击方法获得了本地权限的非法用户,它要求攻击者必须在本地拥有访问权限,才能发起攻击。
3.3.2 远程主动攻击模式
攻击者通过网络连接目标,利用工具扫描目标,发现漏洞,利用漏洞工具自动植入攻击代码。
3.3.3 远程被动攻击模式
攻击者通过网络给目标发送邮件或者超链接,用户打开网页,点击邮件附件或网页中的文档,触发漏洞。
- 网页挂马是结合浏览器或浏览组件的相关漏洞来触发第三方恶意软件下载执行的,也是目前危害最大的一种远程被动攻击模式。攻击者通过在正常的网页中插入一段漏洞利用代码。浏览者在打开该页面的时候,漏洞被触发,恶意代码代码被执行然后下载并运行某木马的服务器端程序,进而导致浏览器的主机被控制。
第四章 典型软件漏洞机理分析
4.1 缓冲区溢出漏洞
“缓冲区”是指内存空间中用来存储程序运行时临时数据的一片大小有限并且连续的内存区域。 根据程序中内存的分配方式和使用目的,缓冲区一般可分为栈和堆两种类型。