サーバにlibsshを使ってSSHでリモートアクセスをしていると、実際の認証を飛ば(バイパス)して、接続できるという脆弱性が発見されました。

つまり、「SSH2_MSG_USERAUTH_SUCCESS」メッセージをクライアント側からサーバに送信するだけで認証を回避できるというのです。とても怖い、脆弱性です。

問題は、libsshを使っているのかということです。SSH2やOpenSSHを使ってSSHでリモートアクセスしている場合は影響を受けないようです。

では、libssh-scannerを利用して調べてみます。

〔参考サイト〕

  1. github.com
  2. libssh 0.8.4 and 0.7.6 security and bugfix release
  3. libssh において認証を回避して遠隔から任意のコードが実行可能となる脆弱性(Scan Tech Report)

【前提】

  1. サーバはCentOS5,6で運用。
  2. クライアントはUbuntu18.04LTS。
  3. クライアントからサーバへSSHでリモートアクセスして運用。
    (ただし、認証はパスワードではなく、公開鍵暗号方式のプライベートキーによるパスフレーズ。)

<手順>

  1. githubからスキャナーをダウンロード。
  2. インストール。
  3. 検査。

1. githubからスキャナーをダウンロード。

Ubuntu18.04LTSの端末で下記コマンドを実行します。ダウンロードディレクトリはどこでもよいのですが、ホームディレクトリ内のダウンロードディレクトリにしました。

$ git clone https://github.com/leapsecurity/libssh-scanner.git
Cloning into 'libssh-scanner'...
remote: Enumerating objects: 88, done.
remote: Counting objects: 100% (88/88), done.
remote: Compressing objects: 100% (48/48), done.
remote: Total 88 (delta 42), reused 79 (delta 35), pack-reused 0
Unpacking objects: 100% (88/88), done.

ダウンロードした中身を見ます。

~/ダウンロード$ cd libssh-scanner
~/ダウンロード/libssh-scanner$ ls -la
合計 44
drwxr-xr-x  3 s domain admins  4096 12月 16 16:21 .
drwxr-xr-x 33 s domain admins 12288 12月 16 16:21 ..
drwxr-xr-x  8 s domain admins  4096 12月 16 16:21 .git
-rw-r--r--  1 s domain admins    66 12月 16 16:21 .gitattributes
-rw-r--r--  1 s domain admins  1069 12月 16 16:21 LICENSE
-rw-r--r--  1 s domain admins  1283 12月 16 16:21 README.md
-rwxr-xr-x  1 s domain admins  4868 12月 16 16:21 libsshscan.py
-rw-r--r--  1 s domain admins    31 12月 16 16:21 requirements.txt

2. インストール。

libssh-scannerをダウンロードしたgithubのサイトの下の方に、インストール方法と使い方が簡単に掲載されています。それを参考にインストールしました。

まず、「pip」を利用するのでインストールしておきます。

~/ダウンロード/libssh-scanner$ sudo apt install python-pip
[sudo] ユーザ のパスワード: 
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  libpython-all-dev libpython-dev libpython2.7-dev python-all python-all-dev
  python-dbus python-dev python-keyring python-keyrings.alt
  python-secretstorage python-setuptools python-wheel python-xdg python2.7-dev
..........中略..........................................................

では、libssh-scannerをインストールします。

~/ダウンロード/libssh-scanner$ pip install -r requirements.txt
Collecting ipaddress<=2.0 (from -r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/fc/d0/7fc3a811e011d4b388be48a0e381db8d990042df54aa4ef4599a31d39853/ipaddress-1.0.22-py2.py3-none-any.whl
Collecting paramiko==2.4.2 (from -r requirements.txt (line 2))
  Downloading https://files.pythonhosted.org/packages/cf/ae/94e70d49044ccc234bfdba20114fa947d7ba6eb68a2e452d89b920e62227/paramiko-2.4.2-py2.py3-none-any.whl (193kB)
    100% |████████████████████████████████| 194kB 1.6MB/s 
Collecting cryptography>=1.5 (from paramiko==2.4.2->-r requirements.txt (line 2))
  Downloading https://files.pythonhosted.org/packages/7f/ba/383b51cc26e3141c689ce988814385c7659f5ba01c4b5f2de38233010b5f/cryptography-2.4.2-cp27-cp27mu-manylinux1_x86_64.whl (2.1MB)
...........中略..........................................................
Building wheels for collected packages: pycparser
  Running setup.py bdist_wheel for pycparser ... done
  Stored in directory: /home/shigi01/.cache/pip/wheels/f2/9a/90/de94f8556265ddc9d9c8b271b0f63e57b26fb1d67a45564511
Successfully built pycparser
Installing collected packages: ipaddress, enum34, idna, asn1crypto, pycparser, cffi, six, cryptography, pynacl, pyasn1, bcrypt, paramiko
Successfully installed asn1crypto-0.24.0 bcrypt-3.1.5 cffi-1.11.5 cryptography-2.4.2 enum34-1.1.6 idna-2.8 ipaddress-1.0.22 paramiko-2.4.2 pyasn1-0.4.4 pycparser-2.19 pynacl-1.3.0 six-1.12.0

3. 検査。

では、サーバを検査します。

libssh-scannerディレクトリ内を見ると、libsshscan.pyが実行コマンドのようです。SSHは22番ポートを使っています。

コマンドは、

./libsshscan.py 「検査対象サーバのIPアドレス」 -p 「対象ポート番号」

のように入力し実行しました。

~/ダウンロード/libssh-scanner$ ./libsshscan.py 192.168.xxx.abc -p 22

libssh scanner 1.0.4

Searching for Vulnerable Hosts...

[*] 192.168.xxx.abc:22 is not vulnerable to authentication bypass (SSH-2.0-OpenSSH_x.x)

Scanner Completed Successfully

not vulnerable to authentication bypass」(認証のバイパスの脆弱性はない)となりました。

同様に、残るサーバもすべてチェックし、脆弱性がないことを確認しました。私の場合、SSHには、SSH2、OpenSSHを利用していおり、libsshは使われていないようです。

もし、脆弱性がある場合は、参考サイト「2.libssh 0.8.4 and 0.7.6 security and bugfix release」内にpatchへのリンクがあるのでそれで対処できるようです。