我正在构建一个服务器应用程序,它将通过防火墙发起 TCP 连接来维持与其他应用程序的连接,该防火墙仅对应用程序将连接到的相关 IP 端口的出站流量开放。
有人接管了我们连接的机器,从而能够通过我们建立的出站连接向后利用我们的应用程序的风险是什么。
连接上使用的协议不难弄清楚,但它基于周期性的心跳(间隔 30 秒)。如果错过了两个连续的心跳,发起者(我们)将终止连接并重新连接。
我们应用程序的源代码或二进制文件对我们连接的组织不可用。
我正在构建一个服务器应用程序,它将通过防火墙发起 TCP 连接来维持与其他应用程序的连接,该防火墙仅对应用程序将连接到的相关 IP 端口的出站流量开放。
有人接管了我们连接的机器,从而能够通过我们建立的出站连接向后利用我们的应用程序的风险是什么。
连接上使用的协议不难弄清楚,但它基于周期性的心跳(间隔 30 秒)。如果错过了两个连续的心跳,发起者(我们)将终止连接并重新连接。
我们应用程序的源代码或二进制文件对我们连接的组织不可用。
如果攻击者有权访问您连接的机器或网络,则攻击者很容易嗅探到您服务器的网络流量。这可能允许他对您的协议进行逆向工程,然后尝试将恶意数据注入返回到您服务器的数据中,或者完全替换客户端应用程序。
由于听起来您无法信任客户端应用程序,因此发起连接的人无关紧要,一旦建立连接,您就有了双向通信通道。在这种情况下,最好的办法是验证来自客户端的所有数据。
如果您可以信任客户端,但不能信任网络,那么为您的网络协议添加一些加密会有所帮助。
您的场景是一个相当普遍的场景,将网络与互联网完全隔离真的很少见。也就是说,请考虑以下因素:
如果您自己的应用程序服务器不监听任何传入数据,那么风险很小
除了向您说出您的协议之外,他们无法对您做任何事情。风险恰恰是任何可以做的事情,从他们的一端到你的一端,使用你的协议,都会被完成。
注意我并不是说他们必须向你讲一个格式良好的协议版本。如果您的系统使用 fgets() 将传入消息读入静态缓冲区,那么“缓冲区溢出”是使用您的协议可以对您执行的操作的一部分。