概述
复习重点
- 本章为基础章节,以概念考察为主,题目比较基础
重点:
计算机安全的定义(CIA,三个目标):保证信息系统资产的机密性、完整性、可用性
- 机密性:数据机密性、隐私性
- 完整性:数据完整性、系统完整性
- 可用性
- 真实性、可说明性
- 计算机系统资产:硬件、软件、数据、通信设施和网络
-
威胁、攻击和资产
四种威胁后果:非授权泄露、欺骗、破坏、篡夺
- 非授权泄露:未授权获得数据访问——破坏机密性
- 暴露:直接泄露
- 截获:搭线窃听
- 推理:非授权用户推理
- 入侵:躲避系统安全保护
- 欺骗:导致授权实体接受虚假数据并相信其正确性——破坏完整性
- 冒充:佯装成授权实体(特洛伊木马)
- 伪造:伪造虚假数据
- 抵赖:否认对行为的的责任(否认发送或接收过数据)
- 破坏:破坏或阻止系统服务和功能正常运行的情况或事件——破坏可用性或完整性
- 失能:禁用系统组件(物理破坏、系统硬件破坏、恶意软件、木马、蠕虫)
- 破坏:修改数据或系统功能(设置后门逻辑)
- 阻碍:阻止系统运行(中断通信链路)
- 篡夺:导致系统服务或功能被非授权实体控制的事件或情况——破坏完整性
- 盗用:服务窃取(分布式拒绝服务攻击,盗用处理器)
- 误用:恶意代码
- 网络安全攻击:被动攻击、主动攻击
- 被动攻击:本质是窃听或监视数据传输(不涉及对数据的修改)
- 消息内容泄露
- 流量分析
主动攻击:对数据流进行篡改或伪造数据流
经济机制原则:设计尽可能简单、短小
- 安全缺省原则:访问控制应当基于许可而不是排除
- 绝对中介原则:每一次访问都应当依据访问控制进行检查
- 开放式原则:设计应当开放而非保密
- 特权分离原则:对于限定资源的访问需要多特权属性
- 最小特权原则:最小化功能权限(基于角色的访问控制,低耦合原则)
- 最小共用原则:最小化不同用户共享的功能,提高安全性
- 心理可接受原则:安全机制不应该过度干涉用户的工作,同时也要满足用户授权访问的要求
-
攻击面和攻击树
攻击面是由系统中可到达的和可被利用的脆弱点构成的
- 攻击面分类:
- 网络攻击面
- 软件攻击面
- 人为攻击面
- 攻击树是一个分支型、层次化的数据结构
五类可以识别的攻击:
安全策略:规范/策略、实施/机制、正确性/保证
- 安全实施:预防、检测、响应、恢复
- (额外知识)安全洋葱:一种安全纵深方法,威胁发起者必须以类似于剥洋葱的方式剥掉网络的防御机制
书后习题(部分)
- 给出计算机安全的定义
计算机安全是指为自动化系统提供的保护信息系统,以实现保护信息的完整性、可用性和机密性系统资源(包括硬件、软件、固件、信息/数据和电信)。 - 被动安全威胁和主动安全威胁的区别是什么?
被动安全威胁与窃听或监视传输有关。电子邮件、文件传输和客户端/服务器交换是可以监控的传输示例。主动安全威胁包括修改传输的数据和企图未经授权访问计算机系统。 - 思考在 ATM 上用户提供银行卡和个人标志码(PIN)用于账户访问的场景。给出与系统相关的机密性、完整性和可用性要求的例子,并说明每种情况下要求的重要性等级。
无论是在主机系统还是事务传输期间,系统必须对个人身份号码保密。它必须保护账户记录和个人交易的完整性。主机系统的可用性对经济发展很重要,但银行不承担其受托责任。个人取款机的可用性不太受关注。 - 考虑如下允许访问资源的代码:
a.解释程序中存在的安全缺陷
b.重写代码以避免缺陷
如果 IsAccessAllowed 失败?例如,如果系统在调用此函数时内存或对象句柄耗尽,会发生什么情况?用户可以执行特权任务,因为该功能可能返回一个错误,例如 ERROR NOT ENOUGH MEMORY。
在这种情况下,如果对 IsAccessAllowed 的调用因任何原因失败,则用户被拒绝访问特权操作。DWORD dwRet = IsAccessAllowed(...);if (dwRet == ERROR_ACCESS_DENIED) {// Secure check failed.// Inform user that access is denied.} else {// Security check OK.}
DWORD dwRet = IsAccessAllowed(...);if (dwRet == NO_ERROR) {// Secure check OK.// Perform task.} else {// Security check failed.// Inform user that access is denied.}
密码编码工具
复习重点
- 属于基础章节,主要考察以密码编码工具的基础概念和应用,题型以选择填空为主
重点:
素数:素数只有公因子1和它自己
- 互素:两个数如果除了1之外,没有公因子,就是互素的
- 辗转相除法(欧几里得算法)
- 其原理依赖于定理:两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数
- gcd(a, b) = gcd(b, a mod b)
- 反复重复上述过程,直到余数为0,就可以求出最大公约数
- 扩展欧几里得算法常用于RSA密钥
- 欧拉函数
- 对n进行模算术运算时,完整的剩余类为0,1,…,n-1
- 剩余的约化集:剩余类中与n互素的剩余
- 剩余的约化集元素个数为Eular函数,即所有小于n的且与n互素的正整数的个数
#card=math&code=%5Cvarphi%28n%29&id=pxFRf)
- 对素数p,有
%3Dp-1#card=math&code=%5Cvarphi%28n%29%3Dp-1&id=w3wB3)
- 对n=pq,p和q是素数,有
%3D%5Cvarphi(p)%5Cvarphi(q)%3D(p-1)(q-1)#card=math&code=%5Cvarphi%28n%29%3D%5Cvarphi%28p%29%5Cvarphi%28q%29%3D%28p-1%29%28q-1%29&id=WqKFR)
- 离散对数
- 素数的本原根:如果a是素数n的本原根,则数a mod n,a^2 mod n,…,a^(n-1) mod n的不同的并且包含1到n-1的整数的某种排列
- 求幂的逆向问题就是找到一个数模p的离散对数
y=a^x mod p - 仅当a是p的本原根时,才存在唯一的、以a为底模p的离散函数
逆元
对称加密
- 对称加密的5个基本部分:明文、加密算法、秘密密钥、密文、解密算法
- 攻击类型:唯密文攻击、已知密文攻击、选择明文攻击、选择密文攻击、选择文本攻击
- 破解难度递减、防范难度递增、已知信息量递增
- 对称加密也叫做传统加密或者单密钥加密
- 对称加密的两个要求:
- 加密算法足够强(难破译)
- 密钥和算法的传输过程必须是安全的
- 攻击对称加密的方法包括:密码分析和蛮力攻击(穷举攻击)
- 对称分组加密算法
- 分组密码(加密速度快)
- 将明文信息编码编码后的数字序列划分成长度为n的组,一次处理一个组
- 每组分别在密钥的控制下变换成等长的密文信息
- DES 算法概述
- 分组加密算法:明文和密文为 64 位分组长度
- 对称算法:加密和解密除密钥编排不同外,使用同一算法
- 密钥长度 56 位(64 位中每个第 8 位为奇偶校验位,故 64-8=56 位)
- DES 加密
- 设计原则:混乱、扩散
- 置换(公开)——16 轮 FEistel 结构——逆置换(公开)
- DES 解密实际上是与加密完全一样的过程
- DES 强度由密钥长度决定——强力搜索可能破译(抗穷举能力弱,不i安全)
- DES 算法的替代方案
- 对 DES 进行复合,强化抗攻击能力,如三重 DES
- AES
- 三重 DES 的优缺点
- 密钥长度 168 位,克服蛮力攻击
- 无攻击三重 DES 的有效方法
- 用软件实现较慢,分组长度要求更长
- ECB 模式:明文每次被提交 b 位并且每组明文用相同的密钥进行加密,通常 b 为 64 或 128
- 操作模式:为了增强用于加密大数据序列对称分组密码的安全性
- 分组密码(加密速度快)
流密码:持续的处理元素(通过伪随机发生器产生的密钥流,与明文流进行逐位异或),每次产生一个元素的输出,持续进行下去
消息认证和散列函数
对称密码和公钥密码体制主要针对信息的保密性,即防止第三方获取明文信息
- 保证信息的完整性主要通过消息认证实现
- 消息认证包括两个方面:
- 验证消息的内容有没有被篡改和验证信源是否可信
- 验证消息的时效性以及两个实体之间的消息流的相对顺序
- 利用对称加密实现认证:往往使用DES
- 无需加密的消息认证
- 消息认证码(MAC):利用秘密密钥来生成一个固定长度的短数据块,把它附着在消息之后
- 单向散列函数:输入为消息 M(长度可变),输出为消息摘要 H(M)(长度固定)(散列函数不能以秘密密钥作为输入)
- 安全散列函数
- 单向或抗原象:设 y=f(x),已知 x 求 y 容易,但已知 y 求 x 很难
- 第二抗原象或弱抗碰撞:对于任意分组x,找到满足 y≠x 但 f(y)=f(x) 的 y 在计算上很难或根本不可行
- 抗碰撞或强抗碰撞:找到任何满足 f(x)=f(y) 的偶对 (x,y) 在计算上是不可行的
散列函数的其他应用:口令(比如QQ用户口令)、入侵检测(计算文件的散列值确定文件是否修改)
公钥加密
公钥密码体制组成部分:明文、加密算法、公钥和私钥、密文、解密算法
- 公钥密码体制的应用:数字签名、对称密钥分发和秘密密钥加密
常用公钥密码算法:RSA、Diffie-Hellman、数字签名标准 DSS、椭圆曲线等
数字签名与密钥管理
为什么引入数字签名:消息认证用于保护通信双方之间的数据交换不受第三方攻击;但并不能保证通信双方自身的相互攻击、欺骗。数字签名是附加在数据单元上的一些数据,或是对数据单元所做的密码变换。其能保证原始认证、数据完整性以及签名的不可抵赖性
- 数字签名的性质:不可伪造、真实性、不可变、不可重用
- 三种数字签名算法:数字签名算法DSA、RSA数字签名算法、椭圆曲线数字签名算法
- 公钥证书:是一种数字签名的声明,它将公钥的值绑定到持有对应私钥的个人、设备或服务的身份。
- 证书包含:由公钥加上私钥所有者的用户ID以及可信第三方前面的整个数据组成。第三方就是用户团体信任的认证中心CA
- 利用公钥加密实现对称密钥交换
数字信封:可以用来保护消息而不必实现让发送方和接收方具有相同的密钥
随机数和伪随机数
随机数的应用:RSA公钥加密算法、对称流密码中流密码的生成等
- 随机数要求的性质:均匀分布、独立性、不可预测性
伪随机数:生成随机数的算法是确定的,所以生成的序列并非是统计随机的。好的算法产生的序列可以经受随机性检测。
用户认证
数字用户认证方法
数字用户认证:信息系统对用户电子式的提交的身份建立信任的过程
- 数字用户认证模型
- 注册中心 RA:是一个可信实体,它建立申请人身份并为之向 CSP 提供担保
- 证书服务提供商 CSP:CSP 与用户进行认证信息交换,依据整个认证系统的具体细节,CSP 可将某种电子证书发布给用户
认证方法
基于口令的认证:应用最广泛的防范手段
- 用户ID决定了用户是否被授权访问系统
- 用户ID决定了该用户所拥有的访问权限
- 用户ID还可以应用在自主访问控制中
- 口令的脆弱性:离线字典攻击、特定账户攻击、常用口令攻击、单用户口令猜测、工作站劫持、利用用户疏漏、口令重复利用、电子监视
- 散列口令的使用
- 使用哈希函数(或称散列函数)、盐值
- 保存口令文件(散列值、盐值)
- 盐值:用户注册时、系统用来和用户密码进行组合产生的随机数值,这个随机数叫作salt值。用户名和密码应该以密文形式存在数据库中。
- 使用盐值的好处
- 防止复制的口令在口令文件中可见
- 显著的增加了离线口令字典攻击的难度
- 使得攻击者几乎不可能发现一个用户是否在两个或更多的系统中使用了相同的口令
- 破解“用户选择”传统口令——彩虹表:攻击者产生出一个包括所有可能口令的较大的口令字典,对于口令字典中的每个口令,攻击者都要根据可能的研制进行散列运算,产生的结果是一个巨大的散列值表,称为彩虹表。以空间代价换取时间代价。
口令选择策略:用户教育、计算机生成口令、后验口令检查、先验口令检查(最被认可的一种提高口令安全的方法)
基于令牌的认证
基于令牌的认证:令牌就是用户持有的用于进行用户认证的一种物品,比如磁条卡、智能卡、电子身份证之类
生物特征认证
生物特征认证:面部特征、指纹、手形、视网膜模式、虹膜、签名、语音
- 生物特征认证系统的运行过程:注册、验证、识别
-
远程用户认证
远程用户认证:通过 Internet、网络或通信链路的远程用户认证
- 挑战-应答协议(防止重放攻击;nonce)
- 用户发送其身份 ID
- 远程主机发送一个随机数 r
- 用户用自己的口令 P,计算 f(r,h(P)) 并返回给远程主机
- 远程主机自己计算该值,然后匹配
用户认证中的安全问题
计算机安全的主要目标:防止非授权用户对资源的访问,防止合法用户以非授权方式访问资源
- 访问控制实现的安全策略:指定对于每个具体的系统资源,谁或什么可以访问,以及每个实例允许的访问类型
- 访问控制语境
- 认证:验证用户或其他系统实体声称的身份是有效的
- 授权:授予系统实体访问系统资源的权限和许可
- 审计:对系统记录和活动进行独立评审和检查,以便检测系统控制措施的充分性,确保符号既定的策略和操作规程,检测安全违规,并推荐控制措施、策略和规程应采取的相应变化
- 访问控制机制在用户与系统资源之间工作。系统必须首先认证试图访问的用户,进而,访问控制功能决定是否 允许这个用户具体的访问请求
访问控制策略
主体:能够访问客体的实体。主体应该对他们发起的动作负责,可以用审计来记录主体与其施加在客体上的关系安全的动作之间的关联。
- 三类主体:所有者,组,世界
- 客体:是外界对其访问受控制的资源。一般的,客体是一个用来包含或接收信息的实体
-
自主访问控制
访问矩阵的一维由试图访问资源的被标识的主体组成,另一维列出可以被访问的客体
- 访问矩阵按列分解产生访问控制表 ACL 用于确定哪个主体对某个资源具有哪些访问权。
- 访问矩阵按行分解产生能力认证,用来指定一个用户授权的客体和操作,能力权证容易确定一个指定用户所拥有的访问权的集合
授权表中的一行对应于一个主体对一种资源的一种访问权了,按主图排序或访问该表等价于能力表,按客体排序或访问该表等价于 ACL
UNIX 文件访问控制
所有类型的 UNIX 文件都由操作系统通过 inode 管理
- inode 是包含操作系统对一个文件所需的关键信息的控制结构
- 一个活动 inode 仅和一个文件关联,一个文件也仅被一个 inode 控制
目录仅仅是一个包含文件名和指向关联 inode 的指针的列表
基于角色的访问控制 RBAC
用户与角色的关系是多对多的,角色与资源或系统对象的关系也是多对多的
- RBAC 有利于实现最小特权原则
- RABC0 包含 RBAC 系统最小功能;RBAC1 包括 RBAC0 的功能,并增加了角色层次,使得一个角色能够继承另一个角色的许可;RBAC2 包括 RBAC0 的功能,并增加了约束,来限制配置 RBAC 系统组件的方式。RBAC3 包括 RBAC0、RBAC1、RBAC2 的所有功能
- 互斥角色:一个用户只能被分配给集合中的一个角色
- 基数:设置关于角色的最大数值
先决条件:如果已经被分配给另一个指定角色时,用户只能分配一个特定角色
基于属性的访问控制 ABAC
三个关键要素
- 属性:为配置中的实体而定义
- 策略模型:定义 ABAC 策略
- 架构模型:应用于实现访问控制的策略
- 属性
- 主体属性:主体是一个主动的实体,能引起客体间的信息流动或者系统状态的改变,每个主体都有能够定义其身份和特征的关联属性。
- 客体属性:客体也成为资源,是一个被动的包含或接受信息的与信息系统相关的实体。
- 环境属性:描述了信息访问发生时所处的运行的、技术的甚至态势的环境或情境。
- ABAC 的逻辑架构
- 主体向客体提出访问请求。该请求被路由到一个访问控制装置。
- 该访问控制装置通过一组由预先配置的访问控制所定义的规则进行控制,基于这些规则,访问控制对主体、客体和当前环境条件的属性进行评估,决定是否授权。
ABAC 策略:策略是一组用来管理组织内部的允许行为的规则和关系,其基础是主体所有的特权,以及在哪种环境下资源或客体需要被保护。特权代表主体的授权行为。
身份、凭证和访问管理
身份管理:关注的是将属性分配到数字身份上去,并且将数字身份与个体或 NPE 连接起来。
- 凭证管理:凭证是一个对象或数据结构,其将身份权威的绑定到用户所拥有控制的双标。凭证管理是对凭证生命周期的管理
访问管理:访问管理组件对实体被授权访问资源的方法进行管理和控制,包括逻辑上和物理上的访问,可以在系统内部,也可以在外部单元。访问管理的目的是,确保当个体试图访问安全敏感的建筑物、计算机系统或数据时,进行适当的身份验证。
数据库与云安全
数据库安全需求
数据库系统趋向于把信息集中存储在一个单一的逻辑系统中
- 数据库安全始终没有跟上数据库应用发展步伐
- 一些组织越来越依赖云技术,将企业的部分或全部数据存储到云上
- 数据库是重要的应用软件
数据库的一大特点是数据可以共享,但数据共享必然带来数据库的安全性问题
数据库管理系统
数据库:是存储一个或多个应用所用数据的结构化数据集合/除去数据,数据库还包含数据项之间以及数据项之间的关系
- 数据库管理系统 DBMS:是创建、维护数据库并为多个用户和应用提供特定的查询服务的程序套件
- 查询语言:为用户和应用提供了访问数据库的统一接口
- 数据定义语言 DDL:定义数据库的逻辑结构和过程属性,将其标识为一组数据库描述表
- 授权表:用于确保用户具有执行数据库查询语句的权限
-
关系数据库
关系数据库的基本构件是数据表(平面文件)
- 查询语言使用的是说明性语句而不是编程语言的过程性语句
- 关系数据库系统要素
- 基本构件是平面表——关系(realtion),行是元组(tuple),列是属性(attribute)
- 主键(primary key)用来唯一的标识表的一行,由一个或多个列名组成
- 要创建两个表之间的联系,在一个表中定义为主键的属性必须作为另一个表的属性出现,称为后者的外键(foreign key),主键所在的表中的一行与外键所在的表中的多行是一对多的关系
- 视图(view)是一个虚表,是从一个或多个表中返回的选定行与列的查询结果
结构化查询语言(SQL):是用于对关系数据库中的数据定义、操纵和查询的标准语言
SQL 注入攻击(SQLi)
SQL 注入攻击(SQLi)是针对数据库的最普遍和最危险的基于网络的安全威胁
- SQLi 攻击途径和类型:
- 攻击途径:
- 用户输入:通过精心构造用户输入来注入 SQL 命令
- 服务器变量:攻击者伪造 HTTP 和网络报头的值
- 二阶注入:注入字符串可以存在数据库里面,只要查询就会触发一个 SQL 注入攻击
- cookie:更改 cookie,构建 SQL 查询时修改查询的结构和功能
- 物理用户输入:用条形码、RFID、图像识别的结果来完成注入
- 攻击类型:带内、推理、带外
- 带内攻击:使用同样的通信信道来完成 SQL 代码注入和结果返回,这些返回的数据可以直接呈现在 Web 页面上。带内攻击方式包括重言式、行尾注释和捎带查询
- 推理攻击: 没有实际的数据传输,但攻击者能够通过发送特定的请求和观察网站或数据库服务器的响应行为来重新构造信息。推理攻击包括非法/逻辑错误查询和盲 SQL 注入
- 带外攻击:检索数据使用不同的通信信道
- 攻击途径:
SQLi 应对措施
通过访问控制来确定用户对数据库的访问权限
- DBMS 支持不同的管理策略:
- 集中管理:少量的特权用户可以授权和回收访问权
- 基于所有权的管理:表的属主(创建者)可以授权和回收该表的访问权
- 分散管理:表的属主除了可以授予和回收该表的访问权外,还可以对其他用户授予和回收授权的权利,以允许他们对该表授予和回收访问权
- 级联授权:授权选项使得访问权能够级联到很多用户
- 基于角色的访问控制(RBAC):
- 把数据库用户分为三大类:应用程序属主、应用程序属主之外的终端用户、管理员
- RBAC 机制应该提供以下能力:创建和删除角色、定义角色的许可、分配和取消用户到角色的分配
SQL SERVER 支持三种类型的角色:服务器角色、数据库角色、用户定义的角色(前两种被称为固定角色,是系统预先配置的,具有特点的访问权)
推理
推理是完成授权查询并从得到的合法响应中推导出非授权信息的过程
- 推理通道:获得非授权数据的信息传送路径
- 元数据:有关数据项之间相关性或依赖性的知识,可以用来推导出某个用户不能用其他方式获得的信息
- 数据库的访问控制机制不仅要防止直接的泄露,而且还要防止推理泄露的问题
处理由推理造成的信息泄露威胁
数据库加密的缺点:密钥管理、不灵活
- 数据库加密方法的四种实体:
- 数据主:对于组织内部或外部的用户,产生版本可控的数据的组织
- 用户:对系统提出请求(查询)的人实体。用户可以是组织内部的职工,被授权通过服务器访问数据库;或者是组织外部的人,经鉴别之后被授予访问权
- 客户端:把用户查询转换为帧服务器中加密存储的查询的前端
- 服务器:接收来自数据主的加密数据并分发给客户端的组织。服务器可以实际被数据主拥有,但更多情况下它是被外部提供者拥有并维护的设施
用户询问查询加密数据库的过程:
恶意软件的分类
高级持续性威胁(APT)是一个具有充足资源,应用大量入侵技术和恶意软件的持续性应用程序
- APT 的特征
- 高级:攻击者使用多种入侵技术和恶意软件,如果有需要还会开发定制的恶意软件
- 持续性:攻击者用很长时间确定针对攻击目标的攻击应用可以最大化攻击成功的概率
- 威胁:针对选定目标的威胁来自有组织、有能力和良好经济支持的攻击者,他们试图攻陷这些目标。在攻击过程中,攻击者的积极参与极大的提升了自动攻击工具的威胁等级,也增加了成功攻击的可能性
个人攻击者一般不被认为是 APT(即使个人有意攻击特点目标,他们也通常不具备高级和长期这两个目标)
传播-感染内容-病毒
病毒的性质:计算机病毒是一种通过修改正常程序而进行感染的软件。病毒可以实现组成程序所能实现的任何功能,它能够跟着宿主程序的运行而悄悄的运行,一旦病毒执行,它能够实现任何功能
- 计算机病毒的多种组成元素:
- 感染机制(感染向量):是指病毒传播和进行自我复制的方法
- 触发条件:是指激活或交付病毒有效载荷的事件或条件,有时被称为逻辑炸弹
- 有效载荷:是指病毒除传播之外的活动,有效载荷可能包括破坏活动,也可能包括无破坏但值得注意的良好活动
- 病毒经历的四个阶段:
- 潜伏阶段:病毒处于休眠阶段,最后病毒会被某些事件激活。并不是所有的病毒都有这个阶段
- 传播阶段:病毒将自身的拷贝插入其他程序或硬盘上某个与系统相关的区域
- 触发阶段:病毒被激活以执行其预先设定的功能
- 执行阶段:执行病毒功能,有些功能是无害的,有些是破坏性的
- 宏病毒:利用某些文档格式所支持的活动内容的新型病毒。宏病毒针对文档类文件,常支持在多种系统中运行
- 宏病毒的威胁性原因:
- 宏病毒有独立的平台
- 宏病毒感染的是文件而不是可执行部分的代码
- 宏病毒的传播很容易,因为它们所利用的文档通常是共享使用的
- 宏病毒感染的是用户文档而不是系统程序,所以传统文件系统的访问控制中防止其扩散方面的作用有限,因为用户需要修改它们
- 相比一传统的可执行病毒,宏病毒的修改或制造更简单
病毒的分类
- 按目标
- 感染引导扇区病毒:感染主引导记录或引导记录,当系统从含有这类病毒的磁盘上启动时病毒就开始传播
- 感染可执行文件病毒:感染可以在操作系统或 shell 中执行的文件
- 宏病毒:感染含有由应用程序解释的可执行宏代码或脚本语言的文件
- 多元复合型病毒:多种途径感染文件。通常情况下,多远复合型病毒可以感染多种类型的文件,因此需要处理所有可能感染的部位才能根除该种病毒
- 按隐藏方式
- 按目标
蠕虫是一种主动寻找并感染其他机器的程序,而每台被感染的机器又转而成为自动攻击其他机器的跳板
- 蠕虫与病毒的区别:
- 病毒可通过任何介质进行传播,蠕虫主要通过网络传播
- 病毒的自身拷贝必须嵌入到其他程序中来传播,蠕虫的自身拷贝都是以独立程序的形式传播
- 蠕虫访问远程系统的方法:
- 电子邮件或即时通信工具:通过邮件将自己到拷贝发送到其他系统中去,或者将自身当作即时通信服务的附件进行发送
- 文件共享:可以在插拔媒介上创建自己的拷贝。当设备通过自动运行机制连接至其他系统时,蠕虫可以借助软件中的漏洞执行;或者用户在目标系统上打开被感染文件时,蠕虫也会借机执行
- 远程执行能力:蠕虫有在其他系统执行自己拷贝的能力
- 远程文件访问或传输能力:利用远程文件访问或者传输服务向其他系统复制自身拷贝,该系统的用户以后便有可能执行它
- 远程登录能力:以一个用户的身份登录到远程系统,然后使用命令将自己复制到将要被执行的另一个系统中
- 传播阶段的功能:
- 通过检查主机列表、地址库、好友名单、可信节点或其他可以获取远程系统权限的细节,扫描可能的目标主机地址,或搜寻合适的可移动设备,寻找合适的访问控制机制
- 通过访问控制机制将自己复制到远程主机上并使该拷贝运行
- 发现目标:网络蠕虫在传播阶段的首要功能是寻找其他系统进行感染,这个过程叫做扫描或者指纹采集
- 扫描方式:
- 随机式探索:每一台被感染的主机使用不同的种子来探测 IP 地址空间的随机地址。这会产生大量的网络流量,可能导致在实际攻击开展前,操作便会被中断
- 黑名单:首先为潜在的易感染机器列出一个大名单。一旦名单编辑完成,攻击者即开始感染名单中的机器。每个被感染的机器对名单中的一部分进行扫描
- 拓扑式探索:该方法利用被感染机器中所包含的信息来寻找和扫描更多的主机
- 本地子网:如果防火墙后的一台主机可以被感染,则该主机会在其所在的本地网络中寻找目标。利用子网地址结构,被感染的主机可以寻找到其他本应受到防火墙保护的主机
- 蠕虫技术的现状:
- 多平台
- 多种攻击手段
- 超快速传播
- 多态
- 变形
- 传输载体
- 0-day 攻击
- 移动代码:不加修改就能在不同系统平台上运行并且能够实现相同功能的查询。移动代码能够从远程系统传送到本地系统,然后再没有得到用户明确许可的情况下在本地系统中执行
- 手机蠕虫:通过蓝牙无线连接或彩信进行传播。感染目标是允许用户通过安全包来安装应用程序的智能手机
- 客户端漏洞和路过式下载:用户浏览一个受攻击者控制等 Web 页面是该页面包含的代码会攻击该游览器的缺陷并在用户不知情的情况下向系统安装恶意软件
- 水坑式攻击:攻击者通过研究他们意图攻击的目标,确定它们可能要游览的 Web 站点,然后扫描这些站点找出那些含有能让它们植入夹带式下载的漏洞。等待受害者去游览那些有害的站点
- 恶意广告:攻击者在目标网站付钱植入含有恶意代码的广告。通过向访问者展示广告令其感染
- 点击劫持:也称为用户界面伪装攻击。是一种攻击者收集被感染用户鼠标点击信息的攻击
蠕虫的防范(了解):
社会工程学:其通过欺骗用户,使他人泄露安全相关的敏感信息
- 垃圾邮件
- 产生原因:发送大量邮件成本极低
- 来源:大部分是由僵尸网络操纵僵尸机发送的
- 作用:广告、诈骗等。也是恶意软件的重要载体
- 特洛伊木马
- 特洛伊木马是一个有用的或者表面上看起来有用的程序或命令过程,但其内部藏有恶意代码,当被调用时,会执行非预期的或有害的功能
- 特洛伊木马程序可以间接完成一些未授权用户无法直接完成的功能
- 特洛伊木马的三种模型
- 继续执行源程序的功能的同时,另外执行独立的恶意行为
- 继续执行源程序的功能,但是会对其进行修改,以执行恶意行为或者隐藏另一个恶意行为
- 用恶意功能完全替代源程序的功能
- 一些木马不需要用户的协助就可以通过攻击软件的漏洞实现自动安装和执行。与蠕虫不同,木马不能自我复制
-
载荷-系统损坏
数据损坏和勒索软件
- CIH 病毒:属于文件型病毒,是一个有破坏性的、寄生性的、内存驻留性质的病毒
- 勒索软件:加密用户数据,然后向用户索要赎金才可以恢复数据
- 物理损害
- 损坏系统类有效载荷的进一步变种的目标是引起物理设备的损害
- 震网蠕虫
逻辑炸弹
有效载荷可以使得攻击者能够暗中使用受感染的系统的计算资源和网络资源,此种被感染的系统被称为僵尸机,它会秘密的控制一台连接 Internet 的计算机,并利用所控制等计算机发动攻击
- bot 的用途
- 分布式拒绝服务攻击
- 发送垃圾邮件
- 嗅探通信流量
- 记录键盘
- 传播新的恶意软件
- 安装广告插件和游览器辅助插件
- 攻击 IRC 聊天网络
- 操纵在线投票或游戏
远程控制功能
凭证盗窃、键盘记录器和间谍软件
- 键盘记录器:能够抓取被感染及其中的按键信息
- 对付键盘记录器的方法:使用一个图形化小程序来输入关键信息
- 间谍软件:范围更广。可能能够监视历史记录和游览内容,更改网页连接,修改游览器和网站交换的数据等
- 网络钓鱼和身份盗窃
- 钓鱼攻击:利用垃圾邮件引导用户至攻击者的虚假网站,或让用户填写随信封附上的某些表格并回复给攻击者,以便收集用户的个人隐私信息。得到了足够的信息,攻击者可以猜测用户的身份,从而获得信用信息后其他资源的访问权限
- 鱼叉式网络钓鱼:邮件收件人事先已经受到了攻击者的认真研究,因为每封邮件都是精心制作的以迎合相应的收件人
侦察、间谍和数据渗漏
后门
- 后门(陷门)是进入程序的一个秘密入口,使得知情者不经过通常的安全访问程序而获取访问权限
- 后门一直被程序员合理的用于程序的调试和测试,这样的后门成为维护挂钩
- 后门是能够识别一些特殊的输入序列或者当被某个用户 ID 运行或某个不可能的事件序列发送所触发的代码
- rookit
- rootkit 是安装在系统中用来支持以管理员权限对系统进行访问点一组程序
- rookit 以恶意且屏蔽的方式更改主机的标准功能
- rookit 可以以如下特征进行分类:
- 持续的:系统每启动一次都会被激活
- 基于内存的:没有持续性,重启后会失效。但是只存在于内存
- 用户模式:截获 API 调用,并修改返回值
- 内核模式:能够截获对本地内核模式的 API 的调用。还能通过删除内核的活动进程列表中的恶意软件进行来隐藏自己
- 基于虚拟机的:首先安装一个轻量级虚拟机监视器,然后在监视器之上的虚拟机中运行操作系统
- 外部模式:将恶意软件植入目标系统的正常运行模式之外,可以直接获得硬件的访问权限
- 内核模式下的 rootkit
- 系统调用是内核级 rookit 实现隐藏的主要目标。每一个系统调用都会被分配一个唯一的系统调用编号,当一个用户模式的进行执行系统调用时,该进程是通过系统调用编号来引用系统调用的
- 修改系统调用的技术:
- 修改系统调用表
- 修改系统调用表的对象
- 重定向系统调用表
虚拟机和其他外部 rookit
针对恶意软件的对抗措施
- 理想的应对恶意软件威胁的方法是预防
- 预防措施的元素:规则、警惕性、弥补弱点、缓解威胁
- 一个最基本的防御措施是保证操作系统的版本尽可能更新
- 预防失败的缓解措施
- 检测:一旦感染,就马上确定恶意软件的存在及其定位
- 识别:一旦检测到,立即识别出是何种恶意软件
- 清除:一旦识别出类型,立刻恶意代码在被感染的系统中的所有痕迹,防止继续扩散
- 对抗措施的要求:通用性、及时性、弹性、最小拒绝服务代价、透明性、全局与局部覆盖范围
- 基于主机的扫描器和基于签名的反病毒软件
- 反病毒软件的发展(四代):
- 简单的扫描器
- 启发式扫描器
- 活动陷阱
- 全面的保护
- 沙箱分析:在沙箱或虚拟机中运行恶意代码,保证代码在可控制等环境内运行,其行为可以被近距离监控同时不会对实际的系统安全造成威胁
- 基于主机的动态恶意软件分析:与启发式或基于特征码的扫描器不同,动态恶意软件分析或行为,阻断软件与主机的操作系统的结合,实时监控恶意的查询行为
- 间谍软件的检测和移除:作为通用的反病毒产品的有益补充
- rookit 对策:防范 rookit 需要多种网络及和计算机级的管理工具;或对某类文件做完整性校验
- 反病毒软件的发展(四代):
- 边界扫描处理
- 监控软件有两种类型
- 入口监控软件:安装在企业内部网络和 Internet 之间
- 出口监控软件:安装在企业内部网络中的各个独立局域网的出口点上,或企业内部网与 Internet 之间
- 监控软件有两种类型
分布式情报收集处理:从大量的主机或边界传感器收集数据,把这些信息发送至一个能够将数据进行联系和分析的中央分析系统。该系统即可对恶意软件的特征和行为模式做出更新,并返回给所有受其协调的系统以共同应对和防御恶意软件的攻击
拒绝服务攻击
拒绝服务攻击
拒绝服务攻击的本质
- 拒绝服务是一种通过耗尽 CPU、内存、带宽以及磁盘空间等系统资源,来阻止或削弱对网络、系统或应用程序的授权使用的行为
- DoS 的攻击对象:网络带宽、系统资源、应用资源
- 拒绝服务攻击问题一直得不到合理的解决,原因是网络协议本身的安全缺陷
- 在正常网络运行环境下,由于正常用户的超负载访问,会使得服务器网络繁忙。这些正常用户当中会有随机的一部分得不到服务器的响应
- 攻击者直接或间接的制造出大量的恶意流量发往目标服务器,这种攻击流量对于任何合法流量来说是压制性的,其有效的拒绝了合法用户对服务器的访问
- 某些强大的攻击直接针对为目标组织提供支持的 ISP 网络,目的在于破坏其与其他网络的连接
- 攻击形式:
- 过度加载或者使系统网络处理程序崩溃来实现攻击
- 通过某些特殊数据包来触发系统的网络处理软件的缺陷,导致系统崩溃。如有毒数据包,死亡之 ping,泪滴攻击
- 针对特点应用服务程序如 Web 服务器的攻击一般使用一定数量的合法请求,而每个合法请求都会明显消耗掉服务器上的系统资源,就可以达到限制服务器响应其他合法用户请求的目的
经典的拒绝服务攻击
- 洪泛攻击
- 目标是占据所有到目标组织的网络连接的流量
- 如果攻击者能耐访问具有大容量网络连接到系统,那么这个系统可能产生比目标连接容量大得多的通信流量
- 经典 ping 洪范攻击中,ICMP 回送请求的数据包的源地址使用的是攻击者的真实 IP 地址,攻击的源很容易被识别
- 源地址欺骗
- 只要拥有访问某计算机系统上网络处理程序的充分权限,攻击者就能够很容易的制造出具有伪造源地址的数据包。其往往是使用许多操作系统上的原始套接字接口实现的。如果没有这些接口,攻击者想要制造出某些具有伪造源地址的数据包就不得不安装一些自定义的设备驱动程序来获得硬件级的设备访问权限
- 目标系统的响应的 ICMP 回送响应数据包不再反送给源系统,而是散发到 Internet 上各种伪造的源地址,其中一些地址可能对应于真实系统。还有一些地址未被使用或不可到达
- 我们可以在路由器上安装过滤器来确认数据包源地址的真实性,过滤应尽可能的在接近源系统的路由器上进行,越接近源系统的路由器,上面关于合法源地址的信息就越准确
- SYN 欺骗
- 攻击者构造出具有一定数量的具有伪造源地址的 SYN 连接请求数据包并发送给目标系统,对其中的每个数据包,服务器都要记录该 TCP 连接请求的详细信息,并发送 SYN-ACK 响应包都按请求数据包中声称的源地址
- 如果的确存在一个与源地址匹配的主机,那么源地址所对应的主机将会发送一个 RST 包给服务器,让服务器取消这个莫名其妙的连接请求。服务器接收到 RST 包后会取消这个连接请求并删除 TCP 连接表中的相关信息
- 但是如果源地址所对应的主机繁忙或者根本没有这个主机使用这个地址,那么将不会有 RST 数据包发送给服务器。这时服务器就会不停的重新发送 SYN-ACK 包到源地址,直到最终认定连接请求已经失败并删除连接请求表中的相关信息
- 攻击者只要不停的发送足量的欺骗性 TCP 连接请求给服务器,那么 TCP 连接表就会被永远的填满,导致服务器与 Internet 的连接被切断,无法响应大多数合法的连接请求
- SYN 攻击所形成的网络流量相对于洪范攻击来说比较小,更不会接近与服务器相连的链路的最大容量,只要能够使得 TCP 连接表被填满就可以
洪泛攻击
- 洪泛攻击
ICMP 洪泛:利用 ICMP 回送请求数据报的 ping 攻击是一种经典的 ICMP 洪泛攻击
- UDP 洪泛:攻击者通常会将 UDP 数据包发送给诊断回送服务,该服务在服务器系统一般是默认运行的。如果服务没有开启,则这个来自攻击者的数据包将会被丢弃并且可能会回应 ICMP 目的主机不可达数据包给发送者
TCP SYN 洪泛攻击:攻击的对象是数据包的总量而不是目标系统上的网络处理程序。这是 SYN 欺骗攻击与 SYN 洪泛攻击之间的区别
分布式拒绝服务攻击
攻击者通过操作系统上或者某些常用应用程序的一些熟知的漏洞来获得访问这些系统的权限,并在上面安装自己的程序,这些被入侵的主机系统就是所谓的僵尸机
- 一旦僵尸机被安装上合适的后门程序,就会完全处在攻击者的控制之下,攻击者控制等大量僵尸机组合在一起就形成了僵尸网络
-
基于应用的带宽攻击
SIP 洪泛
- IP 电话呼叫使用的标准协议是会话发起协议 SIP,是一个基于文本的协议。SIP 的消息有请求和呼应
- SIP INVITE 消息是用来自客户代理间建立媒体会话的
- SIP 洪范攻击利用的是单个 INVITE 请求造成的相当大的资源开销。攻击者利用伪造的 IP 地址向一个 SIP 代理洪泛大量的 INVITE 请求,或者利用一个僵尸网络生成大量的 INVITE 请求进行攻击
- 造成负载的方式:服务器资源被 INVITE 消耗,服务器端网络容量被消耗
基于 HTTP 的攻击
- HTTP 洪范攻击指利用 HTTP 请求攻击 Web 服务器,这是一种 DDoS 攻击,HTTP 请求来自许多不同的 bots。这些请求可以被预设为消耗相当大的资源的形式
- 递归 HTTP 洪泛:bot 从给定的 HTTP 链接出发,通过递归方式遍历给定 Web 服务器端所有链接,这种攻击也称为爬虫
- Slowloris:
- 其利用多线程支持多个到统一服务器应用现在的请求技术进行攻击。它通过向 Web 服务器不停的发送不完整的 HTTP 请求,试图独占所有可能的请求处理线程。由于每个请求都会消耗一个线程,所有最终能消耗所有的 Web 服务器的连接能力,从而拒绝合法用户的访问请求
- HTTP 协议规范阐明:如果有空行的话,空行必须用于表示请求头部的末端或载荷的开始。一旦接收到完整的请求,Web 服务器便会响应
- Slowloris 攻击通过建立多个到 Web 服务器端连接来实施,在每个连接中,发送一个不包含终止换行序列的不完整请求。攻击者周期性的发送额外的报头行来维持一直处于活跃状态,但是不发送终止换行序列。Web 服务器会保持该连接处于打开状态,期待受到更多的信息以完成这个请求。
- SLowloris 与典型拒绝服务攻击的不同:Slowloris 利用合法的 HTTP 流量,并且不依赖于能攻击特殊 HTTP 服务器中的 bug 的特殊的“坏的” HTTP 请求。因此,现有依赖特征检测到入侵检测和入侵防御手段无法识别出 Slowloris
- 对抗措施:限制特殊主机接入的比例,对每个连接设置超时机制和延迟绑定。从本质上讲,负载均衡会对 HTTP 的请求报头做完整性检查,这意味着除非 HTTP 客户端发送报头的最后两个回车和换行,否则该请求是不会被送至 Web 服务器的
反射攻击与放大攻击
反射攻击与放大攻击通常利用的是网络范围系统的正常功能。攻击者发送带有虚假源地址的数据包给某些网络访问系统上的服务。网络服务器为了响应这些数据包,会发送一个响应包给攻击包所指向的源地址,这个地址正是攻击者想要攻击的目标系统。如果攻击者发送一定数量的拥有同样源地址的请求包给一定数量的提供同样服务的服务器,那么这些服务所产生的响应数据包几乎会全部占据目标系统的网络链路。
- 反射攻击
- 攻击者将想要攻击的目标系统地址作为数据包的源地址,并将这些数据包发送给中间媒介上的已知网络范围。当中间媒介响应时,大量的响应数据包发送给源地址所指向的目标系统。它能有效的使攻击从中间媒介反射出去
- 作为反射系统的中间系统往往是拥有较高系统性能的网络服务器或者具有良好网络连接性能的路由器
- 利用 SYN-ACK 的反射攻击
- 其利用 TCP SYN 数据包和建立 TCP 连接到三次握手进行攻击。攻击者发送一些带有虚假源地址的 SYN 数据报给选定的中间媒介。作为回应,中间媒介会回应一个 SYN-ACK 数据包给这个数据包中的源地址所指向的主机,这是真正的目标系统
- 这种攻击的目的是洪范目标系统的网络带宽,而不是耗尽目标系统的网络处理资源
- 另一种改进的反射攻击在中间媒介和目标系统之间建立了一条自包含的回来,两个系统都被当作反射器
- 反射攻击的特点:
- 攻击者仅仅需要一个系统作为构造最初的数据包的源
- 没有反向散射流量
- 成功进行反射攻击的基本要求是可以生成带有虚假地址的数据包
- 过滤数据包也是抵御反射攻击的最基本的方式
放大攻击
- 放大攻击是反射攻击的一个变种,但中间媒介对每个来自攻击者的初始数据包会产生多个响应数据包。抵御放大攻击的最好措施是不允许定向广播由外部进入网络;另一个措施是限制回送或 ping 等网络服务被组织外部访问
- DNS 放大攻击
- 将 DNS 服务器作为中间媒介系统,使用直接指向合法 DNS 服务器端数据包进行攻击。攻击者利用 DNS 协议将较小的请求数据包转化为较大的合法数据包而达到效果
- 攻击者常常选择网络连接性能良好的 DNS 服务器
- 更进一步的变种利用了递归的域名服务器。DNS 协议的一个基本特征是允许一个域名服务器查询大量其他域名服务器来解析客户的查询。攻击者以大量的开放递归 DNS 服务器为目标。攻击所用的域名不一定保存在这些服务器上,而是可以来自 Internet 上的任何位置。查询结果被直接发送给用虚假源地址指定的期望目标
- 对付所有基于反射机制的攻击的基本方法是防止使用虚假地址(DNS 服务器的正确配置)
拒绝服务攻击防范
抵御 DDoS 攻击有下面四道防线:
- 攻击预防和先发制人机制(攻击前):这种机制允许被攻击者能够承受攻击而拒绝为合法客户提供服务
- 攻击检测和过滤(攻击时):这种机制试图在攻击一开始就将其检测出来并迅速响应
- 攻击源回溯和识别(攻击时和攻击后):试图识别攻击源,通常被作为预防未来攻击的第一步
- 攻击反应(攻击后):试图排除或消减攻击带来的影响
- 当 TCP 连接表溢出时,通过修改系统的 TCP/IP 网络处理程序选择性的丢弃一个 TCP 连接表中不完全连接到表项,允许新的连接请求。这就是选择性丢弃或者随机性丢弃。
- 另一种抵御 SYN 攻击的措施是修改 TCP/IP 网络处理程序中所使用的参数。这些参数包括 TCP 连接表的大小及当未收到响应时删除表项的超时时间。
- 抵御广播放大攻击的最好措施是屏蔽 IP 定向广播的使用
基于网络服务的组织应该配置镜像,在多个站点上复制出多个同样的、具有多条网络连接的服务器
对拒绝服务攻击的响应
识别异常流量可以基于流信息、源地址或者其他流量特征的模式的变化
- 当检测到一次 DoS 攻击,首先要判定出攻击的类型,并选择一个最佳的方法抵御攻击。通常这个过程包括包的捕获、数据报的分析、寻找常见的攻击数据包类型。
- 如果组织缺乏这个过程所需要的资源或技术,那就需要该组织的 ISP 服务提供商完成捕获和分析工作
- 如果攻击是来自大量的分布式或反射系统的扩展的、协同的、洪泛的攻击,那么要想过滤掉足够的数据包从而保证网络连接到连通性几乎是不可能的。那么需要一个应急策略来切换到备份服务器,或者快速的用新的服务器建立具有新地址的新站点,从而恢复服务。
除了快速的对这种类型的攻击进行响应外,组织的事故响应策略应该确定用来像类似的意外情况的进一步措施,包括攻击分析和响应,并从中吸取教训以改进今后的处理措施
入侵检测
入侵者
入侵者分类(了解即可)
- 网络罪犯、活动家、国家资助的组织、其他
- 按技术水平:学徒、训练有素者、高手
入侵者行为
IDS
- IDS:一种硬件或软件功能,该功能用于收集和分析计算机或网络中各个区域的信息,以识别可能的安全入侵
- 三个逻辑组件:
- 传感器:传感器负责收集数据
- 分析器:分析器从一个或多个传感器或其他分析器接收输入。分析器负责确定是否发生了入侵
- 用户接口:IDS 的用户接口使用户能够查看系统输出或控制系统的行为
- IDS 分类:
- 基于主机的 IDS:监测一台主机的特征和该主机发生的与可疑活动相关的事件
- 基于网络的 IDS:监测特定的网段或设备的流量分析网络、传输和应用协议,用以识别可以的活动
- 分布式或混合式 IDS:将来自大量传感器(通常是主机和基于网络)的信息组合在一个中央分析器中,以便更好的识别和响应入侵活动
- 基本原理
-
分析方法
异常检测
- 包括采集有关合法用户在某段时间内的行为数据,然后分析观察到的行为,以较高的置信度确定该行为是合法用户的行为还是入侵者的行为
- 异常检测到分类方法:统计法、基于知识法、机器学习法
特征或启发式检测
基于主机的 IDS(HIDS)向易受攻击或敏感的系统中添加专用的安全软件层,实例包括数据库服务器和管理系统
- 数据源和传感器:常用的数据源
- 系统调用踪迹
- 审计(日志文件)记录
- 文件完整性校验和
- 注册表访问
- 异常 HIDS(看书了解即可)
- 特征或启发式 HIDS(看书了解即可)
分布式 HIDS
NIDS 实时或接近实时的检查流量数据包,试图检测入侵模式,NIDS 可以检测网络层、传输层或应用层协议的活动
- 与 HIDS 的不同:NIDS 检测网络上流向潜在的易受攻击的计算机系统的数据包流量,而基于主机的 IDS 系统检测的是主机上的用户和软件活动
- 网络传感器的类型:
- 内嵌传感器:被插入网络端,以使正在监控的流量必须通过传感器
- 被动传感器:监控网络流量的备份,实际的流量并没有通过这个设备
- NIDS 传感器部署
- 入侵检测技术
- 特征检测
- 应用层侦查和攻击
- 传输层侦查和攻击
- 网络层侦查和攻击
- 意外应用程序服务
- 策略违背
- 异常检测技术
- 拒绝服务(DoS)攻击
- 扫描
- 蠕虫
- 状态协议分析(SPA)
- SPA 通过推断和追踪网络、传输和应用协议的状态,保证网络活动按预期发展
- 缺点:它所需要的高资源占用
- 特征检测
-
分布式或混合式入侵检测
三种类型的输入指导中央系统的工作:
RFC
- 入侵检测消息交换要求
- 入侵检测消息交换格式
- 入侵检测交换协议
功能组件
蜜罐是掩人耳目的系统,是为引诱潜在的攻击者远离关键系统而设计的
- 蜜罐的功能
- 转移攻击者对重要系统的访问
- 收集有关攻击者活动的信息
- 引诱攻击者在系统中逗留足够长的时间,以便于管理员对此攻击做出响应
- 系统的合法用户无法访问蜜罐,因此任何对蜜罐的访问都是可疑的
- 蜜罐可分为低交互蜜罐和高交互蜜罐
- 低交互蜜罐:由能够模拟特定 IT 服务或系统的软件包构成,它足以提供一种真实的初级交互,但是却无法提供所模拟服务或系统的全部功能
- 高交互蜜罐:一个带有完整的操作系统、服务以及应用程序的真实系统,被部署在攻击者能够访问的地方。高交互蜜罐是一个更真实的目标,很有可能消耗掉攻击者更长的时间,但是它需要极大的资源,并且一旦被攻破,就可能被用来发起对其他系统的攻击
蜜罐的部署位置:外部防火墙之外、网络的外部可用服务(非军事区 DMZ)、完全内部蜜罐
防火墙与入侵检测系统
防火墙的必要性
防火墙能够有效的保护本地系统或网络免受基于网络的安全威胁,同时支持通过广域网或 Internet 访问外部世界
- 防火墙设置在驻地网和 Internet 之间以建立二者间的可控链路,构筑一道外部安全壁垒或者说安全周界
- 这条安全周界的目的是保护驻地网不受 Internet 的攻击,提供一个能加强安全和审计的遏制点
防火墙可以是单机系统,也可以是协作完成防火墙功能的两个或者更多的系统
防火墙的特征和访问策略
设计目标
- 所有内部到外部的流量都必须通过防火墙,反之亦然
- 只有经过授权的网络流量,防火墙才允许其通过
- 防火墙本身不能渗透
- 可以过滤流量的防火墙访问策略的特征
- IP 协议和协议值:基于源地址或目的地址、端口号、入站或出站的网络流方向,以及其他网络层和传输层特征进行的访问控制
- 应用层协议:以授权的应用层协议数据为基础的访问控制。此类过滤器通常被应用层协议网关使用,且网关主要用于转发和监控特定应用层协议的信息交换
- 用户身份:基于用户身份的访问控制,通常用于那些需要确认自己正在使用某种形式的安全认证技术的内部用户
- 网络活动:基于时间或请求等注意事项的访问控制
- 防火墙的功能
- 防火墙定义一个遏制点,用于把未授权用户阻止在受保护的网络之外,阻止潜在安全威胁的服务进入或者离开网络,并且防止各种 IP 假冒攻击和路由攻击
- 提供监视安全相关事件的场所,执行审计和警告
- 为多种与安全不相关的 Internet 功能的实现提供一个便利的平台
- 可作为 IPSec 的平台。使用隧道功能,防火墙可实现虚拟专用网功能
防火墙的局限性
包过滤防火墙
- 过滤规则基于包中的信息
- 源 IP 地址
- 目的 IP 地址
- 源和目的端传输层地址(如 TCP 或 UDP 端口号)
- IP 协议域
- 接口
- 两种默认策略:
- 默认=丢弃:没有明确准许的将被禁止(更加保守)
- 默认=转发:没有明确阻止的将被准许(更加方便,但降低安全性)
- 包过滤防火墙的一个优点是简单。而且通常包过滤对用户是透明的,而且具有很快的处理速度
- 弱点
- 不检查更高层的数据,因为不能阻止利用了特定应用的漏洞或功能进行的攻击
- 可利用的信息有限,使得包过滤防火墙的日志记录功能有限
- 大多数包过滤防火墙不支持高级的用户认证机制
- 包过滤防火墙对利用 TCP/IP 规范和协议栈存在的问题进行的攻击没有很好的应对措施(如网络层地址欺骗攻击)
- 包过滤防火墙根据几个变量进行访问控制决策,因此不恰当的设置会引起包过滤防火墙的安全性受到威胁
- 攻击方式及应对措施:
- IP地址欺骗攻击
- 入侵者从外部向内传送数据包,使用的源 IP 地址域包含内部主机地址
- 应对措施:丢弃那些从外部接口到达的,并且 IP 地址为内部地址的包
- 源路由攻击
- 源站指定数据包在跨越 Internet 时应该采用的路由,希望这会绕过不分析源路由信息的安全措施
- 应对措施:丢弃所有使用了此选项的包
- 缩小分段攻击
- 入侵者利用 IP 分段选项产生特别小的数据分段,并强制将 TCP 头信息装入分散的分段中。主要是为了绕过基于 TCP 头信息段过滤规则
- 应对措施:规定包的第一个分段必须包含最少的预定传输头。如果第一个分段被处决,过滤器将记住这个包,并丢弃后继的所有分段
- IP地址欺骗攻击
- 过滤规则基于包中的信息
- 状态检测防火墙
- 通过建立一个出站 TCP 连接目录来强制执行 TCP 流量的规则
- 其不仅可以检查与包过滤防火墙相同的数据包信息,也可以记录有关 TCP 连接到信息
- 一些状态检测防火墙还跟踪 TCP 包的序号,以阻止基于序号的攻击,例如会话劫持攻击
- 为了识别和跟踪相关的连接,一些状态检测防火墙甚至限制了一些众所周知的协议如 FTP、IM 和 SIPS 命令等的应用数据量
- 应用级网关
- 应用级网关也称为应用代理,起到应用级流量中继器的作用
- 用户使用 TCP/IP 应用程序连接到网关,同时网关要求用户提供要访问的远程主机名。当用户应答并提供了一个有效的用户 ID 和认证信息时,网关会联系远程主机并在两个端点之间中继包含应用程序数据的 TCP 分段。如果网关没有为特定应用程序实现代理代码,则该服务不受支持,并且不能通过防火墙转发
- 网关可以被设置为只支持应用程序中网络管理者认为可接受的那部分特性,而且拒绝所有的其他特性
- 应用级网关往往比包过滤器更安全。应用级网关只需要审查几个合法的应用程序,而不用尝试处理 TCP 和 IP 级上允许和禁止的多种可能的组合。另外,在应用级上很容易记录和审计所有的入站流量
- 缺点:带来了对每条连接到额外处理开销。实际上,在两个终端用户之间有两条接合连接,网关处在接合点上,网关必须对所有双向的流量进行检查和传送
电路级网关
- 与应用级网关相似,电路级网关不允许端到端 TCP 连接,而是建立两条 TCP 连接,一条在自身好内部主机 TCP 用户之间,另一条在自身和外部主机 TCP 用户之间。一旦建立了这两条连接,网关就在这两条连接之间中继 TCP 分段,不检查其内容。安全功能包括判断哪些连接是允许的
- 一个典型应用是系统管理员信任系统内部用户的情况。此时,电路级网关可以被设置为支持两种连接,一种是应用级服务或代理服务的入站连接,另一种是电路级功能的出站连接
- 实现的一个例子是 SOCKS 包
堡垒主机
- 通常堡垒主机可以作为应用级或电路级网关平台,或者可以支持其他服务(如 IPSec)
- 堡垒主机的共同特征:
- 堡垒主机上的硬件平台上运行操作系统的安全版本,使其成为可信系统
- 只有被网络管理员认为是基本的服务的才可以安装在堡垒主机上
- 在用户被允许访问代理服务之前,堡垒主机可能需要对其进行附加认证
- 每个代理被配置为只支持标准应用命令集的子集
- 每个代理被配置为只允许对指定系统进行访问
- 每个代理通过记录所有流量记录,每条连接以及每条连接到持续时间来维护详细的审计信息
- 每个代理模块是专门为网络安全设计的非常小的软件包
- 在堡垒主机中,每一个代理都独立与其他的代理
- 除了对自己到初始配置文件以外,代理通常不进行磁盘读取操作
- 每个代理在堡垒主机上有其专用而且安全的目录,并以一个无特权用户身份运行
- 基于主机的防火墙
- 基于主机的防火墙是一个用于保障个人主机安全的软件模块
- 优点:
- 过滤规则可以根据主机环境配置,既能够执行服务器共有的安全策略,也能够针对不同的应用使用不同的服务器过滤规则
- 保护功能独立与网络的拓扑结构。不管是内部的攻击还是外部的攻击都必须通过防火墙
- 应用于单机防火墙之间的联合处,基于主机的防火墙提供了一个额外的保护层。当在网络中添加新的服务器时,只需配合服务器自带的防火墙,而不需修改整个网络的防火墙设置
- 网络设备防火墙
- 防火墙功能,尤其是数据包过滤和状态检测功能,通常在网络设备(如路由器和交换机)中提供以监视和过滤通过设备的数据包流。它们可以用来与堡垒主机和基于主机的防火墙一起提供额外的保护层
- 虚拟防火墙
- 在虚拟化环境中,不是使用物理上独立的设备作为服务器、交换机、路由器或防火墙堡垒主机,而是使用这些设备的虚拟化版本,共享相同的物理硬件。管理该环境中的虚拟机的管理程序也可以提供防火墙功能
个人防火墙
DMZ 网络
- 外部防火墙被设置在局域网或者企业网络的边缘,紧接在连接 Internet 或者某个广域网的边界路由的内侧
- 一个或更多内部防火墙则负责保护企业内部网,在这两种防火墙之间是由一个或更多设备联网形成的“非军事区”的网络区域
- 外部防火墙为 DMZ 系统特工符合其需要并同时保证其外部连通性的访问控制和保护措施
- 内部防火墙的目的
- 与外部防火墙相比,内部防火墙增加了更严格的过滤能力,以保护企业服务器和工作站免遭外部攻击
- 对应 DMZ 网络,内部防火墙提供了双重的保护功能。首先,内部防火墙保护网络的其他部分免受由 DMZ 网络发起的攻击,这样的攻击可能来自蠕虫,rookit,bot 或者寄宿在 DMZ 系统中的恶意软件;其次,内部防火墙可以保护 DMZ 系统不受来自内部保护网络的攻击
- 多重内部防火墙可分别保护内部网的每个部分不受其他部分的攻击
- 虚拟专用网络(VPN)
- 一个 VPN 是这样的一组计算机:它们依靠一个相对不安全的网络相互连接,并利用加密技术和特殊的协议来提供安全性
- VPN 在底层上使用加密技术和身份验证,通过不安全的网络环境建立了一个安全的连接
- 实现 IPSec 的逻辑方法是将其设置在防火墙中
- 分布式防火墙
- 分布式防火墙涉及在一个中心管理员控制下协同工作的独立防火墙设备和基于主机的防火墙许多工具允许网络管理员穿过整个网络设定安全策略和监视网络的安全
- 安全监控是分布式防火墙配置的很重要的方面。包括日志统计和分析,防火墙统计,以及细粒度的单个主机的远程监控
防火墙部署和拓扑结构小结
IPS 是 IDS 的扩展,能够尝试阻止或预防检测到的恶意活动
- 基于主机的 IPS(HIPS)
- HIPS 能够使用特征/启发式检测或异常检测识别攻击。前者重点在于从应用程序网络流量的内容或系统调用的顺序之中,查找可被认为是恶意行为的特征。后者 IPS 主要寻找能够表明某软件为恶意行为的行为模式
- HIPS 所涉及到恶意行为
- 对系统资源的修改:rookit、密码和后门程序是通过修改系统资源运行的
- 提权攻击:试图授予普通用户 root 访问权限
- 缓冲区溢出攻击
- 访问电子邮件通讯录:许多蠕虫通过将它们自身的拷贝发送到本地系统的电子邮件簿中的地址的方式进行传播
- 目录遍历:在 Web 服务器上的目录遍历漏洞,允许黑客访问服务器应用程序用户正常访问范围之外的文件
- 除了特征检测和异常检测技术之外,HIPS 还可以使用沙箱方法,将移动代码隔离在一个独立的系统区域内,然后允许它并监视其行为
- HIPS 提供的桌面保护系统的范围:
- 系统调用:任何攻击代码至少执行一次系统调用,HIPS 可以配置成检查每个系统调用的恶意特征
- 文件系统访问:确保文件访问系统调用时非恶意的并且符合既定的安全策略
- 系统注册表设置:注册表维护着程序的日常配置信息,它经常被恶意的修改以延长一次攻击的存活期。HIPS 可以确保系统注册表保持其完整性
- 主机输入/输出:HIPS 可以检测并加强合法的客户端与网络的交互,以及客户端与其他设备的交互
- 基于网络的 IPS(NIPS)
- 实质上是一个具有修改或丢弃数据包和断开 TCP 连接权限的内嵌 NIDS(基于网络的入侵检测系统)
- NIPS 使用流数据的保护,要求对一个数据包序列中的应用载荷进行重组。每当数据流中的一个新包到达时,IPS 设备对流的全部内容进行过滤。当一个数据流被确定为恶意时,最后到达以及所有属于可疑数据流的后续数据包都会被丢弃
- 识别方法:
- 模式匹配:扫描进入的数据包,寻找数据库中已知攻击的特定的字节序列(即代码特征)
- 状态匹配:在一个上下文相关的传输流中扫描攻击特征码,而不是在各个数据包中查找
- 协议异常:按照 RFC 中提及的标准陈述寻找偏差
- 传输异常:寻找不寻常的传输活动,例如一个 UDP 数据包洪泛流或者网络中出现的一个新设备
- 统计异常:开发一些正常传输活动和吞吐量的基线,并且在与基线发生偏离时进行报警
- 分布式或混合式 IPS
- 其收集大量基于主机和基于网络的传感器数据,将其传送到中央处理系统。中央处理系统对这些数据进行关联分析并更新特征和行为模式,从而使得所有的协作系统可以应对和防御恶意行为
- 数字免疫系统
- 扩展了沙箱分析的使用,并提供了通用仿真和恶意软件检测系统
- 当该系统的目标是,一旦发现恶意软件,立即给出一个快速的响应,以便将其清除
- 当一个新的恶意软件进入某机构时,免疫系统能自动捕获、分析并为它增加防范措施,移除它,并将相关信息发送到客户系统,进而使恶意软件在其他地方运行之前就被检测到
Snort Inline
缓冲区溢出的基本知识
- 缓冲区溢出是作为接口的一种状况,此时大量的输入被放置到缓冲区或者数据存储区,超过了其所分配的存储能力,覆盖了其他信息。攻击者利用这样的状况破坏系统或者插入特别编制的代码,以获得系统的控制权
- 缓冲区溢出是作为编程错误的结果而发生的,此时一个进程试图存储超过缓冲区存储容量(固定长度)的数据,从而导致相邻的内存区域被覆盖
- 栈缓冲区溢出
- 当目标缓冲区被设置在栈区时,所发生的缓冲区溢出就是栈缓冲区溢出
- 栈缓冲区通常被当作一个函数的栈帧中的局部变量,这种形式的攻击又被称为栈溢出攻击
- 函数调用机制:
- 当一个函数调用另一个函数是,至少它需要在某个地方保存返回地址,这样当调用完成以后被调用的函数能够将控制权返回给调用函数。除此以外,还需要一些存储单元保存传递给被调用函数的参数,以及当被调用函数返回时,也可能保存它极限希望使用的寄存器变量的值。所有这些数据都被保存在栈的一个被称为栈帧的结构中
- 被调用的函数也需要一些存储单元保存它的局部变量,每一次调用所使用的某些位置是不同的,这样一个函数才有可能直接或者间接的调用它自身,这就是递归函数调用
shellcode
编译时防御
- 程序设计语言的选择
- 安全的编码技术
- 语言扩充和安全库的使用
- 栈保护机制:
- 一个保护程序避免传统的栈溢出攻击的有效方法,是设定函数入口和出口代码并检查栈帧寻找有没有受到破坏的数据。如果发现有任何修改,程序就会终止运行,不允许攻击继续运行
- 栈卫士是已知的最好的保护机制之一。加入了附加的函数入口和出口代码。问题是所有需要保护的查询都要重新翻译,且栈帧的结构已经改变
- Stackshield 和返回地址防护着包含附加的函数入口的出口代码,但是不改变栈帧的结构。而是在函数的入口处,添加的代码将返回地址的一个副本写到内存的一个安全区域;在函数的出口处,添加的代码检查栈帧里的返回地址与保存的副本,如果发现任何变化就终止程序
- 运行时防御
- 可执行地址空间保护
- 在栈区阻塞代码的执行,假设可执行的代码仅能在进程的地址找到
- 需要支持把从处理器单元(MMU)到虚拟内存的标签页都当作不可执行的
- 地址空间随机化
- 以随机的方式改变为每一个进程的栈设置的地址
- 攻击的另一个目标是标准库例程的存储位置
- 为了对付这种形式的攻击,可以使用一个安全扩展,随机选择一个查询装载标准库的次序,随机选择它的虚拟内存地址的存储位置,使任何特点函数的地址变得深不可测
- guard 页
- 其防御技术是指进程的地址空间的关键区域之间设置 guard 页
- 它利用了这样一个事实:一个进程的有效虚拟内存比它通常所需要的要多得多
- 地址空间的每一部分所使用的一系列地址之间都设置有间隔(gap),这些间隔称为 guard 页,被当作非法地址中 MMU 里做了标记,任何访问它们的尝试都将导致进程终止
- 可执行地址空间保护
- 其他形式的溢出攻击
- 替换栈帧
- 在典型的缓冲区溢出中,攻击者改写了设置在一个栈帧的局部变量区域的缓冲区,并改写了保存的栈指针和返回地址,这种攻击方式的一个变种使改写缓冲区以及保存的帧指针地址
- 保存的帧指针地址直接被改变为被改写的缓冲区顶部附加的一个存储单元,在这个位置用一个指向 shellcode 的缓冲区较低位置的返回地址创建一个虚假的栈帧。随着这次变化,当前的函数正常返回到正在调用它的函数,因为他的返回地址没有被改变。然而,正在调用的函数现在使用替代的虚假的栈帧,当它返回时,控制权将会转移到被改写的缓冲区里的 shellcode
- 差一错误攻击:一般发生在一个二进制缓冲区复制到时候,此时程序员在程序里包含一些代码用于检查被转移的字节数,但是由于编码错误,允许比有效地址空间多一个字节的内容复制
- 防御:需要有任何检测函数出口代码的栈帧和返回地址变化的栈保护机制。内存中栈的随机选择和系统库的随机选择,都将最大限度的阻碍攻击者猜测到使用的正确地址
- 替换栈帧
- 返回到系统调用
- 攻击者通过改变返回地址,使程序跳转到系统上现有的代码
- 将两个库函数调用链接到一起,在一个库函数之后调用另一个库函数
- 链接是通过让占位符的值成为第二个函数的地址实现的
- 防御缓冲区溢出的方法还包括许多栈保护机制——利用函数的出口代码检测栈帧或者返回地址的修改情况。同样,内存中栈的随机选择和系统库的随机选择,也能成功阻止这些攻击的执行
- 堆溢出
- 堆空间中没有容易引发控制权转移到返回地址。然而,如果分配的空间包含一个指向函数的指针,而这个函数代码随后就要被调用,攻击者能够安排改变这个地址指向被改写的缓冲区的 shellcode
- 防御方法:使堆区成为不可知性的、对堆区悲催分配才去随机选择、内存分配器和回收器
- 全局数据区溢出
- 全局数据从程序文件中被装载,并设置在程序代码之上。如果又是使用不安全的缓冲区操作,数据可以溢出到一个全局数据的缓冲区,并改变相邻的内存地址,包括可能是随后就要调用的函数的一个函数指针
- 进程的地址空间可以在全局数据区相邻的区域里包含一些其他的管理表,这种表能够包含对析构函数、全局变量表以及其他结构的引用
- 防御方法包括使全局数据区成为不可执行的,将函数指针设置在其他类型数据之下,以及在全局数据区和其他的管理区之间使用 guard 页
其他类型的溢出
NIST 报告提出的建议:
- 通过使用改进的方法来指定和构建软件,以预防漏洞的出现
- 通过使用更好且更加有效的测试技术在漏洞被利用之间发现他们
- 通过建立弹性更强的架构来减少漏洞带来的影响
- (软件安全)与(软件质量和可靠性)的异同
- 软件质量和可靠性关心的是一个查询是否意外出错,这些错误是由一些随机的未预料的输入、系统交互或者使用错误代码一起的,它们服从一些形式的概率分布
- 提高软件质量的通常方法是采用某些形式的结构化设计,并通过测试来尽量识别和消除程序中的 bug,一般包括可能的输入变化和常见的错误测试,目的是在平常的使用中让 bug 的数目减少,但是软件安全关心的不是程序中 bug 的总数,而是这些 bug 是如何被触发导致程序失败的
- 软件安全不同于软件质量和可靠性,攻击者不会依据一定的概率分布实施攻击,它们的目标是那些特殊利用的 bug,从而造成程序失败
- 没什么错误能够被假设,所有潜在的错误都必须被检查
防御性程序设计或安全程序设计师一个软件设计与实现流程,目的是使生成的软件即使在面临攻击时仍然能够继续工作。如此编写而成的软件能够检测出由攻击所引发的错误条件,并能继续安全的执行;或者即使执行失败,也能优雅的“落地”。防御性程序设计的关键是绝不做任何假设,但是要检查所拥有的假设,并处理任何可能的错误状态
处理程序输入
程序输入是指程序之外的任意数据源,程序员在编写代码的时候并不清楚的知道这些数据的值。任何程序输入都有两个关键点要我们考虑,也就是输入的长度以及输入的含义和解释
- 输入的长度和缓冲区溢出
- 关于输入的长度,当前的解决办法是使用动态缓冲区确保有足够的有效空间,或者把输入数据处理成缓冲区长度的数据块
- 程序输入的解释
- 程序输入数据可以分为文本和二进制两种形式
- 处理二进制数据时,程序假定将未加工的一些二进制数据解释为整数、浮点数、字符串或者其他一些更复杂结构的数据。当读入二进制数据时 ,这些假设的解释必须进行验证,如何进行处理的细节很大程度上取决于信息编码的特殊解释
- 程序将文本数据当作程序输入处理,依据某些字符集,未经加工的二进制数据被解释为字符。通常假设的字符集是 ASCII 字符集。程序员必须仔细识别使用哪个字符集,以及正在读入的是哪些字符
- 注入攻击
- 命令注入攻击:使用的数据可以建立一个命令,随后通过拥有 web 服务器特权的系统执行这个命令
- SQL 注入攻击:由用户提供的输入数据可以建立一个 SQL 请求,从数据库取回一些信息
- 代码注入攻击:PHP 远程代码注入。允许攻击者远程执行代码。无论何时,只要一个查询调用一些服务,而这些服务来自另一个程序、服务或者一个函数,就可能发生注入攻击;给一个程序传递来源于外部的一些不可信、没有进行充分检查和验证的信息,也可能发送注入攻击
- 跨站点攻击:一个用户给程序提供输入,而由此产生的结果输出给另外一个用户
验证输入语法
- 两个原则:
- 需要确认输入是否满足对数据的假设,输入的数据一定要与输入假设比较,仅接受有效输入
- 将输入的数据与已知的危险数据进行比较
- 正则表达式:
- 由一些列描述允许的输入变化的字符构成的模式。正则表达式的内容和用法的星系信息在不同的语言是不同的,在使用的时候需要考虑是哪种语言的使用方法
- 由于多种编码的可能性,因此输入的数据必须首先转换成单一的、标准的、最小的表示形式,这个过程即规范化,通常用一个通用的值代替那些等价的编码
- 输入的 fuzzing 技术
- 两个原则:
算法的正确实现
- 保证机器语言与算法一致
- 数据值的正确解释
- 内存的正确使用
-
与操作系统和其他程序进行交互
环境变量
- 环境变量是每个进程从其父进程中继承的能够影响进程运行方式的一些列字符串值
- 常见的环境变量
- PATH:指定搜索任何给定命令的目录集合
- IFS:指定 shell 脚本中使用的字边界
- LD_LIBRARY_PATH:指定动态可加载库的搜索目录列表
- 程序的安全顾虑在于这些环境变量提供的可以进入一个程序的另一个路径是为确认的数据,因而需要进行验证。在一次攻击中,计算机系统的本地用户经常利用这些环境变量获取对系统的更大的权限。它们的目标是通过攻击一个查询获得超级用户或者管理员的权限,然后利用这些最高的权限执行的设计代码
- 使用合适的最小特权:每个程序都应该使用完成其功能所需的最小特权
- 系统调用和标准库函数
- 组织共享系统资源的竞争条件的产生:
- 使用一个合适的同步机制使得访问串行化,组织错误的产生,常用的技术是共享的文件上设定一个锁,保证每个进程轮流访问
- 检查文件锁不存在和产生文件锁的过程必须是同步进行的,没有中断的可能,这种操作成为原子操作
安全临时文件的使用
任何收集或依赖第三方数据的查询都必须负责保证数据对应后续用户是安全的,不会违反用户的假设
-
操作系统安全
操作系统安全简介
NIST SP 800-123 的应对威胁预案:
部署新系统的第一步是规划。旨在以最小的代价获得最大化的安全
相关内容:
保证系统安全的第一个关键步骤是加固所有应用和服务所依赖的基本操作系统
- 操作系统安装:初始安装和补丁安装
- 初始安装应该仅安装系统所需的最少组成部分,并且仅安装系统所需功能的相关软件包
- 系统的引导过程也应该加固。这可能需要在系统初始引导时打开某些 BIOS 选项,或者设定一个 BIOS 更改密码。另外可能还需要限制可以引导系统开机的设备
- 在随后安装任何额外设备的驱动程序时也应该十分小心,这些驱动代码的完整性和来源必须经过仔细验证,以确保其拥有较高的信任级别
- 系统应尽可能保持最新并安装与安全相关的补丁包也是十分关键的
- 移除不必要的服务、应用和协议
- 可以运行的软件包越少,系统的安全风险就越小
- 在系统规划阶段阶段一应该明确某一特定系统真正需要的东西,以便在提供合适的功能的同时,删除不需要的软件来改善安全性
- 当运行初始安装的时候,不应该使用系统给出的默安装选项,而应该选择个性化安装以确保仅安装需要的软件
- 建议不安装不需要的软件,而并非先安装再卸载或禁用
- 配置用户、组和认证
- 系统规划阶段应该考虑用户的分类,他们拥有各自的权限,他们访问信息段类型,以及它们在哪里定义和认证
- 一个关键的决策是用户、用户所属的组以及它们的认证方式在本地系统被指定还是使用一个中央认证服务器
- 在这个阶段,包括在系统安装过程中的任何默认账户都应该被加固。那些不需要的账户或者删除掉或者至少应该被禁用
- 配置资源控制
- 一旦确定了用户和用户组,就应该在数据和资源上设定合适的访问权限来匹配特定的安全策略
- 安装额外的安全控制工具
- 如反病毒文件、基于主机的防火墙、IDS 和 IPS 软件、白名单
测试系统的安全性
应用配置
- 为应用创建和指定合适的数据存数区域,根据适当情况适当改变应用和服务的默认配置
- 作为配置过程的一部分,一个仔细考虑应用所具有的访问权限
加密技术
日志
- 日志是一个仅能通知你发生了什么坏事的反应式控制。关键在于确保你在日志中记录了正确的数据,然后能够监控和分析这些数据。
- 日志信息可以由系统、网络以及应用来生成。日志信息记录的范围一个帧系统规划阶段确定好,这主要取决于系统的安全需求和服务器存储的信息敏感程度
数据备份和存档
补丁管理
- 确保系统和应用都打上了最新的安全补丁是被广泛接受的维护系统安全的重要方法
- 应用和服务配置
- UNIX 和 Linux 上应用和服务的配置普遍使用单独的文件来实现,每一个应用和服务都有独立的配置文件
- 这些文件可以用文本编辑器进行编辑,发生的任何更改会在系统重启后生效,或者也可以向系统发送信号要求相关进程重新初始化来生效
- 增强系统安全性最重要的措施是禁用服务,尤其是禁用不需要的远程访问服务,并且确保所有的服务或应用根据相应的安全指导进行了合适的配置
- 用户、组和权限
- 实现了对所有文件系统资源的访问控制,不仅包括文件和目录,也包括设备、进程、内存等大多数系统资源
- 建议更改目录和文件的访问权限,以进一步限制对他们的访问
- 通过 setuid 更改为超级用户(root)的程序应该尽可能少
- 远程访问控制
- TCP Wrappers 和 tcpd 守护进程提供了一种网络服务器可以会用到的机制,即轻量级服务可能会被 tcpd 进行封装,之后代替他监听请求
- 日志记录和滚动
- 许多应用允许指定一个专门文件来记录应用事件数据,或者也可以使用系统日志将数据写入到 /dec/log。logrotate 可以用来滚动系统中的任何日志
- 使用 chroot 监牢的应用安全
- 将不要求访问全部系统的服务运行在 chroot 监牢中,限制服务对系统的可见性,使其只能看到系统的一部分。
- 这种功能通过使用 chroot 系统调用来实现。chroot 监牢外部的文件是根本不可见并且无法访问的
安全性测试
补丁管理
- 用户管理和访问控制
- Windows 系统的用户和组以安全 ID(SID)来定义
- Windows 实现了对系统资源的任意访问控制,例如文件、共享内存、命名管道
- 应用和服务配置
- 与 UNIX 和 Linux 操作系统不同,Windows 系统的许多配置信息是统一放在注册表当中的
- 注册表是一个存储键和值的数据库,可以被系统中的应用查询和解释
- 其他安全控制工具
-
虚拟化安全
虚拟化指的是使用某些软件对计算资源进行抽象的技术,因此它运行在称为虚拟机(VM)的仿真环境当中
虚拟化方案
- 虚拟机管理器是介于硬件与虚拟机之间的充当资源代理的软件程序,它运行多个虚拟机中一个物理服务器主机上安全的共存,并共享该主机的物理资源
- 虚拟机过滤器执行的主要功能:
- 虚拟机的执行管理
- 设备模拟和控制访问
- 通过虚拟机管理器为客户虚拟机执行特权操作
- 虚拟机管理(也称为虚拟机生命周期管理)
- 管理虚拟机管理器平台与虚拟机管理器软件
- 虚拟机管理器类型:
- 一型虚拟机管理器:本地虚拟化,可以直接控制主机的物理资源,通常在服务器中见到
- 二型虚拟机管理器:主机虚拟化,利用主操作系统的资源和功能,作为一个软件模块运行在操作系统上,在客户端系统更为常见
- 两种虚拟机管理器的关键差异:
- 一型虚拟机管理器比二型表现更好,因为一型虚拟机管理器不会与操作系统竞争资源,这样主机上就会有更多的可用资源,并且通过扩展,更多的虚拟机可以使用一型虚拟机管理器在虚拟化服务器上托管
- 一型虚拟机管理器比二型更安全
- 二型虚拟机管理器允许用户利用虚拟化,而不需要将服务器专门用于该功能
- 对网络的访问可选的方案
- 客户机操作系统直接访问系统的网卡,由管理程序协调共享接口的访问
- 管理程序为每个客户机操作系统实现一个虚拟网卡,根据需要在不同客户机之间进行路由
- 软件定义网络 SDN 使得网络段能够在逻辑层面于数据中心之间跨越多个服务器
- 容器(容器虚拟化或应用程序虚拟化)
- 被称为虚拟化容器的软件运行在主机操作系统内核之上,并为应用程序提供一个隔离的执行环境
- 容器的目的不是模拟物理服务器,主机上所有的容器都共享一个共同的 OS 内核
- 虚拟化安全问题
- 客户操作系统独立
- 客户操作系统被管理程序监控
- 虚拟化环境安全
- 加固虚拟化系统
- 虚拟化架构安全
- 三种不同的网络通信:
- 管理通信:用于虚拟化架构的虚拟机管理器管理和配置
- 架构通信:例如 VM 映像的迁移。或到网络存储技术的连接
- 应用程序通信:在运行 VM 的应用程序和外部的网络之间,这种通信可以进一步分为若干段,将通信与具有不同敏感等级的应用程序或者不同组织或部门隔离开来
- 三种不同的网络通信:
- 虚拟防火墙
- 虚拟防火墙为虚拟环境或云环境中的系统之间的网络通信提供防火墙功能,这种系统不需要将该通信路由到支持传统防火墙服务的物理独立网络
- 这些功能可由以下提供:
- 虚拟化堡垒主机:一个独立的虚拟机被用作一个堡垒主机
- 基于主机的虚拟防火墙:基于主机的防火墙被配置以同于物理上独立系统中使用的方式来保护主机
- 虚拟机管理器防火墙:防火墙功能直接由虚拟机管理器提供
- 主机虚拟化安全用在客户端的主机虚拟化系统的用户通常对管理程序和虚拟化镜像以及快照有全部的访问和配置权限。在这种情况下,虚拟化的使用主要是为了提高额外的特性以及支持多个操作系统和应用的使用,而不是将各个系统互相隔离给不同的用户使用
Internet 安全协议和标准
安全 E-mail 和 S/MIME
MINE
- 多用途 Internet 邮件扩展(MINE)是对 Internet 电子邮件格式的旧的 RFC 822 规范的扩展
- MINE 提供一些新的报头域,这些域定义了消息正文(或称主体)有关的信息,包括正文的格式和便于转化的任何编码形式
- MINE 定义了一些内容的格式,用于支持多媒体 E-mail 进行标准化表示,比如包括文本、图像、音频、视频等
S/MINE
域名密钥识别邮件标准(DKIM)是一种电子邮件加密签名的规范,它允许一个签名的域名来声明其对邮件流中的某个消息负责。
- 邮件接收者(或代表他们的代理人)可以通过查询签名者的域名来直接得到对应的公钥来验证签名,进而确认消息是来自拥有签名域名私钥的一方
- Internet 邮件体系结构
- 关键组成部分:
- 邮件用户代理 MUA
- 邮件提交代理 MSA
- 邮件传输代理 MTA
- 邮件投递代理 MDA
- 邮件存储器 MS
- 行政管理域 ADMD
- 域名系统 DNS
- 关键组成部分:
DKIM 策略
- DKIM 是为提供一个终端用户透明的电子邮件认证技术而设计的。本质上,使用电子邮件所来自的管理域的私钥,对用户的电子邮件消息进行签名。该签名涵盖了所有的消息内容和一些 RFC 5322 消息头。在接收段,MDA 可通过 DNS 得到相应的公钥并验证签名,从而验证该消息来自于其所声明的管理域。因此来自别的地方但声称来自于给定域的邮件,将无法通过认证测试,并会拒绝
- DKIM 的动机是基于以下推理:
- S/MIME 依赖于发送和接收到用户都用 S/MIME
- S/MIME 仅仅签名消息内容
- DKIM 不在客户端程序中实现,对用户透明,用户无需任何操作
- DKIM 会应用到来自于具有协作关系的域的所有的邮件
- DKIM 使得真实发件人可以证明他们确定发送过特定消息,并防止伪造者伪装成真实发件人
- 默认的签名算法是带有 SHA-256 的 RSA 算法。也可以使用带有 SHA-1 的 RSA 算法
安全套接层和传输层安全
TLS 体系结构
- TLS 被设计成使用 TCP 来提供可靠的端到端的安全服务。TLS不是简单的单个协议,而是两层协议。
- 记录协议为多种高层协议提供基本的安全服务
- 超文本传输协议 HTTP 是为 Web 客户端/服务器交互提供传输服务的,它可以在 TLS 的顶层运行
- 三个较高层协议:握手协议、变更吗规范协议、报警协议
- 两个重要概念:
- 连接:连接是一种能够提供合适服务类型的传输(依据 OSI 层次模型中的定义)。对 TLS 来说,这样的连接上点到点的连接关系,而且这些连接上瞬态的、暂时的。每一个连接都与一个会话相连
- 会话:TLS 会话是一个客户端和一个服务器之间的一种关联。会话由握手协议创建。所有会话都定义了一组密码安全参数,这些安全参数可以在多个连接之间共享。会话可以用来避免每个连接需要进行的、代价高昂的新的安全参数的协商过程
- TLS 协议
- 记录协议:
- SSL 记录协议为 SSL 连接提供了两种服务
- 机密性:握手协议定义了一个共享密钥,用于对 SSL 载荷对称加密
- 消息完整性:握手协议还定义了一个共享密钥,它用来产生一个消息认证码(MAC)
- SSL 记录协议的操作过程:
- 分段:首先将每个上层消息分解成不大于 214 字节(16384 字节)的组,然后有选择的进行压缩
- 在压缩数据的基础上计算消息认证码,把压缩消息加上 MAC 用对称加密方法进行加密
- 添加一个头部, 包括版本和长度域
- SSL 记录协议为 SSL 连接提供了两种服务
- 变更密码规范协议
- 该协议只包含一条消息,由一个值为 1 的字节组成
- 这个消息的唯一功能就是将预备状态拷贝到当前状态,该消息更新了在这一连接中使用的密码套件
- 报警协议:用于将与 TLS 相关的报警传达给对等实体。与使用 TLS 的其他应用一样,报警消息需要依据当前状态的规范进行压缩和加密
- 握手协议:
- 协议中的每个消息由两个字节组成:
- 第一个字节通过值 1 表示警报,值 2 表示致命错误,如果级别为致命,TLS 立即中断当前连接。而会话中的其他链接继续执行,但不会在此会话中建立连接
- 第二个字节包含了一个描述特点警报信息的编码
- 在客户端和服务器之间建立一个逻辑连接所需要的最初的交换过程的四个阶段
- 第一阶段,初始化一个逻辑连接并建立与之相关的安全能力。交换由客户端发起,客户端发送 client_hello 消息
- 第二阶段的细节依赖于所使用的公钥加密方案
- 第三阶段,收到 server_done 消息后,如果有需要,客户端应该验证服务器提供的证书的有效性,并且检查 server_hello 参数是否是可接受的
- 第四阶段,建立安全连接完成客户端发送一个变更密码规范的消息,并把一个未定的密码规范复制到现在的密码规范中
- 协议中的每个消息由两个字节组成:
- 心跳协议:
- 心跳是硬件或软件产生的周期性的信号,以表明操作正常,或以表示与一个系统的其他部分进行同步。
- 心跳协议运行在 TLS 记录协议的顶部,包括两种消息类型:心跳请求和心跳响应
- 心跳协议的使用是在握手协议的第一阶段中确立的,对每一个对等端都要表明其是否支持心跳,如果支持,则要指出他是否愿意接收 heartbeat_request 消息并以 heatrbeat_response 消息回应
- 心跳协议的目的:
- 向发送者确保接收端还活着,即使有可能在底层 TCP 连接上已有一段时间没有任何活动
- 心跳生成了空闲时间中的活动连接,以避免被不容忍空闲连接到防火墙关闭掉
- 记录协议:
SSL/TLS 攻击
HTTPS 是指 HTTP 和 SSL 的组合,用以实现 Web 游览器和 Web 服务器之间的安全通信
- 一般的 HTTP 连接使用80 端口,而 HTTPS 规定使用 443 端口,这个端口可以调用 SSL
- 一旦使用 HTTPS,通信中下列元素将被加密:
- 被请求文档的 URL
- 文档的内容
- 游览器表单的内容(由游览用户编写)
- 由游览器发送到服务器和由服务器发送到游览器的 cookie
- HTTP 头的内容
- 连接开始:
- 代理可以充当 HTTP 客户端,也可以充当 TLS 客户端
- 客户端首先向服务器端一个端口开启一个连接,接着发送一个 TLS ClientHello 请求,开始 TLS 握手过程。TLS 握手结束时,客户端可以接着发出第一个 HTTP 请求,所有的 HTTP 数据作为 TLS 数据被发送
- HTTPS 的连接有三级:
- 在 HTTP 级,HTTP 客户端向 HTTP 服务器请求连接,是通过向下一个最低层发送连接请求实现
- 在典型的,下一个最低层是 TCP,但也可以说 TLS/SSL
- 在 TLS 级,需建立一个 TLS 客户端和 TLS 服务器端的会话,这个会话在任何时候都可以同时支持一个或多个连接
连接关闭
IP 安全概述
- IP 级包含的三个安全领域:
- 认证:确保一个接收到的包,的确是报头上标识的源地址的参与实体发出的,确保包在传输过程中没有被篡改
- 机密性:使正在通信的结点对消息的加密,保证消息在结点之间的传输不被第三方窃听
- 密钥管理:主要与密钥的安全交换有关
- IPSec 的应用:
- 分支机构通过 Internet 安全接入
- 通过 Internet 进行远程安全访问
- 与合作伙伴建立企业间联网和企业内部联网接入
- 加强电子商务安全
- IPSec 的优点:
- 当把 IPSec 应用到防火墙或路由器时,它将对通过边界的所有通信流提供强有力的保护
- 如果所有的外部流量必须使用 IP 且防火墙是由 Internet 进入组织内部的唯一入口,则在防火墙内的 IPSec 难以被绕过
- IPSec 在传输层(TCP、UDP)之下,对所有应用都是透明的。当 IPSec 应用到防火墙或路由器上时,不需要对用户系统和服务器系统的软件做任何改动。
- IPSec 对终端用户是透明的,不必对用户进行安全机制的培训
- IPSec 可以为个人用户提供安全
- IPSec 可以保证:
- 路由广播(新的路由器公告它的存在)来自于授权的路由器
- 邻居广播(路由器试图建立或维护与其他的路由区域中的路由器的邻居关系)来自于授权的路由器
- 重定向消息来源于初始数据包所发送到的路由器
- 路由更新无法伪造
- IP 级包含的三个安全领域:
- IPSec 的范围
- IPSec 提供了两种主要的功能:一是被称作封装安全载荷(ESP)的认证/加密组合功能;二是密钥交换功能
- 安全关联
- 关联是发送方和接收方之间的单向关系,该关联为两者间的通信流提供安全服务。如果需要双向安全关联,则需要建立两个安全关联。
- 一个安全关联由如下三个参数唯一确定:安全参数索引、IP 目的地址、协议标识
- 封装安全载荷:提供保密服务,包括消息内容保密和流量限制保密。ESP 不能提供认证安全服务(只能是源认证),或者说是提供源点鉴别服务(只鉴别 ESP 头之后的信息)
传输模式和隧道模式
Kerberos
- Kerberos 整个方案就是一个可信的第三方认证服务。本质上,Kerberos 要求用户调用每个服务时需要证明他的身份,并且可随意要求服务器向客户端证明它们的身份
- Kerberos 协议包括客户端、应用服务器和 Kerberos 服务器
- 基本思想:
- 使用一个认证服务(AS),它知道所以用户的口令,并把他们存储在一个集中的数据库中,然后用户就可以登录 AS 进行身份验证
- 一旦 AS 验证了用户的身份,它可以把这个信息传送到一个应用服务器,这个应用服务器就接受客户端的服务请求
- 在安全方式下完成上述工作:
- 不让客户端在网络把用户口令发送到 AS,因为敌手可以在网络上观测到用户的口令,然后重用该口令
- 不让 Kerberos 将一个明文消息发送到一个服务器验证客户端身份,因为敌手可以装扮成 AS 并发送一个假的确认消息
- AS 和每个服务器共享一个唯一的安全密钥
- 票据:
- 票据组成了一个客户端用来请求服务的信任证书的集合。票据显示 AS 已经接受了这个客户端和它的用户。整个票据使用 AS 和服务器共享的 DES 密钥加密
- 票据授予票据是用一个仅有 AS 和 TGS 知道的密钥加密的
- 客户端和服务器共享一个密钥,这个密钥能够被用来加密将在客户端和服务器之间发送到消息,或者是为了彼此发送消息而交换新的会话密钥所发送的消息
- Kerberos 和多 Kerberi
- Kerberos 域的要求:
- Kerberos 服务器端数据库中必须存有所有参与的用户 ID 和口令,所有用户都要在 Kerberos 服务器上注册
- Kerberos 服务器必须和每一个服务器共享一个秘密密钥。所有的服务器都要在 Kerberos 服务器上注册
- 支持域间认证:对两个支持域间认证的域来说,在每个互通的域中 Kerberos 服务器和在另一个域中的服务器共享一个密钥,两个 Kerberos 服务器可以互相注册。要求:两个 Kerberos 服务器互相信任
- Kerberos 域的要求:
版本 4 和版本 5
X.509 证书的变体:传统(长效)证书、短效证书、代理证书、属性证书
X.509 定义了一个证书吊销列表 CRL,是由颁发者签名的
公钥基础设施
公钥基础设施(PKI)为基于非对称密码体制
- 当前 PKI 模型的问题:
- 验证证书若出现问题,需依赖用户做出合理决定
- 假设可信存储库的所有 CA 都是被同等信任的,同等良好管理的,采用同等安全策略的
- 不同的 Web 游览器和操作系统使用不同的可信存储库,因此为用户呈现出不同的安全视角
建议:
关键要素:需要颁发证书的端实体、颁发证书的认证中心
- CA 的管理功能进一步划分为注册中心 RA(RA 主要处理端实体和 CRL 颁发者的注册)以及管理 CRL 的存储库
- PKIX 的过程要素:用户注册、密钥资料的初始化、CA 发行的证书的认证、密钥对恢复和更新、证书的撤销申请、CA 的交叉认证
