漏洞分类
1.0day漏洞:已经被发现(可能未公开)但官方还没有相应的漏洞补丁
2.1day漏洞:安全补丁已经发布,但大多数用户还没有打补丁
3.历史漏洞
Windows平台下典型的漏洞利用阻断技术
1./GS栈溢出检测
在编译时可以选择是否开启GS安全编译选项。这个操作会给每个函数增加一些额外的数据和操作,用于检测栈溢出。
在函数调用时,会在返回地址和EBP之前压入一个额外的Security Cookie。系统会比较栈中的这个值和原先存放在.data中的值做一个比较。如果两者不吻合,说法栈中发生了溢出。
对抗:
(1)猜测cookie
(2)同时替换栈中的cookie和副本cookie
(3)覆盖SEH绕过cookie检查
(4)覆盖对象的虚函数表指针,将虚函数重定向到恶意代码处。
2.DEP数据执行保护
DEP的主要作用是阻止数据页(默认的堆,栈以及内存池页)执行代码。
简单来说,内存中,可写和可执行不可兼得。
对抗:
有一个API,改变指定内存页的属性的,
所以,我们溢出的时候,把返回地址设计为这个API的地址,再精心构造一个栈为调用这个API的栈,就可以改变当前栈的内存页的属性,使其从”不可执行”变成”可执行”.
3.地址空间布局随机化ASLR
通过对堆栈和共享库映射等线性布局的随机化,增加攻击者预测目的地址的难度。
对抗:
(1)对本地攻击者无能为力
(2)造成内存碎片增多
(3)可以利用没有启用ASLR的模块中的相关指令做跳板
4.安全结构化异常处理SafeSEH
即在调用异常处理函数之前,对要调用的异常处理函数进行一系列的有效性校验,如果发现异常处理函数不可靠(被覆盖了,被篡改了),立即终止异常处理函数的调用。
对抗:
(1)利用堆地址覆盖SEH结构绕过SafeSEH
(2)利用没有启用SafeSEH保护的模块绕过SafeSEH
(3)利用加载模块之外的地址绕过SafeSEH
5.增强缓解体验工具包EMRT
上面各种防护机制的集合体,它是用户自己选择安装的。
对内存访问的错误主要为以下分类
:
1.数组越界读或写
2.访问未初始化内存
3.访问已经释放的内存
4.重复释放内存
5.释放非法内存
安全开发生命周期SDL
(1)培训
(2)需求分析
(3)设计
(4)实施
(5)验证
(6)发布
(7)响应
McGraw的软件内建安全开发模型
p123
1.内建安全BSI模型
2.BSI成熟度模型BSIMM
OWASP的软件安全开发模型
软件保证成熟度模型:
四个核心业务:
(1)治理
(2)构造
(3)验证
(4)部署
等级保护的基本概念
:
对网络实施分等级保护,分级监督;
对网络中使用的网络安全产品实行按等级管理;
对网络中发生的安全事件分等级响应,处置。
等级保护工作的五个环节
:
(1)定级
(2)备案
(3)等级测评
(4)安全建设整改
(5)监督检查
威胁建模
概念:通过抽象的概念模型对影响软件系统的威胁进行系统的识别和评价。
与渗透测试的区别
:
渗透测试是在一个系统开发完成之后进行验证网络和信息系统可能面临的安全威胁和脆弱点,它难以系统的解决软件产品自身实质性的安全问题。而威胁建模是贯彻于整个开发周期的。他能更早的发现问题,甚至在开发前进行模型分析时就可以发现问题,从而大大减少后期的重新设计或改代码的复杂操作
威胁建模的过程
:
(1)确定安全目标
(2)创建应用程序概况图
(3)分解应用程序
(4)确定威胁
(5)威胁评估
(6)确定威胁缓解计划或策略
(7)验证威胁
(8)验证建档
上面4过程中常见威胁分类(STRIDE威胁分类)
假冒–认证性–攻击者能够伪装成另一个用户或身份
篡改–完整性–在传输,存储或者归档过程中修改数据
否认–不可否认性–攻击者能够否认攻击
信息泄露–机密性–信息泄露给未授权用户
拒绝服务–可用性–对于合法的用户拒绝提供服务
特权提升–授权性–攻击者能够提权
软件版权保护的几个方面
:
1.防软件盗版
2.防逆向工程
3.防信息泄露
软件版权保护的基本技术
:
基于硬件的保护技术
(1)对发行介质的保护
如光盘中的,在不存放实际数据的区域插入错误帧,在光盘中放置秘密信息唯一标识原始光盘,改光盘名称导致报错等
(2)软件狗
软件运行过程中必须插软件狗。
(3)可信计算芯片
对程序加密,确保软件在安全的环境中运行。
基于软件的保护技术
(1)注册验证
(2)软件水印
(3)代码混淆
(4)软件加壳