安全
- 环境安全
- 威胁
- 很多安全方面的文章将信息系统的安全分解为三个部分:机密性,完整性和可用性。
- 机密性:指的是将机密的数据置于保密状态。更确切地说,如果数据所有者决定这些数据仅用于特定的人,那么系统就应该保证数据绝对不会发布给未经授权的人。
- 完整性:指未经授权的用户没有得到许可就擅自改动数据
- 可用性:没哟人可以扰乱系统使之瘫痪
- 后来,人们认为三个基本属性不能满足所有场景,因此又增添了一些额外属性,例如真实性、可审 计性、不可否认性、隐私性以及一些其他诸如此类的属性
- 安全工具对于攻击和防守都是有用的,具有双重用途这一属性
- 有时候攻击的影响会超越计算计机系统本身,对现实世界也会有影响。
- 网络战,大型组织之间发动的攻击行为
- 安全问题的另一个与保密性相关的重要方面是隐私 (privacy). 即保证私人的信息不披滥用
- 入侵者
- 从安全性的角度来说,那些喜欢闯入与自已毫不相干区域的人叫作攻击者(anacker)、入侵者(intruder) 或敌人(adversary)
- 攻击者的范围从技术不是很精湛的黑客爱好者(也称为脚本爱好者),到极其精通技术的黑客。他们可能专门为了罪犯、政府(如警察、军队或者情技部门)或者安全公司工作,或者只是在业余时间开展“黑客”行为的业余爱好者。
- 操作系统安全
- 攻击分为被动攻击与主动攻击。被动攻击试图窃取信息,而主动攻击会使计算机程序行为异常。
- 我们也将加密和程序加固区分开来。加密是将一个消息或者文件进行转码,除非获得密的密钥,否则很难恢复出原信息。程序加固是指在程序中加入保护机制从而使得攻击者很难破坏程序。操作系统在很多地方使用加密:在网络上安全传输据,在硬盘上安全存储文件,将密码存储在密码文件中等。
- 可信系统
- 为什么不去做一个安全的操作系统
- 现代系统虽然不安全但是用户不愿抛弃它们
- 现在已知的建立安全系统仅有的办法是保持系统的简单性。特性是安全的大敌。
- 可信计算基
- 在安全领域中,人们通常讨论可信系统而不是安全系统.这些系统在形式上申明了安全要求并满足了这些安全要求。每一个可信系统的核心是最小的可信计算基,其中包含了实施所有安全规则所必需的硬件和软件。如果这些可信计算基根据系统规约工作,那么,无论发生了什么错误,系统安全性都不会受到威胁。
- 典型的 TCB 包括了大多数的硬件(除了不影响安全性的 I/O 设备)、操作系统核心中的一部分、大多数或所有掌握超级用户权限的用户程序(如 UNIX 中的 SETUID 根程序)等。必须包含在 TCB 中的操作系统功能有:进程创建、进程切换、内存面管理以及部分的文件和 I/O 管理。在安全设计中、为了减少空间以及纠正错误,TCB 通常完全独立于操作系统的其他部分。
- 保护机制
- 保护域
- 域(domain)是(对象,权限)对的集合。每一对组合指定一个对象和一些可在其上运行的操作子集。这里权限 (right) 是指对某个操作的执行许可。通常域相当于单个用户,告诉用户可以做什么不可以做什么,当然有时域的范围比用户要更广。
- 任何时间,每个进程会在某个保护域中运行。换句话说,进程可以访问某些对象的集合,每个对象都有一个权限集。进程运行时也可以在不同的域之间切换。
- 在 UNIX 系统中,使用相同(UID, GID)组合的两个进程访问的是完全一致的对象集合。使用不同(UID, GID)值的进程访问的是不同的文件集合,虽然这些文件有大量的重叠。
- 而且,每个 UNIX 的进程有两个部分:用户部分和核心部分。当执行系统调用时,进程从用户部分切换到核心部分。核心部分可以访问与用户部分不同的对象集。
- 访问控制列表
- 每一个文件关联一个列表,列表里包含了所有可访问对象的域以及这些域如何访问这些对象的方法。这一列表叫作访问控制列表
- 每个文件对他特定用户和特定组拥有不同的权限
- 权能字
- 每一个权能字赋予所有者针对特定对象的权限。一个权能字通常包含了文件(或者更一般的情况下是对象)的标识符和用于不同权限的位图。在类似 UNIX 的系统中,文件标识符可能是 i 节点号。权能字列表本身也是对象,也可以从其他权能字列表处指定,这样就有助于共享子域。ACL 和权能字具有一些彼此互补的特性。在部分操作系统中应用。
- 安全系统的形式化模型
- Harrison 等人 (1976) 在保护矩阵上确定了 6 种最基本的操作,这些操作可用作任何安全系统模型的基准。这些最基本的操作是 create object、delete object、create domain、delete domain、insert right 和 remove right。合并称为保护命令
- 多级安全
- 大多数操作系统允许个人用户来决定谁可以读写他们的文件和其他对象。这一策略称为可自由支配的访问控制
- 部分场景需要强制性的访问控制来确保所阐明的安全策峈被系统强制执行,而不是可自由支配的访问控制。这些强制性的访问控制管理整个信息流,确保不会泄漏那些不应该泄漏的信息。
- Bell-LaPadula 模型
- 简易安全规则:在密级 k 上面运行的进程只能读取同一密级或更低密级的对象。例如,将军可以读取中尉的文档,但中尉却不可以读取将军的文档。
- *规则: 在密级 k 上面运行的进程只能写同一密级或更高密级的对象。例如,中尉只能在将军的信箱添加信息告知自己所知的全部,但是将军不能在中尉的信箱里添加信息告知自己所知的全部,因为将军拥有绝密的文档,这些文档不能泄露给中尉。
- Biba 模型:
- 简单完整性规则 :在安全等级 k 上运行的进程只能写同一等级或更低等级的对象(没有往上写)。
- 完整性*规则:在安全等级 k 上运行的进程只能读同一等级或更高等级的对象(不能向下读)。
- 隐蔽信道
- 系统通过精心设计的方式来通信,而不被察觉
- 隐写术:将信息编码到其他的文件中,用于隐蔽地泄漏信息
- 密码学原理
- 加密的目的是将明文一也就是原始信息或文件,通过某种手段变为密文,通过这种手段,只有经过授权的人才知道如何将密文恢复为明文。对无关的人来说,密文是一段无法理解的编码
- 在算法中使用的加密参数叫作密钥 (key) 。如果 P 代表明文,从代表加密密钥,C 代表密文,E 代表加密算法法(即,函数),那么 \(C=E(P,K_E)\) 。这就是加密的定义
- 私钥加密技术
- 对于给定了加密密钥就能够较为容易地找到解密密钥,反之亦然。这样的系统采用了私钥加密技术或对称密钥加密技术
- 公钥加密技术
- 这一体系的特点是加密密钥和解密密钥是不同的,并且当给出了一个筛选过的加密密钥后不可能推出对应的解密密钥。在这种特性下,加密密钥可被公开而只有解密密钥处于秘密状态。
- 一种叫作 RSA 的公钥机制表明:对计算机来说,大数乘法比对大数进行因式分解要容易得多,特别是在使用取换算法进行运算且每个数字都有上百位时 。这种机制广泛应用干密码领域。其他广泛使用的还有离散对数 。公钥机制的主要问题在于运算速度要比对称密钥机制慢数千倍。
- 当我们使用公钥密码体系时,每个人都拥有一对密钥(公钥和私钥)井把其中的公钥公开.公钥是加密密钥,私钥是解密密钥。通常密钥的运算是自动进行的,有时候用户可以自选密码作为算法的种子.在发送机密信息时,用接收方的公钥将明文加密。由于只有接收方拥有私钥,所以也只有接收方可以解密信息。
- 单向函数,我们将看到有些函数 f, 其特性是给定 f 和参数 x, 很容易计算出 y =f(x). 但是给定 f(x), 要找到相应的 x 却不可行。这种函数采用了十分复杂的方法把数字打乱
- 数字签名
- MD5,SHA-1,SHA-256,SHA-512
- 可信平台模块
- 如何在不安全的系统中安全地保存密钥呢?该方法需要用到一种叫作可信平台模块 (Trusted Platform Modules,TPM) 的芯片。TPM 是一种加密处理器 (cryptoprocessor),使用内部的非易失性存储介质来保存密钥。该芯片用硬件实现数据的加密/解密操作,其效果与在内存中对明文块进行加密或对密文块进行解密的效果相同,TPM 同时还可以验证数字签名。由于其所有的操作都是通过硬件实现,因此速度比用软件实现快许多,也更可能被广泛地应用。
- 认证
- 密码登陆认证:弱密码容易被猜到
- UNIX 密码,加盐:把密码作为输入,通过一个单项散列函数计算出结果作为密码
- 一次性密码:提供一个密码列表,每一次登陆都需要使用新的密码
- 挑战-响应认证:用户事先选择密钥 k, 并手工放置到服务器中。密钥的备份也被安全地存放在用户的计算机里。在登录时,服务器把随机产生的数 r 发送到用户端,由用户端计算出 f(r,k)的值。其中, f 是一个公开已知的函数。然后,服务器也做同样的运算看结果是否一致。
- 使用物理识别的认证:验证一些用户所拥有的实际物体而不是用户所知道的信息,智能卡,物理密钥
- 使用生物识别的验证方式:脸部识别,虹膜识别,指纹识别,声音识别
- 软件漏洞
- 缓冲区溢出攻击
- 格式化字符串攻击
- 悬垂指针
- 空指针引用攻击
- 整数溢出攻击
- 命令注入攻击
- 检查时间/使用时间攻击
- 内部攻击
- 恶意软件
- 特洛伊木马
- 病毒
- 共事者病毒
- 可执行程序病毒
- 内存驻留病毒
- 引导扇区病毒
- 设备驱动病毒
- 宏病毒
- 源代码病毒
- 蠕虫
- 间谍软件
- 防御
- 防火墙
- 反病毒技术
- 代码签名
- 囚禁
- 基于模型的入侵检测
- 封装移动代码
- 关于安全的研究