Web アプリケーション攻撃は、あらゆる規模の企業にとって重大な脅威であり、データ侵害、顧客の信頼の喪失、および企業の評判の低下の原因になりかねません。当記事では、Web アプリケーション攻撃による被害の種類や対策について詳しく見ていきます。 また、Web アプリケーションを安全に保つための定期的なテストやメンテナンスの重要性についても説明します。リスクを理解し、適切な予防策を講じることで、ビジネスやお客さまを Web アプリケーション攻撃から保護しましょう。

Web アプリケーションとは〜
サイバー攻撃に脆弱な理由

Web アプリケーションとは、Web サーバー上で実行され、ブラウザによりインターネット経由でアクセスすることができるアプリケーションです。 ユーザーが Web アプリケーションにアクセスすると、ブラウザ(クライアントサイド)がサーバー(サーバーサイド)にリクエストを送信します。 サーバーからのレスポンスは通常、HTML、CSS、および JavaScript コードで構成され、ユーザーのブラウザを利用して Web ページをレンダリングします。 Web アプリケーションの「リクエストおよびレスポンス」の仕組みは、現代のインターネットやコンピュータインフラの重要な構成要素ですが、コードの脆弱性やアップデートされていないソフトウェアなど、Web アプリケーション特有の脆弱性の原因ともなっています。 Web アプリケーションは、インターネット接続があれば誰でもどこからでもアクセスできるため、サイバー犯罪者にとって簡単な標的です。また、Web アプリケーションはログイン情報や財務データなどの機密情報を扱うことが多いため、非常に魅力的な標的でもあります。

Web アプリケーション攻撃とは

前述のように、Web アプリケーションの開発は、サーバーサイドスクリプト(ASP、PHP など)とクライアントサイドスクリプト(HTML、JavaScript など)を組み合わせて行われます。Web アプリケーション攻撃とは、クライアントおよびサーバーサイドの脆弱性を悪用して、機密情報へのアクセス、不正操作、アプリケーションの正常な機能の妨害を行う試みです。

Web アプリケーション攻撃は、攻撃者が Web ページの URL のデータを変更して、アプリケーションを悪用するための誤動作を狙う単純なものである場合があります。例えば、最も一般的な Web アプリケーション攻撃には、SQL インジェクションとクロスサイトスクリプティング(XXS)があります。SQL インジェクションを実行するには、URL を変更するだけでよく、1文字追加するだけで攻撃が成功することもあります。これにより、ハッカーはアプリケーションを制御し、サーバー、データベース、およびその他の IT リソースにアクセスすることができます。

一般的な Web アプリケーション攻撃

クロスサイトスクリプティング

クロスサイトスクリプティング(XSS、Cross-Site Scripting)攻撃は、攻撃者が悪意のあるコードを既存の承認済みアプリケーションに追加または挿入する一般的な Web アプリケーション攻撃です。 XSS 攻撃は、個々のサイトを直接攻撃したり、サードパーティのスクリプトを改変することで、そのスクリプトが含まれているすべてのサイトへ一度にアクセスしたりするために、利用されます。XSS 攻撃により、悪意のあるコードが他のユーザーに送信されたり、顧客が機密情報を公開するマルウェアに感染したりしたりしてしまう可能性があります。 DOM ベースの XSS 攻撃は、脆弱性がサーバーサイドではなくクライアントサイドのコードにあるため、検出が最も困難であり、サーバーは攻撃が行われていることを発見することができません。

XSS 攻撃は通常、Web アプリケーションがユーザー入力を Web ページに表示する前に適切に検証しない場合に発生します。 たとえば、製品ページのコメントやレビューを適切にフォーマットせずに表示してしまうと、攻撃者がコメント欄に入力した悪意のあるコードがページに追加され、被害者の Web ブラウザによって実行される可能性があります。こうした攻撃は、悪意のあるペイロードがサーバーサイドに保存され、その後、アプリケーションを利用する全ユーザーに被害を与えるため、「格納型」もしくは「蓄積型」 XSS 攻撃と呼ばれます。

