責任ある情報公開:Ouvis C2 HD セキュリティカメラ
我々は最近、継続中の IoT 脆弱性研究プロジェクトの一環として、Ouvis C2 HD 無線セキュリティカメラのテストを実施しました。このカメラは、Android、iOS、およびブラウザベースでのリモート表示が可能です。
オープン Telnet アクセスの脆弱性
IoT デバイスのテストでは毎回、テスト用ネットワークへの接続後の最初の作業として、ポートスキャンを実行し、デバイスで開いているサービスを特定します。
Ouvis カメラのポートスキャンで、TCP/23 のオープン Telnet が確認され、HTTP Web サーバが TCP/81(これは、Web サーバの標準ポートではありません)で動作していることがわかりました。私はこの段階で、Telnet には暗号化の機能がないためにオープン Telnet が潜在的なセキュリティ脆弱性であることにすぐに気付きました。IoT デバイスでは、SSH などの安全性の高いオプションが存在する場合は特に、Telnet ベースの管理アクセスを許可すべき理由はありません。また、一般ユーザ向け IoT デバイスでコマンドライン管理アクセスを許可する必要はまったくないはずです。Mirai ボットネットなどの不正アプリケーションは、オープン Telnet アクセスが可能で、強度の低いデフォルトのパスフレーズが使われているシステムに侵入します。
侵入(ペネトレーション)テストでは、オープン Telnet ポートが検出されると、一般的には Telnet を使ってデバイスに対する特権コマンドラインアクセスの取得を試行します。こういったアクセス権を得るには、侵入テストの実施者がサービスの「ルート」アカウントのユーザ名とパスワードを入手する必要があります。このような CLI インタフェースが診断目的で残されていることは多いものの、製造元がその認証情報を公開することはなく、おそらくは、ユーザが使用することも想定されていません。
そこで、総当り方式を試してみることにしました。総当り方式攻撃では、異なるユーザ名とパスワードの組み合わせを使ってログインを次々と試行します。私は、THC Hydra というアプリケーションを使用して、このデバイスの認証情報を総当り方式で探すことにしました。攻撃を高速化するために、Hydra を構成して、数千の一般的なパスフレーズを含む単語リストを使用するようにしました。異なるユーザ名とパスワードの組み合わせの試行を何時間か続けましたが、Hydra では、有効な認証情報は見つかりませんでした。
Telnet アクセス用の有効な認証情報を総当り方式で取得できなかったため、ルートアクセスを取得する別の方法を探す必要がありました。そこで、次のステップとして、カメラを分解して、コンソールのシリアルアクセスを探すことにしました。カメラの回路基板の 1 つに UART パッドが見つかりました。
USB-TTY-UART ケーブルをその空きパッドに半田付けしてから、115200 のボーレートでカメラのシリアルコンソールにアクセスしました。
ブートプロセスの停止後に U-Boot 構成を変更し、ファイルシステムのマウント後にシェルを初期化するようにしました。
これらの作業を経て、最終的には、カメラ用のコマンドラインシェルにたどり着ました。そして、接続後にユーザアカウントの /etc/passwd をチェックし、ルートアカウントとハッシュパスワードを見つけることができました。
パスワードハッシュに速くアクセスできれば、オフラインのパスワードを効率的に割り出すことができます。ルートパスワード取得の最後の試行として、ハッシュクラッキングアプリケーションとして有名な hashcat を使ってパスワードファイルをフィードしました。8 文字以内のあらゆる可能な組み合わせを試行する作業を数日間続けましたが、hashcat でパスワードを割り出すことはできませんでした。しかしながら、これらの方法で見つからなかったとは言え、このデバイスにルートパスワード(バックドアアカウントとも呼べるでしょう)がハードコーディングされていることを考えると、このオープン Telnet アクセスは弱点であると私は考えています。ただし、この段階までいくつかのクラッキング方法を試したにもかかわらず、ルートパスワードを割り出すことができなかったのは、朗報と言えるでしょう。このデバイスの製造元は、少なくとも強力なパスワードを使用するという点には配慮していたようです。とは言え、このパスワードの割り出しに成功すれば、これらのデバイスすべてのバックドアが明らかになってしまいます。他の研究者の分析と関連付けてみたところ、これらのすべての Ouvis カメラに加えて、ブランドが異なる複数のカメラでも、ルートパスワードハッシュが同じであることを確認できました。パスワードが流出してしまうと、攻撃者にこれらのデバイスへの無制限のアクセスを許す恐れがあります。
認証リモートでコード実行の脆弱性
Web カメラなどの IoT デバイスの調査では、Web 管理ポータルの Web アプリケーションに、ユーザ入力が消去されないことによる脆弱性がよく見つかります。同様の IoT カメラの Web 管理ページの 1 つにリモートコード実行の脆弱性が見つかったため、この Ouvis カメラについても同じ場所(FTP バックアップ設定)をチェックしたところ、まったく同じ脆弱性が見つかりました。
カメラからの DNS トラフィックのパケットキャプチャによって、「rce.bad」の名前解決が試行されていることがわかり、リモートコード実行の脆弱性が存在することが確認されました。
つまり、FTP 構成用の CGI(Common Gateway Interface)ハンドラ(set_ftp.cgi)が、/tmp/ftpupload.sh にある ftp アップロードスクリプトに保存する前にユーザ入力を消去していないことがわかりました。その後、カメラがこのスクリプトを特権ユーザとして実行することで、この消去されなかったユーザ入力に攻撃者が任意のコマンドをインジェクションできるようになります(我々の実験では、ping コマンドを使用しました)。
結論
上記の 2 つの脆弱性の確認後、私はすぐに報告書を作成し、サポート窓口経由で Ouvis に提出しましたが、90 日経過しても、Ouvis からの回答は得られませんでした。
60 日後に、別の研究者が、私が報告したのと同じ脆弱性と、同じ製造元の OEM 製品であると思われる複数のカメラのいくつもの脆弱性を公表しました。Ouvis C2 は Pierre Kim 氏が公開した対象モデルのリストに含まれていなかったため、私は、当初からの計画であった 90 日後の公開期限まで引き続き待つことにしましたが、90 日を経過しても回答が得られなかったため、今回、この脆弱性を一般公開することにしました。
この調査の経緯
2017 年 1 月 2 日 – 脆弱性を発見
2017 年 1 月 4 日 – 製造元に報告
2017 年 2 月 3 日 – 製造元に 2 回目の連絡
2017 年 3 月 6 日 – 製造者に一般公開を予告
2017 年 3 月 8 日 – Pierre Kim 氏が同様のゼロデイ脆弱性を公表
2017 年 4 月 3 日 – 製造元に最終連絡
2017 年 5 月 9 日 – 情報を一般公開