三十一、计算机安全

在这里插入图片描述过去3集我们讲了计算机如何互连。让我们能够瞬时跨全球沟通。但并不是每个使用网络的人都是好人,我们需要网络安全来减少虚拟世界中的犯罪。计算机没有道德观念,只要给计算机写清楚具体问题,它们就很乐意地闪电般计算出答案——无论这个问题是什么。因此需要网络安全来规范计算机的行为。

保密性,完整性,可用性

我们可以把计算机安全看成是保护系统和数据的保密性、完整性和可用性。
保密性(secrecy)是只有有权限的人才能读取计算机系统和数据。黑客泄露别人的信用卡信息,就是攻击保密性。完整性(Integrity)是只有有权限的人才能使用和修改系统和数据。黑客知道你的邮箱密码,假冒你发邮件,就是攻击“完整性”。可用性(availability)是指有权限的人应该随时可以访问系统和数据。拒绝服务攻击(DDOS)就是黑客发大量的假请求到服务器,让网站很慢或者挂掉。这就是攻击“可用性”。

威胁模型

为了实现保密性、完整性和可用性,安全专家会从抽象层面想象“敌人”可能是谁,这叫威胁模型分析(threat model)。模型会对攻击者有个大致描述:能力如何、目标可能是什么、可能用什么手段。攻击手段又叫攻击矢量(attack vector)。“威胁模型分析”让你能为特定情境做准备,不被可能的攻击手段数量所淹没——因为手段实在有太多种了。
假设你想确保笔记本计算机的“物理安全”,你的威胁模型是“好管闲事的室友”。为了保证保密性、完整性和可用性,你可以藏在脏兮兮的洗衣篮里。但如果威胁模型是调皮的兄弟姐妹,知道你喜欢藏哪里,那么你需要更多保护:比如锁在保险箱里。换句话说,要怎么保护,具体看对抗谁。当然,威胁模型通常比“好管闲事的室友”更正式一些,通常威胁模型分析里,会以能力水平区分。比如“某人可以物理接触到笔记本计算机,而且时间无限”。在给定的威胁模型下,安全架构师要提供解决方案并保持系统安全——只要某些前提假设不会被推翻,例如没人会做告诉攻击者密码这样的事情。保护计算机系统、网络和数据的方法有很多。很多安全的问题可以总结成2个问题:你是谁?你能访问什么?权限应该给合适的人而拒绝错误的人——比如银行员工可以打开取款机来补充现金,但我不应该有权限打开。

身份验证的三种方式

为了解决“你是谁”的问题,区分“谁是谁”,我们使用身份认证(authentication)让计算机得知使用者是谁。身份认证有三种,各有利弊:你知道什么、你有什么、你是什么(what you know,what you have,what you are)。
你知道什么”的认证是基于某个只有用户和计算机才知道的秘密,比如用户名和密码。这是如今使用最广泛的,因为最容易实现。但是如果黑客通过猜测或者其他方式,知道你的密码,那就惨了。而有些密码对于计算机很容易猜中,但是对于人类来说很难,比如PIN码2580。人类猜测9999种组合是很慢的,但是一台计算机可以在1秒钟测试完成0000-9999的所有可能性。这就叫做暴力攻击,也就是运用超强的计算能力穷举所有解。
如果你尝试输入密码错误3次,有些系统会阻止你继续尝试或者让你等一会儿,这是一个普遍而且合理的策略。但是假设黑客控制了数以万计的计算机,形成一个僵尸网络(botnet),然后用这些计算机给许多银行账户尝试密码2580,即使每个账户只试一次,也很可能遇到某个使用密码2580的账户。遇到这种情况,可以尝试增长密码长度,但即使8位的PIN码也很容易破解。因此现在大量的网站要求密码为大写+小写字母,以及特殊符号等大大增加可能性的密码。8位数字的PIN只有一亿种组合,但是包含各种私服的8位长度密码,就有超过600万亿种组合!当然,这些密码会难以记住,所以更好的方法是选一些更好记的东西,比如多个单词拼接组成密码。
你有什么”这种认证方式是基于用户有特定物体——比如钥匙和锁,如果你有钥匙就能开门,这就避免了被人猜中密码锁的问题。而且通常需要用户在现场,所以远程攻击就更难了。比如银行会给用户办理一个可以生成动态密码的动态密码器,必须要你使用动态密码器才能登录手机账号等等。当然,如果攻击者距离你比较近,那么也是很不安全的。正如锁可以被撬开、钥匙可以被复制一样。你的动态密码器也可以被盗取。
你是什么”的认证方式是基于你把特征展示给计算机进行验证。生物识别验证器,比如指纹识别器和虹膜扫描仪就是典型例子。这是很安全的,但最好的识别技术仍然很贵。而且,来自传感器的数据每次会不同。“你知道什么”和“你有什么”这两种验证是“确定性”的:要么正确、要么错误。如果你知道密码,或者有钥匙,那么100%能获得访问权限。如果没有,就绝对进不去。但是“生物识别”是概率性(probabilistic)的,系统有可能认不出你——可能你戴了帽子或者光线不好。系统甚至可能把别人错认成你。生物认证的另一个问题是无法重设,假如攻击者获取了你的所有指纹数据怎么办——你并不能更换你的指纹啊。最近还有研究人员表示,拍个照都有可能伪造虹膜,所以也不靠谱。
所有认证方法都要优缺点,它们都可以被攻破,所以对于重要账户安全专家建议用两种或两种以上的认证方式——这叫做“双因素”或者“多因素”认证(two-factor/multifactor authentication)。攻击者可能能够猜测到你的密码并且盗取你的动态密码器,但是两个同时做到是很难的。

