背景:我正在开发一个移动应用程序(在线聊天),它使用指向后端服务器的持久TCP连接。在上一个版本中,我们使用了一个众所周知的加密方案来保护有效载荷,并使用共享密钥进行签名。这为防止数据篡改和逆向工程提供了足够的保护。但是流量仍然容易受到重放攻击:有人可以捕获网络流量并重放它,而服务器会接受请求,因为它不知道它是真实的还是重放的。为了对抗这种情况,引入了时间戳和非and,以防止重播攻击。
一切都很好。后来,决定使用TLS (传输层安全)保护客户端和服务器之间的所有通信。实现了TLS,为了提供额外的保护,防止中间人攻击,我们将服务器的公共证书固定在客户端上。
这就引出了一个问题:是否仍有必要使用自定义加密和防范重放攻击,因为TLS已经提供了针对这些的保护?在我的研究中,我发现TLS在传输过程中提供了保护,即防止中间的man,但是如果发端者自己想欺骗系统并修改有效负载或重播流量,怎么办?TLS是否能防止蓄意欺骗者以某种方式拦截其操作系统网络层的流量?我的理解是TLS提供端到端加密,但我怀疑如果发起人愿意,TLS流量实际上可以被重放。
我还知道基于内存的攻击,攻击者将修改设备上的内存,从而修改有效负载(甚至可能是记录和重放)。但是即使是我们的自定义加密+重放保护也无法防止这些攻击。
"TLS还提供了两个通常被忽略的额外好处:完整性保证和重播预防。TLS通信流包含内置控制,以防止篡改加密数据的任何部分。此外,还内置控件,以防止捕获的TLS数据流在稍后时间被重放。“
应当指出,TLS为传输期间的数据提供了上述保证。TLS不为处于静止状态的数据提供任何这些安全好处。因此,必须添加适当的安全控制,以便在应用程序内或数据存储区中静止时保护数据。“
发布于 2017-02-17 07:04:12
TLS只保护传输,因此它只提供对加密数据的修改或重放的保护。在加密之前或解密后,它不会保护数据免遭任何类型的修改或重放。通过TLS连接再次发送相同的数据实际上是完全有效的。
但是,用于检测重放的现在和时间戳也不能防止修改或重放。发送者仍然可以使用相同的数据,但是用新的现在和新的时间戳来“保护”这些数据。只要攻击者能够修改客户端代码,就不可能防范这种基于客户端的攻击--通常情况下,客户端运行在攻击者拥有的系统上,比如智能手机所有者喜欢作弊的智能手机游戏。
https://stackoverflow.com/questions/42288778
复制相似问题