删除 sshd 标识字符串

删除 sshd 标识字符串

当我在 SSH 端口上进行 nmap 扫描时,我得到了

22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)

是否可以修改或隐藏 SSH 标识字符串?

答案1

该标识字符串可能是由 SSH 服务本身返回的。尝试这个:

echo "blah" | nc YOUR.SERVER.ADDRESS 22

这给出的响应有点类似于:

SSH-2.0-OpenSSH_8.6
Invalid SSH identification string.

不幸的是,这是嵌入在二进制文件中的字符串sshd。你有几个选择:

  • 检查您的发行版是否允许 sshd 包的特定编译标志以删除版本横幅
  • 某些发行版,例如 Debian,允许您尝试这样的选项:DebianBanner no/etc/ssh/sshd_config文件中。这是强烈的分布特定性
  • 哈奇的一种解决方案。使用stringson sshdbinary 来查找哪些字符串与返回的字符串匹配。之后,准备当前二进制文件的备份并使用hexedit.注意:如果您尝试运行修改后的二进制文件并且出现问题,这可能最终导致无法 ssh 到您的服务器。小心并确保你有后备计划。

不要过多地篡改它,因为此标识字符串是协议的一部分,尽管nc显示更改的字符串,但您最终可能会导致客户端拒绝连接,因为字符串的格式不正确http://www.openssh.com/txt/rfc4253.txt

答案2

sed 's/SSH-%d.%d-%.100s%s%s/SSH-%d.%d-OpenSSH___/' /usr/sbin/sshd > modifiedsshd

检查它们的大小是否仍然相同,但二进制文件不同。如果它们仍然是相同的二进制文件(cmp 返回 0)那么

strings /usr/sbin/sshd | grep SSH-

查找printf()您的 SSH 版本使用的正确格式。关键是您给出的前后字符串的sed长度必须完全相同。

不言而喻,但请sshd在某处保留二进制文件的备份,并首先在可以本地访问的计算机上尝试此操作,以防出现问题。

相关内容