セッションハイジャックとは
サイバー攻撃における攻撃者は、コンピュータやそれに付随するサービスなどの仕組みを理解し、脆弱性を発見した上で攻撃を仕掛けてきます。
今回紹介する「セッションハイジャック」も聞き慣れないワードですが、しっかりと内容を理解し、仕組みが分かれば十分に対策を講じることができます。
この記事では概要から対策まで解説しているので、この機会にしっかりと理解を深めましょう。
目次
セッションハイジャックとは
セッションハイジャックとは、セッションID(利用者を識別するための情報)の発行や管理に不備があり、攻撃者にログイン中の正規の利用者のセッションIDやCookieをなんらかの方法で不正に取得され、セッションを乗っ取るサイバー攻撃のことを指します。
セッションハイジャックをされると、サーバ内への侵入や機密情報の搾取、不正出金、クレジットカードの不正利用などの被害に遭う可能性があります。
セッション
「セッション」とは、通信の開始から終わりまでの一連のやり取りを指します。
Webサイトのアクセス解析などの指標でもある「セッション」は、サイトにアクセスしてから一定時間経過し、通信が終了するまでを「1セッション」とカウントしています。
「セッション」の重要なポイントは、“一連の通信”であることです。
例えば、
①Webサイトにアクセスし、サイト内の記事を4ページ閲覧して離脱。
→この場合、複数ページ閲覧していますが、これは一連の通信内で行われたので、「1セッション」とカウントされます。
②Webサイトにアクセスして、4ページ閲覧。4ページ目の途中で離脱せず、ページを開いたまま数時間放置。数時間後に同じWebサイトの続きを閲覧した。
→この場合は、「2セッション」としてカウントされます。
理由としては、基本的にセッションは30分経過すると通信が終了したとみなされるため、そこからまた別のべージへ遷移することで、新しい通信が開始されたことになるのです。
また、サーバはアクセスしてきたユーザーを永続的に覚えることはできません。
なので、決まった時間経過により、通信終了とみなされ、そこで初めてセッションが終了します。
このようにしてセッションの仕組みが成り立っています。
セッションIDとは?
セクションIDとは、Webサイトなどにアクセスしたユーザーのセッションを識別するため、WebサーバやWebアプリケーションによって割り当てられるIDです。
このIDは基本的にログイン時に付与され、ログアウトするまで維持されます。
セッションIDのほかにCookieを盗み取られることでも、セッションハイジャックは起こることがあります。
では、Cookieとはどのようなものなのでしょうか?
Cookie
Cookie(正式には、HTTP Cookie)とは、Webブラウザに預ける小テキストデータファイルのことです。
通販サイト等にアクセスすると、「Cookieを有効にしてください~」という表示が出てきて、どうすればいいのか困った経験をされた方も多いのではないでしょうか。
例えば、通販サイトで買い物をしている時に買い物カゴに商品を入れたままにして、ログアウトするとします。
再度ログインした時に先ほど選んだ商品がカゴから消えずに残っているのは、Cookieが情報をファイルとして保存してくれているからなのです。
Cookieのこの仕組みは、複数の Web ページからなる一連の「セッション」を管理する際、度々使用されています。
ちなみに、このCookieのサイズはとても小さいのでファイルが溜まったとしても容量を圧迫することはないです。
ただ、注意していただきたいのは不特定多数が使用するPCやスマホを利用する場合です。
共有のPCでID、パスワードを使用し、通販サイトへログインした際にCookieが残っていると次に使用する第三者に不正利用されてしまう恐れがあります。
これを防ぐためには使い終わったらすぐにCookieを削除することが大切です。
上記の用語について理解した上で
次は、セッションハイジャックの原因について見ていきましょう。
セッションハイジャックの原因
いずれも、直接ログインパスワードを窃取するわけではないので、ほかのサイバー攻撃とは内容が少し異なります。
セッションIDを推測
セッションIDを日付や登録名などように比較的単純で脆弱性の高いもので構成していると、攻撃者は推測したり、ツールを使い総当たり攻撃で突破したりして、利用者になりすます可能性があります。
よって、推測されにくい複雑なものに設定する必要があります。
ユーザーからセッションIDを奪取
セッションIDをURLに埋め込んだり、セキュリティ設定に不備があるときに攻撃者が盗聴したり、不正アクセスを行い正規のユーザーとWebサービスの間に入り、正規ユーザーからセッションIDを奪います。
例えば、XSS(クロスサイトスクリプティング)によるサイバー攻撃をしてユーザーを騙し、攻撃者用サイトにセッションIDやCookieを不正表示して奪います。
セッションID固定化による攻撃(セッションフィクセーション)
IDを頻繁に更新せずに使い続けているWebサイトでは、攻撃者が取得したセッションIDを他の利用者のIDとして固定されてしまい、なりすましに悪用されてしまいます。
セッションフィクセーションとのちがい
セッションフィクセーションはセッションIDを不正取得するのではなく、攻撃者のセッションIDをユーザーに使用させた後、攻撃者はそのセッションIDを使用して、ユーザーになりすます攻撃を指します。
つまり、セッションハイジャックとは別物です。
セッションフィクセーションを行うためには、事前にユーザーにセッションIDを使用してもらう必要があります。
そのため、攻撃者は正規ユーザーが使用するブラウザにセッションIDを埋め込まなければなりません。
セッションIDを埋め込むには、HTTPヘッダインジェクションやXSS(クロスサイトスクリプティング)といった攻撃手口が多く使われます。
このように事前に用意したセッションIDをユーザーに利用させることで、攻撃者はユーザーになりすまし、悪事を働きます。
クロスサイトスクリプティング(XSS)とは?
クロスサイトスクリプティング(XSS)とは、攻撃対象のWebサイトの脆弱性を突き、攻撃者がそこに悪質なサイトへ誘導するスクリプトを仕掛けることで、サイトに訪れるユーザーの個人情報などを詐取する攻撃のことを指します。
セッションハイジャックされるとどうなるの
セッションハイジャックはいわば「なりすまし行為」なので、本人に代わって攻撃者がWebサービスなどを利用することになります。
従って、一般的には、機密情報を盗まれる、オンライン上での不正出金、情報漏えい・改ざん、不正利用などの被害が想定され、注意が必要です。
これだけでも、大きな被害が予想されますね。
どのような被害があったのか、具体的な事例をみていきましょう。
被害事例
ターゲット | 被害概要 |
オープンソースソフトウェア |
2010年4月、ApacheのサーバがXSSを含むセッションハイジャック、パスワード流出の可能性が浮上。 バグトラッキングソフト「JIRA」をホスティングしているサーバにターゲット攻撃が発生。 これは、4月5日に同サーバの管理者がメッセージ付きのURLをクリックしたことが原因で、このTinyURLを使用した短縮URLには、XSSによりセッションを含んだCookieを盗む攻撃コードが仕込まれていたことがわかった。 それと同時に攻撃者は、JIRA login.jspに対するブルートフォース攻撃を実施、4月6日にはJIRAアカウントのパスワードを推測する攻撃を行った。 このどちらかの攻撃が成功したことにより、管理者権限が奪われ、侵入されてしまったようだ。 https://scan.netsecurity.ne.jp/article/2010/04/15/25107.html |
セッションハイジャックへの対策
セキュリティハイジャックを防ぐためには、大きく分けて「漏えい」と「固定化」の2つへの対策法があります。
セッションIDの漏えいの対策
URLにセッションIDを含めない
基本的な対策はURLにセッションIDを含めないことです。
ブラウザとWebサイトはセッションIDのやり取りをする際、URLにセッションIDを含めた実装をしていることがあります。
この場合、セッションIDを推測されやすくなり、セッションハイジャックされる可能性が高まります。
そこで、セッションIDはCookieへ格納することで、Webアプリケーション側にセッションIDを持たせる管理に変更しましょう。
HTTPS通信で利用するCookieにはSecure属性を付与する
CookieにSecure属性がない場合、HTTPS通信で発行されたCookieは、経路が暗号化されていないHTTP通信でも利用することができます。
このHTTP通信の盗聴により、Cookie情報を不正取得されてしまうリスクがあります。
そのため、HTTPS通信で利用するCookieには必ずSecure属性を加えるようにしてください。
対象のWebサイトでPHPを使用している場合は、ini_set関数を使用して、「ini_set("session.cookie_secure", 1);」という設定値を追記するだけで簡単に設定できます。
また、恒久的な設定をする場合には、php.iniに「session.cookie_secure = 1」を追加する方法があります。
Secure属性とは、個々のCookieの動作を制御する属性の1つです。
これが設定されていると、「HTTPS通信の場合のみWebブラウザからWebサーバへ送信される」ようになります。
Secure属性を設定しないと、接続がHTTPS、HTTPに関係なくCookieを送信してしまうため危険です。
ワンタイムセッションIDの発行
セッションIDをワンタイム化することで安全性を高めます。
ワンタイムセッションIDはアクセスの都度セッションIDが変更されますので、もし、セッションIDを攻撃者に取得されてしまっても、そのセッションIDを使用することはできませんので、セッションの乗っ取りを防ぐことができます。
セッションID固定化攻撃の対策
ログイン後にセッションIDを再発行すること
ログインが成功したタイミングで新たに別のセッションIDを再発行し、そのセッションIDを使用するようにします。
これによりログイン後は、攻撃者が用意したセッションIDは使えなくなりますので、なりすましを防止することができます。
セッションIDに変わる「しるし」を用いて対策する
セッションIDの再発行ができない場合、セッションIDとは別に、ログイン成功時に推測困難な秘密情報(しるし)を作成します。
そしてCookieへ格納します。
この秘密情報とCookieへ格納した値が一致するかを確認することで、なりすましを防止することができます。
まとめ
今回紹介した「セッションハイジャック」はWebサイト側で管理するセッションIDを狙って攻撃を仕掛けてくる手法です。
そのため、ユーザーは完璧な対処のしようがありません。
だからこそ、Webサイトの運営管理者がしっかりと対策を行い、常に脆弱性をなくしていく努力が必要になります。
数多くのウェブサービスが普及してきた現代においてはサービス内容の質と共に、セキュリティに対する質も同等に求められるようになってきていますので、気を抜かずに取り組んでいくことが大切です。
参照
- 意外と知らない?ITトレンド用語 セッションとは
- セッションとはどういう意味?わかりやすくご紹介
- 経路のセキュリティと同時にセキュアなセッション管理を
- 初心者でもわかる『Cookie(クッキー)』講座 危険性やスマホでの設定方法もズバリ解説
- セッションハイジャックとは?
- セッションハイジャックの対策