Java - 端口侦听程序的漏洞有哪些?

时间:2012-03-05 08:01:11

标签: java security networking tcp ports

我最近在Java中创建了一个相当简单的IRC客户端和服务器,但为了使其完全正常运行,我不得不向前移植。在我看来,开放端口可能存在一些安全问题,所以我做了一些研究。无处不在,我发现有人说'最大的漏洞就是听端口的程序'。

所以我的问题是:

  1. 在侦听端口并将传入数据写入字符串的Java程序中究竟可以利用什么?

  2. 作为该软件的开发者,我该如何防止这些漏洞?

4 个答案:

答案 0 :(得分:4)

使用Java打开端口,读取传入的字节并将它们存储在字符串中是安全的。只是准备好获取非法或“恶意”内容。简单的例子:应用程序使用接收的字节进行数据库查询,有人发送“sql注入代码”......

编程语言存在更多风险,可能存在缓冲区溢出。然后一个可以使用连接来注入和执行机器代码 - 如果监听应用程序容易受到攻击。

预防非常简单:验证输入并删除每条非法消息。添加一些发送非法内容的测试,并检查这些输入是否被正确拒绝。

答案 1 :(得分:4)

攻击者可以通过多种方式利用已知的开放端口,包括利用TCP实施中的漏洞,通过欺骗服务器执行昂贵的计算来导致拒绝服务(请记住最近的2.2250738585072012e-308 bug?),导致缓冲区溢出导致程序崩溃或甚至使其执行任意代码。

平台安全性

在某些操作系统上,TCP实施中存在一些漏洞,其中攻击者依赖于了解目标主机上的开放端口,例如: SYN flood attack。这些在所有主要操作系统中都得到了很大程度的缓解,但是负责主机安全的人应该不断关注平台中最近的安全问题。

服务器安全性

除了操作系统和TCP实施中的漏洞之外,还存在与服务器本身相关的潜在问题。如果您的服务器可以执行与安全相关的操作以响应其收到的请求,则攻击者可以利用它。这些包括读写文件,分配大块内存,向数据库发送查询等。

从开发人员的角度来看

确保您的服务器可以使用低权限和低资源运行,它验证从用户收到的所有输入并转义它发送给其他系统的所有输出,并且它不执行任何不必要的安全相关操作是第一步使它安全。如果确实需要执行与安全相关的操作,则可能需要将它们封装在单独的进程中并使用IPC。对您的程序进行广泛测试非常困难,但对其安全性也很重要。

从管理角度

关键点是确保操作系统中最近的安全更新已经应用,您的服务器实际上确实以尽可能低的权限运行,并且无法耗尽关键系统资源(例如CPU,RAM,打开文件描述符,打开TCP连接等)。

答案 2 :(得分:3)

漏洞是未经授权使用您的程序。理论上"坏人"可能会执行您的电汇协议的逆向工程,了解您的程序如何工作并使其成为“坏”"的东西。例如,如果您的程序能够在接收删除命令时删除磁盘上的文件,那么坏人可能会发送带有参数/的命令,因此程序将从磁盘中删除所有文件。

你可以想象自己的其他场景。

这就是系统管理员不喜欢为任何服务器打开端口的原因,而只是为了众所周知的服务器。

为防止出现这种情况,您应该很好地设计协议,使用身份验证机制和(可能)有线协议加密。

答案 3 :(得分:0)

另一批攻击是DOS攻击。 这不是特定于java,但java IMO不保护您免受: - 攻击者可以发送巨大/无限输入来使您的应用程序崩溃。 - 攻击者可以缓慢地输入输入来消耗你的资源。