软件安全概述

信息与信息安全

香农(C.E. Shannon) :信息是用来消除随机不确定性的东西

其他相关观点:

  • 信息是客体相对于主体的变化。

  • 信息是有价值的消息。

  • 信息是确定性的增加。

  • 信息是反映客观世界中各种事物特征和变化的知识,是数据加工的结果,信息是有用的数据。

信息的表现形式

  • 打印或书写在纸上
  • 以电子数据方式存储
  • 以胶片显示或通过交谈表达出来

信息系统:狭义指以提供信息服务为主要目的的数据密集型的计算机应用系统,广义的信息系统无处不在,因为信息无处不在

信息安全包括以下属性

  • 保密性:信息仅被合法用户所知悉。
  • 完整性:数据的一致性,数据未被非法用户篡改。
  • 可用性:合法用户对信息和资源进行使用时,不会被不正当地拒绝。
  • 真实性:信息来源及其内容未被伪造。
  • 不可抵赖性:建立有效的责任机制,防止用户否认其行为,这一点在电子商务中是极其重要的
  • 可审查性:对出现的信息安全问题提供调查的依据和手段。

中断破坏了可用性

截取破坏了保密性

修改破坏了完整性

捏造破坏了真实性

软件安全威胁

软件是用户与硬件之间的接口,用户通过软件与计算机交流

软件包括程序、数据和文档

程序是一组通过计算机执行,以完成特定任务的指令。

程序包括以下类型:源程序(Source Code)、汇编代码(Assembly Code)、目标程序(Machine Code)

软件安全:让软件在受到恶意攻击的情形下依然能够持续正确运行及确保软件被在授权范围内合法使用的思想

信息系统面临的三大典型软件安全威胁

  • 软件缺陷与漏洞(正常软件)

  • 恶意软件:实现恶意目的

  • 非法破解,知识产权被侵害(正常软件)

软件安全防护手段

  • 安全设计:在软件开发阶段尽量减少软件缺陷和漏洞的数量。

  • 保障运行环境:保障软件自身运行环境,加强系统自身的数据完整性校验,例如可信计算

  • 加强软件自身行为认证,行为可信验证(动态可信)

  • 恶意软件检测与查杀

  • 黑客攻击防护

  • 系统还原:将关键系统文件或指定磁盘分区还原为之前的备份状态

  • 虚拟隔离等,如虚拟机、沙箱

恶意软件

恶意软件是指那些设计目的是为了实施特定恶意功能的一类软件程序

主要通过软件漏洞的利用发展三个方面的能力

  • 渗透和扩散能力

  • 隐蔽能力

  • 破坏能力

计算机引导与磁盘管理

系统引导与控制权

计算机系统引导过程

BIOS(Basic Input and Output System):基本输入输出系统

  • 存储在主板BIOS Flash(或ROM)芯片。

  • 为计算机提供最底层的、最直接的硬件设置和控制。

传统BIOS模式开发效率低,性能差,扩展性差

UEFI(统一可扩展固件接口)类似于一个低阶操作系统,支持GPT分区,取消了POST自检,速度快

BIOS的自检与初始化:检测系统中的一些关键设备(如内存和显卡等)是否存在和能否正常工作,进行初始化,并将控制权交给后续引导程序

硬盘主引导程序MBR(Master Boot Record),即主引导记录,位于硬盘第一个扇区

主要功能:

  • 通过主分区表定位活动分区
  • 装载活动分区的引导程序,并移交控制权

活动分区为硬盘的启动分区,通常包含由操作系统引导的启动文件,例如windows的ntldr或bootmgr等。

活动分区引导程序在PBR(Partiton Boot Record),即分区引导记录,位于分区的第一个扇区

功能:加载操作系统引导程序

操作系统引导:如NTLDR(或bootmgr)

功能:读取boot.ini,进行多操作系统选择,启动操作系统内核,接下来则是装载对应操作系统并执行驱动程序及服务

系统引导与恶意软件的关联

80X86处理器工作模式

