软件安全的复习
最近要考试软件安全了,就总结了一些一些书上的知识点,仅供参考,不太全
本复习资料系机械工业出版社出版(陈波,于冷)的软件安全技术,由无据(博客名)编写
软件安全概论
- 0day漏洞,0day攻击
0day攻击:利用0day漏洞开发攻击工具进行的攻击称为0day攻击
0day漏洞:未被公开披露的软件漏洞
- 软件面临的三大类安全威胁
软件漏洞
漏洞利用的过程 漏洞发现->漏洞挖掘->漏洞验证->漏洞利用->实施攻击
恶意代码
软件侵权
复制/修改/翻译别人的软件著作
- 恶意代码
在未被授权的情况下,以破坏硬件设备,窃取用户信息,干扰用户正常使用,扰乱用户心理为目的而编制的软件或代码片段
恶意代码包括:计算机病毒,蠕虫,特洛伊木马,后门,内核套件(rootkit),间谍软件,恶意广告,流氓软件,逻辑炸弹,僵尸网络,网络钓鱼,恶意脚本,垃圾信息,勒索软件
- 软件安全防护的主要技术(后面有详细讲)
软件安全属性的认知
系统安全工程
软件安全开发
软件漏洞概述
- 漏洞的特点
持久性和时效性
广泛性和具体性
可利用性和隐蔽性
- 漏洞分类
-
- 基于漏洞成因分类
- 基于利用位置
- 基于威胁类型
WIndows 系统典型漏洞分析
内存漏洞
- 内存结构
进程可以分为代码区,数据区,堆区,栈区
缓冲区既可以是堆区也可以是栈区,也可以是存放静态变量的数据区所以缓冲区溢出就分为了堆溢出和栈溢出
- 栈溢出
栈帧:栈帧是一块空间,EBP-ESP之间的位置就是某个函数的栈帧
函数的调用流程:先参数入栈(参数从右向左入栈)然后call 函数(call的作用就是改变EIP的值),之后将call指令的下一条指令的地址入栈(即返回地址),后跳转到函数执行入口
pushq %rbp
movq %rsp, %rbp
subq $16, %rsp
movl $1, -4(%rbp)
movl -4(%rbp), %eax
movl %eax, %edi
call fun
movl $0, %eax
leave
ret
可以看到函数的初始化部分先EBP入栈,提升栈底,然后提升栈顶,这个时候EBP+8
就是第一个参数的位置(这里不太好理解,可以画个图就清楚了),EBP+C
就是第二个参数的值,函数的返回值一般放到EAX里面最后还原现场,调用ret(改变EIP,pop call函数的下一条指令的地址到EIP )
关于栈溢出,栈的增长方向是从高地址到低地址,但是在栈中写数据是从低地址向高地址写所以就会造成溢出,溢出的目的就是覆盖返回地址
在进行栈溢出利用的时候,算出输入几个字节会溢出到返回地址,然后将返回地址覆盖为system()等高权限能执行系统命令的函数上,(如需参数,就先ret到push处传递参数,再由push下面的代码调用system())之后就getshell了
- JMP ESP溢出
这种方法呢就是将返回地址修改为JMP esp的地址之后执行栈中的shellcode ,不过现在已经不适用了,很多程序都有栈保护,也就是程序无法执行栈中的代码
- SEH溢出
SEH是一种异常处理机制,当线程初始化的时候会自动向栈中安装异常处理结构,方法是覆盖异常处理程序地址,由于SEH结构存放在栈中,因此可以利用数据将SEH中异常函数的入口地址覆盖为shellocode的起始地址或者跳转指令地址
- 堆溢出
大概率不考,之后总结
- 格式化字符串漏洞的利用与分析
漏洞成因:printf函数的格式化输出,当printf函数进行格式化输出的时候,会根据格式化控制字符在栈上取所需的格式输出,如果函数调用给出的输出数据列表少于格式控制符的个数,甚至没有给出输出列表,系统仍然会按照格式从栈中取数据输出
printf("a=%d,b=%d")
就存在这样的漏洞
利用:可以利用格式化字符串漏洞读取内存中的数据,也可以使用%n这个格式符向内存中写数据
Windows安全漏洞保护分析
- /GS(栈金丝雀)就是生成一段随机数,放在返回地址前面,如果检测到这个随机数不对就判定栈被修改了就退出
- DEP(数据执行保护)即栈上不可以执行代码
- ASLR(地址布局随机化)很容易理解,通过对堆栈地址的随机化增大攻击者攻击难度
- safeSEH,主要针对SEH这种栈溢出的方法,就是调用异常函数的时候,看一下这个函数是否在SEH表中
- EMET(增强缓解体验包),不清楚干什么的
WEB 漏洞分析
因为博主是学web的所以此部分就不总结了,略过
软件安全开发模型
- 软件生命周期
1.软件定义时期
2.软件开发时期
3.软件维护时期
- 软件开发模型
瀑布模型
快速成型模型
增量模型
螺旋模型
喷泉模型
Rational统一过程
极限编程和敏捷开发
微软过程
- 软件安全开发模型
1.SDL
SDL从需求分析阶段到测试阶段都有较多的自动化工具支持它。SDL体系较为完善,和其他安全开发流程相比,它的流程要求严格,适合于大型机构使用
2.BSI
BSI认为软件安全有3跟支柱:风险管理、软件安全接触点和安全知识,强调了在软件生命周期中风险管理的重要性,并要求风险管理框架贯穿整个开发过程。
3.CLASP
CLASP是一个用于构建安全软件的轻量级过程,应用该方法可以较好地处理那些可能导致安全服务出现漏洞的软件脆弱性。CLASP所采用的流程属于轻量级,能够与多种软件开发模型相结合,对小型软件企业更具有吸引力
4.SAMM
SAMM为软件开发提供了一个开放的框架,目标在于制定简单、有良好定义,且可测量的软件安全开发模型,其对安全知识的要求更低,更适合非安全专家使用。
软件测试
主要分为百盒测试和黑盒测试(功能测试)以及灰盒测试
- 软件测试的步骤
(1)模块测试
(2)子系统测试
(3)系统测试
(4)验收测试
(5)平行运行
- 源代码静态分析工具
1)Fortify SCA
2)Coverity
3)LAPSE
4)FindSecurityBugs
5)Flawfinder
6)RIPS
7)CodeXploiter
8)Seay源代码审计系统
- 重点:模糊测试
模糊测试的方法
预生成测试用例
随机生成输入
手工协议变异测试
变异或强制性测试
自动协议生成测试
- 模糊测试的优点盒局限性
优点:
1)测试目标是二进制可执行代码,比白盒范围更大
2)动态执行,不存在静态中大量报错
3)原理简单
4)自动化程度高
局限:
1)发现访问控制漏洞能力有限
2)设计逻辑缺陷的发现能力有限
3)多阶段安全漏洞的发现能力有限
4)多点触发漏洞的发现能力有限
5)不能测试到所有的代码分支
- 模糊测试的过程
确认目标->确认预期输入->生成模糊测试用例->执行模糊测试用例->监视异常->异常分析并确认漏洞
- 模糊测试工具
文字处理软件
fileFUzz
SPIKEfile
notSPIKEfile
PaiMei
网络协议
Sulley
SPIKE
peach Fuzzer
Web应用程序
powerfuzzer
SPIKE proxy
WebScarab
Web Inspect
渗透测试
对象:
1)硬件
2)主机系统软件
3)应用系统软件
- 渗透测试过程
1.前期交互
2.情报收集
3.威胁建模
4.漏洞分析
5.渗透攻击
6.后渗透攻击
7.报告
- 一些不知道的工具
Acunetix Web Vulnerability Scanner
IBM Security AppScan
Nessus
W3AF
NetSparker
Open Vulnerability Assessment System
OWASP ZAP
Nikto
PE文件结构
1)DOS头
- DOS MZ文件头的基本作用是识别一个合法的PE文件,为PE加载器提供PE文件头的入口地址
- DOS插桩程序的功能,判断是否为windows
2)PE头
pe文件的总体信息
3)节表
- 是一个结构体数组,加载到线性地址空间用的
4)节
不同的资源放在不同的节中
恶意代码机理分析
计算机病毒
针对文件,针对操作系统
- 引导区病毒
- 文件型病毒
- 混合型病毒
病毒的特点
破坏性
传染性
潜伏性
隐藏性
工作机制
1)引导模块
- 将计算机病毒引入系统内存
- 设置激活条件
- 自保功能
2)传然模块
- 寻找目标
- 检测目标文件
- 实施感染
3)表现模块
- 破坏模块,具体的破坏代码
蠕虫
针对网络,有远程控制
1)主体功能模块
信息搜集,扫描探测,攻击渗透,自我推进
2)辅助功能模块
实体隐藏,宿主破坏,信息通信,远程控制,自动升级
木马
- C/S
后门
Rootkit
勒索软件