导语:WhatsApp拥有用户15亿,有超过10亿个群组,每天发送消息超过650亿。因为WhatsApp广泛应用于企业、政府机构和个人用户,所以攻击者也将其视为潜在的垃圾邮件发送方式之一。在大量的用户和消息规模下,出现垃圾邮件、谣言、虚假消息的概率
WhatsApp拥有用户15亿,有超过10亿个群组,每天发送消息超过650亿。因为WhatsApp广泛应用于企业、政府机构和个人用户,所以攻击者也将其视为潜在的垃圾邮件发送方式之一。在大量的用户和消息规模下,出现垃圾邮件、谣言、虚假消息的概率也很大。
近日,Check Point研究人员发现WhatsApp存在漏洞,攻击者利用漏洞可以拦截和修改群组和私聊消息。漏洞会导致三种可能的攻击形式:
· 在群组聊天中修改发送者身份,伪造回复消息来模仿另一个群组人员,即使发送者不是群组成员;
· 攻击者能以其他人的口吻发送消息以达到修改聊天的目的。这样,就可以模仿他人或完成欺骗交易。
· 可以修改群组中的特定成员,在群聊中发送私聊信息,当接收者回复给消息时,整个群成员都可以看到回复的内容。
攻击实例:
攻击详解
研究人员在攻击模拟中使用了Burp Suit Extension。
攻击1:在群组聊天中修改发送者身份,即使发送者不是群组成员
在这种攻击中,可以伪造回复消息来模仿另一个群组人员,即使该群组成员并不存在。
为模仿群组中的人,攻击者需要抓取这样的加密流量:
图1 加密的WhatsApp通信
一旦获取流量后,就可以发送给扩展,扩展会解密流量:
图2 使用Extension解密的WhatsApp消息
使用extension时应注意以下参数:
· Conversation,发送的真实内容;
· participant,消息的真实发送者;
· fromMe,该参数表明是否是我发送的数据;
· remoteJid,表明数据发送的目的群组;
· id,数据的id,手机的数据库中也会保存系统的id。
了解了这些参数之后就可以伪造会话消息了。
图3 伪造的Reply消息
因为数据库中已经存在该id了,所以参数id也要进行修改。
为了让每个人都看到伪造的信息,攻击者需要回复他伪造的消息,引用并修改原始消息(将原始消息修改为其他),然后发送给群里的其他人。
如下图所示,研究人员创建了一个没有消息记录的新群组,然后使用上面的方法创建了假的回复:
图4 原始会话
参数participant可以是文本或不在群中的某人的手机号,这会让群人员认为这真的是该成员发送的消息。比如:
图5 使用调试工具修改消息内容
修改后的结果:
图6 回复来自群外人员的消息
攻击2:以发送者的口吻修改回复
攻击者能以其他人的口吻发送消息以达到修改聊天的目的。
为了伪造消息,必须修改消息的fromMe参数,表示在个人会话中发送消息。
从web端发送的消息在发送到Burp suite之前对其进行分析。可以在aesCbcEncrypt函数上设置一个断点,从a参数出获取获取。
图7 OutGoing消息修改
然后复制数据到Burp扩展中,选择outgoing direction,然后解密数据:
图8 解密Outgoing Message
在将其改为false,然后加密后,得到下面的结果:
图9 Outgoing Message加密
然后要修改浏览器的a参数,结果是含有内容的推送通知。这样甚至可以欺骗整个会话。
图10 发送消息给自己
如果是其他人的话,整个会话应该是这样的:
图11 发送消息给自己,别人看到的结果
攻击3:在群聊中发送私聊消息,但接收者回复时,整个群都可以看到回复内容
在这种攻击下,可以修改群组中的特定成员,在群聊中发送私聊信息,当接收者回复给消息时,整个群成员都可以看到回复的内容。
研究人员通过逆向安卓APP发现了攻击向量。在该实例中,研究人员发现如果攻击者在群中修改了一个消息,那么就会在数据库/data/data/com.whatsapp/databases/msgstore.db中看到该消息。
图12 在群聊中发送私聊消息保存在/data/data/com.whatsapp/databases/msgstore.db数据库中
可以使用sqlite3客户端使用下面的命令打开会话:
可以看到下面的数据:
图13 修改后的数据库
为了在群中发送消息,但限制消息只能某个特定群成员才能看到,因此要设定remote_resource参数。
这里的使用的方法就是将key_from_me参数从0修改为1。
完成这些动作后,运行下面的命令,更新key_from_me和数据:
攻击者需要重启WhatsApp客户端来强制引用发送新消息。之后的结果就是:
只有特定的受害者接收到了消息。
如果受害者写消息回应(writes something as a response),那么群组内的所有人都可以看到;但如果受害者直接回复(reply to)消息的话,只有他自己可以看到回复的内容,但其他人就可以看到原始消息。
更多技术细节参考https://research.checkpoint.com/fakesapp-a-vulnerability-in-whatsapp/
如何继续防护?
因为目前还没有安全产品能够保护用户防止此类攻击,那么唯一的办法就是留心虚假消息、阴谋论、垃圾邮件等。
如果听起来太好的事情,大概率就不是真的。同样,很不好的事情,也大概率不是真的。
假消息传播的更快。看似来自不同源的相同消息,并不意味着是真的。
验证真相。在社交媒体上交叉验证来验证消息的真实性。最好不要从社交媒体网站获取信息。
POC视频
https://www.youtube.com/embed/rtSFaHPA0C4