Webブラウザの「セッションハイジャック」にご注意!

こんにちは。日々是発見が楽しみな西山です。

先日、私の友人がXのアカウントを乗っ取られてしまいました。
たまたま私は乗っ取られた直後のアカウントをタイムラインで見ていたのですが、英語の仮想通貨か投資勧誘みたいなポストがバカスカ連投されてひどい有様でした(しばらくするとX側で異常を検知したのか、制限状態になったようで止まりました)。

こういう話をすると、きっと「パスワード使いまわしてたんでしょ? ちゃんと分けないと」「二段階認証設定しないからこんなことに」みたいな反応が来ると思うのですが、残念ながら、この友人に関してはどちらもハズレです。
友人はPC-98の時代からパソコンを使いこなしていた手練の者でリテラシーもしっかりしていますし、さらに話を聞いてみると「パスワードマネージャーを使ってユニークなパスワードを設定していた」「二段階認証もGoogle Authenticatorで設定していた」とのことでした。
では、ここまでお手本通りにセキュリティを守っていた友人のアカウントが、なぜ乗っ取られたのでしょうか?
友人いわく「多分セッションハイジャックされたと思う」とのことでした。

セッションハイジャックとは

「セッションハイジャックって何? 聞いたことない」という方も多いと思います。

ブラウザで認証が必要なWebサービスにログインすると、サービス側は「ユーザーが認証済」というステータスを「セッション」として管理し、Webブラウザには識別用の「セッショントークン」がCookieとして保存されます。
その後はそのサービスへのアクセスの都度、ブラウザから「セッショントークン」を含んだCookieが自動送信されます。サービス側でこのセッションが有効である限り、そのセッショントークンを含んだアクセスは「認証済ユーザーからの有効なアクセス」だと判断され、ページを移動しても再認証は要求されません。
この状態が保持されている限り、そのブラウザがサービスにフリーアクセスだという言い方もできます。

また、この状態で「ログアウト」操作をせずにブラウザを閉じてしまうとどうなるでしょう?
ここはWebサービスの仕様によって違いますが、閉じた瞬間にセッションが無効化され再認証が必要なサービスもあれば、ブラウザを再起動しても認証済状態で継続してアクセスできるサービスもあります。XなどのSNSサービスはかなり長期間、再認証なしでアクセス可能なものが多いですね。
いずれにせよ、Webサービスの認証領域にアクセスするため「セッショントークン」というものが用いられ、有効なセッショントークンを持っているデバイスがアクセス可能になる、というのがお分かりいただけたでしょうか。

では、この「ログイン済みのユーザーであることを示すセッショントークン」を、何らかの方法で攻撃者に盗まれてしまったら……どうなると思いますか?
言うまでもなく「攻撃者がIDパスワード二段階認証、全スルーで認証領域にアクセス可能」になってしまいます。
そして正規ユーザーと同じ資格でアカウント情報を操作されてしまえば、もう終わり。パスワード、連絡先メールアドレス、二段階認証デバイスを全部変更されて乗っ取り完了です。とても簡単ですね!

セッションハイジャックの仕組み解説

防ぐにはどうすれば?

「いつ、どうやってセッションハイジャックされたか?」という点が気になりますが、友人いわく「怪しいサイトにアクセスしてしまったんじゃないかと思うが、いつ、どこのサイトだったかは分からない」とのことでした。
実際のところ、考えられる可能性はいくつもあります(怪しいサイトではないかも知れない
)。

  • マルウェア/InfostealerによるブラウザCookie等の窃取
  • 悪意あるブラウザ拡張機能
  • フィッシングなどを利用した認証情報・セッション情報の窃取
  • 対象サービス側のXSSなどの脆弱性
  • TLSを使用していない通信などからのセッションID漏洩
  • ブラウザや端末自体の侵害

「原因が分からないじゃ防ぎようがない」と言われても仕方がないのですが、「ブラウザは何かのはずみで侵害され得るものだ」という観点に立つと、被害を防いだり、少なくとも軽減するための対策は見えてきます。
「OS・ブラウザを最新版にアップデートする」「個人情報を入力させたり、Windowsの操作をさせたりするサイトからはいったん離れる」といった当たり前の対策にプラスして、気づきポイントをいくつかピックアップしてみました。皆様も今一度、自分の環境をチェックして、悪意ある侵害者から大事な情報を守れているか確認してみて下さいね。

ブラウザ機能拡張は時々棚卸しする

ブラウザの機能拡張はとても便利ですが、同時にマルウェアなどの侵入経路になってしまうことも非常に多いです。昔はまともな機能拡張だったのに、よく分からない企業に売却されて悪性ソフトウェアに化けてしまった、という話も珍しくありません。
時々機能拡張の一覧を開いて、試しに入れたけど全然使っていない、何のために入れたのか忘れた、みたいな機能拡張があればサクサク削除してしまいましょう。

ブラウザを分ける・スマホアプリを利用する

「ネットサーフィン中のうっかり」「悪意ある機能拡張を入れてしまった」という事例の対策として「そもそも大事なサイトへのアクセスは、安全な設定にした別のブラウザを使う」という対策です。
例えば普段Chromeを使っている方であれば、銀行や証券など重要なサイトへのアクセスはFirefoxを、それもできるだけ初期状態に近いものを使う。そうしておけば、万一Chromeが侵害されても価値あるサイトのセッショントークンは守れる。そんな考え方です。
また、Webサービス側で公式スマートフォンアプリが提供されている場合、それを利用することでよりセキュアな接続環境を保てます(iOSやAndroidであれば、アプリごとに独立したサンドボックス環境で動作するため)。

単体アプリのパスワードマネージャーを使う

友人はGoogle Chrome内蔵のパスワードマネージャーを使っていましたが、Googleアカウントが侵害されてしまうと他サービスのID・パスワードが共連れで盗まれる危険性があります。また、過去には脆弱性も報告されています。
1PasswordやBitwardenのようなパスワード保存専用のサービスを利用すると、強固なマスターキーや生体認証・端末認証といった保護機能を利用できます。これ一つで万能とは行きませんが、攻撃に対しより強い堤防を築くことが可能です。