又考完一门试了,把笔记扔这里吧。
第一章 软件安全概述
1.1软件的概念
软件 = 程序 + 数据 + 文档资料
1.2软件安全的由来
- 软件应用越来越广泛
- 软件自身的原因
- Connectivity 互联性
- Extensibility 拓展性
- Complexity 复杂性
- 黑客攻击方式的进化
- 传统技术的不足
- 传统网络安全技术只能对网络层进行防护
- 无法分辨与正常应用数据混杂在一起的攻击
- 传统的安全模式
- 新的安全模式
- 构建安全的系统
- 设计安全的软件
- 软件开发人员和设计人员对安全负责
- 主动式
- 传统安全教育的不足
- 有些开发人员、测试人员、设计人员逃避安全设计 和安全测试
1.3软件安全的概念
1.4软件安全的知识体系
- 描述性知识
- 原则
- 方针
- 规则
- 提供一些建议,旨在说明该做什么和在构建安全的软件时应该说明什么
- 诊断性知识
- 攻击模式
- 攻击程序
- 弱点
- 其更重要的目标是帮助操作人员识别和处理导致安全攻击的常见问题
- 历史性知识
1.5软件安全威胁与来源
四大典型软件安全威胁
- 软件缺陷和漏洞 (正常软件)
- 功能性逻辑缺陷
- 安全性逻辑缺陷
- 功能型逻辑缺陷不算漏洞,只是缺陷,只有引发安全性的才叫做漏洞。
- 危害
- 恶意软件:实现恶意目的
- 指哪些设计目的是为了实施特定恶意软件功能的一类软件程序
- 典型恶意软甲种类
- 恶意软件的威胁
- 修改或者破坏已有软件的功能
- 窃取目标系统中的重要数据
- 监视目标系统中的用户行为
- 控制目标系统
- 非法破解,知识产权被侵害 (正常软件)
- 软件后门 (正常软件)
- 漏洞形式的后门优势
- 目前,以漏洞形式存在的后门也是软件产品的重要安全威胁之一。
1.6软件安全防护手段
- 安全设计
- 保障运行环境
- 加强软件自身行为认证
- 恶意软件测试与查杀
- 黑客攻击防护
- 防火墙
- 入侵检测系统 IDS
- 入侵防护系统 IPS
- 基于主机的漏洞攻击阻断技术
- 系统还原
- 虚拟隔离
1.7专有名称及定义
- Big-edian
- Little-edian
- 缓冲区
- 已经分配的一段大小确定的内存空间,当数据在两个运行速度或者作业量不同的设备间传递时,通常使用缓冲区作为临时存储区。
- 堆
- 应用程序使用的一块内存区域,它在运行应用程序时动态分配
- 栈
- 用来存储临时数据的内存空间,它在程序运行期间不停地增长或收缩
- 软件缺陷
- 不是所有的缺陷都是漏洞,如果不被利用,软件缺陷就不是漏洞
- 反汇编程序
- API
- 应用程序编程接口是包含特殊函数功能的程序组件,这些函数功能可以被程序员在程序中使用。
- 字节码
- exploit
- 典型的exploit是一个程序,通过使用该程序可以触发一个软件漏洞并被攻击者所利用完成恶意操作。
- shellcode
- 传统的shellcode是执行shell的代码,现在通过被定义一个成功exploit所执行的代码。
- 黑客
- 真正里了解计算机内部是如何工作的计算机精湛的安全人员
- 破解者
- 脚本小子
- 白帽子
- 灰帽子
- 黑帽子
- Sandbox
- 虚拟机
- 社会工程
- 0day
- off-by-one
1.8软件安全工具简介
- 反编译器&反汇编器
- 对于编译型语言
- 对于解释型语言
- Java-Jad
- Python-uncompyle2
- 调试器
- 可以让软件安全人员在程序运行的同时观察程序的运行过程和状态
- 两个基本功能
- 分为用户模式和内核模式调试器
- 用户模式调试器
- 内核模式调试器
- WinDbg
- SoftIce
- 内核模式调试建议在虚拟机上
- 系统监视工具
- Windwos Sysinternals Suite
- FileMon
- RegMon
- Process Explorer
- Autoruns工具
- 显示了完整的开机启动的项目,还可以显示系统服务、启动阶段执行的项目、驱动等内容
- TCPView
- Portmon
- 物理端口监视器,监控系统中所有的并行和串行I/O通信
- 修补和转储工具
- 修补工具指可以修改二进制可执行代码以改变其行为的过程,常常与软件破解相关。
- Hex Workshop
- UltraEdit
- WinHex
- 010Editor
- PEview
第二章 软件安全基础
2.1系统引导与控制权
- BIOS
- 基本输入输出系统。存储在主板的BIOS Flash芯片
- 未计算机提供最底层的最直接的硬件设置ihe控制
- BIOS的自检与初始化工作
- 任务
- 检测系统的一些关键设备,比如内存和显卡是否正常和能否正常工作,进行初始化,并将控制权交给后续引导程序
- 显卡初始化
- 显示 系统BIOS启动画面
- 检测CPU
- 检测一些标准硬件设备及即插即用设备 比如硬盘
- 根据用户指定的启动顺序从硬盘或者usb启动
- 硬盘主引导程序
- 所在位置
- MBR Master Boot Record
- 硬盘的第一个扇区
- 主要功能
- 通过主分区表中定位活动分区
- 装载活动分区的引导程序,并移交控制权。
- 活动分区引导程序
- 所在位置
- DBR DOS Boot Record、
- 或者叫做 OBR OS Boot Record
- 或者叫做 分区引导记录 PBR Partition Boot Record
- 它是分区的第一个扇区
- 功能
- 加载操作系统引导程序
- 如Windows XP的NTLDR
- 系统引导和恶意软件有何关系?
- 恶意软件在植入系统之后,如何再次获得控制权?
- 在操作系统引导阶段控制权
- BootKit:BIOS木马,MBR木马等,可用于长期驻留在系统;早期的DOS引导区病毒等。
- CIH病毒
- 在操作系统启动阶段获得控制权
- 最常见的恶意软件启动方法,多见于独立的恶意软件程序。
- 在应用提程序执行阶段获得控制权
2.2 Windows内存结构与管理
Windows内存可以分为
- 物理内存
- 虚拟内存
- 通常在用户模式下,我们用调试器看到的内存都是虚拟内存
CPU特权级与内存访问
- 用户模式 Ring 3
- 内核模式 Ring0
- 可以访问所有的内存空间(包括用户模式分区)和硬件,可使用所有处理器指令。
- 用户区内存
- 每个进程真正独立的可用内存空间,进程中的绝大部分数据都保存在这一区域中。
- 主要包括应用程序代码
- 全局变量
- 所有线程的线程栈
- 加载的DLL带啊吗
- 每个进程的用户区的虚拟内存空间相互独立,一般不可以直接跨进程访问,这使得一个程序直接破坏令一个程序的可能性非常小。
- 内核区的内存
- 所有数据都是所有进程共享的,是操作系统代码的驻地
- 操作系统内核代码
- 线程调度
- 内存管理
- 文件系统支持
- 网络支持
- 设备驱动程序
- 该分区的所有代码和数据都被操作系统保护
- 用户区模式代码无法直接访问和操作
- 如果系统直接堆内存空间内的地址访问,将会发生地址访问违规。
x86 Windows 默认使用二级页面把虚拟地址转译为物理地址。
- 一个32位地址 被划分为三个单独部分
- x86系统上默认页面大小为4KB,故业内字节索引宽度为12位。
2.3 磁盘物理与逻辑结构
硬盘是
- 控制代码的静态存储结构
- 恶意软件执行控制权争夺的中心
硬盘的逻辑结构
2.4 FAT32文件系统
簇
- 文件系统将磁盘空间以一定数目的扇区为单位进行划分,这样的单位称为簇。
- 每扇区大小为512字节
- 簇的大小一般是512B、1KB、2KB。。。64Kb等。
- 簇是进行文件空间分配的最小单位。
FAT表
- File Allocation Table 文件分配表。是微软在FAT文件系统中用于磁盘数据文件索引和定位引进的单项链式结果
- FAT区用每一个Fat项来记录每一个簇的占用情况
- FAT表中表项的个数 = 簇的个数
- FAT表按顺序依次记录了该盘各簇的使用情况
- 如果为0,则表示对应簇空间,可存储数据
- 每个表项多大?
- FAT16系统的FAT表项战16位。
- FAT32系统的FAT表项占用32位,4字节
簇链
- 一个文件所占用簇的序号形成的单向链表
- 实现方法
- 在文件占用簇的对应簇号的FAT表,填写下一个簇的簇号,如果位最后一簇,则输入结束表示
FFFFFF0F
文件存储
- 按照文件大小定位足够的空闲簇
- 创建文件目录项
- 在FAT中构架簇链表
- 在对应分配的簇中写入数据
文件删除、
-
目录项
-
FAT表簇链
-
文件内容
重要文件被删除后,不得堆分区继续进行写
被删除文件的恢复机理
- 确定高位并还原
- 参考相邻目录项的首簇高位
- 从0往上试探,看首簇指向内容是否为预期文件头
- 修复FAT表簇链
- 通过文件大小计算所占簇数
- 按照连续假设存储,进行簇链修补,其中末尾FAT项采用0xFFFFFFF结尾。
2.5 PE文件格式
2.5.1 PE文件及其表现形式
- 可移植的可执行文件 PE Portable Executable File
- win32平台可执行文件使用的一种格式
- 其他EXE文件格式
- DOS :MZ格式
- Windows 3.0/3.1
- NE New Executable
- 16位Windows可执行文件格式
- PE文件
- 一个可执行文件不光包括了二进制吧h的机器代码、还会自带许多其他信息
- PE文件格式规定了所有的这些信息在可执行文件中如何组织
- 在程序被执行时,操作系统会按照PE文件格式的约定区相应的地方准确地定位各种类型地资源,并分别装入内存地不同区域。
2.5.2 PE文件格式与恶意软件的关系
文件感染 / 控制权地获取
- 使得目标PE文件具备/启动 病毒功能 / 目标程序
- 但不破坏目标PE文件原有功能和外在形态等。
病毒代码如何与目标PE文件融为一体?
2.5.3 PE文件格式总体结构
2.5.4 代码节与数据节
代码节
- 一般名为.text 或 CODE,该节含有程序的可执行代码
- 每个PE文件都有代码节
已初始化的数据节
-
这个节一般名为.data或者DATA。 -
已初始化的数据节放的是在编译时刻就已经确定的数据
比如一些字符串
未初始化的数据节
2.5.5 引入函数节:PE文件的引入函数机制
- .rdata
- 引入函数:被程序调用但是其执行代码又不在程序中的函数。
- 这些函数位于一个或者多个DLL中,在调用者程序中只保留了函数信息,包括函数名及其驻留的DLL名。
- 动态链接库:例如kernel32.dll, user32.dll, gdi32.dll等。
- 如何从PE文件定位到引入目录表 IDT的起始位置?
- Import Directory Table
- 引入目录表由一系列的Image_Import_Descriptor结构组成
- 结构的数量取决于程序要使用的DLL文件的数量,每一个结构对应一个DLL文件。
- 在所有这些结构的最后,由一个内容全为0的Image_Import_Descriptor结构作为结束。
- Image_Import_Descriptor结构
- OriginalFirstThunk
- FirstThunk
- Image_Thunk_Data
- Import Name Table
- Import Address Table
- 可以通过可选文件头中的DataDirectory的第13项定位
- 在文件中时,其内容与Import Name Table完全一样
- 在内存中时,每个双字中存放着对应引入函数的地址。
2.5.6 引出函数节
- .edata
- 这时本文件向其他程序提供函数的列表、函数所在的地址及具体代码实现。
- 病毒在感染其他文件时时不能直接调用API函数的
- 因为病毒往其他HOST程序中所写的只是病毒代码节的部分。
- 不能保证HOST程序中一定由病毒所调用的API函数,这样就需要我们自己获取API函数的地址
- 一种方法就是暴力所有法从kernel32模块中获取API函数,这种该方法就充分利用了引出函数节中的数据
- 关键结构:导出目录表
- Image_Export_Directory
- 可以通过 可选文件头 DataDirectory第一项获得。
- 导出地址表
- 导出名字表
- 导出序号表
2.5.7 资源节
- .rsrc
- 这个节放 如图标、对话框等程序要用到的资源
- 资源节是树形结构的,它有一个主目录,主目录下又有子目录,子目录下可以是子目录或者数据,通常有3层目录【资源类型/ 资源标识符/ 资源语言ID】,第四层是具体的资源
- 在病毒感染过程中,如果设计图标替换,则涉及对资源节相关数据的处理
- 三个重要的数据结构
- Image_Resource_Directory
- Image_Resource_Directory_Entry
- Image_Resource_Data_Entry
- 同样通过可选文件头DataDirectory来定位
2.5.8 重定位节
- 重定位节存放了一个重定位表,若装载器不是把程序装到程序编译时默认的基地址时,就需要这个重定位表来做一些调整。
- 重定位以Image_Base_Relocation结构开始。
- 为什么需要重定位?
- PE文件中部分数据时以VA地址存储的,当PE文件无法加载到预期ImageBase时,这些地址需要被修正。
- 由于dll中的需要修正的地址可能很多,所以需要用一张表记录那些写死的地址,将来装载内存时进行一一修正,被称为重定位表,一般每一个PE文件都有一个重定位表。
- Image_Base_Relocation
2.5.9 PE文件执行时的内存布局
- 当PE文件并加载到内存后,内存的版本称为模块【module】
- 加载后的执行作用
- PE装载器首先会为进程分配一个4GB的虚拟地址空间,然后把程序所占用的磁盘空间作为虚拟内存映射到这个4GB的虚拟地址空间。通常,会映射到虚拟地址 空间中的0x400000的位置
- PE装载器在内核中创建进程对象和主进程对象及其他内容
- PE装载器搜索 PE文件中Import Table 引入表,装载应用程序所使用的动态链接库
- PE装载器执行PE文件首部所指定地址处的代码,开始执行应用程序主线程
第三章 恶意软件的原理与防护
3.1 恶意代码及其分类
定义
恶意代码 Malicious Code 或者 MalCode,也称为恶意软件 MalWare。
- 设计目的时用来实现恶意功能的代码或者程序
- 正常软件也会引发安全问题,但绝大多数清空下并非作者有意。
- 恶意代码可能通过软件漏洞、电子邮件、存储媒介或者其他方式植入目标计算机,并随着目标计算机的启动而自动运行
- 恶意代码的主要存在形态时内存代码、可执行程序和动态链接库。
恶意代码攻击目的
恶意代码攻击目标
- 个人计算机
- 服务器
- 移动智能终端
- 智能设备
- 通信设备
- 安全设备
- 攻击目标范围
恶意代码的功能
- 获取数据
- 静态数据
- 动态数据
- 口令、内存、计算机网络流量、通信网络数据、可移动存储介质、隔离电脑等
- 破坏系统
- 数据:删除修改数据
- 系统服务:通用Web服务系统、数据库系统、特定行业服务系统
- 支撑设备:网络设备、线路。
- 动态控制与渗透拓展攻击路径等
恶意代码的分类
恶意代码,即广义上的计算机病毒,可以分为
- 计算机病毒、蠕虫
- 木马、后门
- Rootkit
- 僵尸bot
- 流氓软件、间谍软件
- 广告软件、Exploit、黑客工具等。
详细介绍
-
计算机病毒
- 一组能够进行自我传播、需要用户干扰来触发执行的破坏性程序或代码
- CIH、爱虫、美丽莎、新欢乐时光、求职信、恶鹰、rose、威金】熊猫烧香、小浩、机器狗、磁碟机、AV终结者、Flame
-
网络蠕虫
- 一组能够自我传播、不需要用户干预即可触发执行的破坏性程序或者代码+
- 如红色代码、SQL蠕虫王、冲击波、震荡波、急速波、魔波、震网。
-
特洛伊木马
- 是指一类具有正常功能、但实际上隐藏着很多用户不希望功能的程序。通常由控制端和被控制端两端组成
-
后门
-
Rootkit
- 通过修改现有操作系统软件,使攻击者获得凡哥维纳全并隐藏在计算机中的程序。
-
间谍软件
- 以主动收集用户个人信息、相关机密文件或者隐私数据为主,搜集到的数据会主动传送到指定服务器。
-
广告软件
- 未经用户允许,下载并安装与其他软件捆绑通过弹出式广告或以其他形式进行商业广告宣传的程序
-
流氓软件
- 具有一定的实用价值但是具备电脑病毒和黑客软件的部分特征的软件【特别是难以卸载】
- 他处于合法软件和电脑病毒的灰色地带,同样极大地侵害着电脑用户的权益,也称为灰色软件。
-
Exploit
- 精心设计的用于利用特定漏洞以对目标系统进行控制的程序。
-
黑客工具
- 各类直接或间接用于网络和主机渗透的软件,如各类扫描器,后门植入工具、密码嗅探器、权限提升工具。。。
恶意代码与网络犯罪
情节严重
- 获取支付结算、证券交易、期货交易等网络金融服务的身份认证信息十组以上的。
- 获取第一项以外的身份认证信息五百组以上的。
- 非法控制计算机信息系统二十台以上的。
- 违法所得五千元或者造成经济损失一万元以上的。
- 其他情节严重的情形。
如果是情节特别严重,则数量或者数额达到1~4项的标准5倍以上的。
3.2 Windows PE病毒
什么是PE病毒
- 以Windows PE程序为载体,能寄生于PE文件,或者Windows系统的病毒程序。
什么叫感染
- 在尽量不影响目标程序正常功能的前提下,使其具有病毒自己的功能
何为病毒自己的功能
- 感染模块:被感染程序同样具备感染能力。
- 触发模块:在特定条件下实施相应的病毒功能
- 破坏模块
PE病毒的分类
感染目标类型
传统文件感染型
感染思路,让PE文件头指向恶意代码,大概是利用AddressofEntryPoint,先执行病毒代码,然后病毒代码执行完毕后再跳转到原程序。
优点
- 被感染后的程序注意依然是目标程序,不影响目标程序图标。隐蔽性稍后。
缺点
- 对病毒代码的编写编写要求较好,通常是汇编语言编写,难以成功感染自校验程序
关键技术
- 重定位
- 病毒代码目标寄生位置不固定
- 病毒程序的重定位不利用重定位节,而是在运行过程中进行自我重定向
- 常见方法
- 将下一条语句开始位置压入堆栈
- JMP到目标地址执行
- API函数自获取
- 目标程序遍历搜索
- 全盘搜索或者部分盘符搜索
- 通常以PE文件格式的文件为感染目标
- 在对目标进行搜索时,通常调用两个API函数
- FindFirstFile
- FindNextFile
- 遍历算法:递归或者非递归
- 感染模块
- 病毒代码插入位置选择与写入
- 控制权返回机制
- 感染的关键
- 病毒代码能够运行
- 程序的正常功能不能被破坏
- 感染时记录原始的位置
- 病毒代码执行完毕后,返回控制权
- 避免重复感染:感染标记
- 代码插入位置
- 添加新节
- 基本步骤
- 判断目标文件开始的两个字节是否为MZ
- 判断PE文件标记PE
- 判断感染标记,如果已经感染则跳过
- 获得Directory 数据目录的个数
- 得到节表其实位置
- 得到目前最后节表的末尾偏移
- 开始写入节表和病毒节
- 修正文件头信息
- 写入人感染标记
- 碎片式感染
- 插入式感染
- 将病毒代码插入到HOST文件的代码节的中间或者前后
- 这种感染方式会增加代码节的大小,并且可能修改HOST程序中的一些参数的实际位置导致HOST程序运行失败。
捆绑释放型
- 将HOST作为数据存储在病毒体内
- 当执行病毒程序时,还原并执行HOST文件
- 优点
- 缺点
- 被感染后的程序主体时病毒程序,易被发现【程序叠加+释放执行】,程序目标问题
系统感染型
这类病毒通常为独立个体,不感染系统内的其他文件。
两个关键问题
3.3 宏病毒与脚本病毒
宏
- 能组织到一起作为独立命令使用的一系列word命令,可以实现任务执行的自动化,简化日常工作
- Microsoft officef使用Visual Basic for Applications 进行宏的编写。
宏病毒
- 存在于数据文件或者模板中,使用宏语言编写,利用宏语言的功能将自己寄生到其他数据文档。
宏病毒的感染
- 内建宏
- 位于文档中,对文档有效,如文档打开 autoopen,保存,打印。关闭等
- 全局宏
- 位于office模板中,为所有文档所共用,如打开word程序 autoexec
- 传播路线
- 单机
- 单个office文档->office文档模板->多个office文档
- 网络
感染机理
- 让宏在数据文档和文档模板之间相互感染。
- 如何感染
- 自我保护
- 禁止提示信息
- 屏蔽命令菜单,不允许查看宏
- 隐藏宏的真实病毒代码
- 代码导出
- 代码导入
- 宏病毒也可以在网络进行传播,譬如电子邮件。
什么是VBS
- Visual Basic Script的简称
- 微软环境下的轻量解释型语言,它使用COM组件,WMI、WSH、ADSI访问系统中的元素,对系统进行管理。
- 是ASP Active Server Page 的默认脚本语言。也可以在客户端作为独立程序 .vbs. /vbe运行
VBS的功能
- 高效的管理远程和本地计算机
- 读取及修改环境变量
- 管理注册表、文件系统
- 管理服务、进程、系统账户
- 管理活动目录、
- 进行网络交互(文件上传下载。邮件发送等)
VBS脚本病毒的传播方法
- 用VBS编写,能够进行自我传播的破坏性程序,其需要人工干预触发执行。
VBS病毒如何感染文件
- 通过自我复制来感染文件,病毒中的绝大部分代码都可以直接附加在其他同类程序中。
- Email
- 感染网页
- 通过IRC
VBS病毒产生机
- 脚本语言的特点
- 解释执行、不需编译
- 程序无需校验
- 每条语句之间分割清晰
- 模块执行位置不敏感
- VBS病毒产生机
- 病毒功能模块化,供用户进行病毒或参数功能,然后根据配置进行代码组合和参数修改,最后生成。
爱虫病毒
VBS自我保护
- 自变换与加密
- 巧妙运行EXcute函数
- 改变某些对象的声明方法
- 尝试关闭反病毒软件
3.4 网络蠕虫
计算机蠕虫的两个最基本的特征
蠕虫的最初目的:分布式计算的模型计算
蠕虫和计算机病毒的重新定义
- Eugene H.Spafford 为了区分蠕虫和病毒,给出了蠕虫和计算机病毒的定义
- 计算机蠕虫可以独立运行,并能把自己的一个包含所有功能的版本传播到另外的计算机上
- 计算机病毒是一段代码,能把自身加到其他程序包括操作系统上,它不能独立运行,需要她的宿主程序运行来激活它。
一些蠕虫
- CodeRed
- 蠕虫王 Slammer
- 可用于信息站的蠕虫——飞客 conficker
网络蠕虫的分类
- 产业通用分类标准
- 漏洞利用类蠕虫-ExploitWorm
- 口令破解类蠕虫-PassWorm
- 邮件传输类蠕虫-MailWorm
- 即时通信类-IMWorm
- P2PWorm, IRCWorm, USBWorm
网络蠕虫的基本功能
- 信息收集
- 对本地或者目标网络进行信息收集,为发现易感染目标提供支持
- 本机系统信息、用户信息、对本机信任或者授权的主机、主机所处网络的拓扑结构、边界路由器
- 扫描探测
- 完成特定目标的脆弱性检测,发现易感染目标
- 影响传播速度的主要因素
- 漏洞主机被发现的速度
- 漏洞主机的总数
- 网络蠕虫对目标的感染速度
- 扫描策略
- 随机扫描
- 选择性扫描
- 顺序扫描
- 基于目标列表的扫描
- 分治扫描
- 基于路由的扫描
- 基于DNS的扫描
- 攻击渗透
- 自我推进
- 在本机与目标主机之前完成蠕虫副本的传递
- 文本直接传输
- 搭建Web、FTP、TFTP服务器
- P2P
- 拓展功能
- 取决于攻击者的目的
- 实体隐藏模块
- 宿主破坏模块
- 信息通信模块
- 远程控制模块
- 自动升级模块
蠕虫的检测与防止
蠕虫的传播阶段
漏洞利用型蠕虫的行为特征
- 特点
- 利用系统、网络应用的服务漏洞
- 主动攻击、无需人为干预
- 速度激起迅猛
- 危害
检测和防止
- 个人用户
- 即时修补漏洞补丁
- 使用防火墙软件阻断
- 安全防护软件及时更新
- 网络管理者
- 安全厂商
- 网络流量特征分析与提取
- 网络安全设备快速阻断
- 快速利用客户端安全软件清除蠕虫个体,并进行补丁修补。
- 网络应用厂商
3.5 网络木马
木马
- 通过欺骗或者诱骗的方式安装,并在用户的计算机中隐藏以实现控制用户计算机的目的
- 特点
木马的分类
- 行为视角
- 功能视角
- 远程控制型
- 交互性:双向
- Backdoor
- 冰河、网络渗透、广外女生、网络公牛、黑洞、上兴、彩虹桥、PCShare、灰鸽子
- 信息获取型
- 键盘输入、内存、文件数据
- 交互性:单向
- 发送至第三方空间,文件服务器、指定邮件等,或者直接开启FTP服务程序。
- Trojan-Bank Trojan-GAmeThief Trojan-IM, Trojan-Spy Trojan-PSW Trojan-Malifinder
- 破坏型
- 对本地或者远程主机系统进行数据破坏、资源消耗等。
- 交互性:单项 (攻击者->被控制端)或者无交互
- 典型案例 Trojan-DDos Trojan-Ransom Trojan-ArcBomb Trojan-Downloader Trojan-Dropper
木马的植入方式
- 网页挂马植入
- 电子邮件植入
- 附件形式
- 电子邮件和恶意网页相结合,即使不打开附件,选中就会被植入
- 文档捆绑植入
- 伪装欺骗植入
- 捆绑植入
- 其他
木马的通信方式
- 传输通道构建信息
- 建立通信连接的方式
- 正向连接
- 控制端主动连接被控端
- 优点
- 缺点
- 可能会被防火墙阻挡
- 被攻击者必须具备外部IP地址
- 定位被攻击者相对困难
- 反向连接-1
- 优点
- 通过防火墙相对容易
- 攻击目标随时上线、随时控制
- 可以控制局域网内的目标
- 样本回暴露控制服务器信息
- 攻击者通常应当具备外部IP
- 反向连接-2【通过一台肉鸡】
远程木马的常见功能
-
木马结构
- 完整的而木马一般由木马配置程序、控制端程序和被控制端程序
-
常见功能
- 文件管理
- 进程管理
- 服务管理
- 注册表管理
- 屏幕监控、屏幕截取
- 语音视频截获
- 键盘记录
- 窗口管理
- 远程shell
木马的检测思路
- 静态文件特征
- 网络流量特征
- 系统行为特征
- 功能行为特征
- 攻击意图
3.6 恶意代码检测技术
恶意代码的检测是将检测对象与恶意代码特征【检测标准】进行对比检测,定位病毒程序或者代码。或者检测恶意行为。
检测对象
- 引导扇区
- 具有控制权的引导扇区
- 硬盘主引导扇区
- 硬盘操作系统引导扇区
- 可移动银盘引导扇区
- 检测目标
- 文件系统中可能带毒的文件
- 内存空间
- 恶意代码在传染和执行时,必然要占有一定的内存空间,部分功能主流在内存中。
- 部分恶意代码仅存在于内存中
- 部分恶意代码仅在内存中被还原
- 主板BIOS
- 网络流量、系统行为等。
病毒的检测策略
- 专用检查技术
- 针对某个或者某些特定已知恶意代码
- 反病毒软件必须随着新病毒的不断出现而频繁更新病毒库版本
- 如问及那特征值检测技术
- 通用检测技术
- 针对已知和未知恶意代码
- 广义特征描述或者一般行为特征作为判断依据
- 启发式扫描技术、主动防御技术
特征值检测技术
- 病毒特征值时反病毒软件鉴别特定计算机病毒的一种表示。通常是从病毒样本中存取的一段或者多段字符串或者二进制。
- 具体思路
- 两个关键
- 特征值的提取
- 特征字符,从病毒体内提取的比如特定的提示信息、特定的签名信息
- 感染标记:病毒为避免重复感染而使用的感染标记
- 提取方法
- 特征值的匹配技术
- 优点
- 检测速度快,误报率比较低,为广大反病毒厂商所采用,技术也比较成熟。
- 缺点
- 恶意软件可能这样来对抗特征值检测技术
校验和检测技术——预期符合性
在文件使用/系统启动过程中,检查检测对象的实际是否和预期一致,因而可以发现文件/引导区是否感染。
预期:正常文件内容和正常引导扇区数据
使用方式
校验检测对象
优点
缺点
- 必须预先记录正常文件的校验和
- 误报率高
- 不能识别病毒名称
- 效率低
启发式扫描技术
Heuristic Scanning 实际上就是恶意代码检测经验和知识的软件实现。
可疑的程序代码指令序列
启发式扫描步骤
- 定义通用可疑特征(指令序列或者行为)
- 对上述功能操作将被按照安全和可以的等级进行排序,授以不同的权值。
- 鉴别特征,如果程序的权值总和超过一个事先定义的阈值,则认为“发现病毒”
优点
缺点
解决方案
- 启发式扫描技术 + 传统扫描技术
- 可提高病毒检测软件的检测率,同时有效降低了总的误报率。
病毒面对启发式扫描技术如何博弈?
- 直接对抗
- Disabled启发式机制
- Disabled反病毒软件
- 绕行
虚拟机检测技术
为什么需要虚拟机检测技术
加密病毒
虚拟机检测技术
- 在反病毒系统中设置的一种程序机制,他能在内存中模拟一个小的封闭程序执行环境,所有待查的文件都以解释方式在其中被虚拟执行。
- 通常虚拟执行一小部分代码即可
优点
- 有效处理加密类病毒
- 虚拟机技术+特征值扫描,准确率更高
- 虚拟机技术+启发式扫描,有利于检测未知变形病毒。
主动防御技术
有时也被称为行为监控等技术。
- 动态监视所运行程序调用的api,自动分析程序动作之间的逻辑关系,自动判定程序行为的合法性。
- 监控应用程序的敏感行为,并向用户发出提示,供用户选择。
优点
- 可发现未知恶意软件、可准确地发现未知恶意软件地恶意软件
缺点
- 可能误报警、不能识别恶意软件名称,以及在是实现时有一定难度
3.7 恶意软件样本捕获与分析
恶意软件样本捕获方法
- 蜜罐
- 通常是指未采取安全防范措施并将模拟地程序漏洞主动地保留据在网络中地计算机
- 引诱恶意软件样本来攻击这类蜜罐计算机设备
- 特点
- 与一般计算机不同,其内部运行着多种多样地自我暴露程序和行为记录程序
- 引诱恶意程序在蜜罐内更加充分地运行,并记录下其行为
- 分类
- 用户上报
- 云查杀平台
- 诱饵邮件
- 样本共享
恶意软件载体
- 在彻底清除主机内的恶意软件时,需要定位恶意软件的来源、传播方式和存在形式,即载体
- 不同类型的恶意软件有不同的传播方式与存在形式
文件感染型病毒
蠕虫、木马恶意软件
- 和正常软件一样安装进入系统中
- 安装比较隐蔽,多通过漏洞利用直接进入目标主机
宏病毒
- Word、Excel、Powerpoint的模板文件
通过电子邮件传播的恶意软件
脚本类恶意代码
- 通过支持脚本的软件的漏洞进行传播
- 触发漏洞的恶意代码藏在脚本中
- 比如浏览器中JS、VBS触发浏览器漏洞,或者通过Flash的ActionScript触发漏洞,然后编码在脚本中的恶意代码
- 通过网页脚本直接传播
应用程序重打包
- Android APP 被逆向修改后可以再次打包为可运行App的特点。
- 所以以流行App为载体,向其中插入恶意代码后重打包,这种方式是Android恶意代码传播的重要方式
恶意软件样本分析方法
- 在线分析
- 本地静态分析
- 本地动态分析
- 网络交互的动态分析
第四章 软件的漏洞与防护
4.1 软件缺陷与漏洞机理概述
本地程序安全漏洞的本质:代码流程的变化。
任何安全漏洞都是导致程序走到了别的流程上去了,而非设计流程
改变程序执行流程的被黑客入侵实际上没有违反任何编程规则,他仅仅是知道了规则的更多的情况,而且以难以预料的方式使用规则。
安全漏洞是软件bug的一个子集。
安全漏洞
- 软件或者硬件生成过程中出现的bug,该bug在一定条件下会被触发,引起信息安全相关的问题
- 程序中存在的危害本地安全策略的问题或者弱点,大多数指那些会导致程序强制执行一些不同于作者本来意图的行为。
网络攻击为什么容易
攻击类型
- 非法获取访问全新啊
- 权限提升
- 拒绝服务攻击
- 恶意软件植入
- 数据丢失或者泄露
安全漏洞的分类
- 内存破坏导致代码执行
- 其他安全问题
- 从用户群体看
- 作用范围
- 触发条件
- 从数据角度分类
- 能读按理不能读的数据
- 能把指定的内容写入指定的地方
- 输入的数据可以被执行
- 从时序上分类
4.2 典型软件漏洞机理分析
分类
- 缓冲区溢出
- 整形溢出
- 单字节溢出
- 格式化串漏洞
- 覆盖C++虚函数指针
- Web应用程序漏洞
缓冲区溢出
一些概念
- 内存
- 代码区
- 这个区域存储着被装入执行的二级制机器代码,处理器会被执行到这个区域取指并执行
- 数据区
- 堆区
- 进程可以在堆区动态地请求一定大小地内存,并在用完之后归还给堆区。动态分配和回收是堆区地特点。
- 栈区
- 用于动态地存储函数之间地调用关系,以保证被调用函数在返回时恢复到父函数中继续执行。
- 非安全函数
- 内有内嵌边界保护支持,必须要使用额外的代码进行边界检查
- 安全函数
- 可以限制所操作的数据长度,正确使用则不会导缓冲区问题的函数
- 边界检查 Boundary Check
- 在向缓冲区存储数据时,确定数据长度会不会超出缓冲区边界
- 栈不可执行
- 某些CPU支持堆内存是否可执行的标志位。
- 操作系统可以利用该特性在进程初始化时将堆栈设置为不可执行。
缓冲区溢出的分类
- 栈缓冲区溢出 stack overflow
- 堆缓冲区溢出 heap overflow
- 类似缓冲区溢出的问题
系统栈用到的三个寄存器
- ESP 指向当前栈帧的栈顶
- EBP 指向栈底
- EIP 存放下一条等待执行的指令的地址。
- 如果控制了EIP寄存器的内容,就可以劫持进程来执行我们想要执行的命令。
堆和栈的区别
- 堆内存
- 典型用例
- 申请方式
- 释放方式
- 管理方式
- 所在位置
- 增长方向
- 栈内存
- 典型用例
- 申请方式
- 释放方式
- 管理方式
- 所在位置
- 增长方向
堆块
整数型溢出
- 不同大小类型的整数不要互相尝试存储
- 对整数的操作要格外注意
- 加和乘的结构不一定使得整数变大
- 减和除不一定使得整数变小。
- 切记:安全函数如memcpy、strncpy的长度参数都是无符号整数
单字节溢出
格式串漏洞
- 可以用%s, %x等查看堆栈中的数据
- %n能把显示的内容的长度写入一个内存地址
- 可以出现多次写内存的机会
覆盖C++虚函数指针
sQL注入
4.3 Windows系统安全机制及漏洞防护技术
-
safe c library -
standard annotation languages (SAL) -
栈溢出检查 GS -
数据执行保护 DEP Data Executaion Prevention -
ASLR Address space layout randomization 地址空间分布随机化 -
safeseh -
EMIT enhanced mitigation experience toolkit
?
|