本文以在 Ubuntu 18.04 上为例,演示如何隐藏 OpenSSH 的版本信息。
Step 1: 查看 OpenSSH 的版本信息
# whereis sshd sshd: /usr/sbin/sshd /usr/share/man/man8/sshd.8.gz # /usr/sbin/sshd -v unknown option -- v OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 Dec 2017 usage: sshd [-46DdeiqTt] [-C connection_spec] [-c host_cert_file] [-E log_file] [-f config_file] [-g login_grace_time] [-h host_key_file] [-o option] [-p port] [-u len]
使用 nmap 进行外部扫描。
# nmap -p 22 -sV -v -n 192.168.2.167 Starting Nmap 7.91 ( https://nmap.org ) at 2021-02-08 19:14 CST NSE: Loaded 45 scripts for scanning. Initiating Ping Scan at 19:14 ... PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0) Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
可以看到版本为:OpenSSH 7.6p1
Step 2: 替换版本信息
记住,一定要先备份,以免操作失误,尤其是在远程操作的时候。
# cp /usr/sbin/sshd sshd.bak # 【注】备份 # cp /usr/sbin/sshd /usr/sbin/sshd.bak # ls /usr/sbin/sshd* /usr/sbin/sshd /usr/sbin/sshd.bak
# strings /usr/sbin/sshd | grep OpenSSH_7.6 OpenSSH_7.6p1 Ubuntu-4ubuntu0.3 <== Nmap 探测展示的结果是这一行 OpenSSH_7.6p1 OpenSSH_7.6
替换 OpenSSH 的版本,使用 sed 命令,语法如下
sed 's/原字符串/替换字符串/'
# sed -i 's/OpenSSH_7.6/OpenSSH_x.x/g' /usr/sbin/sshd # /usr/sbin/sshd -v unknown option -- v OpenSSH_x.xp1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 Dec 2017 usage: sshd [-46DdeiqTt] [-C connection_spec] [-c host_cert_file] [-E log_file] [-f config_file] [-g login_grace_time] [-h host_key_file] [-o option] [-p port] [-u len]
可以看到,本地提示的版本信息已经变了。
【注】在替换版本的时候,如果替换为任意字符,可能会导致 core dump, 具体原因不明,可以参考上面的做法,隐藏具体版本信息即可。
Step 3: 验证
# nmap -p 22 -sV -v -n 192.168.2.167
查看 /usr/sbin/sshd 文件内容,发现已经更改。
以上!