80X86包括三种工作模式:实模式、保护模式和虚拟8086模式

实模式:处理器复位和加电时,用于初始化控制寄存器

保护模式:是80X86处理器的常态工作模式

虚拟8086模式:为了在保护模式下兼容8086程序而设置

Windows内存结构与管理

处理器的存取模式和虚拟内存一样,也存在用户模式和内核模式,用户应用程序一般运行在用户模式,操作系统内核代码运行在内核模式

用户区内存是每个进程真正独立的可用内存空间,空间之间相互独立,不可以直接跨进程访问

内核区内存中的所有数据是所有进程共享的,存储者操作系统内核代码,该分区中所有代码和数据都被操作系统保护

X86使用二级页表,32位虚拟地址分为10位页目录索引、10位页表索引、12位字节索引

页表中的低12位为页属性

CR3寄存器指向页目录基地址的物理地址

PAE:将32位地址的页面基地址从20位提升到24位,总位数从32位到36位,采用三级页表(2+9+9)

页面权限由PDE和PTE属性值设定

磁盘的物理与逻辑结构

硬盘的物理结构

硬盘外部结构

  • 接口(电源接口+数据接口)

    • 并口(速度慢)
    • 串口(速度快)
  • 硬盘控制电路

  • 固定面板:保证硬盘盘片和机构的稳定运行0

硬盘内部结构

  • 盘片、磁头、盘片主轴、控制电机、磁头控制器、数据转换器…

磁盘寻址

CHS参数寻址

  • 柱面(Cylinders):每个盘片的半径均为相同值R的同心圆(磁道)

  • 磁头(Headers):每个盘片有两个面,每个面有一个读写磁头。

  • 扇区(Sector):每个磁道被划分为几十个扇区

CHS寻址的老式磁盘每个磁道的扇区数相等

LBA寻址,以扇区为单位进行线性寻址,用于采用等密度结构的当前磁盘上。磁盘上的所有扇区被编号

地址翻译器负责将CHS参数翻译成线性参数

逻辑结构

主引导扇区(MBR分区)位于整个硬盘的0柱面0磁头1扇区(硬盘的第一个扇区)

