如果 Linux 服务器只打开 SSH 端口 22 和 HTTP 端口 80,我们必须通过这两个端口之一从互联网入侵服务器吗?
如果一个服务器只打开 22 和 80 端口,我们是否只有这两种方法可以破解它?
并不真地。我会说这取决于您的威胁模型。可能有其他威胁不需要使用这些端口来破坏您的服务器。我现在能想到的第一个例子是供应链攻击。当您更新服务器上的任何软件时,如果更新的软件受到供应链攻击的影响,您的服务器就会被感染。或者,如果您example-program
错误地安装而不是example_program
(注意连字符而不是下划线),并且example-program
是恶意的并且故意使用该名称来混淆您,那么您的服务器将受到损害。我认为最近发生了这样的事情......哦,昨天(Ruby存储库中的比特币窃取应用程序)。其他例子?从您的服务器传出的连接中可能有一些 MITM。那么我们不要忘记网络钓鱼或任何涉及社会工程的事情。
所以准确地说,如果你问我“一般来说,我只能通过开放端口被远程威胁入侵吗?”,我的回答是否定的。不过,某些威胁是否可能发生取决于您的威胁模型,而这又取决于您的服务器的功能、您如何管理它、您是谁等。
不。
目标计算机上可能会受到多种攻击,而服务应用程序(例如 httpd 或 sshd)只是其中之一。
请记住,在网卡上的物理网络端口和处理实际流量的应用程序(即 sshd)之间有一个完整的网络堆栈——在这个堆栈中,包括诸如防火墙、网络驱动程序等内核功能之类的东西,所有这些都可以分别攻击处理应用程序。
请参阅此处突出显示的 Linux 内核远程执行漏洞的数量,这些漏洞不需要处理应用程序即可利用,而是允许攻击者仅通过制作错误的网络数据包来执行代码。
当然,攻击应用程序比攻击内核更容易,因为内核往往受到更严格的检查。
尝试列出一些不使用 http 或 ssh 入侵服务器的方法:
- 使用管理引擎中的漏洞
- 使用网络板固件或驱动程序中的错误
- 在虚拟化平台中使用不太安全的东西,可以合法访问(或侵入)相邻的虚拟机
- 利用操作系统中 IP 或 TCP 驱动程序中的一些错误
- 利用您的服务器充当客户端的某些网络交互(DNS 查询、自动更新、数据库访问),欺骗或入侵这些服务的合法服务器。
Example for 4. : 很久以前,利用 IP 层驱动程序中的一个 bug 进行ping of death攻击,根本不需要开放端口。
关闭港口是一种非常早期的防线。
当端口打开时,将运行一些软件来处理进入该端口的数据。该软件可能存在允许攻击成功的错误。如果您打开 100 个端口,则有 100 个软件可能不安全。只有两个开放端口,只有两个软件可能易受攻击。显然,确保 100 块不易损坏比两块要难得多。
但攻击者可以尝试通过另一条路线进入。您的服务器应该接收包含端口号的数据块,并且您的软件应该将块定向到正确的端口或将其丢弃,可能会记录它。如果将传入块发送到端口的软件存在错误,攻击者可能会利用这些错误,并且这种利用可能与打开的端口无关。