赞
踩
什么是软件安全?
软件安全主要包括三个方面:软件自身安全(软件缺陷与漏洞)、恶意软件攻击与检测、软件逆向分析(软件破解)与防护。
当系统中被植入恶意软件后,其对软件及信息系统的巨大威胁主要表现在?
(1)已有软件的功能被修改或被破坏
(2)目标系统中的重要数据被窃取
(3)目标系统中的用户行为被监视
(4)目标系统被控制
SDL(信息技术安全开发生命周期流程)阶段
需求分析、设计、编码、测试和维护
可信计算:
基本思想:首先建立一个信任根,信任根的可信性由物理安全和管理安全确保(目前以TPM作为信任根),再建立一条信任链,从信任根开始到硬件平台、到操作系统、再到应用,一级认证一级,一级信任一级,从而把这种信任边界扩展到整个计算机系统。
硬盘的三个基本参数
磁头数:表示目标扇区所在的硬盘磁头编号,硬盘是由多个磁盘组成的,而每个磁盘上都有一个读写磁头负责该磁盘的读写操作,磁头数最大为255.
柱面数:表示目标扇区所在盘片的磁道号,最大为1023.
扇区数:表示目标扇区所在的磁道扇区号,最大为63,每个扇区一般是512个字节。
一个硬盘实际的可访问最大容量:磁头数(最大)*柱面数(最大)*扇区数(最大)*512
基本Int 13H调用:
BIOS Int13H调用是BIOS提供的磁盘基本输入输出中断调用,他可以完成磁盘(包括硬盘和软盘)的复位、读写、校验、定位、诊断、格式化等功能。他使用的就是CHS寻址方式,因此最大能访问8G左右的硬盘。
主引导扇区结构
主引导扇区也就是磁盘的第一个扇区(0面0磁道1扇区),它由主引导记录(MBR),硬盘主分区表(DPT)和引导扇区标记(boot record ID)三部分组成。
主引导扇区的具体内容:
000H-08AH:主引导程序,用于寻找活动分区
08BH-0D9H:启动字符串
0DAH-1BCH:保留
1BEH-1FDH:硬盘主分区表
1FEH-1FFH:结束标记(55AA)
主引导记录:占用主引导扇区的前446个字节(0到0x1BDH),它里面存放着系统主引导程序(它负责从活动分区中装载并运行系统引导程序)
硬盘主分区表:占用64个字节(0x1BEH到0x1FDH),里面记录了磁盘的基本分区信息。它分为四个分区项:每项16个字节,分别记录了每个主分区的信息(因此最多有四个主分区)
引导扇区标记:占用两个字节(0x1FEH到0x1FFH),对于合法引导区,他等于0xAA55,这也是判别引导区是否合法的标志。
扩展分区简介:
扩展分区中的信息是以链表形式存放的。扩展分区类似于一个完整的硬盘,但每一个扩展分区中只能存在一个其他分区,此分区在DOS/Windows环境下即为逻辑盘,因此每一个扩展分区的分区表中最多只能有两个分区数据项。
UEFI相比BIOS的优势
1、通过保护预启动或预引导进程,抵御bootkit攻击,从而提高安全性。
2、缩短了启动时间和从休眠状态恢复的时间。
3、支持容量超过2.2 TB的驱动器。
4、支持64位的现代固件设备驱动程序,系统在启动过程中可以使用它们来对超过172亿GB的内存进行寻址。
5、UEFI硬件可与BIOS结合使用。
文件系统:
文件系统是一个操作系统的重要组成部分,是操作系统在计算机硬盘存储和检索数据的逻辑方法。不同的操作系统支持的文件系统类型有所不同。DOS/Windows系列操作系统中使用的文件系统有FAT12、FAT16、FAT32、NTFS、和WINFS等;Linux中支持的文件系统类型有Ext2、Ext3、Minix、NTFS等。
80x86处理器的工作模式:
实模式是处理器工作的基础,可以通过指令切换到保护模式,当然也可以从保护模式回退到实模式。虚拟8086模式则以保护模式为基础,因此,虚拟8086模式不能直接和实模式进行切换。
1.实模式:80x86处理器在复位或加电时是以实模式启动的。在实模式下,80x86处理器不能对内存进行分页管理,所以指令寻址的地址就是内存中实际的物理地址。在实模式下,所有的段都是可以读、写、执行的。实模式下的80x86不支持优先级,所有的指令相当于工作在特权级(优先级0),所以执行所有特权指令,包括读写控制寄存器CRO。
2.保护模式:保护模式是80x86处理器的一般工作模式。在该模式下,处理器都最大化的发挥功能:所有32位地址线都可以用来寻址,物理寻址空间达4G;支持内存分页机制,提供了对虚拟内存的良好支持;虚拟内存大大提高了任务的可寻址空间,是运行大型程序和真正实现多任务必须的保障。保护模式的另一个大特点就是支持优先级机制,根据任务特性进行了运行环境隔离。DOS操作系统运行在实模式下,Windows操作系统运行在保护模式下。
3.虚拟8086模式:虚拟8086模式是为了在保护模式下兼容8086程序而设置的。在该模式下,80x86支持任务切换和人内存分页。
用户模式和内核模式的区别:
用户模式:用户模式区则是每个进程真正的可用的内存区间,进程中的绝大部分数据都保存在这一部分,主要包括应用进程代码、全局变量、所有线程的线程栈以及加载的DLL代码等。
内核模式:内核模式分区中的所有数据是所有进程共享的,是操作系统代码的驻地。其中包括操作系统内核代码,以及与线程调度、内存管理、文件系统支持、网络支持、设备驱动程序相关的代码。虽然所有进程共享这一分区,但是该分区中所有代码和数据都被操作系统保护起来了,如果应用程序直接对该内存空间内的地址进行访问,将会发生地址访问违规。
虚实地址转换:
一个32位地址被划分位三个单独部分:页目录索引(10位)、页表索引(10位)和字节索引(12位)。
内存分配与管理函数
win32的内存API可以分为三类:虚拟内存管理、堆管理、内存映射文件管理。 1.虚拟内存:适用于管理较大的内存。 (1)分配/保留虚拟内存:VirtualALLoc(lpMem,Size,Type,Access),其中,lpMem为分配/保留的内存 地址;Size表示要分配内存的大小;Type是分配的类型;Access是保护标志。 (2)释放虚拟内存:VirtualFree(lpMEM,Size,Type),其中,lpMEM表示要释放的内存的基地址;Size 表示要释放的内存大小;Type是释放的类型。 (3)改变页保护属性:VirtualProtect(lpMem,Size,Access,lpOldAccess),其中,lpOldAccess是 用来之乡一个地址用以存放旧的保护属性。 (4)内存锁定:VirtualLock(lpMem,Size),用来确保当进程运行时,指定的内存总是在内存之中。 (5)内存解锁:VirtualUnlock(lpMem,Size),解除锁定,功能与VirtualLock相反。 2.堆管理:适用于程序要经常分配小内存的情况。 (1)获取缺省堆:GetProcessHeap(无参数),函数会返回缺省堆的句柄。 (2)创建新堆:HeapCreate(flOption,dWINitalSize,cbMaxumumSize),其中,flOption可以是: 0、HEAP_NO_SERIALIZE、HEAP_GENERATE_EXCEPTIONS或其组合,dWINitalSize 指堆的初始化大小,cbMaximumSize指堆的最大容量。 (3)分配堆内存:HeapAlloc(hHeap,dwFlags,dwBytes),其中,hHeap为堆句柄,由HeapCreate或 GetProcessHeap取得。dwFlags是一下三个之一或组合:HEAP_ZERO_MEMORY、 HEAP_GENERATE_EXCEPTIONS和HEAP_NO_SERIALIZE,HEAP_ZERO_MEMORY表示分配是 把内存清0,函数成功时返回所分配的指针,否则犯规NULL。dwBytes为要分配的堆内存小。 (4)重分配堆内存:HeapReAlloc(hHeap,dwFlags,LpMem,dwBytes),其中,LpMem为HeapAlloc分 配的堆内存。 (5)释放堆内存:HeapFree(hHeap,dwFlags,LpMem) 3.内存映射文件:为大文件的操作提供方便,并提供进程间通讯的方法。 常见API函数: CreateFileMapping(),MapViewOfFile(),UnMapViewOfFile(),FlushViewOfFile()
计算机的启动过程:
1.按下电源开关,电源向主板和其他设备供电,此时电压不稳定,主板控制芯片会向CPU发出一个reset信号,初始化CPU。当电压稳定后,芯片便撤去reset信号,这时候CPU会马上从地址FFFF0H处开始执行指令,这个地址在系统BIOS的地址范围内,无论是Award BIOS还是AMI BIOS,放在这里的只是一条跳转指令,这个时候BIOS就会进行到第二个步骤POST。
2.系统BIOS的启动代码首先要做的事就是进行POST(加电自检),POST的主要任务就是检测系统中的一些关键设备是否存在或能否正常工作。
3.系统BIOS将查找显示卡的BIOS,存放显示卡BIOS的ROM芯片的起始地址通常在C0000H处,系统BIOS找到显示卡BIOS之后调用它的初始化代码,由显示卡BIOS来完成显示卡的初始化。
4.系统BIOS查找其他设备的BIOS程序,找到之后同样要调用这些BIOS内部的初始化代码来初始化这些设备。
5.系统BIOS显示自己的启动画面,其中包括系统BIOS的类型、序列号、版本号等内容。同时屏幕底部左下角会出现主板信息代码,包含BIOS的日期、主板芯片组型号、主办的识别编码及厂商代码等。
6.系统BIOS检测CPU的类型和工作频率,并将检测结果显示在屏幕上,接下来系统BIOS开始检测主机所有的内存容量,并同时在屏幕上显示内存测试的数值。
7.系统BIOS开始检测系统中安装的一些标准硬件设备,这些设备包括:硬盘、CD-ROM、软驱、串行接口和并行接口等连接的设备,另外绝大多数新版本的系统BIOS在这一过程中还要自动检测和设置内存的相关参数、硬盘参数和访问模式等。
8.系统BIOS内部的支持即插即用的代码将开始检测和配置系统中安装的即插即用设备。每找到一个设备,系统BIOS都会在屏幕上显示出设备的名称和型号等信息,同时为该设备分配中断、DMA通道和I/O端口等资源。
9.系统BIOS会重新清屏并在屏幕上方显示出一个系统配置列表,其中简略地列出系统中安装的各种标准硬件设备,以及他们使用的资源和一些相关的工作参数。
10.BIOS更新ESCD(扩展系统配置数据)。
11.系统BIOS的启动代码根据用户指定的启动顺序从软盘、硬盘或光驱启动。
Win32病毒的运行过程:
1.用户点击(或者系统自动运行)HOST程序
2.装载HOST程序到内存中
3.通过PE文件的AddressOfEntryPoint和ImageBase之和来定位第一条语句的位置
4.从第一条语句开始执行(病毒代码可能在此时,也可能在HOST代码运行过程中获得控制权)
5.病毒主体代码执行完毕,并将控制权交还给HOST程序
6.HOST程序继续执行
PE文件格式分析
相对虚地址(RVA):是一个相对于可执行文件映射到内存的基地址的偏移量。例如,当可执行文件映射到内存中的基地址(即ImageBase值)是400000H,则RVA地址1000H的实际内存地址是401000H。
计算机病毒判断一个文件是否是真正的PE文件,第一步是判断该文件的前两个字节是否4D5A,如果不是,则不是PE文件;如果是,那么我们可以在DOS程序头的偏移3CH处的四个字节找到PE字符串的偏移位置,然后查看该偏移位置的四个字节是否是50\45\00\00,如果不是,说明不是PE文件,如果是,我们认为它是PE文件。
18.引出函数节:
引出函数节一般名为.edata,这是本文件向其他程序提供调用的函数列表,这个节一般用在DLL中,EXE文件也可以用这个节,但是通常很少用。它的开始是一个IMAGE_EXPORT_DESCRIPTION结构。
19.漏洞的分类
(1)按漏洞可能对系统造成的直接威胁,可分为:获取访问权限漏洞、权限提升漏洞、拒绝服务攻击漏洞、恶意软件植入漏洞、数据丢失或泄密漏洞等。
(2)按漏洞的成因,可分为:输入验证错误、访问验证错误、竞争条件错误、意外情况处理错误、设计错误、配置错误及环境错误。
(3)按漏洞的严重性的分级,可分为高、中、低三个级别。
20.CNVD
CNVD(国家信息安全漏洞共享平台)是由国家计算机网络应急技术处理协调中心联合国内重要信息系统单位、基础电信运营商、网络安全厂商、软件厂商、互联网企业建立的信息安全漏洞共享知识库。
建立CNVD的主要目标即与国家政府部门、重要信息系统用户、运营商、主要安全厂商、软件厂商、科研机构、公共互联网用户等共同建立软件安全漏洞统一收集验证、预警发布及应急处置体系,切实提升我国在安全漏洞方面的整体研究水平和及时预防能力,进而提高我国信息系统及国产软件的安全性,带动国内相关安全产品的发展。
21.缓冲区溢出漏洞
1.缓冲区:是指内存空间中用来存储程序运行时临时数据的一片大小有限并且连续的内存区域。
2.根据程序中内存分配方式和使用目的,缓冲区可分为栈和堆两种类型。(c语言中的数组就是栈缓冲区)
3.缓冲区溢出漏洞的形成原理:当程序在处理用户数据时,未能对其大小进行恰当的限制,或者在进行拷贝、填充时没对数据限定边界,导致实际操作的数据大小超过了内存中缓冲区的大小,使得内存中一些关键数据被覆盖,从而引发安全问题。如果攻击者通过特制的数据进行溢出覆盖,则有机会成功利用缓冲器溢出漏洞,从而修改内存中数据,改变程序执行流程,劫持进程,执行恶意代码,最终获得主机控制权。
22.什么是SQL注入?
SQL注入就是攻击者通过SQL命令插入到web表单或页面请求的查询字符串,使得最终达到欺骗服务期执行恶意的SQL命令的目的。
23.XSS(跨站脚本攻击)漏洞
使攻击者嵌入恶意脚本代码到正常用户会访问的页面中,当正常用户访问该页面时,则可导致嵌入的恶意脚本代码的执行,从而达到恶意攻击用户的目的。
1.反射型XSS漏洞
2.存储型XSS漏洞
3.基于DOM的XSS漏洞
24.CSRF(跨站请求伪造)
攻击者利用目标站点对用户的信任,诱使或强迫用户传输一些未授权的命令到该站点,从而达到攻击目的。
25.Exploit结构
Exploit的核心是劫持目标进程的控制权,然后跳转去执行shellcode。
漏洞利用的具体技术:
1.修改内存变量
2.修改代码逻辑
3.修改函数返回地址
4.修改函数指针
5.攻击异常处理机制
6.修改P.E.B中线程同步函数的入口地址
26.Shellcode
Shellcode是一段最终将直接运行在受害者主机的目标进程的代码
Shellcode的功能:
1.正向连接:正向连接类的Shellcode在目标主机运行后再打开一个监听端口,等待攻击者主动连接,因此在配置的时候只需要输入目标主机的IP和目标程序的端口号即可。
2.反向连接:为了绕过防火墙,Shellcode采取目标主机反向连接攻击主机的方式,配置的时候需要填入目标主机和攻击主机的IP和端口号。
3.下载程序并执行:这一类型的Shellcode运行后会自动到指定的URL去下载一个指定的文件并运行,这类Shellcode在网页挂马类漏洞的漏洞利用中相当广泛。
4.生成可执行文件并运行:攻击者直接将可执行文件嵌入到Shellcode中,Shellcode的目的就是将其释放出来并运行。这种Shellcode在文档捆绑类漏洞的漏洞利用中非常普遍。
27.常见漏洞挖掘技术分类:
1.基于源代码的静态分析:基于源代码,可直接从程序逻辑的角度寻找漏洞。
2.动态分析:分析数据的聚集、压缩和抽象的过程,用于理解软件的运行和可能出现的漏洞。
3.Fuzzing技术:特殊的黑盒模糊性测试,不关注软件的功能业务和逻辑流程,重点关注软件的健壮性。
4.逆向分析:对反编译后的源程序代码进行分析,分析结果过程中集合了动态分析和静态分析方法。
5.基于补丁比对的逆向分析:对补丁前后的程序进行反编译,通过比对差异、定位漏洞
28.栈溢出检查–GS
使用/GS选项编译的程序在运行开始时,通过向函数的开头和结尾添加代码来阻止针对典型栈溢出漏洞的利用。
/GS保护机制的原理和实现:如果程序在编译时使用了/GS选项,那么当程序启动时,他首先会计算出程序的cookie,然后将cookie保存在加载模块的.data节中,在函数的开始处,这个cookie将被拷贝到栈中,位于返回地址、寄存器EBP之后,局部变量之前,在函数结尾处程序会把这个cookie和保存在.data节的cookie进行比较,如果不相等,就说明进程的系统栈被破坏,需要终止程序运行。
29.Rootkit、流氓软件、僵尸程序、Exploit
Rootkit:是能够持久或可靠地、无法被检测地存在于计算机上的一组程序或代码。
流氓软件:指具有一定的实用价值但具备电脑病毒和黑客软件的部分特征的软件。
僵尸程序:指实现恶意控制功能的程序代码。
Exploit:是针对某一特定漏洞或一组漏洞而精心编写的漏洞利用程序。
30.计算机病毒的特点和分类:
特点:1.传播性 2.非授权性 3.隐蔽性 4.潜伏性 5.破坏性 6.不可预见性 7.可触发性 分类: 1.按照计算机病毒攻击的操作系统分类: (1)攻击DOS系统的病毒 (2)攻击Windows系统的病毒 (3)攻击UNIX系统的病毒 (4)攻击Macintosh系统的病毒 (5)其他操作系统上的病毒 2.按照攻击对象分类: (1)攻击智能手机的病毒 (2)攻击微型计算机的病毒 (3)攻击小型计算机的病毒 (4)攻击工作站的病毒 (5)攻击中、大型计算机的病毒 3.按照感染方式分类: (1)感染可执行文件 (2)感染引导区 (3)感染文档文件 (4)感染系统 4.按照计算机病毒的破坏情况分类: (1)良性病毒 (2)恶性病毒
31.Windows PE病毒的感染技术
1.病毒感染重定位
2.获取API函数地址
3.添加新节感染
4.病毒返回宿主程序
32.感染文件的基本步骤:
1.判断目标文件开始的两个字节是否为“MZ“
2.判断PE文件标记“PE”
3.判断感染标记,如果已被感染则跳出继续执行HOST程序,否则继续
4.获得Directory(数据目录)的个数
5.得到节表起始位置
6.得到目前最好节表的末尾偏移
7.节表起始位置+节的个数*(每个节表占用的字节数28H)=目前最后节表的末尾偏移
8.开始写入节表
9.修改映像文件头的节表数目
10.修改AddressOfEntryPoint,同时保存旧的AddressOfEntryPoint,以便返回HOST继续执行
11.更新SizeOfImage(内存中整个PE映像尺寸=原SizeOfImage+病毒节经过内存节对齐后的大小)
12.写入感染标记
13.写入病毒代码到新添加的节中
14.将当前文件位置设为文件末尾
33.Rootkit核心技术分析
1.Rootkit常用技术介绍 (1)用户态HOOK a.IAT钩子 b.内联钩子 (2)内核态HOOK a.IDT钩子 b.SSDT钩子 c.过滤驱动程序 d.驱动程序钩子 (3)直接内核对象操作(DKOM) 2.进程隐藏技术 (1)SSDT钩挂隐藏进程 (2)DKOM隐藏进程 3.文件隐藏技术 (1)用户态文件隐藏(FindFirstFile和FindNextFile) (2)内核态文件隐藏 4.通信隐藏技术 (1)SSDT钩挂隐藏端口 (2)驱动程序钩子隐藏端口 5.注册表隐藏技术 (1)注册表键隐藏 (2)注册表键值隐藏
34.病毒检测技术
1.特征值检测技术
步骤:
a.采取已知的样本
b.从病毒样本提取特征值
c.将特征值纳入病毒特征值数据库
2.检验和检测技术
3.虚拟机检测技术
4.启发式扫描技术
5.主动防御技术
6.云查杀技术
35.蜜罐
蜜罐:通常是指没有采取安全防范措施且主动暴露在网络中的计算机。
作用:监控网络攻击行为、收集攻击工具和恶意代码、分析攻击方法、推测攻击意图和动机、追踪攻击发起者
36.花指令
软件作者可能会在代码中加入一些特殊的数据来扰乱反汇编程序,使其无法正确的转化出真实的反汇编代码,这些特殊的数据称为花指令。
37.检测调试器软件是否存在的方法和思路
1.查找进程
2.查找进程或文件特征码
3.查找特定服务
4.句柄检测
5.检测DBGHELP模块
6.查找调试器窗口
7.SeDebugPrivilege方法
38.系统监控
工具:systeminternel
39.恶意样本分析
软件:虚拟机
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。