主引导扇区包含MBR引导程序、DPT(硬盘分区表)、结束标志(最后两个字节55AA

磁盘分区表拥有4个表项,每个表项16个字节,描述了分区开始位置、总扇区数、分区类型

重点关注最后8个字节,分别表示扇区开始位置以及扇区综述,每个扇区约512字节

==要注意计算机使用大端存储==

使用GPT分区的原因是因为需求超过了四个主分区,且单分区容量大于2TB

FAT32

文件系统将磁盘空间以一定数目($2^n$,n为整数)的扇区为单位进行划分,这样的单位称为

簇是进行文件空间分配的最小单位

FAT表是一种单向链式结构,用于磁盘数据的索引和定位,每一个FAT项用于记录一个簇的占用情况,表项个数=簇的个数。每一个FAT项填写下一个簇的簇号,如果为最后一簇,则输入FFFFFF0F,如果输入0,则表示对应簇为空闲

簇链:一个文件所占用簇的序号形成的单向链表

文件存储按如下步骤

FAT32中,目录也被当作文件进行处理。

文件删除的前后差异如下

这里假设文件连续存储

NTFS文件系统

程序的转换处理过程

函数调用方式

PE文件格式

PE文件及其表现形式

可移植的可执行文件(PE,Portable Executable File)为Win32平台可执行文件使用的一种格式

文件感染(控制权获取):是目标PE文件具备病毒功能,不破坏目标PE原有功能和外在形态

病毒代码通过如下方法与目标PE文件融为一体:

  • 代码植入

  • 控制权获取

  • 及图标更改等

PE文件结构

映像文件头包含了关于PE文件物理分布的信息比如节数目、后续可选文件头大小、机器类型等。

可选文件头定义了PE文件一些关键信息:内存镜像加载地址(ImageBase)、程序入口点、对齐粒度

ImageBase:PE文件在内存中的优先装载地址。

代码节和数据节

代码节(文本)一般名为.text或CODE,该节含有程序的可执行代码。每个PE文件都有代码节

已初始化的数据节一般取名为.data或DATA,已初始化的数据节中放的是在编译时刻就已确定的数据

未初始化的数据节一般叫.bbs。这个节里放有未初始化的全局变量和静态变量

引入函数节

引入函数节一般名为.rdata

引入函数:是被某模块调用的但又不在调用者模块中的函数。这些函数位于一个或者多个DLL中,在调用者程序中只保留了函数信息,包括函数名及其驻留的DLL名等

引入目录表由一系列的IMAGE_IMPORT_DESCRIPTOR结构组成,结构的数量取决于程序要使用的DLL文件的数量,每一个结构对应一个DLL文件。

引入地址表:每个双字中存放着对应引入函数的地址

引出函数节

引出函数节一般名为.edata,这是本文件向其他程序提供调用函数的列表所在的“索引”及具体代码实现。

通过函数名定位函数导出地址

资源节

资源节一般名为.rsrc,这个节可存放程序需要用到的资源,如图标、字体等等

重定位表

PE文件中部分数据是以VA地址存储的,当PE文件无法加载到预期ImageBase时,即镜像地址改变后,这些地址需要修正。

PE文件数字签名

对PE文件进行数字签名的作用

  • 防篡改:通过对数字签名的验证,保证文件未被非法篡改。

  • 降低误报:安全软件通过验证文件是否有正规厂商的数字签名来降低误报

恶意代码及其分类

恶意代码的定义

恶意代码也称恶意软件,设计目的是用来实现恶意功能的代码或程序。

攻击目的

攻击目标

恶意代码功能

分类

  1. 计算机病毒:一组能够进行自我传播需要用户干预来触发执行的破坏性程序或代码

    如熊猫烧香

  2. 网络蠕虫:一组能够进行自我传播、不需要用户干预即可触发执行的破坏性程序或代码。

    如SQL蠕虫王,震网

    计算机蠕虫可以独立运行,计算机病毒不能独立运行,需要宿主程序来激活它

  3. 特洛伊木马:一类看起来具有正常功能,实际上隐藏着很多用户不希望功能程序。通常由控制端 和被控制端两端组成

    如灰鸽子

  4. 后门:使得攻击者可以对系统进行非授权访问的一类程序

  5. RootKit:通过修改现有的操作系统软件,使攻击者获得访问权并隐藏在计算机中的程序

  6. 僵尸程序

  7. 间谍软件:以主动收集用户个人信息、相关机密文件或隐私数据为主,搜集到的数据会主动传送到指定服务器。

  8. 广告软件:未经用户允许,下载并安装或与其他软件捆绑通过弹出式广告或以其他形式进行商业广告宣传的程序。

  9. 流氓软件:具有一定的实用价值但具备电脑病毒和黑客软件的部分特征的软件

  10. Exploit:精心设计的用于利用特定漏洞以对目标系统进行控制的程序。

  11. 勒索软件:将用户数据加密导致系统可用性降低,并向用户发出勒索通知,要求汇款到指定用户以恢复系统

法律条款

《中国人民共和国刑法修正案(七)》第285、286条,关于危害计算机信息系统安全的法律条款

Windows PE病毒

PE病毒:以Windows PE程序为载体,能寄生于PE文件,或 Windows系统的病毒程序

PE病毒可以分为文件感染型和系统感染型

传统文件感染型

重定向是为了修正实际地址与预期地址的差异

可以通过病毒代码运行过程中自我重定位

当然,当需要使用API函数但无引入函数节支撑时,可以使用API函数地址自获取

目标程序遍历搜索

通常以PE文件格式的文件作为感染目标

使用FindFirstFileFindNextFile两个API函数遍历搜索目标程序

找到后使用FindClose关闭之前创建的搜索句柄

内存映射文件

文件感染

可以选择已有节或者添加新节来存放病毒代码

捆绑式感染

将HOST作为数据存储在病毒体内,当执行病毒程序时,还原并执行HOST文件

系统感染型

这类病毒通常为单独个体,不感染系统内的其他文件

宏病毒与脚本病毒

宏的基本概念

宏就是能组织到一起作为独立的命令使用的一系列 word命令,可以实现任务执行的自动化简化日常工作

宏病毒存在于数据文件或模板中(字处理文档、数据表格、数据库、演示文档等),使用宏语言编写,利用宏语言的功能将自己寄生到其他数据文档

获取控制权:将病毒写在自动执行宏中,由于这些宏会自动执行,因此获取控制权

Word中的宏分为两种

  • 内建宏:位于文档中,对该文档有效,如文档打开(AutoOpen)、保存、打印、关闭等。

  • 全局宏:位于office模板中,为所有文档所共用,如打开Word程序(AutoExec)。

宏病毒的自我保护

  • 禁止提示信息(避免引起用户警觉)、
  • 设置工程口令(不允许查看宏)
  • 屏蔽命令菜单
  • 隐藏真实代码
  • 编码混淆

分析手段

  • 使用16进制编辑器可以在不打开文档的情况下查看宏代码
  • 工程文档被加密时可以使用VBA Password Bypasser之类的破译器
  • 编码混淆后可以使用解码工具,或者通过动态调试
  • 模板被感染且无法进入宏编辑器,怎么办?
    • 删除原始模板文件,Office将自动生成新模板
  • 网络蠕虫文档“宏查看”相关操作的宏被接管,无法进入宏代码编辑器,怎么办?
    • 先打开非感染文档进入宏代码编辑器,然后打开目标文档切换

APT攻击中的宏利用

按照宏病毒投递手段,可以分为“水坑攻击”和“鱼叉攻击”

APT28在文档中对宏进行加密,恶意软件内嵌在文档中,并使用base64解码出来

APT32利用宏创建计划任务,实现可持续性,并从远程服务器中下载恶意软件

VBS脚本

VBS即Visual Basic脚本语言,是一种微软环境下的轻量级的解释型语言,可作为独立程(.vbs,.vbe)运行。

VBS可以高效地管理远程和本地计算机

VBScript可以通过Windows脚本宿主 (Windows Scripting Host,WSH)调用COM,因而可以使用Windows操作系统中可以被使用的程序库

VBS病毒

用VBScript编写,能够进行自我传播的破坏性程序,其需要人工干预触发执行。

VBS脚本病毒是直接通过自我复制来感染文件的,病毒中的绝大部分代码都可以直接附加在其他同类程序的中间

VBS病毒的自我保护

  • 自加密

  • 巧妙运用Execute函数

  • 改变某些对象的声明方法

  • 直接关闭反病毒软件

无文件攻击

无文件攻击是一种攻击策略,在攻击的过程中会尽量不在目标主机上遗留传统的恶意执行文件(例如exe,ps1,vbs等)

关键技术包括:

  • 绕过执行策略,原本策略不允许执行脚本,攻击者需要绕过策略

  • 脚本混淆,用于增加人工分析难度

  • 驻留技术

网络蠕虫

网络蠕虫定义

计算机蠕虫可以从一台计算机移动到另一台计算机,可以自我复制

网络蠕虫分类

功能模块

检测与防治

个人用户

  • 及时修补漏洞补丁

  • 使用防火墙软件阻断

  • 安全防护软件及时更新

网络管理者

  • 网关阻断

  • 补丁下发

安全厂商

  • 网络流量特征分析与提取

  • 网络安全设备快速阻断

  • 快速利用客户端安全软件清除蠕虫个体,并进行补丁修补

SQL蠕虫王在UDP包后追加大量字符串数据,造成基于栈的缓冲区溢出

木马与后门

木马概念

木马通过欺骗或诱骗的方式安装,并在用户的计算机中隐藏以实现控制用户计算机的目的

木马植入方式

木马通信方式

正向连接:控制端主动连接被控端

反向连接:被控端连接控制端

第三方反向通信

因为有第三方通信,所以不容易被发现,且可以绕过防火墙

木马的常见功能与意图

功能:

  • 文件管理:获取目标的文件系统信息

  • 进程管理:查看、结束、暂停目标系统进程

  • 服务管理:查看并管理目标系统的服务,查看目标系统的环境信息

  • 注册表管理

  • 屏幕监控、屏幕截取

  • 语音视频截获

  • 键盘记录

  • 窗口管理:查看目标主机目前开启了哪些窗口

  • 远程Shell等

木马检测思路

恶意代码的检测技术

检测对象

检测策略

特征值检测技术

病毒特征值是反病毒软件鉴别特定计算机病毒的一种标志。通常是从病毒样本中提取的一段或多段字符串或二进制串。

校验和检测技术

在文件使用/系统启动过程中,检查检测对象的实际校验和与预期是否一致,因而可以发现文件/引导区是否感染

启发式扫描技术

启发式代码扫描技术(Heuristic Scanning)实际上就是恶意代码检测经验和知识的软件实现

虚拟机检测技术

主动防御技术

安全软件测评

AVC测试

恶意软件样本捕获与分析

捕获方法

蜜罐:一个人工构建的用于吸引、诱骗攻击者进行攻击从而获悉攻击活动的隔离环境。

云分析服务:借助云端丰富的数据资源、计算资源构建多种分析方法,对上传的样本进行深层分析、多维检测,成为安全产品提供安全能力的重要方式之一

用户上报:用户主动将发现的可疑样本通过公开的上报服务提交给相关安全厂商和研究机构

业界、社区共享:为扩充样本的多样性、覆盖广度,安全企业间进行样本交换

恶意软件载体

  • 系统原生可执行程序
  • 脚本类
  • 文档类
  • 其他,如快捷方式、无文件攻击

分析方法

分析工具

分为在线分析工具、静态分析工具、动态分析工具

分析步骤

威胁情报

威胁情报是基于证据的知识,包括场景、机制、指标、含义和可操作的建议。这些知识是关于现存的、或者是即将出现的针对资产的威胁或危害,可为主体响应相关威胁或危害提供决策信息。

软件安全漏洞与防护

缺陷与漏洞

漏洞分类

一般可按漏洞的形成原因、所处空间和时间进行分类处理并择一使用。

软件通用漏洞评估机制CVSS

安全事件与软件漏洞

漏洞发布平台

软件漏洞与网络攻击链

对系统的影响

  1. 非法获得用户访问权限

  2. 权限提升:从低权限提升到高权限

  3. 拒绝访问:使得计算机软件或者系统(OS)无法正常工作、无法提供正常的服务

    • 本地拒绝服务漏洞:导致运行在本地的应用程序无法正常工作或者异常退出,甚至蓝屏

    • 远程拒绝服务漏洞:发送特定的网络数据报文给应用程序,使得提供服务的程序异常或者退出

  4. 未授权的数据修改或者泄漏

软件漏洞的产生原因

利用方式

可以分为本地攻击、远程主动攻击、远程被动攻击

网络攻击链

攻击者在给定的时间段内,利用漏洞或者其他攻击手段在攻击对象中注入并触发恶意代码产生拒绝服务、信息泄露、信息窃取、目标控制等后果的过程

栈溢出

函数与缓冲区

函数在运行过程中,其自身数据及必要的中间数据放在内存缓冲区中

由于EBP的位置时固定的,局部变量的位置使用EBP来定位

函数调用机制

  1. 子函数调用
  2. 创建栈帧
  3. 分配局部变量
  4. 销毁栈帧
  5. 返回调用者

栈溢出原理

栈溢出与黑客攻击

堆溢出

:一种在程序运行时动态分配的内存,需要程序员使用专门的函数申请和释放

堆的数据结构与管理

堆表分为空表和块表

堆溢出原理

堆溢出防御