IoT用途で増加?――LibSSHを「サーバとして」用いた場合にのみ発生する脆弱性OSS脆弱性ウォッチ(10)(1/2 ページ)

連載「OSS脆弱性ウォッチ」では、さまざまなオープンソースソフトウェアの脆弱性に関する情報を取り上げ、解説する。今回は、LibSSHを「サーバとして」用いた場合にのみ発生する脆弱性について。

» 2018年12月07日 05時00分 公開
[面和毅OSSセキュリティ技術の会]

 「OSSセキュリティ技術の会」の面和毅です。本連載「OSS脆弱性ウォッチ」では、さまざまなオープンソースソフトウェア(OSS)の脆弱(ぜいじゃく)性に関する情報を取り上げ、解説しています。

 2018年10月中旬に、OSSのSSHライブラリ「LibSSH」を用いてサーバを作成する際にリモートから認証をバイパスできるという脆弱性が見つかりました。この問題は「OpenSSH」には影響を与えませんが、LibSSHを用いたサーバに対しては影響が大きいので、今回はこのLibSSHの脆弱性を詳しく見ていきます。

LibSSHを用いたサーバについて

 LibSSHを用いたサーバは、IoT用途などで意外に多いようです。IoTデバイスの検索サイト「Shodan」で検索してみると、6000件以上がヒットしました(2018年11月21日時点)(図1)。

図1 Shodanで「LibSSH」で検索してみても、かなりの数がある

LibSSHを用いたサーバを立ててみる

 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
図2

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]-----+
図3 DSA鍵ペアの生成(RSAも同様)

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
図4
       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。