クロスサイトスクリプティング攻撃:チートシート - TechRepublic

クロスサイトスクリプティング攻撃:チートシート - TechRepublic

最新かつ最も注目すべきオンライン脅威の危険性を確信するのは簡単ですが、最先端のサイバー攻撃は必ずしも古い攻撃ほど広範囲に及んだり、継続的に危険にさらされたりするわけではありません。例えば、クロスサイトスクリプティング(XSS)を例に挙げましょう。マイクロソフトがXSS攻撃を初めて特定し分類したのは2000年ですが、XSS攻撃の記録はインターネットの黎明期にまで遡ります。バグ報奨金ホスティングサイトHackerOneは2017年7月、XSSが引き続き同社のプラットフォームユーザーの間で最も多く発見される脆弱性であると報告しました。

クロスサイトスクリプティングの脅威が減少する可能性は低いため、インターネットユーザーと Web 開発者は XSS とは何か、またこのようなサイバー攻撃を防ぐ方法を知ることが不可欠です。

参照: サイバー攻撃からの回復に関する IT リーダー向けガイド (Tech Pro Research)

クロスサイトスクリプティングとは何ですか?

クロスサイトスクリプティングとは、攻撃者がウェブページの脆弱性を悪用して独自のコードを挿入することで発生します。このコードは、認証情報、セッションCookie、その他の機密データといったユーザー情報を盗み出すだけでなく、サイト上に永続的に存在して複数のユーザーを攻撃する可能性もあります。

XSS攻撃の特徴は、これらの脆弱性が悪用されるウェブサイトやウェブアプリ自体を標的とせず、攻撃ベクトルとしてのみ機能することです。XSSは、ユーザーのマシン上で実行されるスクリプト(クライアントサイドスクリプト)を使用します。これらのスクリプトの大部分はJavaScriptまたはHTMLで記述されていますが、クライアントサイドスクリプトに使用できる他の言語もあります。

XSS 攻撃は、リフレクション攻撃と保存攻撃の 2 つのカテゴリに分類されます。

リフレクション攻撃は、リクエストを適切にサニタイズしないサーバー側スクリプトを利用してスクリプトやその他の埋め込みオブジェクトを削除する、迅速で 1 回限りの攻撃です。

反射型XSS攻撃を使用する攻撃者は、メール、悪意のあるウェブサイト、またはその他の手段を通じて、ユーザーにリンクをクリックさせる必要があります。リンクには悪意のあるスクリプトが含まれており、脆弱なウェブサイトではサニタイズ処理によっても削除できないため、スクリプトはサイトからユーザーのコンピュータに跳ね返されます。

ストアド攻撃はそれほど一般的ではありませんが、リフレクション攻撃よりもはるかに危険で破壊的です。ウェブサイトとのやり取りが最小限に抑えられるリフレクション攻撃とは異なり、ストアド攻撃はウェブサイトを悪用し、攻撃者が標的のコンピュータで実行したい悪意のあるスクリプトを保存させます。

ストアド攻撃では、ウェブサイトがソーシャルメディアプラットフォーム、オンラインフォーラム、サードパーティの小売サイト、または類似のサイトなどの公開場所にユーザー情報を保存する必要があります。具体的には、攻撃者はウェブサイトにサニタイズされていないHTMLを埋め込むことを許可し、訪問者がページを閲覧するだけでそのHTMLに気づかないうちにさらされるようにする必要があります。リフレクション攻撃と同様に、感染したコンテンツに埋め込まれたスクリプトは目に見えないため、攻撃の疑いは生じません。

ユーザーがリンクをクリックする必要があるリフレクション攻撃とは異なり、ストアド攻撃ではユーザーによる操作は一切必要ありません。ストアド攻撃の例としては、ユーザー名、ブログ投稿、製品説明、フォーラム投稿など、ユーザーが生成したサニタイズされていないHTMLコンテンツが許可されている場所にXSSを埋め込むことが挙げられます。

