D-Linkホームルーターで発見された6つの新たな脆弱性

By

Category: Unit 42

Tags: , ,

This post is also available in: English (英語)

概要

2020年2月28日、パロアルトネットワークスのUnit 42のリサーチャーは最新のファームウェアを実行するD-Linkワイヤレス クラウド ルーターに6件の新たな脆弱性があることを発見しました。

これらの脆弱性はホームネットワーク用D-LinkルーターのモデルDIR-865Lで発見されました。昨今は在宅勤務が増えていることから、その分ホームネットワークに対する悪意のある攻撃の可能性も高まっています。このためネットワーク機器を最新状態に保つことの重要性もさらに高まっています。

これらの脆弱性の一部は、類似のコードベースを使用する、より新しいモデルのルーターにも存在する可能性があります。発見されたのは、以下の6つの脆弱性です。

  • CVE-2020-13782: コマンド内で使用されている特殊要素の不適切な無効化 (コマンドインジェクション)
  • CVE-2020-13786: クロス サイト リクエスト フォージェリ(CSRF)
  • CVE-2020-13785: 不十分な暗号強度
  • CVE-2020-13784: 疑似乱数生成器の予測可能なシード
  • CVE-2020-13783: 機密情報のクリアテキストでの保存
  • CVE-2020-13787: 機密情報のクリアテキストでの送信

これらの脆弱性が組み合わさると、さらに大きなリスクにつながる可能性があります。たとえば悪意のあるユーザーがネットワークトラフィックを盗聴し、セッションCookieを盗むといったことがありえます。この情報があれば、ファイル共有用の管理ポータルにアクセスすることにより悪意のあるファイルをアップロードし、機密ファイルをダウンロードし、重要なファイルを削除することができます。またCookieを使用して任意のコマンドを実行することにより、サービス拒否攻撃を実行できます。

脅威防御が有効なパロアルトネットワークスの次世代ファイアウォールをご利用のお客様は、カスタムシグネチャによってこの脅威から保護されます。

D-Link社はパッチを公開して利用者に当該パッチのインストールを強く推奨しています。同パッチはD-Link社が公開しているこちらのページから入手できます。

CVE-2020-13782: コマンド内で使用されている特殊要素の不適切な無効化(コマンドインジェクション)

このルーターのWebインターフェイスをコントロールしているのはcgibin.exeというバックエンドエンジンです。Webページに対する大半のリクエストはこのコントローラに送信されます。scandir.sgiに対するリクエストが実行されると、攻撃者はルーター上で管理者権限で実行される任意のコードをインジェクトすることができます。

図1: 悪意のあるhttpリクエスト
図1: 悪意のあるhttpリクエスト

図1は、__ajax_explorer.sgiに対して実行可能なGETリクエストです。このリクエストがscandir.sgiに送信されるとルーターを再起動させます。この特定の攻撃は、サービス拒否につながります。
攻撃が成功するには、リクエストに以下の4つのパラメータが必要です。

  • action: mntまたはumnt
  • path: 任意の値を指定可能
  • where: 任意の値を指定可能
  • en: コマンド注入が行われる箇所。この場合、;reboot;により、ルーターを再起動させる

この攻撃には認証が必要ですが、Webページがクロス サイト リクエスト フォージェリに対しても脆弱なので、アクティブなセッションCookieを盗めば実行可能になります。後述の脆弱性で説明するように、攻撃者にとってセッションCookieを盗むことは非常に容易です。

CVE-2020-13786: クロス サイト リクエスト フォージェリ (CSRF)

ルーターのWebインターフェイスには、CSRFに対して脆弱なページが多数あります。つまり、攻撃者はパスワードを知らなくても、Webトラフィックを盗聴してセッション情報を使用することでパスワード保護されたWebサイト領域にアクセスできてしまいます。

前述の脆弱性で、CSRFを使用してコマンドインジェクションが実行可能なことはすでに説明しました。このほかにも、8181/tcp を使用するファイル共有用の管理Webサイト、SharePort Web Accessポータルが用意されています。

以下の図は、悪意のあるユーザーにより盗聴されたトラフィックを示しています。ここでは、uidを使用してログインを迂回することが可能です。

図2: UIDのクリアテキスト送信
図2: UIDのクリアテキスト送信

攻撃者がfolder_view.phpページに直接移動した場合、ログイン画面を迂回できますが、機能は何も実行できません。

図3: 認証なしでのSharePort Web Access
図3: 認証なしでのSharePort Web Access

ただし、Cookieの値を有効なセッションのuidに変更するだけで、認証を完全に迂回できてしまいます。

図4: 認証ありでのSharePort Web Access
図4: 認証ありでのSharePort Web Access

これにより、攻撃者は以下の3つのことを行えるようになります。

  • ファイルの内容を表示する
  • 一部またはすべてのファイルを削除する
  • マルウェアなどのファイルを新たにアップロードする

CVE-2020-13785: 不十分な暗号強度

ユーザーが8181/tcpのSharePort Web Accessポータルにログインした場合、その中には、盗聴中の攻撃者がブルートフォース攻撃でユーザーのパスワードを特定できるだけの情報がクリアテキストで送信されています。

図5: チャレンジのクリアテキスト送信
図5: チャレンジのクリアテキスト送信

