我有一个朋友,是一起玩穿越机的时候认识的,他的技术很好,用惯性过弯,速度很快,于是我们都叫他老弯。

老弯除了玩飞机,还是一名标准的程序员,在许多群体之中,会写代码的人们总是会很快辨认出对方并且混在一起,我经常见到这种事,但很难解释具体的原因,总而言之,这个线下玩飞机的小群体里,写代码的我和写代码的老弯混的最熟。

上个月中旬的某一天,老弯来大悦城看车,顺便来找我蹭咖啡,在交流了一下有没有发现新的飞场后,老弯眉头一皱,跟我说,我的手机最近有点不正常。

他举了个例子:

周三的早上,他早上起来的时候,手电筒是亮着的,但是他很确定,晚上睡觉的时候肯定没有开手电筒,因为他习惯睡前玩一会儿手机,如果手机的手电筒开着,他肯定会发现。

你肯定是睡迷糊了,我几乎毫不犹豫的猜出原因。

就算这次是我睡迷糊了,但后面还有两次,绝对不是我的幻觉。

老弯说,那次手电筒亮灯后,有大概两三次,他凌晨玩手机的时候,他的手机突然笑了。

我问他「笑了」是什么意思,他说,就是发出了「哈哈哈」的声音,有一点点像 Siri 的机器声音,但又有一些区别,而手机上并没有 Siri 出来,他当时也没有说话,不可能是误唤起了 Siri。

有没有可能是你刷微博的时候误点了一个视频,然后因为网速问题没有立刻加载出来,过了一会儿,你看别的东西的时候,这个视频才加载出来,因此播放了声音。我告诉他我的猜想。

老弯抬起头来,看着我说,我没有装微博。

老弯自己就是个程序员,他告诉我,当时他立刻看了下手机有没有后台运行什么App,但是除了他当时正开着的微信读书,后台没有任何App,而毫无疑问,微信读书是不会发出笑声的。

老弯的手机是 iPhone 12,官网购买,从未越狱或进行类似操作,系统也是最新的,没有理由会发生这么古怪的事情,因此我再次说出了我的猜想:我觉得你可能真的是睡迷糊了。

老弯撇了撇嘴说,我其实也觉得很不可思议,如果是睡迷糊了,产生幻觉了,那连着几次产生这个破手机的幻觉,这也太巧了吧,怎么不来一次看到新垣结衣的幻觉呢。

可能因为你是开发 app 的吧,我笑道。

和老弯聊完后,我并没有将他的事情放在心上,对我来说,无法复现的问题,我几乎都会抛在脑后,因为生活太庞杂,又太随机了,每个人的一生,几乎无可避免,都会碰到极小概率的事情,因为概率太小,所以显得不可思议,但若要以「规律」或「常理」套入,那注定徒劳无功,因为它就是「碰巧」而已。

此后一周左右,老弯的手机都没有再出过任何问题,一切正常,周六的时候,我们约着去运河河岸玩飞机,老弯开车过来,后备箱是他刚组好的新飞机,是一个五寸的穿越机,看着非常酷。

今天我不飞竞速了,我要试试花飞,老弯说着,把他的手机拿给我,你帮我拍个视频。

玩穿越机一般需要戴 fpv 眼镜,操纵者看到的是飞机的第一人称视觉,因此如果要从外部记录飞机飞行的姿态,需要由另一个人来手动拍摄。

我拿着老弯的手机,尽力拿镜头对着老弯的飞机,老弯飞的快,所以我也全神贯注,突然,毫无预兆的,我清晰的听到老弯的手机发出了「哈哈哈」的声音,声音真切,不像 Siri,更像真人。

我也不管老弯的飞机在哪了,赶紧滑了滑手机屏幕,后台除了相机,没有任何 App 在运行。

再怎么离谱,相机也不可能发出这种声音吧。

我一边思考一边发呆,老弯说话的声音好像从很远的地方传来:看我这个横滚帅不帅,你拍下来了没,这次肯定不会再炸机了。

过了好一会儿,老弯已经降落飞机,摘下眼镜,过来问我怎么了,我告诉他,我听到他手机发出的笑声了。

老弯一愣,然后大声说,草,我就知道不是幻觉,这下你也听到了吧,后台是不是没其它app?

我摇摇头,你的手机有给其他人用过吗?我问

中午的时候我一些同事偶尔会用我的手机点外卖,因为我的优惠券比较多。

你工作或者生活上有没有什么奇怪的事情?我随口再问了一句。

这个还真的有,老弯若有所思,你知道我们每天都要写工作日报,其实就是瞎写凑合一下,但每个人不允许写的一样,我也比较会水,之前都没啥问题,但最近提交的时候 OA 经常提示我说有重复,让我重新提交。

你的意思是,有人跟你写的一样?

可能就是重复的地方比较多吧,其实我们整个组干的事情都差不多,重复也正常,但我之前是没遇到过。

你是什么时候写日报的?我问

我每天早上一般就会想好,然后晚上的时候提交到 OA。

等等,你早上就「想好」,是只在脑子里想好,还是?

我一般上班的时候在地铁里就会想这一天的活儿,然后先记在便签里,再粘贴发给文件传输助手,这样晚上下班前可以直接在电脑上提到 OA 。

你该不会认为,我的手机被某个同事「监听」了吧,有这个技术,应该不至于跟我当同事,天天996这么干着。老弯注意到我的表情,补了一句。

我摆摆手,那不至于,但手机里面一定有鬼,你用的什么输入法?

