端对端加密的Whatsapp,是如何被绕过加密从而实现破解的?

20191029日,WhatsAppFacebook联合起诉以色列入侵技术提供商NSO Group及其母公司Q Cyber,称被告逆向工程WhatsApp的客户端和通讯协议、非法使用WhatsApp服务器,利用WhatsApp的漏洞,将木马植入约1400台设备,目标用户有律师、记者、人权活动家、异见者、外交官和外国政府官员。

 

几份起诉书异口同声,说NSO植入的木马是“Pegasus”。据网上流传的Pegasus宣传册,这一木马专为远程隐蔽监控设计,兼容iOSAndroidBlackberry,植入智能手机之后,可以截取短信、电话通讯,也可以从WhatsAppSkype等第三方软件中提取通讯记录,还可以操控电话麦克风、照相机,从GPS系统搜集信息,亦可调取日历、电邮、浏览记录等数据。

 

可以说,植入这一木马之后,这台手机就在无时无刻、无声无息地为入侵者监控其持有者。Pegasus系统包括两个部分:木马客户端和后台服务器。木马客户端植入攻击对象的电话,后台服务器则负责接收和存储木马发送过来的监控信息,也可以向客户端发送指令,甚至远程升级木马。

 

起诉书点了两个漏洞的名:CVE-2016-4657CVE-2019-3568

 

第一个漏洞,2016年由Citizen LabLookout联手披露,其实不是WhatsApp的漏洞,而是苹果iOS浏览器Safari的漏洞:黑客可以构造携带恶意代码的网页,一旦用户用Safari打开这个网页,网页可以在iOS操作系统上运行任意代码。

 

根据Lookout当时的报告,NSO炮制了三叉戟攻击,就是同时用了三个漏洞,先执行恶意代码,然后确定iOS内核在内存中的位置,最后修改内存获取操作系统根用户权限(也就是俗称的越狱)。此后,植入NSO的木马Pegasus,即可对手机全面监控。

 

在入侵过程中,WhatsApp只是扮演传送恶意网页链接的角色。这个恶意链接,就算用微信、Telegram发过去,只要用户点了,也都会有效。

 

第二个漏洞,就确实是WhatsApp的问题了,影响也更严重。简而言之,通过这个漏洞,入侵者可以向WhatsApp发送特制的数据包,内含恶意代码,让WhatsApp以为收到视频来电,然后用户甚至不需要接听,就可以通过WhatsApp的客户端执行恶意代码。不止iOSAndroid系统也可以攻击,甚至照顾到了小众系统如微软的Windows Phone和基于LinuxTizen

 

WhatsApp今年5月修好了这个漏洞,在起诉书中,WhatsApp说被告的员工跟人抱怨WhatsApp把漏洞修好了,还弄得人尽皆知。

 

这两条入侵路径都不需要在物理上接触用户的手机,第一条路径需要用户点击网页链接,第二条不需要用户做任何操作。

 

2018年,Citizen Lab发了一份跟进报告。他们利用2016年截取的Pegasus木马,获取了一份疑似Pegasus后台服务器名单;然后再根据这些服务器的行为,形成一个服务器指纹;然后再用这些服务器指纹扫描互联网上的其他服务器,检索其他有可能是Pegasus后台的服务器。之后,再用这些后台服务器地址,逆向检索向这些服务器发送消息的客户端,从而摸索出有哪些机器被Pegasus植入了。

 

根据这份报告,Pegasus的用户(监控者)分布在45个国家或地区,集中在中东、南北美洲、欧洲、南亚等地,非洲、东南亚、中亚、东亚等也偶有发现,其中10个监控者执行跨境监控,例如在美国国外监控在美国的人。Citizen Lab没有研究中国大陆的流量,但是香港有木马感染的案例检出(该监控者同时也监控印度、巴基斯坦、孟加拉和巴西的用户,不像是针对香港,香港的感染或许是被监控者旅行到香港时录得)。

 

虽然说WhatsApp实现了端到端加密,就是说,用WhatsApp的两个人,他们的客户端会各自生成加密密钥并交换,此后发送给对方的消息会用对方的密钥加密,这样只有对方才能解密、阅读通讯内容,即使是WhatsApp官方也看不到,互联网中间节点也只能看到加密后的消息,无法直接阅读内容。

 

但若手机遭受Pegasus植入,端到端加密也没有用,因为Pegasus攻击目标不是密文,甚至不是通讯软件本身,而是支持通讯软件运作的操作系统。

 

操作系统比通讯软件更底层:通讯软件加密所需要的所有信息和运算资源,都是由操作系统提供的;通讯软件解密后的信息,也需要通过操作系统向用户呈现。操作系统知道用户在屏幕键盘上点击了哪些键,也知道通讯软件要显示的文字内容是什么,所以,一旦木马获取了操作系统的控制权限,通讯软件就几乎没有办法保护自身信息安全。

 

漏洞为何会出现

 

WhatsApp2009年成立的,2014Facebook190亿美元收购。Facebook全球有三万余员工,现金流稳定增长,给技术人员开出的价码也是行业顶尖。

 

苹果开发操作系统,经验非常丰富:iOS的核心Darwin,可以追溯到1989年的NeXTSTEP(乔布斯被苹果开除后自立门户开发,后来又被苹果收购回去),NeXTSTEP又可以追溯到70年代的UNIX系统。库克近几年也不断以隐私为苹果生态体系的买点。

 

