研究人员突破了 Windows RT 的安全系统

  • Jeff Martin
  • 张龙

2013 年 1 月 11 日

话题:语言 & 开发

近日,一位独立开发者发现了一种在运行着 Windows RT 的微软 Surface 上运行未签名桌面应用的方式。该漏洞利用了 Windows 8 的一处内核 Bug,该 Bug 当然也被 WinRT 继承下来了。C.L. Rokr发现该处 Bug 会导致“未签名的桌面应用能够运行在 Windows RT 上”。InfoQ 采访了 Rokr 以了解其研究发现。

InfoQ:你的计算机背景是什么?

Rokr:我是个专业的嵌入式应用开发者。我觉得逆向工程很有意思,但却从来没有找到过关于这方面的好工作。

InfoQ:研究并发现该漏洞花了多长时间?

Rokr:我知道该处 Bug 已经有段时间了,但其用处却很有限。在数据区的任何地址处都会将给定值减 1。没有办法修改代码,因为这些页是只读的。在内核中找到适合的点花了我大约 3 周时间,主要是因为我之前从未如此仔细研究过 Windows。

InfoQ:你这么做的动机是什么?为了解锁设备以运行你需要的应用还是仅仅是好奇?

Rokr:在我发现新的 Visual Studio 有个 ARM 目标时,我就编译了一个示例 Win32 应用。接下来,我就等待着我的 Surface 能够快些到来。在 Reddit 的一次 AMA 讲座时,Surface 团队清楚地表示遗留应用将无法运行在 Windows RT 上,但我相信他们仅仅表示 x86 代码是无法运行在 ARM 机器上,这一点我很清楚。后来,有人提到代码签名,我再一次相信这仅仅是本地安全策略的一部分,用户可以禁用掉它,因为这正是微软的做法。你能够想象得到我第一次在 Surface 上运行示例时的样子,它无法运行。

InfoQ:你说到“颇具讽刺意味的是,Windows 内核的一处漏洞存在了一段时间,并且还被移植到了 ARM 上,就像 Windows 的其他部分一样”。

Rokr:这很奇怪。微软确实希望 Windows 8 与 Windows RT 能有所不同,但最终他们之间的相似性使我能够做到这一点。当然了,静态分析很有帮助,但拥有一个可用的系统(启用内核调试)使得我可以在很短的时间内查明一切重要的东西,无需将我的 Surface 连接到逻辑分析器上(我不确定这是否可能,有些人说 Tegra3 是个堆叠包,上面运行着 RAM)。

InfoQ:在 Windows 8 上这么做有多难?

Rokr:如果 Windows 8 拥有同样的限制,那么过程也一样。我一开始是在 Windows 8 上这么做的,因为可以使用内核调试器限制它,就像微软对 RT 所做的那样,但后来发现不行。

InfoQ:其他人可能觉得这不是什么问题,但微软解决这个问题容易么?只需发布一个“必选”的系统更新就行么?

Rokr:微软会像其他 Bug 那样修复它的,这是一件好事。如果他们没有将 Code Integrity 作为可选,那么我还会发现其他的,如果我找不到,也会有人找到的。

有多家新闻网站报道了微软对于 Rokr 所做的这一切的回应:

微软:这个场景并不是个安全 Bug,并不会对 Windows RT 用户造成威胁。当需要访问本地系统、管理员权限或是调试器时,上面所描述的机制并不是每个用户都会的,也不是合理的行为。此外,Windows Store 是用户在 Windows RT 上安装应用的唯一一种受支持的方式。有一些机制可以扫描安全威胁,并确保来自 Store 的应用是合法的,可以正常获取并使用。

我们对人们的这种创造力以及付出的辛勤努力感到由衷的钦佩。在未来的发布中,我们不保证这些方式还可以使用。

查看英文原文:Researcher Breaches Windows RT's Security System

语言 & 开发