Hello there, ('ω')ノ
📬 プッシュ通知とは?
Googleの提供する Firebase Cloud Messaging(FCM)などを通じて、アプリに通知メッセージをプッシュ配信する機能です。
- 例)LINEの新着メッセージ通知
- 例)ショッピングアプリのセール情報
🔐 ここが落とし穴
| リスク |
内容 |
| 通知に機密情報が含まれている |
例:認証コードやユーザー名、予約内容など |
| 通知の盗聴 |
旧バージョンでは暗号化されていないことも |
| 通知のなりすまし |
トークンが漏洩すると、偽の通知を送信できてしまう |
✅ 診断チェックポイント(プッシュ通知編)
| 項目 |
チェック方法 |
| 通知内容に個人情報が含まれていないか |
実機で通知を受け取り、内容を確認する |
| 通知が端末ロック中にも表示されるか |
ロックスクリーンで見える場合、意図せぬ漏洩のリスク |
| 通知トークンの扱い |
SharedPreferencesやDBに平文で保存されていないか? |
🌐 WebSocketとは?
WebSocketは、クライアント(アプリ)とサーバー間で常時接続の通信を維持し続けるプロトコルです。
チャットアプリや株価更新、オンラインゲームなど、リアルタイム性が求められる場面でよく使われます。
WebSocket ws = new OkHttpClient()
.newWebSocket(request, new WebSocketListener() {
public void onMessage(...) {
}
});
🔐 WebSocket通信の落とし穴
| リスク |
説明 |
| TLSなしで通信している |
内容が平文で流れて盗聴される |
| 認証トークンがURLに含まれている |
wss://example.com/socket?token=abc123 ←要注意! |
| 接続後の認可処理がない |
認証後の確認をせず、どのユーザーでも情報取得できてしまう |
✅ 診断チェックポイント(WebSocket編)
| 項目 |
チェック内容 |
ws://(非SSL)を使っていないか? |
通信内容が暗号化されているかを確認(wss:// 推奨) |
| 認証・認可は正しく実装されているか? |
接続後にサーバーがユーザー認証を再確認しているか? |
| 通信内容に個人情報やセッション情報が含まれていないか? |
Burp Suite + WebSocketタブなどで内容を可視化 |
🧪 実践:Burp SuiteでWebSocketを診る
- Android端末のプロキシをBurp Suiteに設定
- WebSocket通信を行うアプリを起動
- Burp Suiteの「WebSocket history」タブで通信内容をモニタリング
✅ 見るべきポイント
CONNECT リクエストに token= が含まれていないか?
- サーバーから全ユーザーの情報が届いていないか?
message データに個人情報が含まれていないか?
🛡️ 対策方法まとめ
| 項目 |
対策 |
| プッシュ通知内容の制限 |
通知には個人情報を含めず、アプリ内で詳細表示させる構造に |
| 通知トークンの適切な保存 |
暗号化して保存 or 認証付きAPIで都度取得 |
| WebSocketのTLS化 |
常に wss:// を使用 |
| 認可チェック |
WebSocket接続後にもユーザー認証をサーバー側で検証 |
| 通信ログの監視 |
WebSocketや通知APIの呼び出しログを残しておく |
✅ まとめ
- プッシュ通知やWebSocketは便利な通信手段だが、セキュリティ設計を怠ると大きなリスクに直結する
- 通知内容・通信プロトコル・トークン管理の3点を重点的にチェック
- Burp Suiteなどを活用すれば、リアルタイム通信の内容も可視化・診断可能
- 非同期・非表示の通信こそ、診断では“裏側”を丁寧に見ることが求められる
Best regards, (^^ゞ