日益庞大的操作系统和应用导致系统中不乏出现错误。当错误涉及安全类别的时候,我们就称之为漏洞。通过向软件输入特定的字节来触发错误。像这种触发错误的输入通常叫做漏洞攻击或者漏洞利用。
攻击可以通过病毒,手动或者自动的执行漏洞攻击。
术语“安全”来表示所有的基本问题,用术语“防护机制”来表示特定的操作系统机制来确保计算机信息安全。
第一目标是数据保密,这种执行的力度应该精确到文件。
第二个目标是数据的完整性,是指未经授权的用户没有得到许可就擅自改动数据。
第三个目标系统可用性,是指没有人可以扰乱系统是指瘫痪
安全和防护上所做的努力应该取决于针对哪一类型入侵者。
一般来说,我们将攻击分为被动攻击和主动攻击。
加密是将一个消息或者文件进行转码,除非获取秘钥,否则很难恢复原厂消息。程序加固是指在程序中加入保护机制从而使得攻击者很难破坏程序。
在安全领域中,人们通常讨论可信息系统而不是安全系统。
每个可信息头的核心是最小的可信安全基(TCB),其中包含了实施所有安全规则所必须的硬件和软件,如果这些可信的计算基根据系统规约工作,那么,无论发生什么错误,系统安全性都不会受到威胁。
典型的TCB包含了大多数硬件。
TCb的一个重要组成部分是引用监视器。
计算机系统中有许多需要保护的"对象",这些对象可以是硬件(如CPU、内存页、磁盘驱动器或者打印机)或软件(如进程、文件、数据库和信号量)
域是一对(对象,权限)的组合。
一个基本的原则是最低全新原则(POLA),一般而言,当每个域都拥有最少数量的对象和满足其完成工作所需的最底全新时,安全性将达到最好。
UNIX中,进程的域是由UID和GID定义的。给定某个(UID,GID)组合,就能得到可以访问的所有对象列表(文件,包括由特殊文件代表的IO设备等),以及它们是否可以读,写或执行。
每个UNIX进程由两部分——用户部分和核心部分。当执行系统调用时,进程从用户部分切换到核心部分。核心部分可以访问与用户部分不同的对象集。这样,系统调用就引发域切换。
一个很重要的问题是系统如何跟踪并确定哪个对象是属于哪个域的。下面有两个方法来确定,分别是访问控制列表和权能。
每个文件都有一个相关联的ACL。文件F1在ACL中由两个登录项(用逗号区分)。请注意这里的权限是用户赋予的,而不是进程。ACL登录项不只针对个人,还可以针对用户组。
在这样的条件下,当出现要求访问对象的请求时,必须使用调用者的UID和GID来进行检查。如果它们出现在ACL中,所列出的权限就是可行的。如果(UID,GID)的组合不再列表中,访问被拒绝。
在有些情况下,用户可以访问特定的文件而与当前登陆组无关。这样的情况下将引入通配符的概念。其缺点在于几乎没有任何封装性。
很明显权能字列表必须防止用户进行篡改。目前有三种已知的保护方法:
保护矩阵往往不是静态的,它们通常随着创建新的对象、,销毁旧的对象而改变,而且所有者决定对线的用户集的增加或限制。
保护矩阵决定了在任何域中的一个进程可以执行那些操作,而不是被授权执行哪些操作。矩阵是由系统来强制的,而授权与管理策略有关。
在一个不定的保护系统的补丁配置中,其安全性从理论上来说是不确定的。
大多数操作系统允许个人用户来决定谁可以读写它们的文件和其他对象。这一策略成为可自由支配的访问策略。这类环境需要强制性的访问控制来确保所阐明的安全策略被系统强制执行,而不是可自由支配的访问控制。这些强制性的访问控制管理整个信息流,确保不会且泄露那些不应该泄露的信息。
Bell-la和Biba
协作程序能够通过仔细地监控响应时间来检测位流。一般而言,当服务器发送出0时的响应时间比发送出1时的响应要好一些。这种通信方式叫做隐蔽信道。
获取和释放特定资源也可以作为信号方式。
不同于隐蔽信道能够在进程间传递机密信息,即人为或者自动的审查监视着进程间所有通信并禁止可疑的数据传递。
加密的目的是将明文—也就是原始文件或者文件,通过某种手段转变为密文。
在算法中使用的加密参数叫做密钥,如果P代表明文,则Ke代表加密密钥,C代表密文,E代表加密算法,那么C=E(P,Ke)。一般认为,加密算法应该完全公开,而加密的安全性由独立于加密算法之外的密钥决定。
许多类似的密钥系统都有这样的一个特点,那就是给定了加密密钥能够较为容易的找到解密密钥,反之亦然。这样的系统采用了私钥加密技术或对称密钥技术。虽然但字母替换方式每一使用价值,但是如果密钥由足够的长度,对称密钥机制还是比较安全的。
由于对信息进行加密和解密的运输量是可以控制的,所以私钥加密体系是十分有用的。但是它也有一个缺陷:发送者与接受者必须同时拥有密钥。他们甚至必须有物理上的接触,才能传递密钥。为了解决这个矛盾,人们引入了公钥加密技术。这一体系的特点是加密密钥和解密密钥是不同的,并且给出了一个筛选过的加密密钥后不能被推断出解密密钥。这种特性下,加密密钥可以被公开而只有解密密钥处于秘密状态。
通过不对称性的算法来解决。
加密散列函数(循环每次加密提娜佳一个不同的常数)
数字签名的目的:通过数字签名可以保证发送方不可抵赖。起一个通用的使用方法是首先对文档运行一种单项散列运算,这种运算几乎不可逆。
文件所有者利用其私钥对散列值进行运算得到D(散列值),该值成为签名块,它被附加在文档之后发送给接收方。解密计算后的散列值与签名块中的散列值不一样,则表明,要么文档,要么签名块,要么两者都篡改过。
这种方法仅对E(D(x))=x 且 D(E(x))=x的函数其效果。也就是说,D和E是可交换函数。
要采用这种机制,接收方必须知道发送方的公钥。
消息发送方的一种常用方法是在消息后附加数字证书,证书中包含了用户姓名,公钥和可信任的第三方数字签名。一旦用户获得了可信的第三方认证的公钥,那么对于所有使用这种可信第三方确认来生成自己证书的发送方,该用户都可以使用它们的算法。
每一个安全的计算机系统一定会要求所有的用户在登录的时候进行身份认证。
大多数用户认证基于以下三个方面考虑:
入侵用户计算机的主要方式之一是利用系统中运行的软件的漏洞,使其做一些违背程序员本意的事情。
防止登陆欺骗的唯一使用的办法是将登陆序列与用户程序不能捕捉的键组合起来。Windows为此目的采用了Ctrl-Alt-Dek.如果用户坐在终端前按该组合键,则当前用户就会被注销然后重新启动登陆顺序。没有任何办法可以跳过这一步。
闪存可以在程序的控制下被重写(以便生产者可以方便地休整期错误)。恶意软件向内存中随机地写入垃圾数据,使得电脑无法启动。
病毒不感染程序,但是程序执行时病毒也执行。(病毒能够改变连接的目标,并指向病毒本身。当用户双击目标时,病毒就会运行,运行完毕之后病毒有会启动正常的目标程序)
内存主流病毒总是驻留在内存中(RAM),要么隐藏在内存上端,要么藏在下端的终端变量里。典型的内存驻留病毒通过把陷阱或中断向量中的内容复制到任意变量中之后,将自身的地址防止其中,俘获陷阱或中断向量,从而将该陷阱或中断指向病毒。
设备驱动程序被寄生病毒感染,则在每次启动时被光明正大的载入。而且,当驱动程序运行在核心态下,一旦被家在就会调用病毒,从而给病毒获取系统调用的陷阱向量的机会。
宏程序是解释指向而不是便一致性,但解释指影响其运行速度而不影响其执行效果。
从技术上将,蠕虫包含了两部分程序,引导程序和蠕虫本身。引导程序是在被攻击的计算机上编译运行。一旦发作,它就在源计算机和宿主机上连接。上传病毒主题并运行,然后查看是否能连接到其他计算机上。
一种主要的感染途径是下载驱动,仅仅访问网页就可能感染间谍软件。首先,网页将浏览器导向一个可执行文件,当浏览器访问该文件时,会弹出一个对话框让用户运行或保存。
防火墙有两种基本的类型,硬件防火墙和软件防火墙。有局域网需要保护的公司通常选择硬件防火墙,而家庭个人的用户通常选择软件防火墙。
防火墙根据一些规则来配置,这些规则描述什么是允许的,什么是不允许的。防火墙的管理者可以修改这些操作。