たとえば、攻撃者が製品ページのコメント欄への書き込みをサニタイズしない Web アプリケーションを発見し、コメント欄に書き込みをするとします。 この場合、攻撃者は悪意のある JavaScript を追加して、ソースコードとして表示させ、別のユーザーのブラウザで実行されるようにするかもしれません。

一旦このようなスクリプトがページに組み込まれると、攻撃者は、ローカルストレージの読み取り、クッキーへのアクセス、個人を特定できる情報 (PII) の窃盗、フィッシング、マルウェアの配布など、さまざまな攻撃を実行することができます。

XSS 攻撃を防ぐには、ユーザーが入力したデータを Web ページに表示する前に、適切に検証してサニタイズすることが重要です。 例えば、ユーザーが入力した情報に、< や > などの特殊文字が含まれていた場合にエンコードする関数を利用すると、ブラウザがそれらの情報を HTML として解釈することを防げます。

Web アプリケーションのヘッダでコンテンツセキュリティポリシー(CSP、Content Security Policy)を設定することも重要です。これにより、外部コンテンツの配信元を制限して、攻撃者が悪意のあるコードを外部ソースから Web ページに挿入するのを防ぐことができます。

SQL インジェクション攻撃

SQL インジェクション攻撃は、攻撃者が悪意のあるコードを Web アプリケーションに挿入するという点で XSS 攻撃に似ていますが、攻撃者はクライアントサイドでのコードの実行ではなく、入力欄を利用したバックエンドのデータベースへのアクセスを狙っています。この攻撃の目的は、データベースを操作して、ログイン情報や財務データなどの機密情報にアクセスしたり、記録の追加や削除などの不正行為を実行することです。

XSS 攻撃と同様に、SQL インジェクション攻撃は、Web アプリケーションがユーザーが入力した情報を適切に検証しない場合に発生します。たとえば、ユーザーが入力欄に検索語を入力してデータベース内の製品を検索できるようにする Web アプリケーションを考えてみましょう。 検索機能は、次の SQL クエリを使用して実装できます。

Web アプリケーションが検索用語を適切に検証しない場合、攻撃者はデータベースを操作するために悪意のあるコードを入力フィールドに入力する可能性があります。 たとえば、攻撃者は次の検索用語を入力する可能性があります。

OR 1=1; --

この入力により、SQL クエリが次のように変更されます。

SELECT * FROM products WHERE name LIKE '%' OR 1=1; --%';

WHERE 句は常に TRUE と評価されるため、結果のクエリは製品テーブルのすべての行を返します。 入力の末尾にある — は、攻撃者の悪意のあるコードを妨害しないように、元のクエリの残りをコメントアウトするために使用されます。

SQL インジェクション攻撃を防ぐためには、Web アプリケーションがユーザーが入力した情報を適切に検証してサニタイズすることが重要です。これは、準備されたステートメントとパラメーター化されたクエリを使用して行うことができます。これにより、開発者はユーザー入力を SQL クエリに直接組み込むのではなく、プレースホルダーを指定することができます。

ディレクトリトラバーサル攻撃

ディレクトリトラバーサル攻撃はパストラバーサル攻撃とも呼ばれ、構成ファイルやログファイルにアクセスしたり、サーバー上で任意のコードを実行したりするために、ルートディレクトリの外部にある Web サーバー上のファイルやディレクトリにアクセスすることを目的とした Web アプリケーション攻撃です。

ディレクトリトラバーサル攻撃は、Web アプリケーションがファイルやディレクトリの指定に使用されるユーザー入力を適切に検証しない場合に発生します。例えば、ユーザーが入力欄にファイル名を入力することで、制限されたディレクトリからファイルをダウンロードできるようにする Web アプリケーションを考えてみましょう。 Web アプリケーションがファイル名を適切に検証しない場合、攻撃者は「../」などのディレクトリトラバーサル文字を含むファイル名を入力して、制限されたディレクトリの外部にあるファイルにアクセスすることができます。

