下一代libSSH或者OpenSSH的exploit也许即将到来。在黑客找到绕过保护服务器的密码的新方法之前,不要让你的SSH服务器进入Shodan的数据库。
Shodan被称作“黑客的搜索引擎”是因为它实际上是提供了一个网络连接设备和服务器的可供搜索的数据库。任何人都可以在上面搜索网络摄像头、路由器、服务器、Raspberry Pis、交通信号灯、销售点系统、工业控制系统等等。
这个Web工具通过随机迭代扫描每一个可能的IP地址(不管它是否上线或正被使用),并且试图提取在不同端口的服务banners。这通常用来表示正在运行服务的元数据,比如服务名称、类型、版本号。
任何连接互联网的设备都不可避免的被Shodn或其他扫描引擎(如Censys之类的)所扫描。黑客们用这些数据库去定位那些过时的、易被攻击的服务器。但即使是经常更新服务器并遵循最佳安全实践的系统管理员也会受到攻击。 libSSH身份验证绕过漏洞就是一个很好的例子。
libSSH漏洞能让黑客不先进行身份验证就连接到SSH服务器。就算是最完整的最新服务仍然容易受到这种攻击,并使许多服务器和网站面临风险。更重要的是,全面更新补丁的系统仍然会暴露在尚未披露的漏洞中。Blackhat有时会在private communities中出售漏洞。现在还不知道有多少未公开的OpenSSH的exploits存在。
Tor onion services能够帮助减少设备暴露在公网上。就像onion网站不能通过标准网络浏览器访问一样,SSH services能配置为允只许通过Tor访问。它能让像Shodan之类的搜索引擎完全无法访问服务,也让黑客更难找到。
我们需要做的第一件事就是在VPS和客户端计算机上都安装上Tor。客户端可以是Debian, Ubuntu或者 Kali系统的变种。macos和windows10用户可以查看正式的tor项目文档,以便正确安装Tor。对于大多数读者来说,SSH server很可能是Debian VPS。但是,你也可以在Ubuntu桌面或Raspberry Pi上进行设置,适用于那些希望在家中计算机远程访问的用户。
Tor在很多Linux存储库中都是存在的。在大多数情况下,安装包不能得到可靠的维护或更新,这意味着会缺少关键、稳定的安全更新。因此,Tor软件应始终直接从源头(即torproject.org)获取。
登录到您的SSH服务器,并使用下面的echo命令将Tor项目的存储库添加到您的合适的存储库列表中,该命令在Debian中有效。
~$ echo -e "deb https://deb.torproject.org/torproject.org $(lsb_release -sc) main ndeb-src https://deb.torproject.org/torproject.org $(lsb_release -sc) main" > /etc/apt/sources.list.d/tor.list
如果你使用Kali Linux,请用下面的指令代替。
~$ echo -e "deb https://deb.torproject.org/torproject.org stretch main ndeb-src https://deb.torproject.org/torproject.org stretch main" > /etc/apt/sources.list.d/tor.list
然后,下载Tor Project’s package signing key并用下面的指令将其导入到您的APT keyring中。
~$ wget -O- https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | sudo apt-key add -
--2019-03-05 06:29:13-- https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc Resolving deb.torproject.org (deb.torproject.org)... 82.195.75.101, 2001:41b8:202:deb:213:21ff:fe20:1426 Connecting to deb.torproject.org (deb.torproject.org)|82.195.75.101|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 19665 (19K) [text/plain] Saving to: 'STDOUT'
- 100%[================================>] 19.20K 54.8KB/s in 0.4s
2019-03-05 06:29:16 (54.8 KB/s) - written to stdout [19665/19665]
当signing key被添加到您的keying时,您将看到“OK”输出。接下来,使用下面的apt-get命令更新。
~$ apt-get update
Get:2 https://deb.torproject.org/torproject.org stretch InRelease [4,965 B]
Get:4 https://deb.torproject.org/torproject.org stretch/main Sources [1,169 B]
Get:5 https://deb.torproject.org/torproject.org stretch/main amd64 Packages [2,400 B]
Fetched 8,534 B in 8s (1,091 B/s)
使用下面的apt-get指令安装Tor,完成!
~$ apt-get install tor deb.torproject.org-keyring torsocks Reading package lists... Done Building dependency tree Reading state information... Done Suggested packages: mixmaster torbrowser-launcher socat tor-arm apparmor-utils obfs4proxy The following NEW packages will be installed: deb.torproject.org-keyring The following packages will be upgraded: tor
运行SSH server的客户和VPS都应该安装Tor.请确保在这两个系统中都遵循上面的步骤。
Tor进程可能在安装后立即执行,因此,以root(sudo)方式停止进程。这可以使用systemctl命令完成。
~$ sudo systemctl stop tor
然后,用一个文本编辑器去打开 /etc/tor/torrc文件。这是Tor用来修改其行为和创建onion services的配置文件。
~$ sudo nano /etc/tor/torrc
这个文件里有巨量的信息,其中的大多数和这项协议并没有关系。向下滚动一点到“此部分仅用于位置隐藏服务”部分。在Debian 和 Kali Linux中,其显示如下:
############### This section is just for location-hidden services ###
## Once you have configured a hidden service, you can look at the
## contents of the file ".../hidden_service/hostname" for the address
## to tell people.
##
## HiddenServicePort x y:z says to redirect requests on port x to the
## address y:z.
#HiddenServiceDir /var/lib/tor/hidden_service/
#HiddenServicePort 80 127.0.0.1:80
#HiddenServiceDir /var/lib/tor/other_hidden_service/ #HiddenServicePort 80 127.0.0.1:80
#HiddenServicePort 22 127.0.0.1:22
删除 (#) “HiddenServiceDir” and “HiddenServicePort” 选项, 如:
############### This section is just for location-hidden services ###
## Once you have configured a hidden service, you can look at the
## contents of the file ".../hidden_service/hostname" for the address
## to tell people.
##
## HiddenServicePort x y:z says to redirect requests on port x to the
## address y:z.
#HiddenServiceDir /var/lib/tor/hidden_service/
#HiddenServicePort 80 127.0.0.1:80
HiddenServiceDir /var/lib/tor/other_hidden_service/
#HiddenServicePort 80 127.0.0.1:80
HiddenServicePort 22 127.0.0.1:22
保存并退出文本编辑器。然后,用下面的指令重启tor
~$ sudo systemctl restart tor
在/var/lib/tor/other_hidden_service/目录中的“hostname”文件将保存新的洋葱地址。使用cat读取文件。注意这个洋葱地址,下一步需要它。
~$ cat /var/lib/tor/other_hidden_service/hostname
pkgsxmtmdrlxp7l3gfqysi3ceaochd4vnv7eax2fuyridmcz7ucvluad.onion
在运行进程之前,最好先确定新的洋葱地址可用于访问SSH服务。我们可以使用torsocks来快速验证,它是一个shell包装器,可配合命令行应用程序进行Tor网络访问(如curl、wget或nmap)。
接下来的torsocks和curl 命令将会查询新的onion service.请确保附加上SSH端口号(:22),否则curl将默认查询端口80并失败。成功的查询将返回ssh版本的标题,如下所示。
~$ torsocks curl http://pkgsxmtmdrlxp7l3gfqysi3ceaochd4vnv7eax2fuyridmcz7ucvluad.onion:22
SSH-2.0-OpenSSH_7.4p1 Debian-10+deb9u5
默认情况下,大多数ssh服务都在每个ipv4接口上监听。虽然不是所有Linux发行版都是这样,但Ubuntu 和 Debian这样的流行Linux系统正是如此。这通常在/etc/ssh/sshd_config文件中表示为“0.0.0.0”, ssh在上述文件中存储了所有的服务配置。
通过这种方式配置的ssh服务可以从世界上任何一台计算机访问服务器。这对于那些需要从不同设备和网络进行网站管理的网站管理员来说是很方便的。
首先,让我们来看看在后台运行的SSH服务。使用ss(一种调查套接字的工具)来显示TCP(-t)连接的进程(-p)监听(-l)。
~$ ss -plt
State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:ssh *:* users:(("sshd",pid=1148,fd=3))
如果服务器有应用程序在后台运行(比如Apache, Nginx, IRC software等),很多服务可能会出现在这里。让我们关注本地地址:端口的列,它表示为*:ssh。通配符表示SSH服务正在对每个可用的IPv4 和 IPv6端口进行监听。
Shodan能够定位这种SSH服务,因为其在这种状态下是可用的。如果要改变这种状态,请打开the /etc/ssh/sshd_config文件并找到“ListenAddress”列。
~$ sudo nano /etc/ssh/sshd_confnig
在Debian中,它显示如下。它们可能会被注释,那是正常的。当每一个ListenAddress都被注释后,SSH又返回到它默认的配置中去监听每一个接口。
#Port 22 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress ::
将ListenAddress 改为“127.0.0.1”并且不做注释,如:
#Port 22 #AddressFamily any ListenAddress 127.0.0.1 #ListenAddress ::
然后,重启SSH服务。
~$ sudo systemctl restart ssh
在执行systemctl指令后,正在运行的SSH可能会立即关闭。此时SSH服务在任何IPv4或IPv6地址上都不再可用,因此中断连接是很正常的。
幸运的是,在服务器上安装了onion service,SSH服务仍然是可到达的。现在,从客户端(即笔记本电脑或者远程计算机)使用下面的torsocks指令连接到SSH服务。
~$ torsocks ssh -p 22 username@pkgsxmtmdrlxp7l3gfqysi3ceaochd4vnv7eax2fuyridmcz7ucvluad.onion
The authenticity of host 'pkgsxmtmdrlxp7l3gfqysi3ceaochd4vnv7eax2fuyridmcz7ucvluad.onion (127.42.42.0)' can't be established. ECDSA key fingerprint is SHA256:f22LX7WJfLGOiKxP+0+cA/l5Q1GsJLFA30ZyMyGLMl4. Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'pkgsxmtmdrlxp7l3gfqysi3ceaochd4vnv7eax2fuyridmcz7ucvluad.onion' (ECDSA) to the list of known hosts. username@pkgsxmtmdrlxp7l3gfqysi3ceaochd4vnv7eax2fuyridmcz7ucvluad.onion's password:
第六步:确保SSH服务对Shodan不可见
在使用onion地址进入服务器后,再次用ss命令查看监听设备。它应该不再报告每一个可监听的接口,除了127.0.0.1.
~$ ss -plt
State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 127.0.0.1:ssh *:* users:(("sshd",pid=1162,fd=3))
我们可以通过在服务器上执行简单的nmap (-sV)版本扫描来进一步验证这一点。
~$ nmap -p 22 -sV PORT STATE SERVICE VERSION 22/tcp closed ssh
此时,你的SSH服务仍可能在Shodan上出现几天甚至几周。Shodan不擅长清除老旧的服务banners和端口信息。但那并不意味着攻击者可以访问SSH服务。
结论:
到目前为止,在onion services中使用SSH的最显著问题是速度缓慢。对于不习惯使用onion services和Tor的用户来说,终端的反应时间是异常缓慢而痛苦的。
以这种方式配置Tor和SSH一起工作,SSH将对Shodan隐形,但那并不意味着其完全不会被黑客找到。他们仍然可以使用Tor链接,所以总的来说,这并不能保证其完全不被攻击。
Tor有一个名为“HiddenServiceAuthorizeClient”的安全功能。此功能可以让用户通过必要的密码身份验证来保护onion services。在撰写本文时,最新的“下一代”洋葱服务不支持HiddenServiceAuthorizeClient。可用的版本只有较老旧的onion services,但是使用Tor的一个很快就会被废弃的功能似乎会是一个很不安全做法。在未来,下一代onions也许又会有HiddenServiceAuthorizeClient,这样的话,除了你,任何人都无法进入。而在目前,将ssh端口号码改为62359或41171这样的非标准号码,有助于使它不被针对22端口的暗网批量扫描的脚本小子所抓到。
本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场