Clipboard Image.png

前言

就在几周之前,一则关于“Dropbox攻击Mac OSX”的新闻出现在了在各大安全网站的头条上。当Mac用户安装好Dropbox之后,它便会要求你输入管理员密码,Dropbox会使用这个密码获取OSX的root访问权限,然后利用这种特殊权限来访问设备中的敏感信息。此次事件被曝光之后,广大网民均对Dropbox的这种行为嗤之以鼻。但尽管如此,我不得不告诉大家的是,Dropbox既没有利用任何系统漏洞,也没有破坏OSX的安全防御机制。当然了,当你得到了管理员密码之后,也就意味着你可以做任何你想做的事情了。

如果这样就可以让你感到惊讶的话,那么我告诉你千万不要“惊讶”得太早,因为这里的确存在一个安全问题。其实在OSX平台中,Dropbox已经足够“仁至义尽”了。因为Dropbox完全不需要去要求用户输入管理员密码,它可以直接在你下一次完成某些需要管理员权限的设置时拦截到管理员密码。

Clipboard Image.png

现在所有主流的桌面操作系统在默认配置下运行用户程序时,都会对应用程序的权限有所限制。当某些特定的应用程序需要以更高级的权限运行时,可以向系统申请获取这些权限。虽然从某种程度上来说,这些安全措施的确可以防止你在各类操作中无意间破坏系统中的重要组件,但是这样却无法将攻击者拦在门外。你要知道,任意一个所谓的非特权应用程序都拥有足够的权限去检测、拦截、篡改、或者劫持同一登录会话下的权限提升进程。

在此之前,我曾使用过命令行工具来拦截密码。但是这一次,我打算在标准的OSX图形操作界面中实现密码拦截。Kcap程序的源代码我已经上传至Github中托管了,同学们可以点击[这里]获取。

Kcap能做什么?

OS X系统也已经在尝试引入一些安全机制来避免系统陷入不安全的状态,例如阻止非特权进程访问那些可能会要求用户输入密码的应用程序,阻止非特权代码通过键盘记录功能来检测用户的键盘记录数据,以及阻止应用程序窗口覆盖密码输入窗口。但需要注意的是,这些安全限制措施也很容易绕过。

这个应用程序可以利用屏幕截图、鼠标点击事件、以及编程生成键盘点击事件等形式实现中间人攻击,并通过这种方式拦截OSX的密码输入进程以实现权限提升。而OSX系统中的处理机制使得这样的密码拦截方式变得非常容易实现,因为相对于Windows的用户账户控制(UAC)而言,OS X平台下的非特权进程是可以直接访问密码输入进程的信息的。

具体工作机制如下:

1.    检测检测屏幕中的密码输入窗口;

2.    当用户触发了密码输入事件之后,程序会对密码窗口进行截屏;

3.    截屏后,关闭真正的身份验证窗口;

4.    伪造出一个密码输入窗口,并显示给用户;

5.    当用户在伪造出的窗口中输入了密码之后,它会将密码保存下来;

6.    重新打开原始的密码输入窗口;

7.    然后将伪造的窗口从屏幕中移除;

8.    将用户输入的密码提供给原始的密码输入窗口;

9.    将真实的密码输入窗口移动到屏幕中原来的位置;

10. 模拟用户按下“回车键”,在真实窗口中完成密码输入操作;

Clipboard Image.png

这些操作看起来很复杂,但是对于用户而言,这一系列操作可以在一瞬间完成,所以用户是很难察觉的。

Kcap并不完美

有些人表示,如果屏幕中存在一个空的dock对象,那么当恶意软件开始攻击时,即当恶意软件伪造出密码输入窗口时,你就可以看到窗口四个角的像素会发生抖动。这是因为我这个人比较懒,再加上我此前从来没有开发过带有图形用户界面的OSX程序,所以我花了好几个小时的时间用Java语言写了一个出来。如果你可以用OC或者Swift语言进行开发的话,那么上面这个问题就不存在了。

当时我在一台屏幕分辨率为1440×900的MacbookAir上测试了这个程序,系统设置程序弹出的大多数密码输入窗口都没什么问题。但是在其他分辨率的设备上可能会出现像素计算错误的情况,所以如果你想在其他设备上运行的话,你可能还要重新计算一下屏幕像素,并且修改程序的某些位置偏移量。

总结

当然了,苹果公司也可以阻止非特权程序与密码输入窗口进行交互,但是这也并没有什么*用。因为非特权程序可以直接修改系统设置程序的快捷方式,当用户点击了“系统设置”之后,运行的将会是伪造的设置窗口。虽然伪造出的“系统设置”同样可以帮助用户完成他们所要进行的操作,但是此时恶意程序却可以记录用户输入的密码。

可能很多普通用户会认为,当你输入密码之后,你只是在这一次允许这个应用程序以root权限运行。实际上,在你输入密码之后,攻击者便获取到了设备的root权限,攻击者就可以在任意时间运行任意代码了。

Clipboard Image.png

阻止非特权程序申请提权其实并不是一种非常有效的安全保护机制,我们应该使用不同权限的用户账号来完成日常的各项操作。当你使用管理员账号登录时,就不要上网浏览网页或者登录电子邮箱了。除此之外,当你在使用普通账号进行操作时,也应该尽量避免输入你的管理员密码。

演示视频:

* 参考来源:scriptjunkie,FB小编Alpha_h4ck编译