追加リソース

  • Evernote for Windows のパッチにより、保存型 XSS の脆弱性が解決される (ZDNet)
  • 米陸軍士官学校とニューヨーク市のサイトを改ざんしたハッカーに懲役刑の危機 (ZDNet)
  • IT企業は1日あたり1,000件以上のサイバー攻撃に直面している。ビジネスを守る方法とは?(TechRepublic)
  • D-Linkルーターをお使いですか?ハッカーに管理者権限を与えるハードコードされたバックドアにご注意ください(TechRepublic)
  • 中間者攻撃:チートシート(TechRepublic)

クロスサイトスクリプティングはどれほどの脅威なのでしょうか?

XSS攻撃はシンプルです。攻撃者が脆弱なウェブサイトと、JavaScriptとHTMLの基本的な知識さえあれば、人々の生活を混乱させることができます。つまり、クロスサイトスクリプティングは極めて大きな脅威です。XSSの根強さだけでも誰もが懸念すべき事態です。1990年代半ばから問題となっており、今もなお大きな問題となっています。

参照: TechRepublic のすべてのチートシートと賢い人向けガイド

Positive Technologies の最近の調査によると、テストされた Web サイトの 4 分の 3 近くが XSS 攻撃に対して脆弱であることがわかりました。Positive Technologies の調査が正しければ、これはインターネット上で最も一般的に悪用される欠陥であるということになります。

XSS攻撃は、ユーザーから機密データを盗む可能性があります。最も注意を要するXSS攻撃の標的の一つはセッションCookieです。セッションCookieは、ウェブサイト上でユーザーのIDを検証し、ドメイン内の複数のページにアクセスしている間もログイン状態を維持できるようにします。

XSS 攻撃者がセッション Cookie を盗むことができれば、ユーザーのアクティブなセッションを複製して、ユーザーが Web サイトで実行できるすべての操作 (ソーシャル メディアへの投稿、個人情報やアカウント情報の編集、パスワードの変更、クレジットカード情報の盗難、銀行振込、e コマース サイトからの製品の購入など) にアクセスできるようになります。

追加リソース

  • 新たな調査によると、銀行のウェブアプリはハッキングに対して「最も脆弱」である(ZDNet)
  • サイバーセキュリティ総括:2018年に企業にとって最も重大な5つの脅威(TechRepublic)
  • Google、新しい開発者ツールでXSSスクリプトの脆弱性に対処(ZDNet)
  • サイバー攻撃は、自然災害や異常気象と並んで社会にとってトップ3のリスクである(ZDNet)
  • ブラウザが新しいオペレーティング システムであるならば、それに見合うセキュリティが備わっていないのはなぜでしょうか? (ZDNet)

主なクロスサイトスクリプティング攻撃の例は何ですか?

10年以上前に遡る大規模サイトへのXSS攻撃の証拠を見つけるのは難しくありません。ニュース記事にはXSS攻撃の成功例が溢れており、中には最初のインシデントから何年も経っても修正されないものさえあります。

  • 2008 年に Facebook に概念実証の XSS が掲載されました。Facebook は脆弱性が明らかになった直後にパッチを当てましたが、この脆弱性が公に発見される前に悪意のある攻撃の被害者がいたかどうかは不明です。
  • Twitterの2010年のデザイン変更にはXSS脆弱性が含まれていました。ゴードン・ブラウン元英国首相の妻サラ・ブラウン氏がこの脆弱性に陥り、100万人以上のフォロワーに知らず知らずのうちに共有してしまいました。この脆弱性はクリックすら必要とせず、マウスオーバーだけでユーザーをポルノサイトにリダイレクトさせていました。
  • eBayユーザーは長年にわたり、商品リストに埋め込まれた潜在的なXSSスクリプトに悩まされてきましたが、2017年初頭になってもこの問題は未だに解決されていませんでした。今回のケースでは、悪意のある出品者が正規の商品リストにスクリプトを追加し、ユーザーを偽のログインページにリダイレクトして認証情報を収集した後、正規のeBayページへリダイレクトしていました。
  • ブリティッシュ・エアウェイズの予約約40万件が、ウェブサイトとモバイルアプリの決済システムを標的としたクロスサイトスクリプティング(XSS)の攻撃を受けました。これらの取引すべてからクレジットカードとデビットカードの情報が盗まれた可能性があります。
  • 2005年にMySpaceに影響を与えたSamyワームは、すべてのユーザーのプロフィールにワームの開発者に関する一文を追加し、「彼は被害者のヒーローだ」と伝えました。Samyワームは、その無害な性質にもかかわらず、XSSを利用して20時間以内に100万人以上のMySpaceユーザーに感染し、インターネット史上最速の拡散速度を記録しました。
  • Yahoo は電子メールの覇権が衰退していた時代に多くのセキュリティ問題に直面したが、その 1 つは 2013 年の XSS フィッシング攻撃で、被害者のアカウントが盗まれたことである。

