首页 > 社会焦点 > 正文

从“想哭”勒索病毒看操作系统安全何在(2)

2017-05-24 编辑:

  零日漏洞,听起来就很霸气的一个名字,仿佛给人一种世界末日的感觉。它并不是指具体的某个或某类漏洞,而是指被黑客发现后立刻用来发起攻击的漏洞,这些漏洞尚未公开,用户不知道,软件厂商也不了解,应对时间为零。所以,这类漏洞没有检测工具,没有修复方法,传统被动升级防御、病毒特征比对的方式毫无用处,一旦被用来发起攻击,普通系统是毫无招架能力的。那么有没有可以防御零日漏洞的安全的操作系统呢?

   安全的操作系统与SELinux

  一提到安全的操作系统,总会涌现出很多真知灼见,最脍炙人口的莫过于:“所有操作系统都有漏洞,所以没有绝对安全的操作系统;所以Windows也好,Linux也好,MacOS也好,都一样不安全。”

  说的好有道理,我竟无言以对,因为前半句是对本文前半部分的总结,理论正确,逻辑自洽,没什么可黑的。后半句的逻辑却似乎有点烧脑,如果它成立的话,我们不妨试着推广一下,比如:“任何物质都是有毒性的,没有什么是绝对无毒的。纰霜吃了会中毒,水喝多了也会中毒,所以砒霜和水一样不安全。”

  毒理学有句名言:一切谈毒性不谈剂量的行为都是耍流氓。同样,任何谈操作系统安全不谈体系架构的行为也是耍流氓。所以面对这种耍流氓的行为,接下来我们要严肃的谈一谈操作系统的安全体系架构。

  多年前,永恒之蓝的始作蛹者NSA为了防御自家系统,开发了一套安全框架,多年后这套框架通过开源组织进入了Linux内核,这就是SELinux。作为造成这次世界性灾难的幕后大boss,NSA为自己定制的SELinux又是怎样的一套防具呢?

  SELinux全称Security Enhanced Linux,是针对Linux的全面安全增强,相比一般的发现漏洞-修复漏洞这种被动挨打的模式,SELinux具备主动防御能力,可以抵御包括零日漏洞在内的多种攻击。那么SELinux是如何做到的呢?

  访问控制是操作系统安全体系中的最核心最关键的机制,它决定了系统中什么样的资源可以被哪些用户以什么样的方式来访问,也就是说普通用户能做什么,入侵者能做什么,应用软件能做什么,恶意软件能做什么,都是访问控制系统决定的。SELinux的核心访问机制是强制访问控制,又叫MAC(别想多了,不是苹果电脑,也不是网卡地址,是Mandatory Access Control),SELinux的安全特性是建立在MAC基础之上的。那么MAC何得何能,堪负如此重任?

  说到MAC强制访问控制就不得不说它的前辈自主访问控制。自主访问控制又叫DAC(Discretionary Access Control)。传统的操作系统,Windows、MacOS、以及包括Linux在内的各种Unix的系统权限管理都是采用的自主访问控制,自主访问控制将用户(或用户组)简化为一个标识,系统中的资源(比如文件)都会带上用户标识和对应的访问权限信息,通过这种方式赋予不同用户不同的访问权限,操作系统通过对用户标识的比对和权限信息决定一个用户是否能访问某个资源。打个比方,你认为你家里的东西是只属于你的,在DAC看来,只要能进屋的人都对这个屋子里的东西拥有权限,那么你自己开门进屋睡觉也好,小偷撬门进去拿走金银细软也好,隔壁老王每天不请自来到你家蹭饭也好,都是合法的。

  在操作系统中也是如此,几乎所有操作系统中都有一个身影,叫管理员,Administrator也好,root也好,都是一群在系统中权力无限大,对任何资源都有完全访问权限的家伙。多数系统服务是以管理员权限运行的,如果它们存在漏洞,被劫持去做一些它们本不该做的事情的时候,DAC是不会阻拦的,因为它无法区分某个动作是程序正常行为还是恶意行为,在它眼里,身份就是权力的象征,只要认可了你的管理员身份,你说什么都是对的,你做什么都是合法的。所以我们说,在DAC机制下,不能用来获取管理员权限的漏洞不是好漏洞,不想获得管理员权限的入侵者不是好入侵者。

  那么MAC机制又是怎样的呢?与DAC中的混沌不同,MAC是一个充满秩序的世界,一个每天需要早请示,晚汇报,一举一动要提出申请的世界。在MAC中,一切访问计划都要事先写入安全策略,没有明确的策略允许的任何访问都会被禁止。在上个例子中,作为家中的主人,你需要能够在家睡觉,也是需要明确制定计划的,你需要添加的安全策略看起来是这样的:

  定义资源类型:床

  定义安全域:休息

  定义角色:主人

  访问规则:允许主人休息时使用床

  如果系统对于你家中的资源访问只添加了这一条安全策略,那么你仍然可以安心的在家睡觉,小偷也好、老王也罢,无论用何种方式进入你家都将寸步难行,接触任何东西的行为都会被禁止,并且一切被禁止的行为尝试都将被另一套完善的监控系统:审计日志记录在案。

  明白了这个例子,回到操作系统中我们就很容易看懂MAC是如何防范系统带来的安全威胁的:假设我们有一个存在缓冲区溢出漏洞的文件共享服务,与多数系统服务一样使用管理员权限运行。攻击者通过精心构建一个特殊的数据包发送给服务器,使存在漏洞服务器正常的执行流程被劫持,转而执行修改管理员密码的操作。在DAC控制下的传统操作系统中,一旦攻击生效,那么管理员密码会被这个平时八竿子打不着的文件服务器修改,攻击者随后可以很容易的登录进入系统。而在MAC系统中,文件服务器的可访问的文件是严格受限的,安全策略类似于:

  允许系统管理员角色运行文件服务器该进程允许访问被共享文件。

  安全策略的定义了该服务可以访问的所有资源,攻击者在攻击了文件服务器后,希望修改管理员密码,它需要访问的是SAM或passwd等的密码管理文件,由于文件服务器进程仅被策略仅允许访问需要被共享的文件,因此对密码管理文件的操作将被拒绝,攻击失效。这种情况下最坏的情形是,攻击者可能非法访问共享文件,因为它仍在安全策略允许范围内。尽管如此,一个系统级的安全漏洞对整个操作系统的影响被限制在了非常小的范围内。

  通过细粒度的划分访问权限,将所有应用和服务的访问限制在最小范围内,这就是强制访问控制保护系统不受已知及未知漏洞攻击的原理。

  其实强制访问控制和自主访问控制并不是水火不容的,在包括SELinux在内的多数安全框架中,它们是共同生效的,所有的资源(或者准确的说叫客体)访问请求首先要经过DAC权限判定,验证通过之后再进一步进行MAC的安全策略判定,只有同时符合自主访问控制和强制访问控制规则后才能获得访问权限。


大家都爱看
查看更多热点新闻