[English]

Last update: Tue, 29 Aug 2017 11:00:00 +0900

ConnManDo Vulnerability

ConnMan

ConnManは、組み込みデバイスなどで使うために作られたネットワークマネージャです。 IoTデバイスなどでは広く利用されています。

概要

ConnManのDNSプロキシ機能において、DNSレスポンスメッセージの処理に欠陥が発見されました。この脆弱性を悪用された場合、connmandプロセスがクラッシュする可能性があります。また、場合によってはconnmandプロセスを実行している権限で、リモートから任意のコードを実行される可能性もあります。攻撃には充分な再現性があります。

攻撃の前提として、ConnManが稼働する端末が直接通信するDNSサーバからのレスポンスを乗っ取る必要があります。これは例えば信頼できないWi-Fiのアクセスポイントに端末を接続することで攻撃されてしまう可能性があることを意味します。

我々は、本件を検出した後、緊密にIntel PSIRTと連携し問題を修正しました。ConnManはIoTデバイスでは広く利用されていることから、脆弱性の周知と対策促進のためこのアドバイザリを出すことにし、また「ConnManDo」という名前をつけることにしました。

原因

今回発見された脆弱性により、DNSサーバからの悪意ある応答を処理する際、スタックバッファオーバーフローが発生する可能性があることを確認しました。これによりスタック内のデータが破壊されます。

対象

ConnMan v1.34 以前の全てのバージョンが影響を受けます。この脆弱性はConnMan v1.35で修正されました。

CVE番号及びCVSS(v3)スコア

CVE-2017-12865

8.1 (High) - CVSS:3.0/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H/E:F/RL:O/RC:C

分類

サービス拒否(DoS)、リモートからの任意コード実行(RCE)

対策

本脆弱性を対策済みの最新版のConnMan1.35は次のリンクから入手可能です。https://git.kernel.org/pub/scm/network/connman/connman.git/

暫定対策(IoTデバイス利用者向けの緩和策)

信頼出来ないネットワークへの端末の接続を避けて下さい。ただし、これは根本的な解決策ではありません。

Q&A

この脆弱性の原理はどのようなものですか?

ConnManでは、ローカルホストから発せられたDNSクエリを外部のDNSサーバに転送する機能(DNSプロキシ)が存在します。外部のDNSサーバにDNSクエリを転送した後、DNSサーバからDNSレスポンスを受け取りますが、このレスポンスの取扱に不具合がありました。

DNS通信には圧縮されたDNSレスポンス内のメッセージを展開する処理が存在します。該当する処理においてメッセージを展開した結果、非常に長いデータが生成された場合、スタック上に確保された領域を超えた書き込みが発生します。

どのような攻撃が行われるおそれがありますか?

例えば、移動式のIoTデバイスが移動先で悪意のあるアクセスポイントに接続してしまった際にDHCPサーバにより悪意のあるDNSサーバのアドレスが設定され、悪意あるDNSサーバと通信を行ってしまうことで、攻撃が発生する可能性があります。

具体的にどのような被害が生じる可能性がありますか?

connmandプロセスのクラッシュにより、当該端末においてDNSによる名前解決が出来なくなる可能性があります。自動的にconnmandプロセスを再起動する設定が無い場合、当該端末のインターネット通信等が事実上不可能となる可能性があります。

またリモートから任意コード実行を引き起こされた場合、connmandプロセスの動作する権限の範囲(端末によってはroot権限で動作している可能性があります)で、当該端末を掌握される可能性があります。これにより例えば端末内のファイルの漏洩・破壊、通信の盗聴、端末のボットネット化、といった被害が考えられます。

過去に攻撃を受けた形跡を確認することはできますか?

connmandプロセスがクラッシュした場合、OSの設定によっては、クラッシュした事実がシステムのログに記録されている場合があります。但し任意コードの実行によりプロセスを正常終了させられてしまった場合など、ログに記録されないケースもあります。またクラッシュの原因がこの脆弱性を突いた攻撃かどうかを確実に判別するためには、クラッシュダンプを取得し解析する必要があると思われます。

IDS/IPSで検知することは可能ですか?

攻撃コードはある程度柔軟に変化させることができるため、完全に検知することは困難です。

影響を受けるかどうか確認する方法(PoC)はありますか?

あるLinuxディストリビューションで提供されているconnmandを対象とするDoSおよびリモートからの任意のコマンド実行を行うPoCを作成しましたが、現時点ではそのPoCをNRIセキュアにて公開する予定はありません。影響を受けるかどうか確認するには、下記のコマンドを用いて、connmandのバージョンを確認してください。

どのようにして発見されましたか?

NRIセキュアテクノロジーズの野口・西俣が、IoT向けLinuxディストリビューションの構成を調査する過程で発見しました。

脆弱性の報告経緯は?

本脆弱性の発見後、Intel PSIRTに対して報告を行いました。ConnMan開発者への通知はIntel PSIRTが行いました。不具合修正パッチの開発では、Intel PSIRT経由で、NRIセキュアが協力しています。

謝辞

本脆弱性を迅速に修正してくれたConnManパッケージの開発者の皆様、各Linuxディストリビューションのメンテナの皆様、及び関係各所への調整を行ってくれたIntel PSIRTの方々に厚い感謝を申し上げます。

また、本ページは、CCS Injectionにて使われたアドバイザリテンプレートを、承諾を頂いた上で一部利用しています。この場を借りてお礼申し上げます。

更新履歴

初版公開: (2017年8月29日(火) 11:00:00 +0900)

参照