ニコニコ動画のユーザーセッションが暗号化されていない件について(追記あり)
この記事は移行作業中です。レイアウトが崩れる場合があります。
目次
※追記(2018年10月18日) 2018年10月に問題は解決しました。 「ニコニコ動画の通信が暗号化された件について」この記事は過去にこのような問題があったという観点で閲覧してください。
2018年6月28日現在、ニコニコ動画はログイン画面以外の多くのページで通信の暗号化がされていない。
会員サイトである限り、アクセスの度にアカウントを特定できる情報のやりとりはされているはずで、通信の暗号化をせずに運用している状況が理解できない。
運営への問い合わせ(2018年5月11日)を行い、追って連絡すると返信が来た。
今日、ちょうど ニコニコGINZA から ニコニコ(く) へのアップデートが行われたが、未だにこの件について改善された様子はない。
私だけが悩んでいても仕方ないので、個人で調べたことを記事にまとめることにした。
はじめに #
ニコニコなら技術者は確かな能力をもつ人間がたくさんいると思う。
ニコニコ動画が誕生して10年以上経ってもなお放置されている状態であるが上に、この問題に対して自信を持てない。
私の浅墓な知識が生んだ誤解であることも考えられるので、小さな間違えでもコメントで指摘していただけると幸いです…
SSLとは #
インターネット通信を暗号化するもの。
相手に届くまでの間、誰かにのぞき見されたり改ざんされたりしない。
ニコニコのSSLページの状況 #
SSL化されたページはいくつか確認することができた。
2018年6月28日現在で、証明書が「Let’s Encrypt Authority X3」「GlobalSign Organization Validation CA」「Cybertrust Japan」「Amazon」「RapidSSL」「DigiCert ECC Secure Server CA」から発行されていた。
一部のサービスには利用されているらしい。
先述の通り、ログイン画面である account.nicovideo.jp はSSL化されており、パスワードは安全に送信できる。
しかし、メインサービスのニコニコ動画やニコニコ生放送ではSSL化されていない。
ユーザーセッションとCookie #
会員サイトでは、はじめにIDとパスワードを用いて認証を行う。
認証成功時に「セッション」と呼ばれる文字列が発行され、ブラウザのCookieにてその文字列を保管する。
「セッション」はログアウトするまで使うことができ、一時的なパスワードの役割を果たす。
アクセスの度に自動送信することで、ログインしたままの状態を保つことができる。
つまり、アクセスする度にパスワードの代わりとなる文字列を送信しているので、IDとパスワードを入力するとき以外でも安全な通信を行う必要がある。
ニコニコでは「user_session」という名前のCookieで保管されている。
問題点 #
「アクセスする度にパスワードの代わりとなる文字列(ユーザーセッション)を送信しているので、IDとパスワードを入力するとき以外でも安全な通信を行う必要がある。」
「ログイン画面はSSL化されているが、メインサービスのニコニコ動画やニコニコ生放送ではSSL化されていない。」
つまりニコニコのページへアクセスする度に、裸でパスワードの代わりとなるものが走っていることになる。
実際にどのようなことができるのか試してみる。
実験1. ユーザーセッションを使って別ブラウザからログイン #
ユーザーセッションがどのような役割を果たすか調べる。
1.Google Chromeでニコニコ動画にログインする。
2.Chromeに保管されているCookieの「user_session」をコピーする。
3.Firefoxでニコニコ動画へアクセスし、ログインしていない状態にする。
4.FirefoxにChromeのコピーした「user_session」を貼り付ける。
5.Firefoxでページをリロードするとログインしていることになる
ユーザーセッションはログアウトすると無効化され、再度ログインすると別のユーザーセッションが生成される。
この実験では両方のブラウザで同じユーザーセッションを利用しているため、どちらか一方でログアウトすると両方のブラウザからログアウトされる。
実験2.ネットワークを流れるデータからユーザーセッションを抜き出す #
実験1の方法では、ブラウザの操作を行わないとユーザーセッションの取得ができない。
今回の問題である「暗号化されていない通信」を別の端末からネットワークを解析し、ユーザーセッションを取得してみる。
解析には「Wireshark」というソフトを使用した。
ルーターとパソコンの間に傍受用コンピューターを挟んでブリッジする環境で実験を行った。
インターネット <—> LANケーブル <—> ルータ <—> LANケーブル <—> 傍受用コンピュータ <—> LANケーブル <—> パソコン
1.通信の解析を開始する。
2.パソコンのChromeからニコニコにログインする。
3.ユーザーセッションを探す。
4.あった。
見事に丸裸で送られている。
今回は自宅のローカルネットワーク内の実験であったが、この丸裸の状態はニコニコのサーバーまで変わらない。
そのため、通信経路の途中で誰かに傍受されてしまうことも考えられる。
ユーザーセッションを使ったログインでどこまでできるのか #
ニコニコ側のCookie設定により、「nicovideo.jp」というアドレスが含まれるすべてのサイトでログイン状態になれる。
例:「 http://www.nicovideo.jp」「 http://live.nicovideo.jp」
動画の視聴、コメントの投稿、動画の投稿まで問題なく行えた。
投稿した動画「 http://www.nicovideo.jp/watch/sm33147240」
パスワードやメールアドレスの変更には、現在使用しているパスワードが必要になるため、完全に乗っ取られてしまう可能性は低い。
しかし、ログアウトボタンを押すまでの一時的なものとはいえ、乗っ取られていることに変わりはないと思う。
そもそも、利用が終わったあとに毎回ログアウトボタンを押している人がそれほどいるとは思えない。
暗号化されたサイトならまだしも、ニコニコは改善されるまでログアウトボタンを押すようにしたほうが良いかもしれない。
ユーザーセッションでログインするとログイン履歴が残らない #
ニコニコ動画では、不正なログインがないかをチェックするためにログイン履歴を見ることができる。
アカウントログイン状況「 https://account.nicovideo.jp/my/history/login」
しかし、ここに残るのはメールアドレスとパスワードを使ってログインした履歴で、ユーザーセッションを利用したアクセスの履歴は残らない。
ここでは身に覚えのないログインもきっとみつかるはずです。(大嘘)
解決策 #
解決策はSSL化しかないのではないでしょうか。
SSL化以外にあるのであれば是非ご教授願いたい。
まとめ #
・ログイン画面は安全(SSL)
・パスワードの代わりとなるユーザーセッションが危険な状態で送信されている(非SSL)
・ネットワークからユーザーセッションを盗める
・ユーザーセッションがわかれば他人がログインできる
・メアドとパスワードの変更まではできない
・SSL化すれば解決かもしれない
さいごに #
こんなガバガバセキュリティーで企業が10年以上も大規模サイトを運営しているとは考えられない。
ニコニコに問い合わせても安全性を証明する返事がもらえない。
誰かがこの記事の内容を論破して、安全性を証明してもらえると嬉しい。
事実なら早く対処して。