管理UDP套接字的安全性

时间:2012-02-03 10:16:35

标签: network-programming

我正在开发我的第一款多人RTS游戏,我自然会使用UDP套接字接收/发送数据。

我一直想弄清楚的一件事是如何在DoS攻击中保护这些端口免受虚假数据包的泛滥。通常防火墙可以防止洪水攻击,但我需要允许我正在使用的端口上的数据包,并且必须依靠我自己的软件来拒绝伪造数据包。什么会阻止人们嗅探我的数据包,观察我正在使用的任何身份验证或特殊结构,并用类似的数据包向我发送垃圾邮件?可以轻松更改源地址,使检测和禁止违规者几乎不可能。是否有任何广泛接受的方法可以防止这类攻击?

我知道UDP和TCP之间的差异,所以请不要把它变成关于那个的讲座。

=====================编辑=========================

我应该补充一点,我还试图找出如何通过发送我相信来自我游戏的数据包来防止某人'黑客攻击'游戏并作弊。序列/同步号码或ID很容易被伪造。我可以使用加密,但我担心这会减慢我服务器响应的速度,这不会为DoS提供保护。

我知道这些是使用UDP套接字的每个程序员必须遇到的基本问题,但在我的生活中,我找不到任何有关解决方法的相关文档!

任何方向都会受到赞赏!

2 个答案:

答案 0 :(得分:4)

最重要的是:永远不要相信客户!始终跟踪服务器端的所有内容。如果数据包到达似乎是假的(就像一个单位每秒移动Y个单位,而它应该只能每秒移动X个单位),那么只需丢弃数据包。

此外,如果每秒的数据包数量增长到很大,也会开始丢弃数据包。

并且不要将UDP数据包用于“不重要”的事情......游戏中的聊天和类似的事情可以通过正常的TCP流。

答案 1 :(得分:4)

您需要的技术不会特定于UDP:您正在寻找一般的消息身份验证来处理欺骗,速率限制来处理DoS,以及服务器端状态启发式(“这个数据包有意义吗?”)来处理客户端黑客。

为了有效地处理DoS,您需要检测层。首先删除无效的源地址,甚至没有查看内容。将会话ID放在每个数据包的开头,其ID未分配或与正确的源不匹配。接下来,跟踪每个会话的到达率。开始从进入太快的地址开始删除。除了能够实时嗅探合法数据包的人之外,这些技术将阻止所有事情。

但基于实时嗅探的DoS攻击非常罕见,攻击速度将受限于单一源网络的速度。阻止数据包嗅探的唯一方法是使用加密和校验和,这将是很多工作。由于这是你的“第一个多人RTS”,我建议做一切都不加密。

如果您决定使用加密,AES-128相对快速且非常安全。 Brian Gladman的参考Rijndael实现是一个很好的起点,如果你真的想要优化,或者有很多AES库。可以使用简单的CRC-16对明文数据进行校验和校验。但这对你可能的攻击媒介来说可能有点过分了。