残念ながら、これらの例は、広く知られている主要なクロスサイトスクリプティング攻撃のほんの一部に過ぎません。個人情報の窃盗につながる他のXSS攻撃が発生する可能性は十分にあり、その確率も高いと言えるでしょう。

追加リソース

  • ボットネット、ランサムウェア、フィッシング攻撃がビジネスにとって最大のサイバー脅威となる理由 (TechRepublic)
  • マン・イン・ザ・ディスク攻撃:チートシート(TechRepublic)
  • Equifaxの信用報告書監視サイトもハッキングの脆弱性あり(ZDNet)
  • About.com のリンクの 99% 以上が XSS、XFS iframe 攻撃に対して脆弱 (ZDNet)
  • 完全にパッチを当てた Microsoft Internet Explorer に普遍的な XSS 脆弱性が発見される (ZDNet)
  • Yahoo、深刻なクロスサイトスクリプティングのバグを阻止(ZDNet)

開発者はどのようにしてクロスサイトスクリプティング攻撃から Web アプリを保護できるでしょうか?

プロジェクトが XSS 攻撃の餌食になった Web 開発者は、脆弱性を放置して悪用される危険を冒したことに対して自ら責任を負うことになります。

XSSの防止は、ウェブサイトにHTMLタグをいくつか追加するだけで済む場合もあります。必ずしもそう簡単ではありませんが、まずはエンコーディングと呼ばれる手法から始めるのが良いでしょう。

エンコーディングとは、本質的には、ユーザー入力からすべてのコードを取り除き、ウェブブラウザにその入力をデータとしてのみ解釈させることを意味します。サーバー側とクライアント側、あるいは両方でユーザー入力をエンコードする方法はいくつかありますが、最終的にはHTML、CSS、JavaScript、URLスクリプトがすべて取り除かれ、テキストとしてレンダリングされます。

Web アプリケーションがテキストだけでなく豊富なデータ入力を受け入れる必要があるときなど、エンコードが最適ではない場合があります。

エンコーディングだけではXSS攻撃を阻止するのに十分ではない場合もあります。例えば、攻撃者がユーザー入力を入力フィールドに直接入力するのではなく、外部へのリンクを提供する場合、エンコーディングフィルターの影響を受けずに悪意のあるコードを送り込むことができる場合が多くあります。これは、予防策としてエンコーディングを無視すべきという意味ではなく、検証などの追加の安全策を講じるべきです。

検証はXSS防止における2番目に主要な手法であり、ユーザー入力に含まれる可能性のあるすべてのコードを削除するのではなく、悪意のあるコードのみを除外します。検証は通常、分類またはサニタイズのいずれかの方法で行われます。

分類とは、どのような種類のHTMLタグが許可され、どの種類のタグが許可されないかを指定する方法です。これは、特定のコマンドをブラックリストまたはホワイトリストに登録することで実現できます。ホワイトリストは、許可されるタグを最小限に抑え、ブラックリストから除外される可能性を排除するため、一般的に優れた方法と考えられています。

分類機能は、ユーザーからの入力を許容可能か不適切かに分類します。入力がホワイトリストまたはブラックリストの基準を満たさない場合、入力は許可されません。

サニタイズでは検証エンジンを使用して、ユーザーの入力の特定の部分が悪意のあるものであるかどうかを判断し、悪意のあるものである場合は、サイトは入力を拒否するか、問題のある要素をサニタイズするかを選択します。

ユーザーが複雑なHTMLを利用する必要がある場合、入力サニタイズが最適な選択肢となる可能性があります。これは、エンジンが不適切と判断した部分をブロックしながら、ユーザーのコードの大部分を実行できるためです。XSS攻撃とその対策を解説するサイト「Excess XSS」は、サニタイズエンジンは無効な入力を識別するためにブラックリストに依存すべきではないと警告しています。ブラックリストに依存すれば、サニタイズの効果が低下する可能性があるためです。Excess XSSは、サニタイズライブラリとフレームワークを使用して、徹底的かつ包括的なホワイトリスト方式によるサニタイズを推奨しています。

