Shikata Ga Nai

Private? There is no such things.

WebSocket セキュリティ診断マニュアル

Hello there, ('ω')ノ

🎯 1. WebSocketとは?

WebSocket は、HTTPのようなリクエスト/レスポンス型通信とは異なり、 ブラウザとサーバ間で双方向の通信を常時維持するプロトコルです。

ws:// または wss://(セキュア) で始まり、チャット・ゲーム・株価などリアルタイム通信に多く使われます。


⚠️ 2. WebSocketのセキュリティリスク

リスク 内容
🔐 認証・認可の不備 ログインしていないのに接続できる/他ユーザのデータが取得可能
🧨 メッセージ改ざん・送信 本来許されない操作を送信できてしまう
🕵️‍♂️ 情報漏洩 意図しない情報を受信できる(チャット、ログなど)
🔄 セッション継続の欠如 ログアウト後も接続が切れない/認可が更新されない

🧭 3. チェックすべきアプリ機能

機能 備考
💬 チャット 他ユーザへの送信・読み取り
📊 リアルタイム通知 通知先の切り替え、意図しない対象への送信
🕹️ ゲーム・操作反映 他プレイヤーのアクションを再現できるか
🧾 ログ配信 管理者向けログが誰にでも配信されないか

🛠️ 4. 診断手順(基本)

  1. ブラウザの DevTools(F12)→ Network → WS タブ を開く
  2. WebSocket接続(ws://wss://)を探す
  3. 送受信されるメッセージ内容を記録
  4. Burp Suiteや拡張でメッセージを再送・改変
  5. 想定外の操作やレスポンスが返るか確認

🧪 5. テストメッセージ例

📤 メッセージ改ざん(送信側)

{
  "action": "deleteUser",
  "user_id": "2"
}

→ 本来管理者しかできない操作が通ってしまうか?


📥 情報漏洩(受信側)

{
  "from_user": "admin",
  "message": "秘密の通知内容"
}

→ 一般ユーザでも受信できるか?


🔍 6. 確認ポイント

チェック 確認方法
🔐 認証は適切か? 認証なしでもWebSocket接続が確立する?
🧾 接続後の認可はあるか? ユーザAで接続し、ユーザBの情報が届く?
🔄 ログアウト後に切断されるか? 接続が継続したまま?再利用できる?
🧪 JSONの中身は検証されているか? action, user_id, message などを変更して不正操作できる?

🧰 7. 診断ツール

ツール 用途
Burp Suite(Extender → WebSockets) 通信の観察・改変
Browser DevTools(F12 → WSタブ) 通信内容のリアルタイム確認
wscat(CLIツール) 手動でWebSocket通信を送信・受信できる
WebSocket King Client(Chrome拡張) GUIで使えるWebSocketクライアント

🧱 8. 安全なWebSocket設計のポイント(診断時のチェック)

対策 内容
HTTPS + WSS の使用 常に暗号化された通信を利用(wss://
トークン・セッションチェック 接続時に認証トークンの検証があるか
メッセージごとの認可チェック すべての操作がユーザの権限内で行われているか
サーバ側での入力検証 user_id, action, data などを信用せず検証すること

✅ 診断チェックリスト(簡易版)

チェック項目 OK 脆弱(❌)
認証なしでは接続できない
接続時にユーザのセッションが正しく反映される
他人のメッセージを送信・受信できない
不正な操作(削除など)を送っても拒否される

📌 見つけやすいヒント

  • URLに /ws, /socket, /stream などが含まれる
  • WebSocket, new WebSocket(...) の記述がJS内にある
  • 接続後に継続的にデータがやり取りされている様子

Best regards, (^^ゞ