上記の情報がルーターからクライアントに送信されます。クライアントはパスワードを計算し、以下を送信します。

  • 実際のパスワードを鍵とするusername + challengeに等しい文字列のMD5 HMAC

この計算の結果がクリアテキストでルーターに送信されます。

D-Linkの脆弱性におけるIDとパスワードハッシュのクリアテキスト送信

このハンドシェイクを盗聴すれば攻撃者は以下の情報にアクセスできます。

  • MD5 HMACアルゴリズムに対するデータ入力 = id + challenge
  • ハッシュ生成アルゴリズムの結果 = password

攻撃者はこの情報を使って完全にオフラインでブルートフォース攻撃を実行することで、実際のパスワードを特定することができます。

CVE-2020-13784: 疑似乱数生成器の予測可能なシード

ルーターのコードベースにはセッションCookieをランダムに計算するアルゴリズムがありますが、この結果は予測可能です。暗号化により保護されていても、ユーザーがログオンしたおおまかな時刻がわかれば、攻撃者はセッションCookieを特定できてしまいます。

ユーザーがログオンするたびに、ルーターはCookie、チャレンジ、および公開鍵を返します。

図7: チャレンジ、Cookie、および公開鍵のクリアテキスト送信
図7: チャレンジ、Cookie、および公開鍵のクリアテキスト送信

この情報はランダムに見えますが、get_random_stringという関数により作成されています。この関数は、ログイン試行時刻で生成された乱数をシードとして使用します。したがって、攻撃者はリクエスト時刻を知っていれば、計算結果を予測することができます。

図8: 乱数関数シードの逆アセンブル
図8: 乱数関数シードの逆アセンブル

この脆弱性の結果、ルーターでHTTPSを使用してセッション情報を暗号化していても、高度な技術を持つ攻撃者はCSRF攻撃を実行するために必要な情報を特定できてしまいます。

CVE-2020-13783: 機密情報のクリアテキストでの保存

tools_admin.phpページには、管理者パスワードがクリアテキストで保存されています。攻撃者がパスワードを入手するには、ログオンされているマシンに物理的にアクセスする必要があります。物理アクセスが必要なのは、認証情報はクリアテキストでネットワークに送信されないためです。物理的にアクセスできれば、攻撃者はページのHTMLソースを表示することにより、パスワードを入手できます。

図9: tools_admin.php Webページ
図9: tools_admin.php Webページ
図10: パスワードのクリアテキストでの保存
図10: パスワードのクリアテキストでの保存

CVE-2020-13787: 機密情報のクリアテキストでの送信

adv_gzone.phpはゲストWiFiネットワークを設定するためのページです。ネットワークのセキュリティを確保するために複数のオプションが利用できます。その1つがWired Equivalent Privacy (WEP)ですが、これは2004年に廃止されており、ワイヤレスネットワークの保護には推奨されていません。管理者がこのオプションを選択した場合、パスワードはクリアテキストでネットワークに送信されます。

図11: パスワードのクリアテキストでの送信
図11: パスワードのクリアテキストでの送信

このため、ネットワークトラフィックを盗聴している悪意のあるユーザーは、ゲストネットワークに使用されているパスワードを特定できてしまいます。

結論

以上で見てきたようにD-Link DIR-865Lホーム ワイヤレス ルーターには複数の脆弱性があります。在宅勤務者の増加は、悪意のあるユーザーにとって、ホームネットワーク用のルーターを攻撃する誘因となっています。

これらの脆弱性を組み合わせて利用することにより、任意のコマンドを実行し、データを抽出し、マルウェアをアップロードし、データを削除し、ユーザー認証情報を盗み出すことが可能になります。これらの攻撃の実行は、ルーターがHTTPを使用するように設定されていれば最も簡単ですが、ルーターがHTTPSを使用している場合でも、高度な技術を持つ攻撃者であれば、必要なセッション情報を計算することができてしまいます。

パロアルトネットワークスは、以下の方法でお客様を保護しています。

  • 脅威防御を備えたNext-Generation Firewallのライセンスでは、脅威防御シグネチャ58410を使用したベストプラクティスにより、攻撃をブロックできます。

推奨される緩和策

  • ファームウェアの最新バージョンとパッチをインストールします。ファームウェアは当該脆弱性について説明しているD-Link社のWebサイトから入手できます。
  • セッションハイジャック攻撃を防ぐために、すべてのトラフィックがデフォルトでHTTPSを使用するように設定します。
  • ランダムに生成されるセッションIDを計算する攻撃者から防御するために、ルーターのタイムゾーンを変更します。この方法については、D-Link社のサイトを参照してください。
  • パッチを適用するまでは機密情報の共有にこのルーターを使用しないことをお勧めします。

付録

CVE:

CVE-ID 脆弱性タイプ リファレンス
CVE-2020-13782 コマンド内で使用されている特殊要素の不適切な無効化(コマンドインジェクション) https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13782
CVE-2020-13783 機密情報のクリアテキストでの保存 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13783
CVE-2020-13784 疑似乱数生成器の予測可能なシード https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13784
CVE-2020-13785 不十分な暗号強度 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13785
CVE-2020-13786 クロス サイト リクエスト フォージェリ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13786
CVE-2020-13787 機密情報のクリアテキストでの送信 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13787