本文主要是介绍吉林大学专业课计算机安全期末复习重点以及历年题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
第0章 本人前言
这门课在全国几乎只有我们学校开设,所以网上找不到成套的资源,只有零零散散的资源看,所以我总结了这一篇笔记,
首先声明,这门课最重要的原则是老师画的重点和老师当年讲的内容,一切以老师为准。这么说的原因是我们学校目前这门课的体系还不成熟,教的老师不固定,而且每一年的重点甚至内容都不固定,我们这一届的内容就和上一届要考的内容差了十万八千里,所以最重要的还是老师给的ppt和老师在课上说的期末重点(当时我们老师在最后一节课说了期末重点,按照重点复习事半功倍)
今年这一届教我们这门课的老师是杨可新老师,非常好的一个老师。
在这篇笔记的最后我还回忆了我们这一届的期末考题,希望对学弟学妹有用。
第一章 绪论
计算机安全包括两部分
系统
• 软硬件、数据、网络
• 系统的安全需求(目标)的维度:CIAAN
• 攻击
• 安全机制
实现
设计原则、实施、标准
基本安全服务(目标)
• CIA(重点在预防)
– Confidentiality (保密性)
• 对信息或资源的隐藏(读)
– Integrity (完整性)
• 信息或资源的可信度(写)
• 包括数据完整性和身份完整性
• 保护完整新的机制有预防机制和检测机制
– Availability (可用性)
• 对信息或资源的期望使用能力
• 拒绝服务攻击破坏可用性
• Authentication (鉴别)
• Non-repudiation (不可否认),Accountability(问责性)
• 身份认证、数字签名
• 可能存在的问题
• 授权行为也可能不安全
• 安全系统存在缺陷
安全的实施模型
计算机安全术语
安全攻击
安全攻击可被分为主动攻击(active attack)、被动攻击(passive attack)、物理攻击、内部人员攻击、软硬件配置攻击。
主动攻击
• 主动攻击包含数据流的改写和错误数据流的添加,它可以划分为四类:假冒(masquerade)、重放(replay)、篡改(modification)和拒绝服务(denial of service)。
• Interruption(中断): This is an attack on availability
• Interception(拦截): This is an attack on confidentiality
• Modification(修改): This is an attack on integrity
• Fabrication(伪造): This is an attack on authenticity
被动攻击
被动攻击企图了解或利用系统信息但并不侵袭系统的资源。被动攻击在数据传输过程中的表现是,窃听(release of message content)、监视数据传输(流量分析-traffic analysis) 。在一个计算机系统中,往往是“读权限”泄露给非授权用户。
被动攻击的形式有嗅探、搭线监听、无线截获等
被动攻击不易发现,应以预防为主。
安全策略与安全机制
安全策略与安全机制的区别
– 安全策略是对允许什么(安全行为)、禁止什么(非安全行为)的规定。
– 安全机制是实施安全策略的方法、工具或者规程。
常见的安全机制
加密、数字签名、访问控制、完整性机制、鉴别、填充、路由控制、公证
恢复的两种形式
– 第一种,是阻断攻击,并且评估、修复由攻击造成的任何损害。
– 第二种,恢复方式要求攻击在发生时,系统还应该继续正常工作。这类恢复机制同时利用容错技术和安全技术,一般用于可靠性非常关键的系统。
安全策略的性质
• 策略表达的准确性。可以使用数学方式来表达策略,将其表示为允许(安全)和不允许(不安全)的状态列表。实践中,策略极少会如此精确,通常策略使用文本语言描述什么是用户或工作人员允许做的事情。这种描述的内在歧义性导致某些状态既不能归于“允许”一类,也不能归于“不允许”一类。
• 策略表达的一致性。当两个不同的单位进行或合作时,它们所组成的实体往往会使用一种新的安全策略,且这种策略要建立在这两个单位的安全策略之上。如果单位的策略不一致,则可能需要由两个单位同时来决定符合单位的安全策略。
假设与信任
• 如何判定策略是否正确地描述了特定单位所要求的安全等级和安全类型?
安全要以特定的假设为基础,而它依赖的假设明确地指出了安全所要求的安全类型及安全所在的系统环境。
• 策略的设计者始终假设两点:
– 首先,策略准确而无歧义地把系统状态分为“安全”和“非安全”两类状态。该假设断言策略对“安全”系统的组成做了正确的描述。
– 其次,安全机制能防止系统进入“非安全”状态。该假设认为,安全策略可由安全机制实施。
• 如果这两点假设之一是错误的,系统就是不安全的。
要相信安全机制能够起到安全作用,还需以下的假设:
– 每种机制都被设计用于实现安全策略的一个或多个部分。
– 多种机制的并集实现了安全策略的所有规范。
– 机制都被正确地实现。
– 机制都被正确地安装和管理。
安全机制的分类
设P表示所有可能的状态的集合,Q表示安全状态集(由安全策略详细指定)。设安全机制将系统限制在状态集R内(R Í P)。
- 若R Í Q,则称安全机制是安全的;
- 如R = Q,则称安全机制是精确的;
- 若存在状态r,使得r ∈R但r Ï Q,则称安全机制是广泛的。
引用监视器(Reference Monitor)
访问控制机制的理论基础是引用监视器,引用监视器是一个抽象概念,它表现的是一种思想。J.P.Anderson把引用监视器的具体实现称为引用验证机制,它是实现引用监视器思想的硬件和软件的组合。
引用验证机制必须满足的原则
• 必须具有自我保护能力;
• 必须总是处于活跃状态;
• 必须设计得足够小,以利于分析和测试,从而能够证明它的实现是正确的
安全内核
安全内核是实现引用监视器概念的一种技术,其理论依据是: 在一个大型操作系统中,只有其中的一小部分软件用于安全目的。所以在重新生成操作系统过程中,可用其中安全相关的软件来构成操作系统的一个可信内核,称为安全内核。
安全内核必须给以适当的保护,不能篡改。同时,绝不能有任何绕过安全内核存取控制检查的存取行为存在。此外安全内核必须尽可能地小,便于进行正确性验证。
安全内核由硬件和介于硬件和操作系统之间的一层软件组成。
• 安全内核的软件和硬件是可信的,处于安全边界内,但操作系统和应用程序均处于安全边界之外。
• 安全边界是指划分操作系统时,与维护系统安全有关的元素和无关的元素之间的一个想象的边界。
当安全策略完全由安全内核而不是由操作系统实现时,仍需要操作系统维持系统的正常运行并防止由于应用程序的致命错误而引发的拒绝服务。但是操作系统和应用程序的任何错误均不能破坏安全内核的安全策略。
安全内核小型化
安全内核必须做得尽可能小,以便于采用各种方式来有效地增强人们的安全信任度,所以在设计时必须坚决贯彻安全内核小型化这一原则: 凡不是维持安全策略所必需的功能都不应置于安全内核之中。
安全内核的设计和实现的基本原则
完整性原则
完整性原则要求主体引用客体时必须通过安全内核,即所有信息的访问都必须经过安全内核。
完整性原则对支持内核系统的硬件也有一定要求:
- 硬件就必须保证程序不能绕过内核的存取控制。
- 内核必须使各个进程独立,并且保证未通过内核的各进程间不能相互联系。
隔离性原则
安全内核具有防篡改的能力,即可以保护自己,防止偶然破坏。
可验证性原则
可验证性原则是通过如下一些设计要素实现的:
– 利用最新的软件工程技术,包括结构设计、模块化、信息隐藏、分层、抽象说明以及合适的高级语言;
– 内核接口简单化;
– 内核小型化;
– 代码检查;
– 安全测试;
– 形式化数学描述与验证。
内核安全验证的要点
一方面在于建立安全数学模型,要求该模型不仅是安全功能的精确定义,而且也是被形式化证明为内在一致的;
另一方面也要求对安全模型和系统的设计进行一致性论证,即证明内核的实现符合该安全模型。
可信计算基
操作系统的安全依赖于一些具体实施安全策略的可信的软件和硬件。这些软件、硬件和负责系统安全管理的人员一起组成了系统的可信计算基(trusted computing base,TCB)。
可信计算基的组成
• 操作系统的安全内核。
• 具有特权的程序和命令。
• 处理敏感信息的程序,如系统管理命令等。
• 与TCB实施安全策略有关的文件。
• 其他有关的固件、硬件和设备。
• 负责系统管理的人员。
• 保障固件和硬件正确的程序和诊断软件。
安全核心——可信计算基的软件部分的工作
利用可信计算基实现安全操作系统
• 在一个通用安全操作系统中,TCB为用于构成一个安全操作系统的所有安全保护装置的组合体。
• 一个TCB可以包含多个安全功能模块(TSF),每一个TSF实现一个安全功能策略(TSP),这些TSP共同构成一个安全域,以防止不可信主体的干扰和篡改。
• 同时TCB中的非TSF部分也构成另一个域,称为非安全域
实现安全功能模块(TSF)的方法
设置前端过滤器,能防止非法进入系统。
设置访问监督器,能防止越权访问。
不同环境下的TSF
• 在单处理机环境的操作系统中,根据系统设计方法的不同,TCB可以是一个安全内核,也可以是一个前端过滤器。
• 对于网络环境下的多处理机操作系统,一个TSF可能跨网络实现。各个TSF协同工作,构成一个物理上分散、逻辑上统一的分布式安全系统,系统所提供的安全策略和附加服务则为各个TSF的总和。
成本-效益分析
风险评估包括识别资产、识别威胁和计算风险。
安全系统的核心是人,内部人员产生的威胁比外部人员更大。(误操作、泄密、社会工程)
系统安全级别
橘皮书(The Orange Book)是美国国家安全局(NSA)的国家计算机安全中心(NCSC)于1985年颁发的官方标准,其正式名称是"受信任计算机系统评量基准”,其将计算机系统的安全性能由高到低划分为ABCD四个等级,每个大等级又以安全性高低依次编号细分成数个小等级,编号越大安全性越高。
C2级是当前最主要的系统级别,即商业系统安全级别,现在不难理解为什么我们的系统这么脆弱了,操作系统安全级别是C2。
第二章 身份识别
保护的对象
内存、存储设备(如硬盘)、输入输出设备(如打印机)、共享的程序、网络、共享数据
隔离
• 物理隔离。要求进程使用不同的物理实体。例如将不同的打印机设置成具有不同的安全级别。
• 时间隔离。具有不同安全要求的进程在不同的时间运行。
• 逻辑隔离。操作系统通过限制程序的存取,使得程序不能存取其允许范围外的实体,从而使用户感觉自己的操作是在没有其他进程的情况下独立进行。
• 密码隔离。进程以一种其他进程不可知的方式隐藏数据及计算
• 可以两种或多种隔离形式结合
• 隔离策略的实现复杂度递增
• 前三种所提供的安全性递减
• 前两种方法将导致资源利用率严重下降
• 因此为了提高操作系统的性能,要求必须移去操作系统保护的这些沉重包袱,并且允许具有不同安全需求的进程并发执行
操作系统安全的主要目标
• 依据系统安全策略对用户的操作进行访问控制,防止用户对计算机资源的非法存取(窃取、篡改和破坏);
• 标识系统中的用户并进行身份认证;
• 监督系统运行的安全性;
• 保证系统自身的安全性和完整性。
n为了实现这些目标,需要建立相应的安全机制,包括硬件安全机制、标识与认证、访问控制、最小特权管理、可信通路、安全审计等
硬件安全机制
优秀的硬件保护性能是高效、可靠的操作系统的基础。
计算机硬件安全的目标是保证其自身的可靠性并为系统提供基本安全机制。
其中基本安全机制包括存储保护、内存与地址保护、运行保护、I/O保护等。
存储保护
• 存储保护是一个最基本的要求,主要是指保护用户在存储器中的数据。
– 保护单元为存储器中的最小数据范围,可为字、字块、页面或段。
– 保护单元越小,则存储保护精度越高。
– 对于代表单个用户,在内存中一次运行一个进程的系统,存储保护机制应该防止用户程序对操作系统的影响。
– 在允许多道程序并发运行的多任务操作系统中,还进一步要求存储保护机制对进程的存储区域实行互相隔离。
– 存储保护负责保证系统各个任务之间互不干扰;
– 存储器管理则是为了更有效地利用存储空间。
内存与地址保护
……看不懂
运行保护
• 安全操作系统很重要的一点是进行分层设计,而运行域正是这样一种基于保护环的等级式结构。运行域是进程运行的区域,在最内层具有最小环号的环具有最高特权,而在最外层具有最大环号的环是最小的特权环。一般的系统不少于3~4个环。
• 等级域机制应该保护某一环不被其外层环侵入,并且允许在某一环内的进程能够有效地控制和利用该环以及该环以外的环
I/O保护
• I/O是仅由操作系统完成的一个特权操作,所有操作系统都对读写文件操作提供一个相应的高层系统调用,在这些过程中,用户不需要控制I/O操作的细节。
•(硬件I/O保护的局限性)只靠硬件不能提供充分的保护手段,必须由操作系统的安全机制与适当的硬件相结合才能提供强有力的保护。
标识与认证的定义
• 标识就是系统要标识用户的身份,并为每个用户取一个系统可以识别的内部名称——用户标识符。用户标识符必须是惟一的且不能被伪造,防止一个用户冒充另一个用户。
• 将用户标识符与用户联系的过程称为认证,认证过程主要用以识别用户的真实身份,认证操作总是要求用户具有能够证明他的身份的特殊信息,并且这个信息是秘密的或独一无二的,任何其他用户都不能拥有它。
认证方法
• 用户知道的事情。
– 口令、PIN数字、秘密的握手、以及母亲的名字都是用户可能知道的事情。
• 用户拥有的物品。
– 身份标志、公钥、驾驶证、或者制服都是一些常见的可以区分用户身份的物品。
• 用户的所属。
– 又为生物特征,以用户的物理特征为基础,比如指纹、用户声音的形式、人脸。
口令
针对口令的攻击:密码嗅探、记录、暴力穷举破解、密码字典、肩窥(最常见的是偷看密码)、社会工程
安全的口令方式
存储安全
• 基于单向函数的口令认证
– f是单向函数,p是口令,id是身份
– Alice提供p||id
– 计算机计算f(p)
– 计算机与存储的值f(p)||id 作比较
传输安全
通过加密和动态口令实现
S/KEY认证协议
基本的S/KEY认证协议
改进的S/KEY认证协议
身份验证令牌(智能卡)
图像密码
生物特征
特点
可能会产生错误。即可能有相似生物特点的人也可以解开或者说本人因为各种原因解不开
– False Rejection Rate ( Type I Error)
– False Acceptance Rate (Type II Error)
– Crossover Error Rate:强调某个率高一点或者两者平衡
双因子认证
认证机制中包含有两个认证因子即被称作双因子认证。(常见的是结合密码以及用户手中的USB Key、动态口令牌等进一步验证身份)
USB Key认证
• 外型跟U盘相似
• 内置了CPU、存储器、芯片操作系统(COS),可以存储用户的私钥或数字证书,利用USB Key内置的密码算法实现对用户身份的认证
• 采用软硬件相结合一次一密的强双因子认证模式
• 是目前网上银行客户端安全级别最高的一种安全工具
基于USB Key身份认证系统主要的两种应用模式
• 基于挑战/应答的认证方式
• 基于PKI体系的认证方式
挑战应答
认证协议
单向认证
- 基于共享密钥
- 基于用户名和口令
- 基于公钥和证书
双向认证
- 基于共享密钥
- 基于用户名和口令
- 基于公钥和证书
可信的第三方认证(Kerberos协议)
Kerberos协议详解-CSDN博客
• Kerberos是一种计算机网络认证协议,用于在非安全网络中对访问者以安全的手段进行身份认证
• Kerberos实现AAA:认证(Authentication)、授权(Authorization)、审计(Audit)。
• 运用对称密钥加密体制进行密钥管理,其扩展方法也可使用公开密钥加密方法
• 当有N个用户使用该系统时,为确保在任意两方之间进行秘密对话,系统维护与每个用户的共享密钥,所需最少会话密钥数为N个。
• 系统采用C/S结构,支持通信双方的相互认证,可以防止数据窃听、防止重放攻击、保护数据完整性
Kerberos特点
• 安全性
– 能够有效防止攻击者假冒合法用户
• 可靠性
– Kerberos服务自身可采用分布式结构,KDC之间互相备份
• 透明性
– 用户只需要提供用户名和口令,工作站代替用户实施认证的过程
• 可伸缩性
– 能够支持大量用户和服务器
Kerberos基本思想
• 用户只需输入一次身份验证信息就可凭此信息获得票据(ticket)来访问多个服务,即SSO(Single Sign On,单点登录)。
• 用户对应用服务器访问前,必须先从Kerberos认证服务器上获取到访问该应用服务器的票据。
Kerberos认证过程
重点:能够分析对Kerberos的攻击,知道如何攻击Kerberos以及如何防范这些攻击
第三章 访问控制
访问控制是主体对客体提出访问的请求后,对这一申请进行批准、允许、撤销的全过程进行的有效控制,从而确保只有符合控制策略的主体才能合法访问。
是引用监视器实现访问控制。,
访问控制的三要素
访问控制涉及到主体、客体和访问策略,三者之间关系的实现构成了不同的访问模型,访问控制模型是访问控制实现的基础。
主体
• 是指访问的发起者,一个提出访问请求或要求的实体,简记为S。有时也称为用户(User)或访问者(被授权使用计算机资源的用户代理,如进程、程序等)。
• 根据主体权限不同可以分为四类:
– 特殊的用户:系统管理员,具有最高级别的特权,可以访问任何资源,并具有任何类型的访问操作能力
– 一般的用户:最大的一类用户,他们的访问操作受到一定限制,由系统管理员分配
– 作审计的用户:负责整个安全系统范围内的安全控制与资源使用情况的审计
– 作废的用户:被系统拒绝的用户。
客体
• 是接受其他实体访问的被动实体, 也称目标,简记为O。
– 可供访问的各种软硬件资源,通常包括为文件、数据等系统需要保护的资源。
• 主客体的关系是相对的。当一个主体受到另外一个客体的访问时,这个主体也就变成了客体。
访问策略
• 是主体对客体的操作行为集和约束条件集, 简记为KS。简单讲,访问策略是主体对客体的访问规则集,这个规则集直接定义了主体对客体可以操作的行为和客体对主体的条件约束。
• 体现为一种授权行为。任何访问控制策略最终可被模型化为访问矩阵形式。
• 授权(Authorization):规定可对该资源执行的动作(例如读、写、执行或拒绝访问)。
• 未授权的访问包括:未经授权的使用、泄露、修改、销毁信息以及颁发指令等。
– 非法用户进入系统。
– 合法用户对系统资源的非法使用。
访问操作
• 具体操作如:读(R)、写(W)、实际上可读可写(修改),添加(a),删除(d),运行(e)等操作。
• O:是一种特殊的访问权--控制权(O或C,O拥有权owner、C:create) ,指某个主体具有改变其它主体对某客体的访问权限的能力。
访问控制的实现框架
访问控制的任务——
–识别和确认访问系统的用户;
–决定该用户可以对某一系统资源进行何种类型的访问。
对于可用性,访问控制通过对以下信息的有效控制来实现
- (1)谁可以颁发影响网络可用性的网络管理指令
- (2)谁能够滥用资源以达到占用资源的目的
- (3)谁能够获得可以用于拒绝服务攻击的信息
访问控制由两个重要过程组成
–通过认证来检验主体的合法身份;
–通过授权(Authorization)来限制用户对资源的访问级别(权利)。
常见访问控制形式
• 在计算机系统中,安全机制的主要内容是访问控制,包括以下3个任务:
– 授权,即确定可给予哪些主体访问客体的权力;
– 确定访问权限(读、写、执行、删除、追加等访问方式的组合);
– 实施访问权限。
• 访问控制一般都涉及自主访问控制和强制访问控制两种形式。
自主访问控制
• 最常用的一类访问控制机制,用来决定一个用户是否有权访问一些特定客体的一种访问约束机制。需要自主访问控制保护的客体的数量取决于系统环境
• 为了实现完备的自主访问控制机制,系统要将访问控制矩阵相应的信息以某种形式保存在系统中。目前在操作系统中实现的自主访问控制机制是基于矩阵的行或列表达访问控制信息。
基于行的自主访问控制机制
• 在每个主体上都附加一个该主体可访问的客体的明细表,根据表中信息的不同又可分成以下3种形式。
– 能力表(capabilities list)。能力决定用户是否可以对客体进行访问以及进行何种模式的访问(读、写、执行),拥有相应能力的主体可以按照给定的模式访问客体。
– 前缀表(profiles)。对每个主体赋予的前缀表,包括受保护客体名和主体对它的访问权限。当主体要访问某客体时,自主访问控制机制将检查主体的前缀是否具有它所请求的访问权。
– 口令(password)。在基于口令机制的自主访问控制机制中,每个客体都相应地有一个口令。主体在对客体进行访问前,必须向操作系统提供该客体的口令。如果正确,它就可以访问该客体。
基于列的自主访问控制机制
• 每个客体都附加一个可访问它的主体的明细表,它有两种形式,即保护位和访问控制表。
– 保护位(protection bits)。这种方法对所有主体、主体组以及客体的拥有者指明一个访问模式集合。保护位机制不能完备地表达访问控制矩阵,一般很少使用。
– 访问控制列表(access control list, ACL)。国际上流行的一种十分有效的自主访问控制模式
访问控制列表ACL
• 每个客体上都附加一个主体明细表,表示访问控制矩阵。表中的每一项都包括主体的身份和主体对该客体的访问权限
访问控制列表ACL的优化
• 可访问某客体的主体很多时,访问控制表将会变得很长。而在一个大系统中,客体和主体都非常多,访问控制表将占用很多CPU时间。
• 把用户按其所属或其工作性质进行分类,构成相应的组(group),并设置一个通配符(wild card)“*”,代表任何组名或主体标识符。
能力表CL和访问控制列表ACL的区别
• 鉴别方面:二者需要鉴别的实体不同
• 保存位置不同
• 浏览访问权限:ACL容易,CL困难
• 访问权限传递:ACL困难,CL容易
• 访问权限回收:ACL容易,CL困难
• ACL和CL之间转换
– ACL->CL:困难
– CL->ACL:容易
• 多数集中式操作系统使用ACL方法或类似方式
• 由于分布式系统中很难确定给定客体的潜在主体集,在现代OS中CL也得到广泛应用
自主访问控制的实现举例
拥有者/同组用户/其他用户+访问控制列表模式
访问控制表只对“拥有者/同组/其他用户”无法分组的用户才使用。
自主访问控制模型的特点
• 对用户提供的灵活的数据访问方式,应用广泛;
• 在移动过程中其访问权限关系会被改变。
• 当用户数量多、管理数据量大时,由于访问控制的粒度是单个用户,ACL会很庞大。
• 采用ACL机制管理授权处于一个较低级的层次,管理复杂、代价高以至易于出错。
• 它有一个明显的缺点,就是这种控制是自主的。虽然这种自主性为用户提供了很大的灵活性,但缺乏高安全等级所需的高安全性。
强制访问控制(MAC)
• 在强制访问控制机制下,系统中的每个进程、每个文件、每个 IPC 客体( 消息队列、信号量集合和共享存储区)都被赋予了相应的安全属性,这些安全属性是不能改变的,它由管理部门或由操作系统自动地按照严格的规则来设置,不像访问控制表那样由用户或他们的 程序直接或间接地修改。
• MAC是一种多级访问控制策略,它的主要特点是系统对访问主体和受控对象实行强制访问控制,系统事先给访问主体和受控对象分配不同的安全级别属性,在实施访问控制时,系统先对访问主体和受控对象的安全级别属性进行比较,再决定访问主体能否访问该受控对象。
安全级别
• 安全级别由两方面的内容构成。
– 保密级别(或叫做敏感级别或级别)。
– 范畴集。
• 安全级别包括一个保密级别,范畴集包含任意多个范畴。安全级别通常写作保密级别后随一范畴集的形式
• 实际上范畴集常常是空的,而且很少有几个范畴名。
• 在安全级别中保密级别是线性排列的。两个安全级别
之间的关系有以下几种。
– 第一安全级别支配第二安全级别。
– 第二安全级别支配第一安全级别。
– 第一安全级别等于第二安全级别。
– 两个安全级别无关。
安全策略
一个安全策略是对一个系统应该具有的安全性的描述。只有当一个操作系统(或一个可信系统的任意部分)与其安全策略相称,也就是说,该操作系统能够满足对它的安全要求,这个操作系统才是可信的。
军事安全策略
系统内所有信息(如文件)都具有相应的密级,每个人都拥有一个许可证。
军事安全策略的目的是防止用户取得自己不应得到的密级较高的信息。
密级、安全属性、许可证、访问类等含义是一样的,分别对应于主体或客体,一般都统称安全级别。
商业安全策略
• 四个安全等级
– Public
– Sensitive
– Private
– Confidential
Clark-Wilson商业安全策略
为了体现用户完整性,他们提出了职责隔离(seperation of duty)目标;
为了保证数据完整性,他们提出了应用相关的完整性验证进程;
为了建立过程完整性,他们定义了对于变换过程的应用相关验证;
为了约束用户、进程和数据之间的关联,他们使用了一个三元组结构
• Clark-Wilson模型的核心是以良构事务为基础来实现商务环境中所需的完整性策略。
在模型中,CDIs、UDIs、IVPs和TPs分别代表受控数据项(constrained data items)、非受控数据项 (unconstrained data items)、完整性验证过程(integrity verification procedures)和变换过程(transformation procedures)。
Clark-Wilson模型中的完整性保证是一个两段式过程:由安全官员、系统所有者和关于一个完整性策略的系统管理员来完成的认证过程,及其由系统来完成的实施过程。
完整性机制和强制访问控制的差别
• 在完整性控制中,没必要给每一个数据项都关联一个特定的完整性安全级,而仅仅是一个许可执行的程序集。
• 一个用户并没有被授权去直接读或写确定的数据项,而是通过执行程序来影响这些数据。
Bell-La Padula军事级保密性模型(BLP)
• 在BLP模型中将主体定义为能够发起行为的实体,如进程;将客体定义为被动的主体行为承担者,如数据、文件等;将主体对客体的访问分为r(只读)、w(读写)、a(只写)、x(执行)以及c(控制)五种访问模式,其中c(控制)是指该主体用来授予或撤销另 一主体对某一客体的访问权限的能力。
• BLP模型的安全策略包括两部分: 自主安全策略和强制安全策略。
• 自主安全策略使用一个访问矩阵表示,访问矩阵第i行第j列的元素Mij表示主体Si对客体Oj的所有允许的访问模式,主体只能按照在访问矩阵中被授予的对客体的访问权限对客体进行相应的访问。
• 强制安全策略包括简单安全特性和*特性,系统对所有的主体和客体都分配一个访问类属性,包括主体和客体的密级和范畴,系统通过比较主体与客体的访问类属性控制主体对客体的访问。
Biba模型
主要应用类似BLP模型的规则来保护信息的完整性
目标
主要目标是用以防止对系统数据的非授权修改,从而达到对整个系统数据完整性进行控制的目的,对于职责隔离目标,则是通过对访问类的恰当划分方案来实现的
完整性级别
• 每个完整级别均由两部分组成: 密级和范畴。其中,密级是如下分层元素集合中的一个元素: {极重要(crucial,C),非常重要(very important,VI),重要(important,I)}。此集合是全序的,即C>VI>I。范畴的定义与BLP模型类似。
• 完整级别形成服从偏序关系的格,此偏序关系称为支配(≤)关系
强制安全特性
• 简单完整性规则(simple integrity axiom),规定完整性级别高的主体不能从完整性级别低的客体读取数据。强调主体如何从客体进行读操作。——没有“下读”。
• 星级完整性规则(*-integrity axiom),规定完整性级别低的主体不能对完整性级别高的客体写数据。——禁止“上写”。
• 调用规则(invocation property),规定一个完整性级别低的主体不能从级别高的客体调用程序或服务。
优势
Biba模型的优势在于其简单性以及和BLP模型相结合的可能性
不足
• 完整标签确定的困难性。
• Biba模型在有效保护数据一致性方面不充分。
• 关于Biba模型和BLP模型的结合
第四章 软件安全
程序安全
程序问题分为非恶意程序错误或恶意代码
非恶意程序错误:缓冲区溢出
什么是缓冲区溢出? 原理?
– 向固定长度的缓冲区中写入超出其预告分配长度的内容,造成缓冲区中数据的溢出,从而覆盖了缓冲区周围的内存空间。黑客借此精心构造填充数据,导致原有流程的改变,让程序转而执行特殊的代码,最终获取控制权。
假设现在有一个程序, 它的函数调用顺序如下。
main() ->; func_1() ->; func_2() ->; func_3()
即: 主函数main调用函数func_1; 函数func_1调用函数func_2; 函数func_2调用函数func_3。
其详细结构图如下页图所示。
• 随着函数调用层数的增加,函数栈帧是一块块地向内存低地址方向延伸的。
• 随着进程中函数调用层数的减少,即各函数调用的返回,栈帧会一块块地被遗弃而向内存的高址方向回缩。
• 特点:更具有破坏性和隐蔽性
• 在缓冲区溢出中,我们主要关注数据区和堆栈区。
在使用栈时,引用栈帧需要借助的两个寄存器
• 一个是SP(ESP),即栈顶指针,它随着数据入栈出栈而发生变化。
• 另一个是BP(EBP),即基地址指针,它用于标识栈中一个相对稳定的位置,通过BP,再加上偏移地址,可以方便地引用函数参数以及局部变量。
• 在局部变量的下面,是前一个调用函数的EBP,接下来就是返回地址。
• 如果局部变量发生溢出,很有可能会覆盖掉EBP甚至RET(返回地址),这就是缓冲区溢出攻击的“奥秘”所在。
危害
• 它极容易使服务程序停止运行,服务器死机甚至删除服务器上的数据。
• 更为严重的是,可以利用缓冲区溢出执行非授权指令,甚至取得系统特权,进而进行各种非法操作。
栈溢出
例子
#include <stdio.h>
int main()
{
char name[16];
gets(name);
for(int i=0;i<16&&name[i];i++)
printf(“%c”, name[i]);
}
编译上述代码,输入hello world!
结果会输出hello world!
• 在调用main()函数时,程序对栈的操作是这样的:
– 先在栈底压入返回地址
– 接着将栈指针EBP入栈,并把EBP修改为现在的ESP
– 之后ESP减16,即向上增长16个字节,用来存放name[]数组
• 现在栈的布局如图所示。
• 执行完gets(name)之后,栈中的内容如下图所示
• 如果输入的字符串长度超过16个字节,例如输入:hello world!AAAAAAAA……,则当执行完gets(name)之后,栈的情况如图所示。
• 由于输入的字符串太长,name[]数组容纳不下,只好向栈的底部方向继续写‘A’。这些‘A’覆盖了堆栈的老的元素,从上页图可以看出,EBP,Ret 都已经被‘A’覆盖了。
• 从main返回时,就必然会把‘AAAA’的ASCII码——0x41414141视作返回地址,CPU会试图执行0x41414141处的指令,结果出现难以预料的后果,这样就产生了一次堆栈溢出
栈溢出攻击步骤
栈: 由高地址向低地址增长
堆: 由低地址向高地址增长
定位返回地址位置
确定返回地址内容
• 返回地址是指shellcode的入口地址。攻击者如果希望目标程序改变其原来的执行流程,转而执行shellcode,则必须设法用shellcode的入口地址覆盖某个跳转指令。
填充数据
• 由于攻击者不能准确地判断shellcode的入口地址,因此为了提高shellcode的命中率,往往在shellcode的前面安排一定数量的填充数据。
编写shellcode
shellcode是由黑客精心构造的,而由于缓冲区溢出自身的特性,它的结构和构造类型有一定的特性。
NSR模式
• 在shellcode的后面安排一定数量的返回地址,在前面安排一定数量的填充数据,这种结构称为NSR型,或前端同步型。
• 原理是:只要全部的N和S都处于缓冲区内,并且不覆盖RET,而使R正好覆盖存放RET的栈空间,这样只要将R的值设置为指向N区中任一位置,就必然可以成功地跳转到我们预先编写的shellcode处执行。
• 这是一种经典结构,适合于溢出缓冲区较大、足够放下我们的shellcode的情况。
• 这是一种非精确定位的方法,N元素越多成功率越大,其缺点是缓冲区必须足够大,否则shellcode放不下或者N元素数量太少都会造成失败。
RNS模式
• 其原理是:只要把整个缓冲区全部用大量的返回地址填满,并且保证会覆盖存放RET的栈空间,再在后面紧接N元素和shellcode,这样就可以很容易地确定返回地址R的值,并在植入代码中进行设置。
• 这里填充的R的数目必须能够覆盖ret,R的值必须指向大量N中的任何一个。
• 这种方法对大的和小的缓冲区都有效。而且RET地址较容易计算。
AR模式
• 又称环境变量型。这种构造类型不同于NSR型和RNS型,它必须事先将shellcode放置在环境变量中,然后将shellcode的入口地址和填充数据构成植入代码进行溢出攻击。
• 这种构造类型对于大、小溢出缓冲区都适合。但由于必须事先将shellcode放置到环境变量中,故其应用受到了限制,只能用于本地而不能用于远程攻击
Shellcode的目标:Use execve(“/bin/sh”, argv, 0) to run shell
缓冲区溢出的安全对策
- 用户方面:用更安全的函数,比如说strncpy(), strncat()等
- 操作系统方面:ASLR原则(地址空间布局随机化)
- 编译器方面:Stack-Guard
- 硬件方面:不可执行栈
2021级期末试题回忆
一共有四道大题,绪论没出,第一二道大题是第二章的内容,第三道大题是第三章的内容,第四道答题是第四章的内容。
第一道大题考了身份识别的定义,生物认证的定义,生物认证的错误类型以及原因
第二道大题考了Kerberos协议的定义,攻击Kerberos协议的方法,具体是攻击者冒充用户,分别能否欺骗鉴别服务器、票据授权服务器和应用服务器。
第三道大题考了Bell-La协议,它的完整性级别、优势不足等内容,都是老师在最后一节课强调的内容,所以最后一节课老师讲重点的时候一定要听。
第四道大题考了缓冲区溢出的过程,给了一串代码,让我们分析会发生什么问题(其实就是根据代码写出缓冲区溢出的过程,而且代码也是老师ppt里面的代码)
这篇关于吉林大学专业课计算机安全期末复习重点以及历年题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!