OSX: 真的吗?Mac OS X重大漏洞 改时钟获系统最高权限

9月3日才注意到这个在8月28*登在英文网站9月1日在驱动之家的,关于OS X系统的sudo漏洞没有修补的新闻,今天才有时间成文上传。

这个sudo漏洞是在2013年2月27日被公布出来的,它的注册号是CVE-2013-1775, 大家可以上网找找,这个漏洞相继在不同的类Unix系统中被确认,特别是基于开源的操作系统。它影响sudo发布版本中所有从1.6版到1.7.10p6, 从1.8.0到1.8.6p6。从sudo命令的网站上看,它同时在2013年2月27日推出了一个重要的系统更新版本,用来修复这个漏洞,Sudo version 1.8.6p7 和Sudo version 1.7.10p7 。目前来看,OS X 10.7.4和10.8.3的sudo版本都是1.7.4p6,10.6.8是1.7.0。大家可以自己在Terminal终端中运行sudo -V来查看。

该新闻中,主要提到的是,该漏洞在OS X 10.6到现在的10.8.4的各个版本都存在,基于Apple的升级策略与微软或者其它厂家的不同,苹果既没有推出及时更新也没有正面回复第三方的询问。

在各个网友的回复中,普遍存在误解。反方是坚定了自己对Mac系统的鄙视态度,正方是在鉴定苹果系统最安全的基础上对此漏洞采取一带而过忽视的作法,所以吵得还挺热闹。

新闻就是新闻,总是由不懂行的人道听途说地写出来,既不清晰也不易懂。咱们还是从该漏洞的具体内容开始说说吧:

首先,这个牵扯到计算机开元世纪(Unix epoch),计算机的时钟是从零开始计数的,Unix系统默认地把时钟0,当作1970年1月1日0时0分0秒(也就是1970:01:01 01:00:00),那么如果电脑时钟计数是10,那么系统就认为是1970年1月1日0时0分10秒。

再说,sudo的作用主要是提升当前用户的权限,比如可以让一个管理员用root权限来运行命令,众所周知,root在类Unix系统中就是上帝,可以做任何事情,甚至比上帝都全能,能杀掉自己!能够用root权限来执行命令,就意味着完全地控制了这个系统。默认地,在运行sudo的时候,会在Terminal中提示让用户输入密码,正确后,它会生成一个时间戳,再次使用sudo的时候,它会用当前时间和当初生成的那个时间戳比较,如果这个时间没有超出了设定的时间间隔,该间隔默认的是5分钟,那么它不会再次询问用户密码,而是直接运行命令;如果超出,那么需要用户再次输入密码确认。

其实,即便没有超出时间间隔,也可以使用sudo -k命令来重置时间戳,这样下次在使用sudo,系统会询问密码。在sudo的1.6版本之后,sudo -k命令不是把那个时间戳彻底移除,而是把它设置到电脑开元世纪时间,正是这个举动给骇客以可乘之机。因为在这些版本中,它不管时间戳是不是开元世纪时间,而是依然使用当前时间与之对比,大家可以看到其中的漏洞了吧。只要用户可以把系统时间修改成开元世纪,在5分钟内,可以不用输入用户密码,就可以成功运行sudo命令了。比如sudo su后就可以切换到root用户,只要不退出Terminal,就可以没有时间限制地完全掌控这个系统。

要想利用这个漏洞,需要有几个关键条件:

  1. 这个用户曾经成功运行过sudo命令,也就是sudo建立过时间戳,并运行sudo -k,这样让它归零-不归零的话,可不好猜该用户上一次什么时候运行的sudo命令-如果谁能够知道方法那么sudo的漏洞可就更大了,这是题外话。不过还好了,sudo -k运行的时候不需要密码的。
  2. 其次是,骇客需要更改系统时间,如果通过GUI的System Preferences,系统当然会再次询问用户密码才能变更系统时间;不过,systemsetup命令可以在不用提供密码的情况下可以变更系统时间(这一点在我的10.8.4中需要使用sudo才能变更系统时间设定,我要在其它系统中尝试在确定一下):
    systemsetup -setusingnetworktime off
    systemsetup -setdate 01:01:1970
    systemsetup -settime 00:05
    注:上面的命令只用于举例,并不用于真正的入侵行为
  3. 因为1的原因,也就暗含了另外一个条件,也就是这个用户必须被准许运行sudo命令,默认情况下,OS X系统的管理员帐户都被准许执行,除非特殊设定.
  4. 需要可以在这台机器上操作,也就是这台机器已经被满足1和3条件的用户登陆了,当然也可能远程登陆。
       说了这么半天,有好多人会有疑问:你说都用该用户登录到系统了,怎么会不知道密码,知道密码了,上面的那些破假设还有什么意义啊!

       其实,还真不一定。比如,你作为管理员登陆后,设置屏幕保护10分钟后开启并进行密码保护,而且没有立刻启动屏幕保护程序有事就离开了,我想这个场景在每个人身上都可能发生,也很普遍吧,那么另外一个人路过看到了,娃哈哈!好一个机会!插上U盘,运行早已准备好的脚本,搞定了!他可能秘密地生成另外一个管理员帐户,开启远程控制,ssh等服务,那么不用什么木马蠕虫,就可以完全控制你的机器了!同样的情景,如果
你在远程ssh到服务器,那么他也可以用同样的方式控制远程的服务器,不是吗?

       所以说,这个漏洞真的不是无所谓,至少是,一旦上面的条件满足,那么潜在的危险就是事实的危险。

       那么有了这么一个系统漏洞不修补是不是就是不可挽救了呢?也不是。一是养成良好的习惯,比如设定热角启动屏幕保护并开启密码保护;使用sudo -K命令来彻底删除时间戳;严格控制可以访问用户的权限,并使用sudo visudo来设置sudoers,只给对的用户正确的权限,这是一个原则。

       看了驱动之家各位网友的相关回复,争吵还真是热闹。这么热闹,整个耳红脖子粗的,闹一肚子气,还不是自己生气?!谁会高兴?我看就是小编们看着自己的业绩,那是真心的笑了。其实啊,你用什么顺手,就用什么;再好的东西,到了自己手里不会用,也是瞎掰浪费不是。世界上没有攻不破的系统,没有绝对安全的电脑,更何况现在市面上所谓的系统似乎都不是那么的安全。什么一个系统比另外一个安全100倍了,什么谁谁最不安全,都是没事儿瞎扯,争论这些没有任何意义。有时间多吃个垃圾食品,危害来说可能都比生气来得没有那么深远;再说哪个系统也不是咱亲娘舅出的,咱这么费力生着气帮它,有人给你津贴吗?!对于大众用户来说,与其争论这些,还不如好好弄好自己的机器,多学学如何把自己的电脑调教得相对比较坚固可靠,比如参考我上一篇的有关使用虚拟机的方法,别轻易地变成肉机;培养自己的安全意识,并养成良好的使用习惯,远离危险源。

注:如果细心的读者使用上面的方法突破系统,很可能不成功,那是因为我在上面的命令中有益忽略了一个特殊的命令导致。

上一篇:如何从请求、传输、渲染3个方面提升Web前端性能


下一篇:【Tomcat】上线部署tomcat。常用命令