0
@tomoki0sanaki

セキュリティ診断とWebRTC


概要

Webアプリケーション脆弱診断の対象としてWebRTCな案件が何度かあったので、「セキュリティ診断」という観点でWebRTCを見てみる。


WebRTC

まずは、WebRTCの概要をまとめてみた

webRTC0 (2).png

  1. まずはHTMLとJavaScriptをダウンロード
  2. STUNサーバにアクセスして、グローバルIPアドレスを教えてもらう
    (「確認くん」みたいなもの)
  3. SDP/ICEを作成して、シグナリングサーバ(http/WebSocket/etc)を経由して、他のクライアントと交換
  4. 映像/音声/データの交換(P2P)
    • Webブラウザ間が直接接続(P2P)して、映像/音声/データ交換
    • TURNサーバを経由して、疑似的なP2P通信で、映像/音声/データ交換

SDP/ICE ⇒ グローバルIPアドレスとか、対応している映像フォーマットとかをまとめた情報


SDP/ICE

  • SDP(Session Description Protocol) : メディアフォーマットとか、グローバルIPアドレスとか、通信帯域とか
  • ICE(Interactive Connectivity Establishment) : 自分と相手のWebブラウザ間での通信経路の情報。ICE Candidate とかWebブラウザ間で共有する必要がある

WebRTCと脆弱性診断の観点

以下かな...

webRTC1 (2).png

  • 暗号化
  • WebRTCを構成するサーバー群ネッワークに対してのPF脆弱性診断
  • (WebRTCに付随する)Webアプリケーション脆弱性診断
  • WebRTC のセッションハイジャック
  • WebRTCとXSS

WebRTCと暗号化

ほぼ必須。というか、確実に必須。

https(HTTP over SSL)とかwss(WebSocket over SSL)やRSTP(RTP over SSL)など、SSL/TLSは必須。

暗号化されていないと、WebSocketの通信ができないとか、カメラにアクセスできないとか、本番運用上はいろいろと不都合があるので、SSL/TLSは必須。

必須というか、SSL/TLS化していないと、そもそも(本番運用として)まともに動作しないと思う。
マルチメディアを用いないWebRTCとか面白くないと思うし...

必須なので、診断という観点では省略でもいいでしょう。


WebRTCを構成するサーバー群ネッワークに対しての脆弱性診断

私の職場では、サーバ/ネットワークなどの領域の脆弱性診断を「プラットフォーム脆弱性診断」と呼んでいるので、その領域の脆弱性診断も必要だろう

ということで、以下が対象のうち自前で構築したサーバが診断対象になるだろう

  • Webサーバ
  • STUNサーバ ← Googleが用意しているので、通常はそれをそのまま使うので、対象外になる場合が多いと思う
  • シグナリングサーバ
  • TURNサーバ ← 負荷分散などの観点から出来合いのサービスを活用すると場面が多いので、これも診断の対象外になる場面が多いと思う

さらに対象システム専用に以下を用意していれば、それらも対象だろう

  • Firewall
  • DNS
  • メールサーバ
  • etc

(WebRTCに付随する)Webアプリケーション

だれでも使えるWebRTCというわけにもいかないので、ユーザ登録や認証/認可などのセッション管理など、WebRTCに付随するWebアプリケーションがあるはずで、それらについてのWebアプリケーション脆弱性診断は必要だろう。


WebRTC のセッションハイジャック

知らない人とWebRTCしたいわけじゃないので、ある程度のグループ化(ルームとかいう概念)が必要でしょう。
そうなると、(認証済/匿名にて)他人の部屋に勝手に入室できたりするのはマズいわけで、、、その辺り。

ただ、このような機能はシステム全体の肝となるような機能なので、実装漏れは考えにくい。
(よほどおかしな個別実装をしていない限り、、、)
通信を見て「セッション管理できているね。おしまい」になる可能性は高いと思う。

これは、WebアプリケーションのHTTPセッションがどのようにシグナリングサーバやTURNサーバへ引き継がれるのかを観察すればいいでしょう。

WebRTC のセッションハイジャック(シグナリングサーバ)

こちらは、WebSocket/HTTP/ServerSentEvent/Commet...などHTTP近辺の通信になると思うので、通常のWebアプリケーション脆弱性診断のテクニックでなんとかなると思う。

WebRTC のセッションハイジャック(TURN)

こちらは、RSTPとかになると思うので、通常のWebアプリケーション脆弱性診断のテクニックでは困難だろう。

どうすればいいんだろう。

コメント/Twitterなどで教えてほしいところ。


WebRTCとXSS

P2Pで交換するのは、映像/音声だけではなく、データ(テキスト)も可能

それをinnerHTMLを使って画面出力しようとするとXSSになるかもしれませんよ。という単純な話。

WebRTCのデータチャネルではXSSしないので、テキストを受信したら、innerHTMLに埋め込むように無理やり改造してみた。


104:        document.getElementById('history').value = 'other> ' + msg + '\n' + document.getElementById('history').value;
105:        document.getElementById('his').innerHTML = 'other ' + msg + '\n';
106:    };

105行目に、事前に作った空のPタグ(hisというId)にinnerHTMLで表示しようとしている。

結果はこんな感じ。

WebRTC3.png

まぁ、innerHTML使っているんだから、当然といえば当然だよね...


参考URL


余談

WebRTCを無効にして情報のリークを防ぐ方法を徹底解説

こちらは、P2PのWebRTC(SDP/ICE交換などでも)なので、WebブラウザのIPアドレスが(VPN経由でも)Webサーバや他のWebブラウザに漏れるよ。
という利用者側のセキュリティの話


その他

上記以外の観点があるのであれば、コメント欄などでリンクしてくれれば、読者はより良いコンテンツへ誘導できると思う。


以上

ユーザー登録して、Qiitaをもっと便利に使ってみませんか。
  1. あなたにマッチした記事をお届けします
    ユーザーやタグをフォローすることで、あなたが興味を持つ技術分野の情報をまとめてキャッチアップできます
  2. 便利な情報をあとで効率的に読み返せます
    気に入った記事を「ストック」することで、あとからすぐに検索できます
tomoki0sanaki
最初の「IPA ISEC セキュアプログラミング講座」の執筆陣の一人「https://www.ipa.go.jp/security/awareness/vendor/programmingv1/index.html」 「セキュアWebプログラミングTips集」著者「https://www.amazon.co.jp/gp/product/4883732568/」

コメント

この記事にコメントはありません。
あなたもコメントしてみませんか :)
ユーザー登録
すでにアカウントを持っている方はログイン
記事投稿イベント開催中
SORACOMを使ったIoTにチャレンジしよう!
~
Auth0を使ってID管理にまつわる記事を投稿しよう!
~