Protobuf有多安全,可以获取一些数据吗?

7
  1. 如果没有任何加密,收件人有序列化的Protobuf文件但没有生成的Protobuf类(他们没有访问定义其结构的.proto文件),是否可能从二进制文件中获取Protobuf文件中的任何数据?

  2. 如果他们可以访问部分.proto文件(例如,仅文件中一个相关的),他们是否可以从整个文件中得到该数据的一部分,同时跳过其他未知部分?

2个回答

6
  1. 是的,完全可以;protoc工具可以帮助实现这一点(请参见:--decode_raw),https://protogen.marcgravell.com/decode也可以。因此,不应将其视为“安全”。
  2. 是的,完全可以-这是协议中内置的关键部分,允许消息可扩展,以便它们可以解码它们理解的位并忽略或仅存储(用于往返或“扩展”字段)它们不理解的位。

protobuf不是安全设备;对于拥有正确工具的人来说,它与xml或json一样可读,稍微有点问题的是可能不确定如何解释某些值;但是:您可以推断、猜测和反向工程。


你如何建议保护协议缓冲区消息? - user1743524
@user1743524 在传输过程中?TLS;gRPC通常会为您完成此操作。在存储方面:与任何其他文件一样,这意味着它将取决于您要保护什么。这可能只是文件系统权限,也可能是完整的证书加密,或者介于两者之间的任何内容。 - Marc Gravell

0

好的,我找到了这个页面https://developers.google.com/protocol-buffers/docs/encoding

消息丢弃所有名称,只是一对键号和值。生成的类可能会提供一些保护措施,以安全地读取这些数据,并且无法读取未知数据。(当然,因为生成的类是从已知结构的.proto文件生成的)

但如果我是攻击者,我可以引用该编码页面并尝试找出二进制文件中哪个区域对应于哪个数据。例如,在更改一些数据后,可变长度整数可能很容易被发现。然后继续编写自己的.proto文件来攻击这些未知数据,甚至是一个可以选择性地读取二进制文件部分的自定义二进制读取器。


1
不需要“自定义”二进制读取器 - 许多库(包括Google的库)都包含流读取器,它们理解字段头等内容,可以完全实现此功能。 - Marc Gravell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接