連載「OSS脆弱性ウォッチ」では、さまざまなオープンソースソフトウェアの脆弱性に関する情報を取り上げ、解説する。今回は、LibSSHを「サーバとして」用いた場合にのみ発生する脆弱性について。
「OSSセキュリティ技術の会」の面和毅です。本連載「OSS脆弱性ウォッチ」では、さまざまなオープンソースソフトウェア(OSS)の脆弱(ぜいじゃく)性に関する情報を取り上げ、解説しています。
2018年10月中旬に、OSSのSSHライブラリ「LibSSH」を用いてサーバを作成する際にリモートから認証をバイパスできるという脆弱性が見つかりました。この問題は「OpenSSH」には影響を与えませんが、LibSSHを用いたサーバに対しては影響が大きいので、今回はこのLibSSHの脆弱性を詳しく見ていきます。
LibSSHを用いたサーバは、IoT用途などで意外に多いようです。IoTデバイスの検索サイト「Shodan」で検索してみると、6000件以上がヒットしました(2018年11月21日時点)(図1)。
LibSSHを用いたサーバを立てるには、ソースコードのサンプルにあるsamplesshd-cbを用いると簡単です。まずは問題のあるバージョン(libssh-0.7.5以前)のソースコードを入手し、ビルドしてみます。
今回は、「/home/jsosug/src」以下に「libssh-0.7.5」のソースコードを展開し、テスト用にバイナリをビルドする場所を「/home/jsosug/work」とします。
1.libssh-0.7.5をダウンロードして/home/jsosug/src以下に展開します。
2.「INSTALL」にコンパイル方法の記載があるので、必要なライブラリを入手して(入手方法は割愛)、cmakeでコンパイルします。今回の環境では、/home/jsosug/workディレクトリで下記コマンドを実行します。
cmake /home/jsosug/src/libssh-0.7.5 -DCMAKE_INSTALL_PREFIX=/usr
3.「/home/jsosug/work/examples」以下にコンパイル環境が作られるので、makeします。すると図2のように、サンプルのバイナリが幾つか出来上がります。今回の脆弱性の検証では、この中の「samplesshd-cb」を用います。
[jsosug@localhost examples]$ ls CMakeFiles libssh_scp samplesftp scp_download Makefile libsshpp samplessh senddata cmake_install.cmake libsshpp_noexcept samplesshd-kbdint ssh_server_fork exec proxy samplesshd-cb sshnetcat
4.samplesshd-cbは、起動する際にDSA秘密鍵とRSA秘密鍵を要求するので、ssh-keygenコマンドでDSA鍵ペアとRSA鍵ペアを作成しておきます(図3)。
[jsosug@localhost ~]$ ssh-keygen -t dsa Generating public/private dsa key pair. Enter file in which to save the key (/home/jsosug/.ssh/id_dsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/jsosug/.ssh/id_dsa. Your public key has been saved in /home/jsosug/.ssh/id_dsa.pub. The key fingerprint is: SHA256:Z/CKimsXpecohfgKMU9qq+mcXbpBSXt2oKcz5iBpQpI jsosug@localhost.localdomain The key's randomart image is: +---[DSA 1024]----+ | | | | | . . . | | .. + o o | |Eo.* * .S + | |+Bo O o. + | |*=.B *. . | |B.@.O.. | |*BoOo | +----[SHA256]-----+
5.samplesshd-cbを起動します。今回は、全てのアドレス宛てのPort 2222で起動します。
./samplesshd-cb 0.0.0.0 -d ~/.ssh/id_dsa -r ~/.ssh/id_rsa -v -p 2222
また今回は、認証が突破されたかどうかを見てみたいので、「-v」を付けてログを詳細に出力します(図4)。
[jsosug@localhost examples]$ ./samplesshd-cb 0.0.0.0 -d ~/.ssh/id_dsa -r ~/.ssh/id_rsa -v -p 2222 Started sample libssh sshd on port 2222 You can login as the user libssh with the password libssh
Copyright © ITmedia, Inc. All Rights Reserved.