导语:WhatsApp拥有用户15亿,有超过10亿个群组,每天发送消息超过650亿。因为WhatsApp广泛应用于企业、政府机构和个人用户,所以攻击者也将其视为潜在的垃圾邮件发送方式之一。在大量的用户和消息规模下,出现垃圾邮件、谣言、虚假消息的概率

WhatsApp拥有用户15亿,有超过10亿个群组,每天发送消息超过650亿。因为WhatsApp广泛应用于企业、政府机构和个人用户,所以攻击者也将其视为潜在的垃圾邮件发送方式之一。在大量的用户和消息规模下,出现垃圾邮件、谣言、虚假消息的概率也很大。

近日,Check Point研究人员发现WhatsApp存在漏洞,攻击者利用漏洞可以拦截和修改群组和私聊消息。漏洞会导致三种可能的攻击形式: 

· 在群组聊天中修改发送者身份,伪造回复消息来模仿另一个群组人员,即使发送者不是群组成员;

· 攻击者能以其他人的口吻发送消息以达到修改聊天的目的。这样,就可以模仿他人或完成欺骗交易。

· 可以修改群组中的特定成员,在群聊中发送私聊信息,当接收者回复给消息时,整个群成员都可以看到回复的内容。

攻击实例:

whatsapp groupchat hack exploit

图片.png

攻击详解

研究人员在攻击模拟中使用了Burp Suit Extension。

攻击1:在群组聊天中修改发送者身份,即使发送者不是群组成员

在这种攻击中,可以伪造回复消息来模仿另一个群组人员,即使该群组成员并不存在。

为模仿群组中的人,攻击者需要抓取这样的加密流量:

图1 加密的WhatsApp通信

一旦获取流量后,就可以发送给扩展,扩展会解密流量:

图片.png

图2 使用Extension解密的WhatsApp消息

使用extension时应注意以下参数:

· Conversation,发送的真实内容;

· participant,消息的真实发送者;

· fromMe,该参数表明是否是我发送的数据;

· remoteJid,表明数据发送的目的群组;

· id,数据的id,手机的数据库中也会保存系统的id。

了解了这些参数之后就可以伪造会话消息了。

图片.png

图3 伪造的Reply消息

因为数据库中已经存在该id了,所以参数id也要进行修改。

为了让每个人都看到伪造的信息,攻击者需要回复他伪造的消息,引用并修改原始消息(将原始消息修改为其他),然后发送给群里的其他人。

如下图所示,研究人员创建了一个没有消息记录的新群组,然后使用上面的方法创建了假的回复:

图片.png

图4 原始会话

参数participant可以是文本或不在群中的某人的手机号,这会让群人员认为这真的是该成员发送的消息。比如:

图片.png

图5 使用调试工具修改消息内容

修改后的结果:

图片.png

图6 回复来自群外人员的消息

攻击2:以发送者的口吻修改回复

攻击者能以其他人的口吻发送消息以达到修改聊天的目的。

为了伪造消息,必须修改消息的fromMe参数,表示在个人会话中发送消息。

从web端发送的消息在发送到Burp suite之前对其进行分析。可以在aesCbcEncrypt函数上设置一个断点,从a参数出获取获取。

图片.png

图7 OutGoing消息修改

然后复制数据到Burp扩展中,选择outgoing direction,然后解密数据:

图片.png

图8 解密Outgoing Message

在将其改为false,然后加密后,得到下面的结果:

图片.png

图9 Outgoing Message加密

然后要修改浏览器的a参数,结果是含有内容的推送通知。这样甚至可以欺骗整个会话。

图片.png

图10  发送消息给自己

如果是其他人的话,整个会话应该是这样的:

图片.png

图11 发送消息给自己,别人看到的结果

攻击3:在群聊中发送私聊消息,但接收者回复时,整个群都可以看到回复内容

在这种攻击下,可以修改群组中的特定成员,在群聊中发送私聊信息,当接收者回复给消息时,整个群成员都可以看到回复的内容。

研究人员通过逆向安卓APP发现了攻击向量。在该实例中,研究人员发现如果攻击者在群中修改了一个消息,那么就会在数据库/data/data/com.whatsapp/databases/msgstore.db中看到该消息。

图片.png

图12 在群聊中发送私聊消息保存在/data/data/com.whatsapp/databases/msgstore.db数据库中

可以使用sqlite3客户端使用下面的命令打开会话:

图片.png

可以看到下面的数据:

图片.png

图13 修改后的数据库

为了在群中发送消息,但限制消息只能某个特定群成员才能看到,因此要设定remote_resource参数。

这里的使用的方法就是将key_from_me参数从0修改为1。

完成这些动作后,运行下面的命令,更新key_from_me和数据:

图片.png

攻击者需要重启WhatsApp客户端来强制引用发送新消息。之后的结果就是:

图片.png

只有特定的受害者接收到了消息。

如果受害者写消息回应(writes something as a response),那么群组内的所有人都可以看到;但如果受害者直接回复(reply to)消息的话,只有他自己可以看到回复的内容,但其他人就可以看到原始消息。

更多技术细节参考https://research.checkpoint.com/fakesapp-a-vulnerability-in-whatsapp/

如何继续防护?

因为目前还没有安全产品能够保护用户防止此类攻击,那么唯一的办法就是留心虚假消息、阴谋论、垃圾邮件等。

如果听起来太好的事情,大概率就不是真的。同样,很不好的事情,也大概率不是真的。

假消息传播的更快。看似来自不同源的相同消息,并不意味着是真的。

验证真相。在社交媒体上交叉验证来验证消息的真实性。最好不要从社交媒体网站获取信息。

POC视频

https://www.youtube.com/embed/rtSFaHPA0C4

源链接

Hacking more

...