はじめに
最近、セキュリティの勉強をよくすることが多くなったのでそのことについて記事にして皆さんに分かりやすく教えることが出来たらと思い記事にさせて頂きます。今回は、セッションハイジャックについて説明させて頂きます。
目次
- セッションハイジャックとは
- セッションハイジャック種類
- セッションハイジャック対策
- さいごに
セッションハイジャックとは
まず、最初にWebはスタートレスに出来ているのでECサイトやログイン機能があるサイトでは、さっきこのサーバーに来た人物はAさんだと判断することが出来ません。そのために、考案されたのがセッションという機能です。(実際には、Cookieといった機能が最初に出来たのですが、セキュリティのことを考えてセッションが開発されました)AさんにはこのセッションID、BさんにはこのセッションIDと割り振ることで判断しています。
実際にPHPでセッションIDを見たい場合は、このように表示することで確認することが出来ます。
<?php
session_start();
echo session_id(); // セッションIDが表示される
?>
セッションハイジャックとは、このセッションの情報を第三者が乗っ取りその人物になりきりサイトにログインをすることを言います。
セッションハイジャックの種類
セッションハイジャックには主に3種類あります。
セッションの推測
セッションの盗聴
セッションID固定攻撃
まず、セッションの推測は第三者がセッションのIDを推測してユーザーが利用していたサイトにそのセッションIDを使用してアクセスすることを言います。
セッションの盗聴は、通信を傍受して盗むことです。また、XSSなどのサイバー攻撃を使用して第三者が作ったサイトに誘導してセッションIDを盗み出すことです。例えば、SNSのサイトでこのURLを押して下さいと第三者が作ったURLに誘導します。そのサイトにはXSSという脆弱性が仕込まれており知らないうちにそのSNSサイトのセッションIDが盗まれてしまうのです。
セッションID固定攻撃は、今までとは逆の発想です。第三者がユーザーに対してこのセッションIDを使用して下さいといったことを送りユーザーはそのセッションIDを使用してサイトにログインすると、第三者はそのセッションIDを使用してサイトにアクセスすることが出来るようになります。例えば、ユーザー宛にSNSのURLのパラメータとしてhttps://aaa@example.com?PHPSESSIONID=1111
といったSNSのURLを送りユーザーがこのURLのリンクを開くとセッションIDがこの値になってしまいます。そして、このセッションIDを使用するといったことです。
セッションハイジャック対策
最初に、セッションIDをURLに含めないといったことがあります。
セッションをやり取るする時に、セッションIDをcookieに格納してやり取りする、hiddenに格納してやり取りする、URLに格納してやり取りするとあるのですが、最初の二つは利用していいのですがURLに格納してやり取りするのは、第三者に盗聴される可能性が高くなるります。
次に、セッションIDを推測されてしまう値に設定しないといったことがあります。Webアプリケーション開発ツールやフレームワークに実装されているセッション管理を利用するといいでしょう。
最後に、ログイン時に新しいセッションIDを生成するようにすることです。
PHPでそのやり方をするには、下記のやり方をします。
session_start();
echo session_id();
session_regenerate_id; // 新しい、セッションIDを生成する
echo session_id(); // 上のセッションIDとは違うIDが生成されます
さいごに
最近、よくプログラミングをする人が増えてきており沢山の人々が、サイトを作っていますがその際に速さを意識しすぎてセキュリティは後回しといった人が多い可能性があるので、セキュリティも気にしながらサイトを作ることを心がけましょう。