Nozomi Networks Reolink社は、一般的に使用されているセキュリティカメラのPeer-to-Peer(P2P)機能に脆弱性を発見しました。私たちの研究は、ICS-CERTとの協調開示につながり、ICSA-21-019-02アドバイザリを発表しました:本日、Reolink P2P カメラが公開されました。
ReolinkのカメラとNVR(ネットワーク・ビデオ・レコーダー)は、一般的に家庭や中小企業で使用されているが、2つの点で重要なインフラや産業事業者に関連している。
1つは、OT ネットワークを含め、施設で使用されている可能性があること。二つ目は、P2Pはいくつかのカメラベンダーによって使用されており、CCTVソリューションにこの機能がある場合、潜在的なリスクを理解することが重要です。
このブログでは、これらのIoT セキュリティ脆弱性を発見するために私たちがたどった道のりを説明し、セキュリティチームや研究者に関連する技術的な詳細を紹介する。
IoT 防犯カメラにおけるピアツーピア機能とそのセキュリティ上の意義
ピアツーピア(P2P)とは、セキュリティ・カメラの場合、クライアントがインターネットを通じて透過的にオーディオ/ビデオ・ストリームにアクセスできる機能のことです。ビデオ・データはカメラから、またはNVRからアクセスできます。
P2P」は、ユーザーが明示的にファイアウォールを設定し、クライアントがビデオデータを持つデバイスに到達できるようにするのではなく、一般的に「ホールパンチング」という包括的な用語で定義される一連の技術によって接続を確立する。技術的な詳細は、この機能を提供するベンダーやサードパーティのプロバイダによって異なる。しかし、典型的なシナリオでは、インターネットに接続可能なノードが、オーディオ/ビデオストリームにアクセスしたいクライアントと、データを提供するデバイスとの仲介役を果たす。
2020年8月、セキュリティ研究者のPaulMarrapese1氏は、いくつかのベンダーのP2P実装に影響を与えるセキュリティ上の問題を詳述した広範な研究2を発表した。これらの脆弱性を悪用することで、攻撃者はオーディオ/ビデオストリームを自由に傍受することができる。
Marrapeseの素晴らしい業績で私たちが最も懸念したのは、特定された問題の影響を受けるエンドユーザーの数が非常に多いこと、そしてP2P機能がどのように機能するかを説明する公式文書が不足していることでした。私たちのラボにあるいくつかのデバイスを調べることで、カメラの "P2P "機能を使用することのプライバシーとセキュリティへの影響がユーザーに明確に説明されていないことが明らかになった。
このことに気づいた私たちは、この状況をさらに調査することにした。私たちの研究目標は通常2つあります。第一に、OT ネットワークや施設内のカメラで、知らず知らずのうちにP2P機能を実行している可能性のある産業事業者を保護したい。第二に、P2P実装のセキュリティ・レベルに光を当て、セキュリティ・コミュニティ全体と調査結果を共有することです。
Reolink CCTVカメラP2Pの概要
まず、ReolinkのCCTVカメラ一式とそれに対応するNVRを用意し、P2P機能が最初に存在するかどうかの調査を開始した。Reolinkのウェブサイトのサポートセクションで説明されているように3、デバイスのユーザーインターフェースでは、P2Pの代わりに「UID」という用語が使用されています。UIDを有効にしたNVRを起動した後、ネットワークトラフィックを検査したところ、ホストp2p.reolink.comと複数のUDPパケットが交換されていたため、P2P機能が動作していることにすぐに気付きました。
私たちの評価の範囲は、インターネットを横断する際にオーディオ/ビデオストリームがどのように保護されているかを理解することに限定されていることを強調しておかなければなりません。私たちのラボでは、Reolink デバイスから発信されるトラフィックのみを記録し、デバイスとクライアントがどのようにストリームを作成し、再生するかを分析しました。私たちは、Reolinkサーバーに対していかなる活動も行っておらず、またいかなる種類の偽トラフィックも送信していません。Reolinkサーバーに到達したトラフィックは、常にReolinkソフトウェアによって作成されたものでした。
私たちが分析に使用したセットアップは、ベンダーがP2Pアーキテクチャの説明で説明したものと同じである:
- NVRは、同じローカル・ネットワークを通じてセキュリティ・カメラに接続され、オーディオ/ビデオ・ストリームを生成するP2Pサーバーの役割を果たします。
- Reolink P2Pサーバー」はベンダーが管理するサーバーで、クライアントとNVRが接続を確立できるように仲介する。
- モバイルまたはデスクトップアプリケーションのいずれかのソフトウェアクライアントが、インターネットからオーディオ/ビデオストリームにアクセスする。
調査を開始する前に、ReolinkのP2P実装に関する調査がすでに行われていないかどうかを把握するため、背景調査を行った。私たちはジョージ・ヒリアードのブログ4で、彼がReolinkのデバイスとクライアントがローカル・ネットワーク内で使用するプロプライエタリ・プロトコルを文書化しているのを見つけた。これは興味深い手始めの場所となった。
提供されたディセクタを使ってローカル・トラフィックを分析することで、TCPストリームを簡単にナビゲートすることができた。これらは、独自プロトコルの「シグナリング」部分とオーディオ/ビデオ・コンポーネントを運んでいた。特に、シグナリングパケットが8バイトの些細なキーで難読化されていることに気づいた。この知識を得て、P2Pトラフィックに注目した。
NVRとReolink P2Pサーバー間の通信
まず、NVRとReolink P2Pサーバー間でやり取りされるトラフィックのみを分析したところ、やり取りされるUDPパケットにいくつかのパターンがあることにすぐに気づいた。この観察から、ローカル・ネットワーク・プロトコルで使用されているような難読化戦略を、インターネットを横断するトラフィックに採用できるのではないかと考えた。これらのパケットの作成を担当するNVRのバイナリを逆アセンブラにロードすることで、ネットワークI/Oを担当する関数を突き止めた。そこから、ハードコードされたキーを使用して難読化を実行するコードを発見した。
最も明白な次のステップは、先ほど特定したキーでUDPペイロードを明らかにしようとする小さなスクリプトを作成することだった。以下は、最初の3つのパケットで得られた出力である:
UDPペイロードの最初の3つのパケットは、小さなスクリプトと我々のチームによって特定されたハードコードされたキーを使用して明らかにされる。
平文プロトコルへのアクセスは、P2Pサーバーが実行する操作の理解を深めるための最初のビルディング・ブロックであった。
P2PクライアントとReolink P2Pサーバー間の通信
NVRとReolink P2Pサーバー間のクリアテキスト通信にアクセスできることを確認したら、次はP2Pクライアントを導入する番だ。クライアント・アプリケーションは、モバイル用とデスクトップ用の両方から選ぶことができる。分析上、どれも同じプロトコルを使用しているため、実用上の違いはない。
われわれは同じ手法で研究を進めた。クライアントとReolinkサーバー間の難読化された通信を検査することで、いくつかのことが推測できた:
- The Reolink server gives the IP address / UDP port pair of the NVR server (<dmap> tag) to the client.
- Reolinkサーバーは、後にクライアントがNVRを認証するために使用するsid値も送信します。
- The client acknowledges the IP address / UDP port of choice for the relay functionality to the Reolink server (<relay> tag). (Discussed more later in this article.)
上のコードは、ReolinkサーバーとクライアントがIPアドレスとUDPポートのペア情報、およびNVRとの認証に使用される値を通信していることを示しています。
NVRとP2Pクライアント間の通信
すべてのピースが揃ったことで、P2PクライアントがNVRとどのように通信するかをようやく理解することができました。NVRがReolinkサーバーに登録されていることが前提条件であることは言うまでもありません。
驚いたことに、NVRとP2Pクライアント間の通信でさえ、安全な鍵交換が行われていなかった。むしろ、これまでネットワークトラフィックを明らかにするために使用したのと同じハードコードされた鍵が、依然として有効だったのだ。次に、Reolinkサーバーから与えられたsid値を使用して、P2PクライアントがNVRに対してどのように自身を認証するかを分析することができました。
P2Pクライアントは、Reolinkサーバーから与えられたのと同じsid値を使用してNVRを認証します。
P2Pクライアントに返信する前に、NVRはReolinkサーバーからcmapタグを通してクライアント接続の通知を受け取ります。P2PクライアントはNVRと認証され、オーディオ/ビデオストリームの要求を開始できます。
CVE-2020-25169 - P2P ビデオ/オーディオの暗号化とストリーム再構築の欠如
CWE-319:機密情報の暗号化送信の再構築
後で分析するために、クライアントからオーディオ/ビデオストリームを要求し、トラフィックを生成した。オーディオ/ビデオデータを伝送するパケットで最初に顕著な変化は、特定のヘッダー・マジック、すなわち0x2a87cf10である。
目立つ他の明白な要素は、01dcH264のようないくつかの平文の「キーワード」の存在であった。これは、ペイロードの安全な暗号化が完全に欠落している可能性を示唆した。クライアントから見たストリームを適切に再構築するために、残りのヘッダーフィールドの特定を進めた。それが終わると、オーディオ/ビデオコンテンツを平文で再現することができた。
この設計上の選択の結果、インターネットを通過するクライアント/NVRトラフィックにアクセスできる者は誰でも、そのオーディオ/ビデオペイロードにアクセスできることになる。
状況によっては、クライアントとNVR間の接続が十分に安定しないことがあります。このような場合、Reolink P2Pの実装では、P2Pサーバーが中継ノードとして動作し、事実上、中間者(man-in-the-middle)として動作することも可能です。
エンド・ツー・エンドの暗号化の欠如とリレー機能を組み合わせると、事実上、平文のオーディオ/ビデオ・ストリームがベンダーに公開されることになる。
CVE-2020-25173 - P2P プロトコルの難読化解除と認証情報漏洩
CWE-321:ハードコードされた暗号鍵の使用
ReolinkのP2PサーバーとNVR間のプロトコル交換を調査しているうちに、別のセキュリティ問題に気づいた。このベンダーのサーバーは、NVRに登録されているローカルユーザーのリストと、それに対応する平文のパスワードもプルしているのだ。
ベンダーがこの種の情報にアクセスしたい理由を理解するのに苦労する。この設計の直接的な結果は、このネットワークトラフィックにアクセスできるアクターがローカル・ユーザーの認証情報を取得できるということです。先に説明したようにプロトコルの難読化を解除すれば、通常のReolinkクライアントを使ってNVRにログインできる。
NVRのユーザー名/パスワードはReolinkサーバーに送信されます。
ベンダーの被害軽減
Reolinkはファームウェアの新バージョンをリリースし、それによると、この投稿で取り上げた問題は軽減されている。とはいえ、P2P機能を有効にする前に、潜在的なリスクを慎重に評価することをお勧めする。また、セットアップの手間はかかるが、より強力なセキュリティを提供するVPNなどの代替手段を検討することをお勧めする。
Reolink P2P 脆弱性はIoT 防犯カメラのリスクを浮き彫りにする
IoT セキュリティカメラは、産業界や重要インフラ部門で幅広く使用されている。調査会社Markets and Marketsによると、世界のビデオ監視市場規模は2020年の455億米ドルから2025年には746億米ドルに成長すると予測されている。インフラ部門(交通、都市監視、公共施設、公共事業を含む)は、その期間中、年平均成長率が最も高くなると予想されている。
その普及と利用の拡大を考えると、IoT カメラのセキュリティリスクを理解することが重要です。音声/映像ストリームおよびCCTVユーザー認証情報への不正アクセスを防止するための対策を講じることを強くお勧めします。これを怠ると、プライバシー、機密性、ビジネス上の損害が発生する可能性があります。
参考文献
- https://twitter.com/PaulMarrapese
- 「防犯カメラにハイジャックの脆弱性」Hacked.camera.
- 「IPカメラのリモートアクセス/P2Pを無効にする方法」Reolinkサポート、2020年12月。
- 「楽しみと利益のためのReolinkカメラのハッキング」、ジョージ・ヒリヤード、&> /dev/nullブログ、2020年5月16日。
- 「IP Camera P2P & How Does a P2P Camera Work,"Reolink, November 4, 2020.
- "Wireshark dissector for Baichuan/Reolink proprietary IP camera protocol,"George Hilliard, Github, November 30, 2020.
- 「ビデオ監視市場」Markets and Markets。
- "12/07/2020 Reolink RLN4-410、RLN8-410、RLN8-410-E、RLN16-410用ファームウェア(H3MB02)",Reolink Support, January 4, 2020.