理论上 -是的,即使所有 TCP 和 UDP 端口都关闭并且您没有运行任何恶意软件,您的计算机仍然可能被黑客入侵。但是,如果所有端口都关闭,那么与 Web 服务器侦听可公开访问端口的系统相比,您的计算机被黑客入侵的几率要低得多。
举个例子,有些协议一开始就没有端口的概念,例如 ICMP、IPv4 或以太网。如果您的操作系统的网络堆栈有错误的 ICMP、IPv4 或以太网实现,那么理论上,此类错误可能被用作后门来获得对您计算机的部分或完全控制。请参阅Ping of Death错误,该错误使攻击者可以控制使用易受攻击的 ICMP 实现的任意计算机,即使没有打开 UDP 或 TCP 端口也是如此。
总的来说,如果一台计算机可以被黑客入侵,那么它总是:
- 一个实现错误(例如,软件工程师在他的代码中犯了一个错误。请参阅 OpenSSL Heartbleed 漏洞或 Ping of Death 漏洞);
- 设计错误(例如,设计协议的人对身份验证方面考虑得不够仔细;请参阅 SSLv3 POODLE 攻击或 WEP 协议漏洞);或者
- 管理员用于配置主机的指令中的错误(例如,使用弱密码;或在不受信任的区域运行某些不强制执行身份验证的软件;或只是 [un] 故意运行旧的和有缺陷的软件)
在评估安全性时,我总是建议其他软件工程师从以下方面考虑
在您的代码将这个 IP 数据包作为恶意丢弃之前,系统攻击者可以控制运行在系统上的代码的执行流量。越早丢弃恶意数据包,系统就越安全。
例如,如果所有端口都关闭,那么攻击者仍然可以“执行”内核空间代码直至 TCP 和 UDP 协议处理,因为没有开放的目标端口,数据包最终会被丢弃 - 虽然不太可能,但仍然可能存在错误在今天没有人知道的内核中的 IP 或 TCP 处理代码中。但是,如果您有开放的端口,那么这意味着攻击者不仅可以尝试利用内核空间中的错误,还可以尝试利用用户空间中的错误(即 HTTP 实现 - Web 服务器侦听端口 80)
此外,另一个答案提到了“客户端”端代码中的潜在安全漏洞,例如 Web 浏览器。这些更难利用,因为攻击者需要在您的主机和它尝试与之通信的服务器之间的路径中;然后拦截 HTTP 会话;并更改通信,以期在您的网络浏览器中暴露潜在的错误。但是,在您的问题中,您的前提是“仅知道 IP 地址”,我将其解释为“来自不同物理位置的另一个人试图破解您的计算机”。但是,如果这个其他人在同一个 L2 广播域中,那么他可以欺骗 ARP突然出现在您的浏览器和服务器之间的路径中;他可以有效地利用浏览器中存在的一组新错误。