株式会社セキュアイノベーション
Menu

セキュリティコラム

  • Webアプリケーション

公開:2022.06.20 10:00 | 更新: 2022.08.09 07:25

非同期通信を実現するWebSocketについて

私はWebアプリケーション診断を専門としていますが、診断時に通信を確認すると最近WebSocketを見かけるようになったのでその通信について書いていきたいと思います。

WebSocketとは?

Web 上でクライアント(Web ブラウザ)・サーバー間を常時接続にしておいて、双方向通信を低コストで実現するための技術規格で、セキュアな通信としてプロトコル(wss)があります。

クライアントからのリクエストがなくても、常時接続しているのでサーバーからクライアントに好きなタイミングで通信ができるということを実現できるのが WebSocket です。

例えば、チャットアプリでは、複数のユーザーが同じページを見ているような状況で、誰かの発言が他のユーザーのページにもページのリロードなしでリアルタイムに更新されるようにしたい、ということがあると思います。

この「リアルタイムに更新」という機能を実現するためには、誰かが発言したということを サーバーからクライアントに伝える必要がありますが、このような機能をWebSocketは実現します。

WebSocketの通信フロー

クライアントとサーバー間の標準のWebSocketインタラクションには、次の手順が含まれます。

  1. クライアント→サーバー(WebSocket Request)
     クライアントは、HTTPSWebSocketハンドシェイク要求を送信することによってサーバーへの接続を開始します。
  2. サーバー→クライアント
    2-1.サーバーは、ステータスコード101スイッチングプロトコルでハンドシェイクの応答を返します。(Accept WebSocket)
    2-2.サーバーはメッセージをクライアントに送信します。(Message)
  3. クライアント→サーバー(Close WebSocket)
     クライアントは最後にWebSocket接続を閉じます。
通信フロー

また、リクエスト内容はこのようになります。

通信の検証内容は、下記になります。

WebSocketへの攻撃の影響について

WebSocketハイジャック攻撃は、XSS、SQLインジェクション、XXE、機密情報の開示、MiTM攻撃、サービス拒否攻撃などの多くの脆弱性につながる可能性があります。

悪用可能な場合、これらの攻撃は重大な結果につながる可能性があります。

WebSocketの脆弱性について

WebSocketの脆弱性として、以下が挙げられます。

  1. 暗号化されていない通信
  2. クロスサイトWebSocketハイジャック(WebSocketを使用したCSRF)
  3. ネットワークを介した機密情報の開示
  4. サービス拒否
  5. クロスサイトスクリプティング

診断項目について

診断時、WebSocketでは以下のような項目を検証します。

  1. アプリケーションは、wssの代わりにwsを使用した通信を許可しますか?
    ※ WebSocket Secure (WSS) は WebSocket の暗号化バージョンです。
  2. 送信されたメッセージの入力検証はありますか?
  3. Originヘッダーがチェックされていますか、それとも独自のドメインをそこに書き込むことができますか?(GETリクエストにランダム化されたCSRFトークンがない場合は、それを悪用してみる。)
  4. 無制限のクロスドメインコールを送信してDoS攻撃を引き起こすことは可能ですか?
    ※WebSocketは、デフォルトで無制限のクロスドメイン呼び出しを許可します。

まとめ

今回の記事では、WebSocketの概要と脆弱性についてご説明しました。

WebSocketにおいてもPOSTやGETなどのhttp通信と同じようにXSS、SQLインジェクションなどの脆弱性を含んでいます。

新たな技術規格を取り入れた際は、セキュリティのテストも必要となりますのでWebアプリケーションに潜む脆弱性を継続的に診断及び改善しシステムの安全性を維持することを推奨します。

サービス紹介:セキュリティ脆弱性診断

最新のコラム記事

LOADING...

セキュアイノベーション サービス一覧

ネットワーク・サーバー

Webサイトを守る