本文以在 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 文件內容,發現已經更改。
以上!