ローカルファイルインクルージョン(LFI、Local File Inclusion)攻撃はディレクトリトラバーサル攻撃の一種で、攻撃者は Web アプリケーションをだまして、サーバー上でファイルを公開または実行させます。 ディレクトリトラバーサル攻撃と同様に、攻撃者はディレクトリトラバーサルを利用してサーバー上のファイルを検出し、サーバーにそのファイルを実行させることで、さらなる攻撃や侵入を行えるようにします。

クロスサイトリクエストフォージェリ攻撃

クロスサイトリクエストフォージェリ (CSRF、Cross-Site Request Forgery) 攻撃では、ユーザーをだまして、以前に認証された Web アプリケーションで意図しないアクションを実行させます。攻撃者の目的は、正当に見える Web アプリケーションを利用して、悪意のあるリクエストを送信することにより、資金の移動やパスワードの変更などの不正操作を実行することです。

たとえば、フォームに入力して送信することで資金を送金できる銀行の Web アプリケーションにユーザーがログインしていて、そのアプリケーションがサーバー上で確認できる一意のトークンをフォームに含んでいないとします。攻撃者は正規のフォームと同じフィールドを持つフォームを悪意のある Web サイト上に作成し、ソーシャルエンジニアリングによってユーザーをそのサイトに誘導する可能性があります。 被害者が Web アプリケーションにログインして悪意のある Web サイトにアクセスすると、攻撃者が作成したフォームが送信され、被害者は知らないうちに送金を行ってしまうかもしれません。

クロスサイトリクエストフォージェリ攻撃を防ぐには、Web アプリケーションがフォームに一意のトークンを含め、サーバーからのリクエストの信頼性を検証することが重要です。 これは、サーバーによって生成され、フォームに含まれる一意の値である「シンクロナイザートークン」を使用して実行することができます。 フォームが送信されると、サーバーはリクエストを処理する前にトークンが有効であることを確認します。 またシンクロナイザートークンを無効にする「ログアウト」ボタンを Web ページに含めることで、将来の攻撃に悪用されることを防ぐことができます。

Web アプリケーション攻撃から
ビジネスを守るために

国際電子商取引コンサルタント評議会(International Council of E-Commerce Consultants)は、Web アプリケーションが「信頼できるデータを提供し、信頼できないデータや悪意のあるデータがデータベース、Web アプリケーション、またはエンドユーザーの個人情報に被害を与えないようにすることが重要である」と述べています。

これは、Web サイトで実行されているコードを、自社で開発したものかサードパーティのものかに関係なく、完全に可視化することが重要であることを意味します。また、データの漏洩を防ぐため、収集および共有するデータを制御する機能を備えておくことも重要です。

Web アプリケーションのセキュリティ評価を定期的に実行し、見つかった脆弱性は改善しましょう。セキュリティ評価は、Web サイトの開発ライフサイクルのすべての段階で行う必要があります。 また、古いバージョンのサーバーや、オペレーティングシステム、コンテンツ管理システム、ライブラリ、またはその他のソフトウェアを使用していないことも確認しましょう。

