9月19日 10:30 ※19:00更新
LIGブログ寄稿ライターによる当記事につきまして、読者の方からいくつかのご指摘を受けました。
記事内で不正確な表現を使用していたため、内容に誤りがありました。一度記事を取り下げ、記事内容を精査・修正いたしましたので、再掲載させていただきます。大変申し訳ありませんでした。
引き続き、情報の精度向上に努めて参りますので、よろしくお願いいたします。
LIGブログ編集部
どうもコンニチワ……モリイです。夏場の暑さをなんとか乗り切り、すっかり気が抜けてしまっている今日この頃です。すみません、愚痴ってしまいました。
さて、XSS攻撃による被害がかなり増えています。もはや他人ごとではなく、明日あなたが管理しているサイトがXSS攻撃されてもおかしくないレベルで被害は拡大しているのです。
実際、本業ではWordPress専用のセキュリティ診断サービスを運営している私のもとにも、ウィルスや自動攻撃ツールによる被害・対策相談がたくさん寄せられています。
そこで今回は、皆さんのWordPressをXSS攻撃被害から守る最低限の対策について、解説していきたいと思います。
攻撃者はなぜXSS攻撃をしようとするのか
攻撃者の目的は大きく2つあります。1つ目は不正プログラムの拡散、2つ目は個人情報の奪取です。
サイトのリンク先を書き換えて偽のサイトへ誘導し不正プログラムをダウンロードさせたり、セッションハイジャックで本人になりすましサイトに登録されている個人情報にアクセスして情報を盗むことが主になると思われます。
また、個人情報の奪取については、裏サイトなどで販売することが目的ではないかと想定されます。正規のサイトから、攻撃者が用意した悪意あるサイトに誘導し、訪問者に不正プログラムを実行させることで、その目的を達成します。
Webサイトに対する代表的な攻撃手法「クロスサイトスクリプティング(XSS)」
WordPressなどのCMS、自社で開発したオリジナルサイト、いずれの場合もクロスサイトスクリプティング(以下、XSS)攻撃を起因とするWebサイトの改ざん被害が多く発生しています。
XSS攻撃は、サイト訪問者に「なりすまし被害」が出るばかりではありません。攻撃者が用意したWebサイトに誘導されたり、入力情報を収集されたり、ブラウザに保存した機密情報などを奪取されたりするなど、悪質な手口による被害も急増しています。本人も気づかないうちに被害にあっている、というケースも多いので厄介です。
そこで今回の記事では、代表的な攻撃手法とされるXSSについて説明をしていきます。
XSSの詳細と種類
XSSとは、アプリケーションのセキュリティ上の不備を利用し、パラメータなどを介して細工し、攻撃対象となるサイトに悪意のあるスクリプトを混入させる攻撃です。
悪意のある値、想定されていない値が入力された状態で、スクリプトが起動させられてしまい、攻撃者によるクッキーの改ざんや、クッキーの値の取得が可能になってしまいます。
こうなってしまえば、攻撃者はセッションハイジャックなどの攻撃が可能となります。
そうならないためにも、攻撃者の手法を理解することが大切となります。XSS攻撃には、主な3つの攻撃手法が存在しており、それぞれの対策が必要です。
1. Stored XSS Attacks(蓄積型XSS)
Stored XSS Attacksとは、悪意のあるスクリプトがサーバ上(ファイルやデータベースなど)に格納され、ユーザが当該サイトへアクセスした時点で、サーバに格納されている悪意あるスクリプトを実行させられてしまう攻撃です。
入力や遷移などのアクションを起こす、起こさないに関わらず、サイト訪問時点で悪意あるスクリプトが実行させられることが多いです。また、コンテンツの偽装もあり、一般のユーザがサイトの異常を見抜くことが困難な場合も多いです。
2. Reflected XSS Attacks(反射型XSS)
Reflected attacksとは、ユーザーからのリクエストに含まれる文字列を、ウェブページ内にスクリプトとして出力してしまうものです。
なお、独立行政法人 情報処理推進機構(IPA)によれば、Stored XSS Attacks、Reflected XSS Attacksは次のように定義されています。
ウェブアプリケーションが、リクエストに含まれるスクリプトに相当する文字列を基にウェブページを出力することにより、ユーザのウェブブラウザ上で不正なスクリプトが実行される。これは、ウェブアプリケーションによるウェブページ出力処理に問題があるため作り込まれてしまう脆弱性と言える。
出典:IPAテクニカルウォッチ「DOM Based XSS」に関するレポート~JavaScriptでHTMLを操作するアプリは要注意!~
3. DOM Based XSS
DOMの内容を改変されることにより、異なるサイトを表示される等の意図しないスクリプトをウェブページに出力されてしまうXSS攻撃となります。
DOM Based XSSについても先ほどと同様にIPAによれば、以下のように定義されます。
ウェブブラウザなどのクライアント上で実行される正規のスクリプトによるウェブページ操作の結果、不正なスクリプトが実行される。これは、スクリプトによるウェブページ出力処理(DOM操作)に問題があるため作り込まれてしまう脆弱性と言えるだろう。
なお、ウェブページ出力処理はスクリプトのみで実現しているため、該当するスクリプトが存在すれば、サーバとの通信が発生しないプログラムであったとしてもDOM Based XSSの脆弱性が作り込まれてしまう可能性がある。出典:IPAテクニカルウォッチ「DOM Based XSS」に関するレポート~JavaScriptでHTMLを操作するアプリは要注意!~
XSSへの一般的な対策
Stored XSS Attacks、Reflected XSS Attacksともに、出力値をエスケープし、サーバ間とやりとりするパラメータなどのデータをサニタイズすることで、攻撃を防ぐことができます。
DOM Based XSSに対策は意図しないスクリプトやHTMLタグなどが挿入されないように対策することで攻撃を防ぐことができます。
WordPressのXSS対策およびファイル改ざん検知に役立つプラグイン
ここでは、特にWordPressを利用する方に向け、XSS攻撃からサイトを守るために利用可能なWordPressプラグインの紹介をおこないます。
BulletProof Security
http://wordpress.org/plugins/bulletproof-security/
内部通信・外部通信に対するモニタリングも可能となり、有事の際には指定のメンテナンスモードに切り替えることも可能です。また、IPSフィルタ機能を設定をすることにより、改ざん検知とXSS対策(許可パラメータの範囲指定など)が可能となります。
WP-adminに対するブルートフォース対策機能や悪意あるユーザの侵入防止(IDS)機能が充実しており、ファイル検閲やファイルやDBのバックアップ機能も利用し、改ざん対策を実施することが可能です。
NinjaFirewall
http://wordpress.org/plugins/ninjafirewall/
アプリケーションレベルでの対策として、RFI、LFI、XSS、コード実行、SQLインジェクション、ブルートフォーススキャナ、シェルスクリプト、バックドア、その他多くの脅威から保護をしてくれます。
ファイルの改ざん保護、検知機能や簡易的なIPS機能もあり、特にWordPress本体やプラグインに対しカスタマイズをして利用しているサイトにおすすめできるプラグインとなります。
ただし、設定が反映されているかどうかの確認が取りづらいUIなので、簡易的な疑似攻撃を自分でおこない、設定された挙動を示すかどうかチェックしてみることをおすすめします。
iThemes Security(formerly Better WP Security)
http://wordpress.org/plugins/better-wp-security/
サーバサイドのセキュリティ対策や設定補完に強く、XSSにフォーカスした対策はありませんが、攻撃遮断用のIPSを設定することも可能です。組み合わせて利用していただければと思います。
※セキュリティプラグインの重複利用は、システムが正常に稼働しないことが想定されます。可能な限り単独での利用をご検討ください。また、紹介したセキュリティプラグインの中には脆弱性を有するものもあり、利用についての判断は自己責任でお願いします。
まとめ
いかがでしたでしょうか。
XSS攻撃から身を守るための、最初の一歩です。ぜひいろいろと検討してみてください。
それでは、また。
LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。