就是系统自带的,老弯回答,他和我一样,能用系统自带的基本都用系统自带的,不瞎折腾。

咱们得找个地儿好好研究一下你的手机,我对老弯说。

老弯还是比较了解我,招呼我上车,然后疾驰 200 米,来到了附近一家东北菜馆,点了个压锅大丰收和炖肘子。

我吃撑的时候基本是歇菜状态,离饭点还远的时候也挺一般,但坐在饭馆里,点了硬菜,等着饭来,这个等待的时间,是我大脑最活跃,最高效,最有创造力的时候。

我拿着老弯的手机,确认了没什么不能见人的东西后,开始仔细翻找起来。

我也不确定我要找什么,但我认为,如果排除掉「偶然」后,那剩下的只能是必然,老弯的手机里,一定有什么不一样的东西。

老弯装的 App 并不多,除了系统自带的外,只有常见的一些,诸如微信,滴滴,美团等等,我连一个眼生的都没找到。

我随意的挨个点到这些我已经很熟悉的 APP 里面,突然间,就出现了一切的答案。

我有一种看到魔术师解密后的感觉,混合着敬佩和失望,精妙的魔术背后往往是简单的令人发指的手段,困扰了我们很久的问题背后,同样也是简单到令人发指的手法,然而这后面带有的潜在的危险和恶意,却让我不寒而栗。

我把手机拿给老弯,在手机自带 的「快捷指令」里面,赫然有一个名为「闹钟」的快捷指令,长达 80 项,远高于一般的快捷指令长度。

一般人很难看明白这是什么,但我几乎立刻就明白了其中的隐秘,老弯看了之后,也倒吸了一口凉气说,太他妈狠了。

「快捷指令」是 iOS 自带的 App,可以很方便的添加一些自动执行的事务,在网上已经有非常多的教程和玩法,总之这是一个人畜无害并且挺极客的功能。

但老弯手机里的这条快捷指令却非常险恶,我可以简单的解释一下:

这条指令运行后,会从一个网址(由攻击者控制)获取文本,根据文本的不同,快捷指令会进行不同的操作,从老弯的这个来看,包括「获得地理位置」,「获取照片」,「获取粘贴板内容」等等,这些内容会偷偷发送到远程服务器上,同时还可以开启手电筒,播放任何声音。

在这条快捷指令的最后,它等待了 1 分钟,并再次调起自己,完成了程序员行话称之为的「递归调用」,得以一直运行。

「快捷指令」支持包括指定时间在内的许多自动唤起方式,老弯则被设置了每天晚上11点和早上8点自动唤起这个恶意指令。由于老弯很久之前自己设置过一条「每天晚上11点开启勿扰模式」的快捷指令,所以习惯了晚上快捷指令的运行推送,而这个恶意指令居然只会在第一次运行的时候弹出推送,后面的运行都是完全静默的,所以很难找到踪迹。

我查了一下网址所属域名的备案信息,很容易就查到了是属于老弯的一个同事的,也就是说,老弯的这个同事,在用老弯的手机点外卖的时候,偷偷设置了这个快捷指令,然后就长期「渗透」了老弯的手机。

接下来我和老弯兵分两路,他直接去找那个同事对质,而我则在自己的手机上继续测试,顺便把完整的肘子吃完。

我发现,快捷指令的确可以被用来恶意使用,iOS 系统本不应该犯的错误包括:

1.允许快捷指令的递归调用

2.快捷指令在递归调用时没有运行提示,也不在后台展示,是完全静默的

3.包括向远程网址发送照片,地理位置,剪贴板这些敏感信息,居然没有任何提醒或者提示。

整理好相关信息后,我立刻向苹果的安全团队发了邮件: 

可能因为网不好,我附带的演示视频苹果的 Nick 老哥说打不开,于是我又用 iCloud 发了过去,然后 Nick 老兄回复,让我提供完整的指令列表,我很快也回复了他们

但很遗憾,几周过去了,苹果还是没有继续回复我,或许他们认为这个问题不大,因为这不同于传统的「漏洞」,是需要物理接触才能实施的攻击,但我认为这依然很可怕,尤其在熟人之间,只需使用你的手机几分钟,你的具体的地理位置,剪贴板,相册等等,就长期被攻击者渗透了,他几乎可以随时知道你在哪,看你拍了什么照片,甚至让你的手机「发出笑声」

其中最大的门槛,除了物理接触几分钟手机外,就是一个可以被攻击者控制的「网页」,而这对任何看过 2 天代码的人来说,几乎算不上门槛。

老弯的同事承认,这是他的「恶作剧」,我不知道他是不是真的只是做一个恶作剧,但假如他有更大的恶意,这偷偷运行的快捷指令很可能是有力的武器。

我和老弯商量了一下,看要不要把这个事情公布出来,但考虑到这并不需要任何高深的技术,仅仅是对系统 App 功能的利用,就可以完成的攻击,也就是说,现在说不定其它攻击者正在用这个手段获取被攻击者的隐私,而苹果几周也没有什么明确的回复,所以我们决定还是公布出来,希望提醒所有人,不要让陌生人用自己的手机,检查快捷指令,看有没有没见过的的指令。

我在 B 站还发了一个视频,可以更直观的看到攻击的效果。某些手段可以保持更长时间的存活而不会被杀进程,当然这个我不会公开,以免真的再被有心之人拿去作恶。

和以往我心血来潮写的虚拟故事不同,这个,是真的,所以,一定要好好检查一下你的手机,确保没有任何可疑的快捷指令。

PS:老弯的新飞机最后还是炸了。

 


我的微信公众号~