参照:サイバーセキュリティの必勝戦略(ZDNet特別レポート)|レポートをPDFでダウンロード(TechRepublic)

3つ目のアプローチとして注目を集めているのは、コンテンツセキュリティポリシー(CSP)です。これは、信頼できるドメイン以外から取得したリソース(スクリプト、スタイルシート、ファイルなど)の実行をブロックします。挿入されたスクリプトは信頼できるドメインからのものではない可能性が高いため、実行は許可されず、攻撃は阻止されるはずです。

ワールド・ワイド・ウェブ・コンソーシアム(W3C)は、CSPを検証やエンコードの代替として考えるべきではないと述べています。むしろ、「CSPは多層防御として最適です。悪意のあるインジェクションによる被害を軽減しますが、慎重な入力検証や出力エンコードの代替にはなりません。」と述べています。

XSS 防止のためのその他のアプローチとしては、スクリプトを完全にブロックすること、Cookie のセキュリティを強化して IP アドレスに結び付けること、2017 年 11 月以降のバージョンの Chrome、Opera、Firefox で Cookie に SameSite=Strict パラメータの使用を強制することなどがあります。

どのアプローチを実装すればよいかわからない場合は、サイトに最適な方法を調査する必要があります。迷った場合は、複数の方法を検討してみるのも良いでしょう。

追加リソース

  • 5つの一般的なブラウザセキュリティ脅威から組織を保護する方法(TechRepublic)
  • 消費者の多くはサイバーセキュリティを懸念しているが、実際に行動を起こす人はごくわずか(ZDNet)
  • 心のどこかで心配性な人のための Google Chrome のセキュリティヒント (TechRepublic)
  • 大規模なサイバー攻撃に直面するとこんな感じになる(ZDNet)

インターネットユーザーはクロスサイトスクリプティング攻撃からどのように身を守ることができますか?

XSSは、主に、クロスサイトスクリプトをユーザーに渡すために悪用されたサイトを運営する開発者にとって問題となります。これらの脆弱性は、脆弱なウェブサイトコードによって動作するため、エンドユーザーがXSS攻撃から身を守るためにできることは限られています。

しかし、XSS攻撃対策に関して言えば、運が悪いというわけではありません。選択肢が限られているというだけです。信頼できない可能性のあるウェブサイトとのセキュリティを強化したい場合は、以下のヒントを参考にしてください。

  • ウェブサイトへのログインを求めるメールのリンクは絶対にクリックしないでください。フィッシング詐欺のリクエストである可能性もあれば、(たとえ正規のウェブサイトにアクセスできるとしても)不正な情報を引き出そうとするクロスサイトスクリプトが埋め込まれている可能性もあります。ログインリンクをクリックするよう求めるメールを受け取った場合は、リンクをクリックせずにブラウザを開いてアカウントにログインするのが最善策です。
  • ScriptSafe(Chrome)やNoScript(Firefox)などのスクリプトブロックブラウザアドオンを使用してください。これらのアドオンは、手動で許可しない限りスクリプトの実行を完全にブロックするため、XSS攻撃の実行を防ぐことができます。
  • ソーシャルメディアの投稿やプライベートメッセージが不審な場合は、リンクをクリックしないでください。乗っ取られたアカウントはマルウェアの拡散やクロスサイトスクリプティング(XSS)攻撃に利用されることが多く、フィッシングメールを避けるのと同じように注意が必要です。

追加リソース

  • サイバーセキュリティ:上司が気にしないのはもう許されない(ZDnet)
  • ウェブ上で安全を保つためのブラウザ拡張機能10選(TechRepublic)
  • Firefox Quantum vs Chrome: 潮目は変わりつつあるか? (ZDNet)
  • サイバーセキュリティのための4つの簡単なステップ(TechRepublic)
  • オンラインでの安全を確保し、個人情報の盗難を防ぐための15のヒント(ZDNet)

Tagged: