哈喽,我是老刘
前两天又看到有大厂查员工聊天记录的新闻了。
老刘做Flutter开发已经6年了,更早之前也从事过网络安全方面的开发工作。
所以,今天我们站在开发者的角度,假设你开发了一个聊天App,如何保证你的聊天记录不被截获?
我们以Android系统为例,看看如何能获取到某个App的聊天数据。
假设你开发了一款通信App,并且使用标准的HTTPS加密。
那么公司想要获取你的聊天记录,都需要满足哪些条件呢?
Android在这方面是比较割裂的,不同版本的系统难度不一样,总的来说系统版本越高越安全。
其实iOS在iOS 9之前的版本,安全性管理也不是很严格。
Android 7.0以前的系统
这个版本的系统是最不安全的,只需要满足两个条件,公司就能截获聊天的网络数据包。
1、连接公司的wifi
2、手机安装公司证书
Android 7.0以前的系统,对证书管理并不严格。
用户可以不需要 root 权限就能将证书安装到系统中,并且应用会信任这些用户安装的CA证书。
因此基于上面的两个条件,安装指定证书并且连接公司wifi。
公司就可以实施中间人攻击(MITM)。
可以在网络接入节点,截获并解密客户端和服务器之间的加密通信,从而能够查看和修改数据。
可能很多朋友觉得安装公司的CA证书这一点很难做到。
其实一点也不难,有很多看起来非常合理的非技术手段就能做到。
比如公司有一些内部工具App在手机端使用,然后以安全为理由只有安装公司的CA证书才能正常使用这些App。
这样证书不就装好了。
然后只要你连接了公司的网络,那么所有通信的数据就都暴露了。
谷歌也是注意到了这个问题,所以从7.0版本开始加强了CA证书的管理。
Android 7.0以上系统
从 Android 7.0(Nougat)开始,系统的安全性得到了加强,特别是对 HTTPS 流量的抓包变得更加困难。
主要原因是 Android 7.0 引入了名为“Network Security Configuration”的新安全功能,它默认只信任系统级别的 CA 证书,不再信任用户安装的 CA 证书,除非应用的 targetSdkVersion 小于 24。
通常来说,现在的App很少有targetSdkVersion 小于 24的了。
那么如果想要实现中间人攻击,有以下几种方法可以做到这一点:
- 使用 Xposed 的 JustTrustMe 模块:这个模块可以信任所有的证书,从而绕过 SSL 证书的验证。
- 基于root权限安装系统级证书
- 使用 VirtualXposed 和 TrustMeAlready:在没有 root 权限的情况下信任指定证书。
可以看到,想要在Android 7.0以上的系统实现中间人攻击,要么获取root权限,要么安装非官方的特殊软件。
这些操作都有比较高的技术门槛,而且公司很难有合理的理由要求员工去操作。
这也是为啥我们会看到有大厂要求查看员工的聊天记录了。
当然手机端监控虽然有一定的技术难度,但是桌面端那可真是非常容易的。
所以如果你用的是公司发给你的电脑,那我只能说,没啥好办法,别在上面装私人聊天软件。
即使是个人电脑,只要使用了公司的域账户,也没啥秘密可言,所以断了这个念想吧。
那么作为开发者,如何在我们自己开发的软件中防止中间人攻击呢?
防止中间人攻击的策略
下面简单罗列一些防止中间人攻击的手段。
- 前提是使用 HTTPS: 始终使用 HTTPS 来加密客户端和服务器之间的通信,确保数据传输过程中的安全性。
- 证书锁定(Certificate Pinning): 通过证书锁定,你可以在客户端应用中嵌入服务器证书的哈希值,并在建立安全连接时验证服务器提供的证书是否与预置的哈希值匹配。
- 公钥锁定(Public Key Pinning): 与证书锁定类似,但只锁定证书中的公钥。这样即使证书更新,公钥仍然保持不变,从而避免因证书更新导致的锁定问题。
- 私有加密算法:使用内部加密算法可以防止通过证书等手段的中间人攻击,但是要注意通过逆向工程破解加密算法。
另外在开发中还有一些需要注意的点
- 不要在url中暴露敏感信息:虽然HTTPS可以保证内容的加密,但是url是暴露在外的,所以不要把敏感信息放到url中。
- 注意本地数据的保密:这个也很好理解,前面说的都是传输过程的加密。但是一般来说App总是要存储本地数据的。我们也经常会把一些数据存储在本地文件里面。
这些存储的文件也要注意敏感信息的保密或者脱敏。
总结
前面我们介绍了打工人如何保护自己的聊天记录以及开发者如何防止中间人攻击。
但是回到文章开头的事件,技术手段获取不到的信息可以通过其它手段获取。
大多数的打工人是没有什么太好的反抗手段的。
祝大家都有一份理想的工作。
如果看到这里的同学有学习Flutter的兴趣,欢迎联系老刘,我们互相学习。
点击免费领老刘整理的《Flutter开发手册》,覆盖90%应用开发场景。
可以作为Flutter学习的知识地图。
覆盖90%开发场景的《Flutter开发手册》
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。