
で、クッキーはどう使われてるの?(394号)
前回は、クッキー(cookie)のお話をしましたが、どんな風に使うものかまでは書き切れませんでした。
今回は前回の内容を踏まえ、クッキーはどんな風に利用されるのか、またクッキーを悪用した攻撃方法はあるのか?といった点をお話します。
クッキーとは(おさらい)
元々Web(いわゆるインターネット)というサービスは全ての人に同じページを提供することしかできませんでした。
ですが、このままではオンラインバンキング、ショッピングサイト、SNSといった個人毎に違うページを表示できません。
それを実現するためにはいろいろな案が考えられたのですが、現在も生き残っているのがクッキーという手法でした。
クッキーは、ごくごく小さなデータ(多くは100文字以下程度)で、アクセス先のサーバが生成する値です。
サーバは、利用者のブラウザ(ChromeやSafariといったWebページを見るためのアプリ)に返事(Webページの内容)をする時に「これも覚えといてね」とクッキーを渡します。
ブラウザはクッキーを受け取っても何も表示しません。だからといって捨てるわけではなく、内部に保管しておきます。
利用者が、同じサービスの中で別ページのリンクをクリックすると、ブラウザはそのURLに加えて保管しておいたクッキーの値もサーバに送り返します。
サーバはブラウザからURLのリクエストとクッキーを見て「ははーん、これはさっきアクセスしてきたAさんだな」というのを識別して、Aさん専用のページを作ってそれをブラウザに返します。
ブラウザは返ってきた情報をページに表示すると、ちゃんとAさん専用のページになっている、というわけです。
クッキーの使われ方
少々複雑ですが、実際にクッキーがどのように作られて、どのように送受信されるのかを図示します。
ここでの登場人物は次の通り。
利用者:パソコンやスマホを使ってサービスを利用している人
ブラウザ:パソコンやスマホで動いているアプリ
サーバ:サービスを提供している会社のサーバ
ひどく複雑なことをしているようですが、クッキーの前提となるWebサービスが複雑なのも理由の一つですので、ここでは「なんとなーくのふわっとした」理解で大丈夫です。
■ 最初に(ログインなどを行って)サーバに通信する時
ブラウザ
↓ 0. ログインページを表示する。
利用者
↓ 1. ログイン情報(IDとパスワード)を入力する。
↓ 2. 「ログイン」ボタンを押す
ブラウザ
↓ 3. ログイン依頼(URL)をサーバに送る
サーバ
↓ 4. ログイン処理(IDとパスワードの認証)を行う
↓ 5. 利用者IDに合った「ようこそ」ページを作る
↓ 6. 利用者IDを識別するためのクッキーを作る
↓ 7. ページの情報+クッキーの2つを送る
ブラウザ
↓ 8. クッキーを内部に保管する
↓ 9. 「ようこそ」のページを表示する。
利用者
■ 利用者がそのページでリンクをクリックした場合
利用者
↓ 1. 気になるリンクをクリック
ブラウザ
↓ 2. 保管しておいたクッキーを取り出す
↓ 3. クリック先の情報(URL)+クッキーを送信する
サーバ
↓ 4. クッキーを見て、リクエスト元の利用者IDを知る
↓ 5. 利用者IDに合ったページの情報を送り返す
ブラウザ
↓ 6. 次のページを表示する。
利用者
クッキーというのはページ上には全く表示されないのですが、こうやって裏ではブラウザとサーバの間で頻繁にやりとりされます。(もちろんクッキーを必要としないサイトではクッキーは作られません)
クッキーは安全なのか?
2023年頃から、あちこちのサイトで「cookieの利用について」という利用許諾のポップアップ画面が表示されるようになりました。
こんなのを見ると「はい」するとヤバいんじゃないの?とか、妙な悪用されるんじゃないの?、と不安に感じる方もおられることでしょう。
先に結論を書きますと、クッキーには一般的に機微な(ヤバイ)情報は入りません。
例えば、ページを何語で表示するか(言語情報)や、金額表示方法(通貨情報)には、クッキーがよく使われますが、これが洩れても大した被害にはならないでしょう。
クッキーに何を入れるかは、サービス側で決められますから、中には怪しいサービスもあるかもしれませんが、通常はヤバい情報はクッキーには入れません。
それでも気にしておいた方が良いお話が2つほどあります。
・セッションハイジャック攻撃
・サードパーティクッキー
セッションハイジャック攻撃
多くの通販サイトやSNSではログイン情報をクッキーで保管しています。
と聞くと、「いやいや、盗まれたらどうすんのよ」と言いたくなる方も多いでしょう。
もちろん、本当に盗まれると困るのですが、それが大きな被害にならないような仕組みが存在しています。
ログイン情報をクッキーに保管する場合「セッションキー」という一時的な符丁を使うのが一般的です。
セッションキーの中味は(数十桁の)ばかでかい数字とすることが多いです。
数十桁の値ともなると偶然にアタる可能性などほぼゼロですので、事実上安全という考え方です。(この事実上安全というのは暗号理論でもよく登場する考え方です)
セッションキーは、利用者がログインした時に、サーバ側でランダムに付与し、それをクッキーの値として、ブラウザに返します。
この時、サーバ内には、利用者IDとセッションキーをペアにして符丁表に追記します。
次にブラウザからクッキー付きのリクエストが届くと、まずクッキー内の値を見て、その値が符丁表にあるかどうかをチェックします。
クッキーが正当なものであれば、必ずペアになる利用者IDが見つかるはずです。
うまく見つかれば、その利用者専用ページを作るというわけです。
さて、このセッションキーが何らかの事情で洩れる可能性はあります。
例えばパソコンがマルウェアに侵入された場合、無線通信が傍受された場合、などですね。
こうやって不正に入手したセッションキーを用いた攻撃をセッションハイジャック攻撃と言います。
この攻撃を100%避ける方法はありません。
傍受を完全に防ぐことはできないからです。
ところが、意外なことにセッションキーを使った攻撃が致命的となるケースはかなり稀です。
いくつかの対策が既に存在しているからです。
一つ目はセッションキーを短時間で無効にするという対策です。
セッションキーの有効時間は短かいものでは30分、長いものでも1週間程度となっています。つまり、ずっと使える情報ではないので、セッションハイジャック攻撃を行うためにはセッションキーを入手するとスグにそれを使った攻撃をしなければならないのです。
二つ目は、重要なページに遷移する時には改めてパスワードを入力させるという方式です。
例えば、多くの通販サイトではカートへの商品追加は自由にでき、チェックアウト(購入ページへの移動)しようとすると、パスワードを改めて聞いてきますよね?
また、クレジットカード情報のページやマイアカウントといった個人情報ページへの移動時にもパスワードを聞くサービスも多いです。
あれって面倒ですよね?
ですが、あれって非常に有効なセッションハイジャック攻撃対策なんです。
セッションキーを不正に入手できても、正しいパスワードはわかりません。攻撃者はクレジットカード情報が欲しくても、そのページに移動する時にパスワードを再入力させられると手が出ません。
「既にログインしているのに何度もパスワード入力しないといけないウザいサービス」ではなくて、実はセッションハイジャック攻撃対策を取っているセキュリティ対策できているサイトなんですね。
サードパーティクッキー
次はちょっと違った視点のお話です。
現在は、利用者に知らせずに勝手にクッキーを保管するのは良くないとされていますが、少し前(2022年の法改正前)までは何も制約がありませんでした。
そのため、マーケティング情報を販売しているサービスでは、クッキーを用いた様々な追跡サービスを提供していました。
例えば、同じ人が複数のサービスで似たような商品を購入した場合、その全てを集約できれば、その人物に対して、ヒット率の高いオススメ商品の紹介ができます。
ですが、通常の方法では他サービスでのクッキーなど取得できるはずがありません。
これを乗り越えるために、複数サービスでの利用者のアクセス情報を第三者(マーケティングサービス会社)に提供するという手法が生み出されます。
この第三者(マーケティング会社)への情報提供を目的としたクッキーのことをサードパーティクッキーと言います。
なお、自分達のサービス実現に欠かせないクッキー、例えば上述のログイン情報などはファーストパーティクッキー(自社向けクッキー)と呼ばれます。
最近は減ってきていますが、初めて利用したサービスなのに、あたかも自分の趣味や居住地を知っているかのような広告が出てくることありますよね。あの全てではありませんが、かなりの部分がサードパーティクッキーによるものです。
最初に書いた通り、このサードパーティクッキーは法規制の対象となったこともあり、現在はかなり下火です。
ちなみに、サードパーティクッキーは多くのブラウザで無効化(ブラウザに保管させないこと)ができます。
メニューの中にある「シークレットウィンドウ」だとか「プライベートウィンドウ」といったものがそれです。
気になる方は利用されてはいかがでしょうか。
まとめ
前回は、クッキーの導入編でしたが、今回はその応用編として、クッキーがどのように使われているのか、という点についてお話しました。
クッキーには、何でも入れることができますが、最近では、サービス実施側もセキュリティリスクを避けるためか、かなり慎重な利用が一般的になってきています。
特にサードパーティクッキーの利用が下火になったため、プライバシーを侵害せずに個別マーケティングが行えるような手法が開発されているようです。
なお、ご自身のパソコンやスマホに保管されているクッキーはいつでも見たり、削除したりすることができます。ご利用のブラウザの設定画面で、「クッキー」や「cookie」で検索してみてください。
サービス毎にいろいろと工夫されているのがわかります。開発者でなくても意外に面白い発見があるかもしれません。
今回はクッキーの使われ方やセキュリティリスクについてお話しました。
次回もお楽しみに。
(本稿は 2025年2月に作成しました)
このNoteは私が主宰するメルマガ「がんばりすぎないセキュリティ」からの転載です。
誰もが気になるセキュリティに関連するトピックを毎週月曜日の早朝に配信しています。
無料ですので、是非ご登録ください。
https://www.mag2.com/m/0001678731.html
弊社の窓口( info@egao-it.com ) にメールをお送りいただいてもOKです。