有件事一直让我很困惑。为什么开放计算机上的端口是件坏事?假设您的计算机上没有病毒,也没有其他程序监听端口,端口开放又有什么关系呢?如果某个恶意的人开始向端口发送数据包,但没有任何东西可以接收数据并对其进行处理,那又有什么关系呢?计算机不会随意执行它收到的任何数据。我知道用数据包淹没计算机可能会导致计算机崩溃,因为它无法处理大量数据,但我只考虑实际更改计算机上文件的安全问题。
更新
感谢到目前为止的回复。我现在明白了,端口打开实际上意味着有一个可以利用的程序正在监听该端口。但为什么编写无法利用的软件如此困难?要对计算机造成任何真正的伤害,程序难道不需要允许上传一个或多个文件,然后需要执行其中一个文件吗?似乎意外允许这样做非常困难。
答案1
如果某个端口没有监听连接,则该端口未打开。
将所有端口都开放到任何地方是错误的,因为这样会使监听这些端口的服务暴露在漏洞之下。这就是防火墙存在的原因,它限制允许连接到某些端口的内容,以减少服务暴露的表面积。
编辑
为了回答你关于为什么人们不能编写不可利用的软件的问题:
对于简单的程序来说,这相当容易,但许多需要套接字的程序都很复杂。因此,它们有许多组件,其中许多组件很可能甚至不是由开发人员编写的(包括库)。当您可以使用自己的强化方法(例如防火墙)时,您不能依赖其他人来保证您的网络安全。
正如您所指出的,任意/远程代码执行是一个巨大的风险。不幸的是,缓冲区溢出和其他允许这种情况发生的安全漏洞很常见。看看微软的任何安全更新,我敢打赌它都会修补远程代码执行或特权提升,而微软是一家拥有数百名开发人员和数十亿美元资产的大型公司。
答案2
关于您写的更新:
感谢到目前为止的回复。我现在明白了,端口打开实际上意味着有一个可以利用的程序正在监听该端口。但为什么编写无法利用的软件如此困难?要对计算机造成任何真正的伤害,程序难道不需要允许上传一个或多个文件,然后需要执行其中一个文件吗?似乎意外允许这样做非常困难。
它是非常编写无法被利用的软件非常困难!
我读过这本书构建安全软件其中讨论的一件事就是利用堆栈溢出。里面有两个非常可怕的事实:
- 程序中很容易出现可利用的堆栈溢出错误,尤其是当程序是用 C 编写时。在 C 编程语言中,许多函数默认是不安全的,程序员要么需要知道如何避免存在漏洞的函数,要么必须采取特殊的措施以确保安全。
- 黑客需要利用的漏洞很短 -非常简短。它只有不到半页的汇编语言,相当于 100 个左右(猜测)字节的机器代码。此漏洞代码足以让黑客 shell(命令提示符)访问您的机器。无需上传和执行大文件 - 只需插入合法数据中间的一小段代码即可。
因此,如果黑客能够找到一个程序,该程序 (a) 具有堆栈溢出错误,并且 (b) 可通过网络进行利用,并且 (c) 缓冲区中有几百个多余的字节,那么您的计算机就被攻陷了。幸运的是,关于堆栈溢出错误的知识现在已是相当普遍的知识,但它们仍然会出现。5 年前甚至更久以前,这是一个更常见的问题。
回到你最初的问题,你应该避免开放端口,以避免程序中存在可利用的错误而发生意外。现在你有了第二个原因:黑客随后会使用的远程 shell 是另一个开放端口。如果你的防火墙阻止了除你明确允许的之外的所有内容,你也会阻止该远程 shell(尽管黑客仍然可以对你的计算机进行其他恶意操作,所以不要自满!)
答案3
- 开放端口:当有人询问时,计算机会响应说有一个服务正在监听此端口。这意味着进入此端口的任何内容都将由该计算机上运行的程序(服务)处理。
- 关闭端口:当有人询问时,计算机会响应说没有服务正在监听该端口。询问者会知道有一台计算机正在响应该地址。
- 隐身端口:如果有人问,他们得不到任何答复。关键是隐藏地址上是否有计算机。不过,这可能不是很有效,因为约斯基评论中指出。
如果您有一个开放端口,只要处理传入内容的程序没有可用的漏洞,您就是安全的。但是漏洞随时都会被发现,很高兴知道网络上有很多端口扫描在寻找目标。
关闭的端口仍会响应请求,因此潜在攻击者知道继续检查其他端口。不过,这就是互联网的工作方式。虽然隐形端口试图不向潜在攻击者提供任何信息,但理论上它们违反了规范。
从安全角度来看,任何开放端口都是一个巨大的漏洞,因为代码被用来处理外部数据。防火墙(或 NAT 路由器)的作用是确保没有传入流量进入您的计算机,即使系统有一些开放端口。这样,它们实际上关闭了所有端口。
答案4
假设您的计算机上没有病毒,也没有其他程序正在监听某个端口,而这些程序实际上可能会执行某些操作。端口是否打开又有什么关系呢?如果某个恶意人员开始向某个端口发送数据包,但没有任何程序可以接收数据并利用这些数据执行某些操作,又有什么关系呢?
假设是一切失败的根源:)
宁可安全也不要后悔……makeuseof.com 上有您喜欢的精彩内容: