如果发起者受到损害/故意想要作弊,TLS 是否可以防止重放攻击

gob*_*ice 2 security ssl networking tcp

背景:我正在开发一个移动应用程序(在线聊天),它使用与后端服务器的持久 TCP 连接。在之前的版本中,我们使用了众所周知的加密方案来保护有效负载并使用共享密钥进行签名。这提供了足够的保护,防止数据篡改和逆向工程。但流量仍然容易受到重放攻击:有人可以捕获网络流量并重放它,服务器会接受请求,因为它不知道它是真实的还是重放的。为了解决这个问题,我们引入了时间戳和随机数,它们提供了针对重放攻击的保护。

一切都很好。后来决定使用TLS(传输层安全)来保护客户端和服务器之间的所有通信。实施了 TLS 并提供针对中间人攻击的额外保护层,我们将服务器的公共证书固定在客户端上。

这让我想到一个问题:既然 TLS 已经提供了针对这些攻击的保护,是否仍然有必要使用自定义加密并防范重放攻击?在我的研究中,我发现 TLS 在传输过程中提供保护,即防止中间人,但如果发起者本身想要欺骗系统并修改有效负载或重放流量怎么办?TLS 是否可以防止故意作弊者试图以某种方式拦截其操作系统网络层的流量?我的理解是 TLS 提供端到端加密,但我怀疑如果发起者愿意,TLS 流量实际上可以被重放。

我还知道基于内存的攻击,攻击者会修改设备上的内存,从而修改有效负载(甚至可能是记录和重放)。但即使我们的自定义加密+重放防护也无法防范这些攻击。

来自: https: //www.owasp.org/index.php/Transport_Layer_Protection_Cheat_Sheet#Benefits

“TLS 还提供了两个通常被忽视的额外好处:完整性保证和重放预防。TLS 通信流包含内置控件,以防止篡改加密数据的任何部分。此外,还内置控件以防止加密数据被篡改。捕获的 TLS 数据流,以免稍后重放。

需要说明的是,TLS在传输过程中为数据提供了上述保证。TLS 不会为静态数据提供任何这些安全优势。因此,必须添加适当的安全控制来保护应用程序或数据存储中静态的数据。”

Ste*_*ich 6

TLS 仅保护传输,因此它仅提供针对修改或重放加密数据的保护。它不能防止在加密之前或解密之后对数据进行任何类型的修改或重放。通过 TLS 连接再次发送相同的数据实际上是完全有效的。

但是,用于检测重放的随机数和时间戳也不能防止修改或重放。发送方仍然可以使用相同的数据,但使用新的随机数和新的时间戳来“保护”这些数据。只要攻击者能够修改客户端代码,就不可能防范这种基于客户端的攻击,如果客户端在攻击者拥有的系统上运行,通常就是这种情况,就像智能​​手机游戏一样,智能手机的所有者喜欢作弊。