访问控制

身份验证之后就来到了访问控制。一旦系统知道你是谁,它需要知道你能访问什么。因此应该有一个规范,说明谁能访问什么、修改什么、使用什么。这个可以通过“权限”(permission)或者访问控制列表(Access Control List,ACL)来实现。其中描述了用户对每个文件,文件夹和程序的访问权限。“读”权限允许用户查看文件内容、“写”权限允许用户修改内容,“执行”权限允许用户运行文件,例如程序。
“访问控制列表”的正确配置非常重要,以确保保密性、完整性和可用性。假如我们有3个访问级别:公开、机密和绝密。第一个普遍的解决方案是用户不能“向上读取”(read up),也就是说不能读更高等级的信息。如果用户有“机密”权限,那么绝不应该有权限读“绝密”文件,但是可以访问“机密”或“公开”文件。第二个法则是用户不能“向下写入”(write down),如果用户的等级是“绝密”,那么用户可以写入和修改“绝密”文件,但是并不能修改“机密”和“公开”文件。这样可以确保“绝密”不会意外泄露到“机密”或者“公共”文件里。

Bell LaPadula model

总的来说,read up和write down的原则就是“只能读本级别以及更低级别、只能写本级别”。这个“不能向上读,不能向下写”的方法叫做Bell-LaPadula模型。它是为了美国国防部“多层安全政策”制定的。还有许多其他的访问控制模型,比如“中国墙”(Chinese Wall)模型和Biba模型。
身份验证”和“访问控制”帮助计算机知道“你是谁”以及“你可以访问什么”,但是做这些事情的软硬件必须是可信的,这是很重要的前提条件。如果攻击者给计算机装了恶意软件(malware),控制了计算机的操作系统,我们怎么确定安全程序没有给攻击者留后门?答案就是…我们无法确定。我们仍然无法保证程序或计算机系统的安全。因为安全软件在理论上可能是“安全的”,实现时可能会不小心留下漏洞,但我们有办法减少漏洞的出现的可能性——比如一找到就马上修复、以及当程序被攻破时尽可能减少损害。
大部分漏洞都是具体执行时的错误(implementation error)。为了减少执行错误、减少执行,系统级安全的终极解决方案(holy grail)是“安全内核”(security kernel)或者说“可信计算基础”(trusted computing base),即一组尽可能少的、可以验证安全性的操作系统软件,构建安全内核的挑战在于决定内核应该有什么——记住代码应该越少越好。在最小化代码数量之后,要做的工作就是“保证”代码是安全的。正式验证代码的安全性,是一个活跃的研究领域。我们现在最好的解决方案叫“独立安全检查和质量验证”(Independent Verification and Validation),让一群安全行业内的软件开发者来审计代码,这就是为什么安全型代码几乎都是开源的。写原始代码的人通常很难找到错误,但外部开发人员有新鲜的眼光和不同领域的专业知识,可以发现问题。另外还有一些安全大会,安全专家可以互相认识、分享想法。一年一次在拉斯维加斯举办的DEF CON是全球最大的安全大会。

隔离与沙盒

即便尽可能减少代码,并进行了安全审计,聪明的攻击者还是会找到方法不侵,因为如此,优秀的开发人员应当计划当程序被攻破后,如何限制损害、控制损害的最大程度并且不让它危害到计算机上的其他东西。这个原则叫做隔离(isolation)。要实现隔离,我们可以使用沙盒(sandbox)程序——就好比将一个生气的孩子放进一个沙盒里面,他们只能摧毁自己的沙包,不会影响到其他孩子。操作系统会把程序放到沙盒里的方法是给每个程序独有的内存块,其他程序不能动这个独有内存块。另一种可能性的解决方案就是,一台计算机可以运行多个虚拟机(virtual machine),虚拟机模拟计算机、每个虚拟机都在自己的沙箱。如果一个程序出错,最糟糕的情况是它自己崩溃或者搞坏它处于的虚拟机。计算机上的其他虚拟机是隔离的、不受影响。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值