1

我正在构建一个服务器应用程序,它将通过防火墙发起 TCP 连接来维持与其他应用程序的连接,该防火墙仅对应用程序将连接到的相关 IP 端口的出站流量开放。

有人接管了我们连接的机器,从而能够通过我们建立的出站连接向后利用我们的应用程序的风险是什么。

连接上使用的协议不难弄清楚,但它基于周期性的心跳(间隔 30 秒)。如果错过了两个连续的心跳,发起者(我们)将终止连接并重新连接。

我们应用程序的源代码或二进制文件对我们连接的组织不可用。

4

4 回答 4

3

如果攻击者有权访问您连接的机器或网络,则攻击者很容易嗅探到您服务器的网络流量。这可能允许他对您的协议进行逆向工程,然后尝试将恶意数据注入返回到您服务器的数据中,或者完全替换客户端应用程序。

由于听起来您无法信任客户端应用程序,因此发起连接的人无关紧要,一旦建立连接,您就有了双向通信通道。在这种情况下,最好的办法是验证来自客户端的所有数据。

如果您可以信任客户端,但不能信任网络,那么为您的网络协议添加一些加密会有所帮助。

于 2009-03-26T18:55:54.737 回答
0

您的场景是一个相当普遍的场景,将网络与互联网完全隔离真的很少见。也就是说,请考虑以下因素:

  • 第三方可以根据协议支持的内容发送信息。这几乎是一场失败的战斗,因为没有什么你可以真正依赖的东西可以完全阻止他们。见下文。
  • 如果您想确保信息来自正确的第三方,那么您应该需要签名信息。一些更高级别的协议可以为您做到这一点。您会在实现中暴露于漏洞,但如果协议支持它,您自己的滚动将几乎不那么容易受到攻击。
  • 如果要确保信息是私密的,则需要加密。一些更高级别的协议可以为您做到这一点。与上述相同的注释适用。
  • 您会暴露于所使用的较低级别协议中的任何漏洞(隐式或显式)。自己动手做所有事情既不可能也不切实际,如果你这样做了,你可能会引入漏洞。当然,请确保拥有最新的补丁。
于 2009-03-26T19:43:02.113 回答
0

如果您自己的应用程序服务器不监听任何传入数据,那么风险很小

于 2009-03-26T18:51:20.833 回答
0

除了向您说出您的协议之外,他们无法对您做任何事情。风险恰恰是任何可以做的事情,从他们的一端到你的一端,使用你的协议,都会被完成。

注意我并不是说他们必须向你讲一个格式良好的协议版本。如果您的系统使用 fgets() 将传入消息读入静态缓冲区,那么“缓冲区溢出”是使用您的协议可以对您执行的操作的一部分。

于 2009-03-26T18:51:41.440 回答