我最近用Java创建了一个相当简单的IRC客户端和服务器,但是为了使它完全正常运行,我必须向前移植.在我看来,开放端口可能存在一些安全问题,所以我做了一些研究.无处不在,我发现有人说’最大的漏洞就是听端口的程序’.
所以我的问题是:
>在侦听端口并将传入数据写入字符串的Java程序中究竟可以利用什么?
>作为软件的开发者,我该如何防止这些漏洞?
解决方法:
攻击者可以通过多种方式利用已知的开放端口,包括利用TCP实现中的漏洞,通过欺骗服务器执行昂贵的计算(请记住最近的2.2250738585072012e-308 bug?)导致拒绝服务,导致缓冲区溢出导致程序崩溃或者甚至使它执行任意代码.
平台安全
在某些操作系统上TCP实施中存在一些漏洞,其中攻击者依赖于知道目标主机上的开放端口,例如, SYN flood attack.所有主要操作系统都在很大程度上缓解了这些问题,但是负责主机安全的人应该不断关注平台中最近的安全问题.
服务器安全
除了OS和TCP实现中的漏洞之外,还存在与服务器本身相关的潜在问题.如果您的服务器可以执行与安全相关的操作以响应其收到的请求,则攻击者可以利用它.这些包括读写文件,分配大块内存,向数据库发送查询等.
从开发人员的角度
确保您的服务器可以使用低权限和低资源运行,它验证从用户收到的所有输入并转义它发送给其他系统的所有输出,并且它不执行任何不必要的安全相关操作是实现它的第一步安全.如果确实需要执行与安全相关的操作,则可能需要将它们封装在单独的进程中并使用IPC.对程序进行广泛测试非常困难,但对其安全性也很重要.
从管理角度来看
关键点是确保已应用操作系统中的最新安全更新,您的服务器实际上以尽可能低的权限运行,并且无法耗尽关键系统资源(例如CPU,RAM,打开文件描述符,打开TCP连接等) .