如何在扫描服务器端口时隐藏 Linux 上的 Web 服务器名称和 OpenSSH 版本?

如何在扫描服务器端口时隐藏 Linux 上的 Web 服务器名称和 OpenSSH 版本?

如何在扫描服务器端口时隐藏 Linux 上的 Web 服务器名称和 OpenSSH 版本?

当在 nmap 中时(nmap -A -T4 192.168.40.12) ip服务器从外部,一个显示:

Starting Nmap 4.62 ( http://nmap.org ) at 2009-11-05 14:11 IRST
LUA INTERPRETER in nse_init.cc:763: /usr/share/nmap/scripts/robots.nse:4: module 'http' not found:
no field package.preload['http']
no file '/usr/share/nmap/nselib/http.lua'
no file './http.lua'
no file '/usr/local/share/lua/5.1/http.lua'
no file '/usr/local/share/lua/5.1/http/init.lua'
no file '/usr/local/lib/lua/5.1/http.lua'
no file '/usr/local/lib/lua/5.1/http/init.lua'
no file '/usr/lib/nmap/nselib-bin/http.so'
no file './http.so'
no file '/usr/local/lib/lua/5.1/http.so'
no file '/usr/local/lib/lua/5.1/loadall.so'
SCRIPT ENGINE: Aborting script scan.
Interesting ports on 192.168.40.12:
Not shown: 1710 closed ports
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     **OpenSSH 3.9p1** (protocol 1.99)
53/tcp   open  domain  dnsmasq 2.47
80/tcp   open  http    **Apache httpd**
222/tcp  open  ssh     **OpenSSH 3.9p1** (protocol 1.99)
8081/tcp open  http    CherryPy httpd 2.3.0
MAC Address: 00:10:F3:0F:59:B7 (Nexcom International Co.)
Device type: firewall
Running: IPCop Linux 2.4.X
OS details: IPCop firewall 1.4.10 - 1.4.15 (Linux 2.4.31 - 2.4.34)
Network Distance: 1 hop

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

我修改了httpd.conf并更改了两行

ServerSignature Off 
ServerTokens Prod

并重新启动 apache 服务器,但它仍然显示 apache 名称

有人能帮助我吗?

答案1

对于 OpenSSH,请尝试以下操作:

me@lappy:~# ncat 192.168.0.222 22
SSH-2.0-OpenSSH_5.1p1 Debian-3ubuntu1

很酷,没有漏洞或任何东西,但让我们编辑它只是为了好玩。首先让我们复制 sshd 以供使用。

root@mohsen-desktop:~# mkdir tmp
root@mohsen-desktop:~# cd tmp
root@mohsen-desktop:~/tmp# cp /usr/sbin/sshd .

现在让我们修改它。

root@mohsen-desktop:~/tmp# hexedit sshd

好的,应该会弹出一个蓝色窗口,现在查看底部并注意命令。我们要使用搜索,因此请按 control+w 确保“搜索文本字符串”为白色,然后按回车键。现在输入“OpenSSH”,然后按回车键,您将被引导到需要修改的确切部分。

它看起来会像这样,只需将所有红色的内容更改为 0,您就会得到下面的内容。如果您想输入其他内容,请按 TAB 并在 ascii 部分输入您想要的内容,请记住没有退格键。

00053FE0 6E 64 2D 6C 69 6E 65 00 4F 70 65 6E 53 53 48 5F nd-line.OpenSSH_
00053FF0 35 2E 31 70 31 20 44 65 62 69 61 6E 2D 33 75 62 5.1p1 Debian-3ub
00054000 75 6E 74 75 31 00 25 73 2C 20 25 73 0A 00 4B 52 untu1.%s, %s..KR

它现在看起来应该是这样的。

00053FE0 6E 64 2D 6C 69 6E 65 00 4F 70 65 6E 53 53 48 00 nd-line.OpenSSH.
00053FF0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00054000 00 00 00 00 00 00 25 73 2C 20 25 73 0A 00 4B 52 ......%s, %s..KR

完成后,按 control+x 保存并启动它,请记住它需要精确的路径。

root@mohsen-desktop:~/tmp# /root/tmp/sshd
root@mohsen-desktop:~/tmp# ncat localhost 22
SSH-2.0-OpenSSH

只要确保您能够连接到它就可以了。

killall sshd
rm /usr/sbin/sshd
mv /root/tmp/sshd /usr/sbin/

为了隐藏 Web 服务器名称,您应该编译源 apache 并在其中编辑 conf 文件。

答案2

我不相信你可以对 NMap 隐藏服务器类型,因为它足够聪明,可以从握手协商、故障处理等中检测软件类型。至于 OpenSSH,从常问问题

2.14 - 为什么 OpenSSH 要向客户端报告其版本?

OpenSSH 与大多数 SSH 实现一样,在客户端连接时向其报告其名称和版本,例如

SSH-2.0-OpenSSH_3.9

客户端和服务器会使用此信息来启用协议兼容性调整,以解决它们正在通信的实现中已更改、有缺陷或缺失的功能。目前仍需要进行此协议功能检查,因为 SSH 协议尚未作为 RFC 发布,在此之前可能会进行更多不兼容的更改。

如果你确实想修补 SSH 以防止版本显示,以下是具体操作方法(个人未经测试),下面是你的心态描述(通过隐蔽性实现安全优点缺点)这是为什么我认为这不好以及原因Bruce Schneier 认为有时这是件好事其余时间都很糟糕

答案3

sshd 版本字符串在运行时不可配置。您可以在修改 SSH_VERSION #define 后重新编译 OpenSSH 来更改它,或者在 sshd.c 中使用它的地方:

  snprintf(buf, sizeof buf, "SSH-%d.%d-%.100s%s", major, minor,
      SSH_VERSION, newline);

答案4

对于 OpenSSH,请尝试以下操作:在 /etc/ssh/sshd_config 文件中添加字符串:

Banner /etc/ssh/banner

并在 /etc/ssh/banner 中输入一些奇怪的内容,例如“MS Telnet Service 1.2”:)

对于 Apache 服务,您可以尝试以下技术:

在 httpd.conf 文件中写入以下说明:

ServerTokens ProductOnly
ServerSignature Off

但之后你会看到一个“Apache”字符串,没有版本。如果你想要更安全的 Apache,请谷歌搜索“mod_security”。

祝你好运!

相关内容