【情報処理安全確保支援士】HTTPに関するセキュリティリスクについて(その4): Cookieに対するセキュリティについて

2021年11月28日日曜日

HTTP セキュリティ 情報処理安全確保支援士

t f B! P L


 HTTPに関するセキュリティリスクについて(その4)



前回の記事「HTTPメッセージのレスポンスヘッダによるセキュリティ対策」


     Cookieに対するセキュリティについて


Cookieの利用目的は主にセッション管理やユーザーのページ設定の保存、ユーザーの行動記録の用途に使用され、情報はブラウザに保存されています。

 

しかし、Cookieの脆弱性に対するリスクやGDPRなどによる個人情報保護の観点からsafariFirefoxiOSトラッキング防止や事前同意などの対応が行われています。

日本でも2022年の改正個人情報保護法施行によりCookieを利用したトラッキングの事前同意が義務化される見込みとなっています。

 

トラッキング機能だけに限らず、Apple20203月に「Safari」でのサードパーティCookieをデフォルトで全面的にブロックしています。

また、Googleの「Chrome」も2023年末にサードパーティCookieを廃止する計画をしています。

 

サードパーティCookieはユーザーが見ているサイト以外の他サイトのCookieを取得して利用できるものです。例えばユーザーが見ているページに貼られている広告は広告配信サイトから発行されたCookieを使って広告を選別しますが、そのCookieをユーザーが見ているページのサイトも利用してユーザーのターゲティングに活用できます。

 

今後は自社サイトが発行したファーストパーティCookieを活用していくことになりそうですが、Appleは「Safari」のITP2.3から「1stパーティクッキーの有効期限が7日間。トラッキング目的のトラフィックはクッキーが24時間で切れることに加えて、クッキー以外のストレージデータも最大7日間で無効となる」としました。

JavaScriptで発行されたファーストパーティCookieは有効期限が1日以内)

 

Webブラウザのバージョンアップにより、ある日突然、KPIが下がったりログインできなくなったりする事態が自社の運営するWebアプリケーションで発生するかもしれません。

今後、主ブラウザの各社による対応を注視していくことが必要になってきます。



     Cookieの設定に対する対策


Cookieに設定できる属性






・利用者が悪用するリスク

Cookieテキストデータでブラウザ毎に保存されますが、利用者自身は全てのCookieを見ることができ、変更することが可能です。

重要な情報は暗号化されたテキストで保存されていますが、この暗号化のアルゴリズムの強度が弱く解析されてしまった場合は悪用されることがあります。

 

例えば、CookieにユーザーIDからセッションIDを生成したものを暗号化して保存しており、セッションIDの検証のみでセッションが確立できる場合は、攻撃者がユーザーのIDを取得もしくは推測できてしまえば自分でセッションIDを生成しユーザーになりすましてアクセスすることができてしまいます。

 

セッションIDは生成アルゴリズムに暗号論的疑似乱数生成器を用いるなどして予測困難なものにするか、セッション管理の仕組みが提供されている環境であれば自前でセッション管理を構築しようとせずにそういった仕組みを活用ことも検討したほうが良いでしょう。



Cookieが流出するリスク


expires属性とmax-age属性

Cookie有効期限が短いほどリスクは低くなるのでこれらの属性を使用して適切な有効期限を設定します。指定が無い場合Cookieが一時キャッシュに保存されているのでブラウザが閉じると消えます

 

domain属性

domain属性は指定しない状態が最も安全です。複数サーバに生成したCookieを送信したい場合にCookieを生成したサーバのドメインを指定することで同じドメインの他のサーバとCookieを共有することができますが、情報漏えいのリスクが高くなるので指定しない方が良いでしょう

 

path属性

path属性はディレクトリ毎に異なるCookieを送れるなどの場合に使用できますが、特に安全性やセキュリティリスクを高めるなどの影響はありません。

 

secure属性

HTTPS通信を利用していてもsecure属性のついていないCookieHTTPSHTTPの通信では平文で送信されるため盗聴のリスクがあります。

secure属性を指定することでHTTPS通信のときだけCookieを送ることができますが、HTTPHTTPSが混在しているWebアプリケーションではページによっては動かなくなることもあるので注意が必要です。

サイト全体がHTTPSで作られているのであればsecure属性はデフォルトで設定しておいたが良いでしょう。

 

HttpOnly属性

HttpOnly属性をつけたCookieJavaScriptから参照できなくなります。クロスサイトスクリプティングでは攻撃者がCookieに設定されたセッションIDJavaScriptを使って盗み出すためHttpOnly属性をつけることでこの
攻撃を防ぐことができます。

セッションIDJavaScriptから参照しなければいけないケースはあまりないので基本的にセッションIDにはHttpOnly属性を付けるようにしたほうが良いでしょう。

 

SameSite属性

SameSite属性はCookieを生成したサイトとは別のサイトからのリクエストによるCookie送信を制御します。


SameSite属性のパラメータ:



GoogleChrome 8020202月) からSameSite属性のデフォルトを次のように変更しました。

 

変更前:None

変更後:Lax

 

外部サイトからの全てのリクエストに対してCookieを送るようにする場合は、SameSite属性を「None」にしたうえでsecure属性を付ける必要があります。そのため外部サイトからHTTP通信でのアクセスではGETリクエスト以外Cookieが送られることがなくなりました

Firefox 79以降、SafariではIPTの機能によりブロックされています。

EdgeChoromeベースなので実装済み)

 

サードパーティCookieSameSite=None」でかつ「secure属性がついている」状態でHTTPS通信により送られていなければアクセスができないということになります。

 

このように外部サイトからのアクセスによるCookie送信を制御することにより、CSRF(クロスサイト・リクエスト・フォージェリ)対策につながります。


Cookieに関してはブラウザ側の仕様変更によってアップデートすると挙動が変わってしまうことがあるので、主要なブラウザのリリース情報はこまめにチェックしたほうが良いでしょう。


次回:「CORS(Cross-Origin Resource Sharing)について」




このブログを検索

ブログをよくする

自己紹介

自分の写真
はじめまして。あまるちゃんです。 子供のプログラミング学習に協力できるように教え方を勉強中です。 このブログでは自分が学んだことを投稿していきます。

連絡フォーム

名前

メール *

メッセージ *

ブログ アーカイブ

QooQ