当前位置:安全资讯 >> 全文

代码签名缺陷影响自2005年起发布的所有 Mac OS 版本

发布时间:2018-6-13 11:00 标签: 代码签名,MacOS
分享到 0

Okta Rex 公司的研究员 Josh Pitts 发现了利用 MacOS 代码签名机制的一种方法。缺陷如遭利用,可导致恶意不受信任的代码伪装成合法的受信任代码并绕过其它安全软件的检查。

代码签名攻击并非首次出现。然而,Pitts 在公开披露文章中指出,“和之前的研究工作不同,目前的漏洞并不要求获得管理员权限、无需JITíing 代码或内存损坏就能绕过代码签名检查。攻击者所需的就是一个格式不当的 Fat/Universal 文件以及代码签名检查返回有效。”自2005年推出 OS X Leopard 以来发布的所有 Mac 操作系统均受影响。

代码签名通过密码确认新代码是真实的而非由恶意人员模拟原始开发人员创建的恶意代码。虽然几乎所有东西从二进制到 PowerShell 脚本等均可被签名至 Windows,但 MacOS 代码签名集中在 Mach-O 二进制和应用程序包上以确保只有受信任代码在内存中执行。

Pitts 指出,“安全、事件响应和取证进程和人员通过代码签名将受信任代码从不受信任代码中筛选出来。通过验证已签名代码,检测和响应人员能够通过区分受信任代码和不受信任代码的方式加速调查过程。”

MacOS 中的代码签名机制可遭操纵

然而,Pitts 发现,MacOS 中的代码签名机制可遭操纵。它所需要的就是访问真实签名的 Fat/Universal 文件。其它条件要求文件中的首个 Mach-o 必须经由苹果公司有效签名;所添加的恶意代码必须被专门签名以及为 x86_64 位的目标 macOS 编译 i386Fat 头部中的 CPU_TYPE 必须设置为一个无效类型或者主机芯片集并非原生的 CPU Type

Okta Rex 公司指出,这种技术通过看似由苹果公司自己的 root 证书签名而绕过了白名单、事件响应和进程检查解决方案。简单来说,该机制接受苹果签名,但跳过了该代码并执行了恶意代码。Pitts 解释称,“通过将 CPU_Type 设置为一个无效类型或有效但非原生 CPU 类型(如 PPC)的方式,Mach-O 加载器将会跳过有效签名的 Mach-O 二进制并执行恶意(非苹果签名的)代码。”

实际上,非恶意代码被跳过是因为 CPU_TYPE 是错误的,但随后的恶意代码之所以运行是因为代码签名 API 偏好通过原生 CPU 架构 (x86_64) 进行代码签名检查,如果并非 x86_64,则将默认检查未签名的代码。

苹果认为并非安全问题

Okta Rex 公司在2018222日和苹果公司取得联系,并提交了报告和能够绕过第三方安全工具的 PoC 示例。苹果公司在3月份回应称,由于该问题可被直接解决,因此并不属于安全问题范畴。

Okta Rex 并不认同这种说法,并通知苹果公司称将告知第三方开发者便于他们解决这个问题。截止4月初,Okta Rex 公司已经通过 CERT/CC 通知了所有的已知受影响的第三方开发者,包括 Virus Total、谷歌、FacebookObjective DevelopmentF-SecureObjective-SeeYelp Carbon Black 在内。

Pitts 还在418日通过 CERT/CC 建议称,“公开发表的博客文章是接触第三方以告知他们以私有方式使用代码签名 API 的最佳方式。”

Pitts 表示此前并未发现该技术遭恶意使用的情况。尽管如此,缺陷如遭利用,那么恶意软件能诱骗第三方安全工具认为自己的代码已遭苹果公司批准,从而导致恶意代码在缺陷修复之前一直潜伏于 macOS 设备中。

本文由360代码卫士编译,不代表360观点,转载请注明“转自360代码卫士www.codesafe.cn”。
原文链接:https://www.securityweek.com/code-signing-flaw-affects-all-mac-os-versions-2005
参与讨论,请先 登录 | 注册

用户评论