【问题标题】:How can I defense from attackers who send junk data packet?如何防御发送垃圾数​​据包的攻击者?
【发布时间】:2013-09-23 09:42:21
【问题描述】:

我写了一个 TCP 套接字程序,并定义了一个文本协议格式,如:“长度|内容”,

为简单起见,“长度”始终为 1 字节长,它定义了“内容”的字节数

我的问题是:

当攻击者发送像“1|a51”这样的数据包时,它会停留在tcp的接收缓冲区中 程序会解析错误,下一个数据包会像“5|1XXXX”一样开始, 那么剩下的数据包留在缓冲区就会全部解析错误,

如何解决这个问题?

【问题讨论】:

    标签: sockets networking tcp packet


    【解决方案1】:

    如果你得到垃圾,只需关闭连接。弄清楚它们的意思不是你的问题,如果有的话。

    【讨论】:

    • 例如,攻击A发送“1|a51”,然后用户B发送正常数据包“4|haha”,现在缓冲区包含“1|a514|haha”,但数据包A只是发送搞砸了,程序会这样接收:第一个数据包:“1|a”,第二个数据包:“5|14|ha”,14|ha成为内容...
    • A 和 B 不能在同一个连接上发送数据,除非您的威胁模型比垃圾包更广泛,在这种情况下,您应该在问题中这么说。您可以使用 SSL 进行防御。
    【解决方案2】:

    您还需要提供校验和,而不仅仅是长度|内容,如果校验和不正确,您应该断开连接以避免部分接收。 这是 tcp 协议中的一个典型问题,因为 tcp 是基于流的。但是就像http一样,它是tcp协议的一种应用,它有一个请求/响应的结构,以确保连接的每一端都知道数据何时传输完毕。

    但是你的场景有点棘手,因为黑客只能影响他自己的连接。虽然它不能更改来自其他连接的数据,但前提是他可以控制您的应用程序和用户之间的路由/切换器。

    【讨论】:

    • 校验和正确的垃圾呢?这只是转移问题,并没有解决问题。
    • 不,校验和在这种情况下也很有用,它可以帮助您检测部分接收。虽然 eliriclzj 提到的是,你甚至无法检测它是否是垃圾。并在回复中提到的场景 eliriclzj 中。 1. 攻击者 A 不能与用户 B 使用相同的连接,只有当他们来自同一个客户端时。 2.如果他们使用相同的客户端,校验和会帮助你。
    • 校验和并不能保护您免受具有正确校验和的垃圾的影响。它可能有很多优点,但不是问题的答案。
    猜你喜欢
    • 2015-03-28
    • 1970-01-01
    • 2014-06-27
    • 1970-01-01
    • 2011-10-22
    • 2015-10-02
    • 2019-05-02
    • 2011-01-02
    • 1970-01-01
    相关资源
    最近更新 更多