air*_*req 38 networking security tcp tcpip udp
这是一直让我困惑的事情。为什么在您的计算机上打开端口是不好的?假设您的计算机上没有病毒,也没有其他侦听端口的程序可能会实际执行某些操作,为什么端口打开很重要?如果某个恶意的人开始向端口发送数据包,但没有任何东西可以接收数据并对其进行处理,为什么这很重要?计算机不只是任意执行它接收到的任何数据。我知道用数据包淹没计算机可能会导致它崩溃,因为它无法处理大量数据,但我只考虑实际更改计算机上文件的安全问题。
更新
感谢您到目前为止的答复。我现在明白了,一个端口被打开实际上意味着有一个程序可以被利用来监听那个端口。但是为什么编写不能被利用的软件就这么难呢?要对计算机造成任何真正的伤害,程序不必允许上传一个或多个文件,然后需要执行其中一个文件。似乎很难允许意外发生。
MDM*_*rra 38
如果某个端口未侦听其上的连接,则该端口不会打开。
将所有端口向任何地方开放是不好的形式的原因是它会将侦听这些端口的服务暴露给漏洞利用。这就是防火墙存在的原因,以限制允许连接到某些端口的内容,以减少服务暴露的表面积。
编辑
要解决您关于为什么人们不能只编写不可利用的软件的问题:
这对于简单的程序来说相当容易,但许多需要套接字的程序很复杂。因此,它们有许多组件,其中许多组件很可能甚至不是由开发人员编写的(包括库)。当您可以使用自己的加固方法(例如防火墙)时,您不能依赖其他人来确保您的网络安全。
正如您所指出的,任意/远程代码执行是一个巨大的风险。不幸的是,缓冲区溢出和其他允许它的安全漏洞很常见。看看任何 Microsoft 安全更新,我敢打赌它会修补远程代码执行或特权提升,而 MS 是一家拥有数百名开发人员和数十亿美元的大公司。
Ric*_*ner 10
关于你写的更新:
感谢您到目前为止的答复。我现在明白了,一个端口被打开实际上意味着有一个程序可以被利用来监听那个端口。但是为什么编写不能被利用的软件就这么难呢?要对计算机造成任何真正的伤害,程序不必允许上传一个或多个文件,然后需要执行其中一个文件。似乎很难允许意外发生。
这是非常到无法被利用写软件很难!
我读过《构建安全软件》一书,其中讨论的一件事是利用堆栈溢出。里面有两个非常可怕的事实:
因此,如果黑客可以找到一个程序,它 (a) 有一个堆栈溢出错误,(b) 可通过网络利用,并且 (c) 缓冲区中有几个 100 字节的空闲空间,那么您的计算机就被入侵了。幸运的是,关于堆栈溢出错误的知识现在是相当普遍的知识,但它们仍然会出现。5 年前和更长的时间,这是一个更常见的问题。
回到您最初的问题,您应该避免开放端口,以避免因程序中的可利用错误而发生任何事故。您现在有第二个原因:黑客将使用的远程 shell 是另一个开放端口。如果您的防火墙阻止了除您明确允许之外的所有内容,您也会阻止该远程 shell(尽管黑客仍然可以对您的计算机做其他令人讨厌的事情,所以不要自满!)
如果你有一个开放的端口,只要处理传入内容的程序没有可用的漏洞,你就是安全的。但是漏洞利用总是会被发现,很高兴知道有很多端口扫描在网络上四处移动,寻找目标。
关闭的端口仍然响应akser,因此可能的攻击者知道继续检查其他端口。再说一次,这就是互联网的具体工作方式。虽然隐形端口试图不向潜在攻击者提供任何信息,但理论上它们违反了规范。
从安全的角度来看,任何开放的端口都是一个巨大的漏洞,因为代码被用来处理外部数据。防火墙(或 NAT 路由器)的作用是确保没有传入流量到达您的计算机,即使系统有一些开放端口。这样,他们有效地关闭了所有端口。