クロス・サイト・スクリプティング:ウェブサイト攻撃の筆頭格!知っておきたい対策方法
本日は、情報処理安全確保支援士試験(SC、登録セキスペ)を受験してきます。
試験直前ですので、あまりマニアックなことは記事にせず、HTTP回りのメジャーな攻撃「クロス・サイト・スクリプティング」について、整理したいと思います!
この記事が公開されるのは、午前試験と午後試験の間のお昼休みですね。実際に直前に読むなら、IPAの「安全なウェブサイトの作り方」の方が、はるかにためになるのですが、1分で読めますから、続きをどうぞ!
クロスサイト・スクリプティングとは?
クロス・サイト・スクリプティング(XSS)は、ウェブサイトに対する攻撃としては、筆頭格です。ウェブサイト開発される方は、もっとも気を付けたい攻撃の一つです。
この攻撃では、HTMLにスクリプト(Javascriptなど)を埋め込める性質を悪用して、ユーザのブラウザ上で不正なスクリプトを実行させます。複数のサイトを行きかい、またがって攻撃が実行されるので、「クロス・サイト」と呼ばれます。
静的配信をするようウェブサイトは、基本的に心配いりません。問題は、動的にHTMLを生成するウェブサイトです。
具体的な流れ
XSSの典型例である「クッキーの不正取得」を例に挙げましょう。標的サイトに脆弱性があるとします。
攻撃者は、悪意ある罠スクリプト(「クッキーを送れ」)が含まれれるウェブサイト(罠サイト)を作ります。
ユーザは、何かしらの方法で罠サイトに誘導されて、「罠リンク」をクリックしてしまいます。
罠スクリプトが標的サイトに転送されます。
標的サイトは、罠スクリプトを含めてユーザに出力・送信してしまいます。
ユーザは、罠スクリプトをブラウザで実行してしまいます。これにより、「クッキーを送れ」が実行されて、罠サイトにクッキーが転送されます…。
これでまんまと攻撃者に、標的サイトのクッキーが送られてしまいました。セッションIDを取られれば、「セッション・ハイジャック」されてしまいますね…。
このように、「罠サイトから標的サイトに不正なスクリプトを含むリクエストが送られて、その不正なスクリプトを標的サイトを出力して、ユーザがそのスクリプトを実行してしまう」という攻撃は、Reflected XSSというXSSに分類されます。
一度標的サイトにリクエストをぶつけてレスポンスを返させるから、反射型(Reflected)というのでしょう。
基本的な対策
エスケープ処理
XSSへの対抗策は、複数あります。ただ最も基本的なものは、「エスケープ処理」になります。
ユーザが送ってきたデータを出力するときに、ウェブサイトの出力に影響する文字(「<」「>」「&」など)を代替文字コード(HTMLエンティティ)に置き換えるというものです。上の例の場合、「<」「>」「&」と変換されます。
これで不正なスクリプトを無効化できます。
Web Application Firewall(WAF)
また、WAF(Web Application Firewall)の導入も有効です。ウェブサーバの前に置かれる頼りになるヤツです。HTMLの内容を解釈して、攻撃を遮断します。ただし、DOM based XSSと呼ばれるXSSには効果がありません。なぜなら、クライアントの端末で、悪意あるスクリプトが生成されるからです。
はい、ということで、XSSの超ざっくりとした説明でした。このほかにもいろんな攻撃があるし、XSSにもいろんなパターンがあるのですが、これくらいにしておきます。
試験、頑張ります!
この記事が気に入ったらサポートをしてみませんか?