我正在尝试将桌面应用程序链接到我的项目的移动版本。假设移动应用程序是安全的,桌面应用程序只需将会话链接到移动设备以方便使用。
在我的研究中,我遇到了QRLjacking exploit。这是一个社交工程漏洞,与让用户泄露密码没有什么不同。
有趣的是,Signal应用程序似乎不容易受到QRLjacking攻击,尽管它们也通过QR代码将桌面链接到移动设备。
我想知道信号应用的秘诀是什么。幸运的是,代码在这里:https://github.com/signalapp/Signal-Desktop
根据我的分析,我认为这是他们所做的:
- 用户注册移动设备。设备发送签名的预密钥
到信号服务器
- 用户可以使用端到端加密协议与其他Signal用户聊天,但对我来说更有趣的是它们在链接到桌面时如何防止QR漏洞。
- 用户安装桌面应用。首先要注意的是它是一个使用电子打包的JavaScript应用程序。这使得在社会工程技术中难以使用。安装包可以签名并验证为可信任。
- 安装后,桌面应用会生成预密钥并将其发送到服务器。
- 桌面使用自己的公钥来检查服务器是否链接到移动设备。如果没有,请继续执行步骤6.
- 使用UUID密钥将公钥发送到服务器。服务器存储它。 UUID用于QR码。
- 用户抬起移动设备并使用信号应用程序扫描QR码。
- 移动应用使用二维码下载桌面应用的公钥。
- 移动应用程序向桌面应用程序发送加密的确认消息,桌面应用程序使用该应用程序验证其私钥。
- 桌面应用程序应用程序要求用户命名此桌面应用程序,通常这是运行它的主机的名称。桌面应用程序将此消息发送到移动设备(当然是加密的)。
- 在移动设备上,链接设备现在显示出来。用户可以随时删除链接设备,该链接设备立即为桌面所知。
- 我认为服务器根本不用来保留消息。我认为桌面与移动点播同步。
醇>
总之,Signal以下列方式缓解了QRLjacking漏洞利用:
- 该应用不是基于浏览器的,而是安装的。可以使用证书对安装包进行签名和验证。
- 桌面应用程序还可以在本地安全地存储密钥,而不是在服务器上。这使得很难进行社交工程攻击,因为这需要实际接管桌面应用程序运行的机器。
我的分析是否正确?