Web アプリケーション攻撃を防ぐためのベストプラクティス10項目は、以下の通りです。

  1. 脆弱性の定期的なテストやスキャン
    スキャナーやペネトレーションテスターなどのツールを使用して、Web アプリケーションの脆弱性を特定して改善しましょう。
  2. ユーザー入力の検証とサニタイズ
    すべてのユーザー入力を検証してサニタイズし、攻撃者が悪意のあるコードを Web アプリケーションに挿入するのを防ぎましょう。
  3. 準備済みステートメントやパラメーター化されたクエリの使用
    これらの手法を使用して、SQL インジェクション攻撃を防ぎましょう。
  4. ヘッダでのコンテンツセキュリティポリシー(CSP)の設定
    Web ページへのコンテンツの配信元を指定して、クロスサイトスクリプティング(XSS)攻撃を防ぎましょう。
  5. シンクロナイザートークンの使用
    フォームに一意のトークンを含め、サーバー上でその信頼性を検証して、クロスサイトリクエストフォージェリ(CSRF)攻撃を防ぎましょう。
  6. ファイルとディレクトリのパスの検証
    ファイルとディレクトリのパスを指定するために使用されるユーザー入力を適切に検証して、ディレクトリトラバーサル攻撃を防ぎましょう。
  7. 外部エンティティの処理の無効化
    XML パーサーの EntityResolver を null に設定するか、外部エンティティをサポートしないパーサーを使用して、XML 外部エンティティ (XXE) 攻撃を防ぎましょう。
  8. 使用可能な要素と属性のホワイトリストの使用
    XML 入力で使用可能な要素と属性のホワイトリストを使用して、攻撃者が事前に許可されていない要素や属性を使用できないようにしましょう。
  9. コーディングのガイドラインの使用
    コーディングフレームワークやパスワード保存に関するガイドラインを利用して、安全なコーディングを実現するためのベストプラクティスに従いましょう。
  10. サーバーとソフトウェアのアップデート
    サーバーとソフトウェアを最新のセキュリティパッチで定期的に更新し、既知の脆弱性を改善しましょう。

クライアントサイドのセキュリティを通じた
Web アプリケーション攻撃への対策

Web アプリケーション攻撃への特効薬はありません。Web アプリケーション攻撃は変化し続けるため、多面的なソリューションが必要です。上記のソリューションは、企業資産を攻撃から保護するために役立ちますが、100%の成功を保証するものではありません。

OWASP(The Open Web Application Security Project)は深層防護(Defense in Depth)姿勢を推奨しています。これは多層防護とも言われ、セキュリティ保護とリスク軽減に役立つとされています。

サイバー攻撃を防ぐには、Web サイトで実行されているすべてのコード、特にサードパーティのコードに注意することが不可欠です。 セキュリティ評価を定期的に実施し、システムにパッチを適用することで、脆弱性が改善できます。承認されていない配信元からのスクリプトを一方的にブロックしたり、新しいスクリプトをリアルタイムで監査したり、インジェクション攻撃をブロックしたりできるように、クライアントサイドの保護も考慮しましょう。

CHEQ の Go-to-Market セキュリティは、下記のソリューションを通じて、Web アプリケーションをクライアントサイドから保護し、Web サイトのパフォーマンスを向上させます。

  • アクセスやブロックの詳細設定
    承認されたサードパーティベンダーのデータへのアクセス権限を設定したり、特定のデータが配信されることをブロックしたりできます。
  • スクリプトのモニタリング
    Web サイトで実行されているすべてのテクノロジーの状況をリアルタイムでモニタリングし、Web ページが表示される際のプライバシーリスクを評価します。
  • インジェクション攻撃のブロック
    ユーザーのブラウザ内での動作を許可されたサードパーティの JavaScript を制御できるようにすることで、フォームジャッキングおよびクレジットカードやデビットカードのスキミングを防ぎます。
  • レポート
    Web サイトのトラフィックとリアルタイムのユーザーアクティビティを総合的にレポートし、疑わしいパターンやネットワークへのリクエストを特定します。

CHEQ ジャパンは、不正アクセスが Web サイトに与えている影響を無料で調査・分析いたします。Go-to-Market セキュリティの導入について、今すぐご相談ください

元の記事:What is a Web Application Attack and How can You Prevent Them?

最新の記事

不正トラフィックに影響されない
Go-to-Market セキュリティを
今すぐ始めませんか?

今すぐスタート