禁用服务版本检测

禁用服务版本检测

nmap可用于检测开放端口和与其关联的服务。另外,我们可以使用-sVflag来确定服务版本。

有什么办法可以禁用此服务器版本检测吗?如果黑客知道版本详细信息,他就可以攻击系统。

例如,在 Ubuntu-20.04 上,以下是给定范围内服务版本检测的结果

SHW@system:~$ nmap -sV -p 631 localhost
Starting Nmap 7.80 ( https://nmap.org ) at 2022-05-16 18:11 IST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00022s latency).
rDNS record for 127.0.0.1: view-localhost

PORT    STATE  SERVICE   VERSION
631/tcp open   ipp       CUPS 2.3   <== Version detected

Service detection performed. Please report any incorrect results 
at https://nmap.org/submit/.
Nmap done: 1 IP address (1 host up) scanned in 7.58 seconds

那么,要在Ubuntu上做哪些修改才能屏蔽631端口的服务版本呢?

答案1

您会发现,当您通过端口 631 上的 HTTP请求时,cups 本身会轻松地在<title>它所提供的 HTML 页面的属性中提供版本。/

这是从 CUPS 交付时附带的配置模板文件中读取的 – 最有可能类似于/usr/share/cups/www/index.html.所以,删除获取版本字符串的途径相当简单 – 只需修改该配置文件:)

然而,这实际上只是装饰性的 - 从该文件中的链接来看,即使您决定完全重写它,人们也可以非常简单地推断出它是一个 CUPS(而不是其他一些 IPP 服务器)。

此外,CUPS 的存在确实是为了实现一个目的;它这样做的方式可能足以正确识别其版本。版本在细节上有所不同——这就是它们不同版本的原因。不需要太多努力,有人就可以浏览 CHANGELOGs/git 历史记录并找出要查询的端点以触发响应,从而确定版本。

事情是这样的:任何留下哪怕一点点自由的协议(如果只是在时间上,或者响应中被忽略的空白的数量!)将允许不同的实现(为此,不同的版本是不同的实现)的行为不同的是,显然如此。由此你可以推断出版本。

唯一的版本是一个协议非常最小且受限,并且仅允许确切地一种行为。 (如果您有这样的协议,那么提供该协议实现的服务器很可能也看不到任何新版本。)这些协议非常罕见,而 IPP 显然恰恰相反:灵活的传输(一种复杂的基于 HTTP 的协议) !),具有灵活的检测和灵活回复功能。该协议的两个实现永远不会相同!


长话短说: 一般来说,不能。特别是对于像 IPP 这样复杂的协议(这是 CUPS 在该端口上提供的协议),您不可能完全混淆版本;您唯一的选择是以不同方式重新实现 CUPS 的重要部分。然后你基本上就用它制作了一个不同的软件,并得到你自己的可检测版本,以及你自己的安全问题。


我对这个说法有一些疑问:

如果黑客知道版本详细信息,他就可以攻击系统。

确实不是这样的。一个行政如果他知道哪些服务需要升级,则可以修复系统,但攻击者只是想利用存在的漏洞。攻击者根本不关心版本 - 只关心漏洞的存在,这通常与版本号一样难以弄清楚,因此通常情况下,攻击者只是尝试几个已知的漏洞,而不是尝试找出所使用的软件版本 - 可能已经或可能尚未修补以不包含漏洞!

所以,隐藏版本确实没有什么好处。如果我知道我正在谈论的 CUPS 有一个双重释放漏洞,我可以通过触发打印机的本地扫描来利用该漏洞,那么我将尝试触发该漏洞 - 这只是一个请求。

相关内容