可以说,Facebook和苹果都有人才、有经验、有动力也有钱去完善信息安全,为什么它们还是不断爆出漏洞,让NSO这样以入侵系统为业的企业有生存空间呢?

 

究其根本,原因是智能手机其实是一台计算机,而计算机,原本是用来算数的。今天我们用智能手机和电脑做的事情,大大偏离了计算机原始的设计目标。

 

现代可编程计算机,理论源头是图灵的图灵机。图灵机是一台抽象的机器,有一条磁带和一个磁头,磁带分为一个个格子,格子可以填写数字或者指令,磁头可以对格子读取或者写入,或者执行格子里面的命令。纸带对应我们今天的内存,读写头对应我们今天的CPU

 

如果计算机只是停留在算数的功能上,它的问题率其实非常低:现代的CPU计算功能极少出错,上一回应该是1994Intel奔腾芯片的FDIV问题,这些CPU在计算某些罕见的小数除法的时候,会算错数。

 

但是我们想要的是电脑,不是计算机。我们想要上网、看视频、记笔记、玩游戏、发电邮。

 

为此,业界发明了各种编程语言和编译器,从而软件工程师不用手写CPU的指令,而是可以在用多少近似于人类语言的编程语言给电脑下指令。又为了让CPU能使用各式显示器、网卡、播放声音,软件工程师又写了各式驱动程序,从而让CPU能够将数字转化为图像、声音和通讯信号。CPU上被架了一层操作系统,从而程序的开发者不用为每一种计算机开发程序;为了让多个程序同时运行,比如播放音乐的时候显示网页,人们又开发了多任务操作系统。

 

问题是,电脑架构一路走来,在硬件层面,几乎还是那个简单的一块内存,一个CPU”的模型。尽管我们后来加入了程序不能干涉操作系统核心的运作用户不能读取其他用户的数据等等的逻辑,对于CPU来说,它还是能够读写所有的内存。几乎所有的权限限制,都是在软件层面实现的,如果编写者不小心留下漏洞,那入侵者就可以想办法”CPU去为他们读取或者篡改数据。

 

开源也不一定安全

 

有人会说,WhatsApp是闭源的,苹果系统也有大量闭源组件,而且在iOS上强制所有浏览器使用SafariWebkit内核,只要我们用公开透明的开源软件,全世界的技术专家一起来审查代码,那就会安全了。

 

这恐怕不切实际,因为开源软件一样有过影响极其恶劣的漏洞。

 

2014年,开源加密库OpenSSL爆出“Heartbleed”(中文称心脏出血)漏洞,用密码学大师Bruce Schneier的话说,110,这(Heartbleed的严重程度)是11”

 

OpenSSL是什么呢?简而言之,OpenSSL是一个开源的SSL实现(注),而SSL可以给浏览器(如Mozilla FirefoxGoogle Chrome等)和网站服务器(如google.comfacebook.com等)之间的通讯提供端到端加密,从而免受互联网中间节点窥探、篡改。网站运营商可以免费用这个软件,给自己的网站服务器加上SSL,从而让传输变得安全,不会泄露用户隐私数据,如密码、信用卡号等等。当时,OpenSSL的用户有维基百科、雅虎、社交媒体RedditTumblr,交易平台Stripe等等。

 

问题是,如果这个提供安全的软件本身不安全怎么办?20111231日,一位OpenSSL的开发人员给项目提交代码,实现SSL心跳功能,结果引入了一个漏洞,导致数据泄漏,故称心脏出血

 

OpenSSL是万维网服务器软件Apachenginx的基础,这两个软件也是开源软件,但他们的维护者也没有发现OpenSSL的漏洞。于是,如果网站服务器用了有Heartbleed漏洞的服务器软件(当时Apachenginx市场占有率合计66%),这台服务器就可能直接泄漏其他用户的数据,只要服务器软件曾经收发过这些数据,甚至可能泄漏服务器端的加密私钥,从而让攻击者解密用户和服务器的加密通讯,让SSL提供的安全性荡然无存。

 

分布式网络服务Tor(洋葱路由)干脆发了篇文章说,如果你很在乎匿名和隐私,未来几天就不要上网了(等大家把服务器漏洞补好再回来)。

 

Heartbleed漏洞从引入到发现,花了两年时间。期间,使用了有漏洞的OpenSSL的服务器,在网站运营者自以为启用端到端加密保证传输安全的同时,不知道泄露了多少用户数据出去。

 

可是这也不能怪开源项目开发者。其一,他们很多人都是志愿者,免费为项目共享代码;我们用户又不给钱,也很难在道义上要求开源开发者做到怎样的标准。其二,这个漏洞在代码上,就是漏了几行边界检查的代码,这样的错误对于程序员来说是非常常见的,也很难查,提交的时候没审到,之后就很难再发现了。

 

已邀请:

Alcohollll 【资深级】 - 你看我可爱嘛?

赞同来自: Barry

<p>其实WhatsAPP这款app也不是啥好东西,人家爸妈是Facebook。就Facebook的尿性(参见“剑桥分析”事件),我觉得我把我的聊天记录放在里面我也不放心的说</p>

MatLab2 【熟练级】

E2EE(端对端加密)可以保证数据传输过程中不被窃听。但设备已经被攻破植入木马,什么加密也拯救不了。从新闻看,就是iOS的0day漏洞被利用了。

菠菜 【新手级】

以色列这么牛。。。技术大咖

要回复问题请先登录注册