事儿说大也不大,总的来说就是你的安卓手机,可能成了一个远程窃听器。
只要一首歌的功夫,黑客就能黑掉一台安卓手机。
你刚按下播放键,对方就已经获得了你的摄像头和麦克风权限。
不仅能窃听你的通话内容,甚至连你周围的声音都能监听到。。
这事波及范围还不小,目前全球可能有 37% 的手机,都暴露在这样的危险之下。
是不是突然有点不敢呼吸了,先别慌,听世超来解释一下到底发生了啥。
前两天,一家以色列的 IT 公司 CHECK POINT,发现高通和联发科都在使用的一种开源音乐编码格式,存在一个高危漏洞。
这个漏洞可怕的地方在于,黑客可以通过一段错误格式的音频,实现远程代码执行( RCE )。
啥是远程代码执行,咱先不管。
问题是依靠这个漏洞,黑客可以在你手机里横行霸道。不光可以做到开头说的强制获取权限,还可以执行恶意软件或窃取数据。
而这件事真正魔幻的地方在于,倒大霉的安卓这回可能是被苹果坑了。。
因为高通和联发科都在用的这个音乐编码格式,其实是来自苹果。
一切的纠葛,咱还得从 11 年前的那天说起。
一向喜欢关起门来搞建设的果子哥,在听歌方面也没有例外。
2004 年的时候,苹果弄了一个无损音乐编码格式 Apple Lossless,又叫做 Apple Lossless Audio Codec( 下面简称 ALAC ),只允许自家的设备使用。
别看它名字又臭又长,其实就是一种音频格式,类似于我们最熟悉的 MP3。
只不过,MP3 是有损压缩,而 ALAC 是无损压缩,缩小文件大小的同时,还能保证音质。目前使用比较广泛的无损格式就 FLAC 和 ALAC。
本来如果一直封闭在苹果生态里,就没安卓这茬子事了。
问题是, 2011 年的时候,为了普适性( 谁能想到,有一天果子哥也会考虑普适性问题 ),果子哥破天荒在 GitHub 上面开放了源代码,出了一个开源版 ALAC。
正是这次慷慨开源,很多非苹果的设备和播放器,都美美用上了无损格式,其中也包括 Windows 播放器。
而这次的主人公高通和联发科,更是直接将开源版 ALAC 代码移植到了自己的音频解码器里。
然后,扯淡的事情就出现了。。
我们知道 ALAC 有两个版本。苹果自己使用的专利版,苹果一直在不断更新维护。类似的漏洞,苹果早就修复了。
而提供给其他厂商的开源版,这 11 年来,苹果作为开发者从来没有维护更新过它。
更扯的是,不光苹果懒得去管这个东西,高通和联发科也都坚定地奉行 “ 拿来主义 ”,只拿不修。
世超盲猜高通它们可能心里在想:
“ 谁要帮苹果维护啊,拿来直接用得了。”
ALAC 的开源协议为 Apache,
所有使用者都可以对项目进行更改 ▼
所以,高通和联发科都在使用一套 11 年来从没有更新过的代码。
如果高通它们是移植到了相对底层的解码器中,事情就麻烦了。。只要是使用高通和联发科芯片的手机,都可能会因为这个漏洞遭到黑客攻击。
按照这两个全球最大移动芯片制造商的市场份额来看,2021 年售出的手机里,有三分之二都暴露在危险中。
2020 年第二季度与 2021 年第二季度
全球智能手机 AP/SoC 出货量市场份额 ▼
看到这,你是不是觉得事态相当严重,巴不得亲自替这些偷懒的厂家上手。
稍安勿躁,还记得世超开头说的吗,这事它说大也不大。
这个漏洞带来的后果确实很严重,上百万台手机都可能被攻击。不过,check point 在对外公布漏洞之前,已经提前告知了两家芯片厂商。
目前补丁都已经推送了,咱只要留意一下最近厂商推送的系统更新,安装好,缝缝补补之后,基本上就没啥问题。
而且,世超去翻了一下发布的补丁。发现这 BUG 虽然很危险,但实现手法还挺常见的,主要是利用了缓冲区溢出。
世超这里粗糙地解释一下,这到底啥玩意。
首先要科普的是,程序是怎么在系统里跑起来的。
手机里的各个程序要想跑起来,就得向系统要内存来运行,这个大多数人都知道。
分配结束后,一堆程序在各自申请来的内存里跑,井水不犯河水。
这有点像一个施工队要了个库房,在里头干活儿的感觉。
但这些程序是咋知道这要来的 “ 库房 ” 在哪里呢?这是因为系统给程序分配内存的时候,给了一个叫做内存地址的玩意儿。
一般来说这些地址是一串十六进制的数字 ▼
另一个需要科普的概念,是缓冲区。
有的时候,一个程序在运行某些功能时,临时会需要一些额外的内存,用完就还给系统。
这一部分临时要来的内存被称为缓冲区,它们也有相对应的地址,这就好比是在库房外卖临时搭了一个棚。
程序运行的时候,需要的库房(内存)地儿不够了,它可能会崩溃。
但如果需要的临时棚(缓冲区)地儿不够了,它不一定会崩溃,但是这些堆在棚里的家伙,在棚里干活的人(代码)会堆到别的地儿去。
这个情况就是缓冲区溢出。
而溢出的部分,在一些不安全的系统里是不一定会检测的。
因此即使是恶意代码,也可以通过溢出偷偷执行。
有的黑客故意要一个小一点的临时棚,然后规模过大的施工队进去,那他们就容易跑到别的施工现场去,这些地方可能有很重要的程序在跑。
然后这些施工队手脚还不太干净(恶意代码),去别的地儿搞破坏,或者偷看一些有的没的,想办法传给黑客。。。
这就是溢出的危险之处。
看完了世超的解释,你就不难理解,这个事儿听着挺可怕,实际上原理挺基础。
也就是说,这并不是很难避免。
人家搭棚子前,你(系统)看看人带了多大施工队(检查缓冲区输入)来不就行了吗?
但是,苹果的这套 ALAC 没去检查这件事,同时整整 11 年没人去维护过这玩意儿。。。
只要我给你塞一段特别大的音频文件,然后猥琐地把恶意代码藏在文件尾端。就能利用溢出,瞒天过海地干点有的没的。
不过,更多的技术细节 check point 会专门开个会详细介绍,感兴趣的差友可以关注一下。
事情到这算是圆满解决了,不过世超想在最后来算算总账。
这事咱们到底该赖谁呢?
差友们可能会有点难理解,其实这事两边都没错,但都不太厚道。
先讲果子哥。按理来说,开源项目丢出来之后,免费给所有人用,维不维护就全看开发者的心情。
但错就错在你可是苹果。
一般苹果这种体量的公司,项目的使用人数往往比较多,波及范围广,公司都会派人员负责维护。
但果子哥直接当起了甩手掌柜,多多少少有点不地道。
而高通和联发科这边,又一心只想白嫖,能省一点人力维护就省一点。( 毕竟这可是苹果 )
秉持着极简的态度,能躺着绝不坐着,能坐着绝不站着。
等大鼻涕流进嘴里知道甩了,漏洞出现知道有问题了。
毕竟就算真的栽跟头了,还有爆肝的程序员,以及俺们这些隐私泄露得裤衩都不剩的消费者来买单。。
类似的 “ 白嫖 ” 开源项目还不少,这次只是小毛病,那下次呢?
图片、资料来源:
维基百科、 GitHub
https://blog.checkpoint.com/2022/04/21/largest-mobile-chipset-manufacturers-used-vulnerable-audio-decoder-2-3-of-android-users-privacy-around-the-world-were-at-risk/
知乎 @a301 : 浅谈缓冲区溢出
如何选择开源许可证?|阮一峰