Web攻撃とは、データを盗む、サービスを妨害する、ユーザーを欺くなどの悪意ある目的でウェブサイト、ネットワークサービス、またはウェブアプリケーションを対象とした悪質な活動を指します。デジタル時代において、サイバーセキュリティは企業や個人ユーザーが無視できない重要な問題となっています。ウェブ攻撃手法が進化し続ける中で、一般的なウェブ攻撃に対する理解と防御が特に重要になっています。最終的な目標は、ウェブアプリケーションの円滑な運用を維持し、企業やユーザーがネットワークの損害、データの盗難、不正な競争行為を防ぐことです。
一般的なウェブ攻撃手法とは?
ウェブアプリケーションは、攻撃者の目的、対象組織の業務の性質、およびウェブアプリケーションの特定のセキュリティ脆弱性に応じて、さまざまな攻撃タイプや手法に直面する可能性があります。一般的な攻撃タイプには次のようなものがあります:
1. DDoS攻撃
分散型サービス拒否(DDoS)は、一般的なサイバー攻撃手法です。その目的は、サーバーにリクエストを過負荷させ、サーバーが遅くなり、最終的には正当なユーザーからのリクエストを処理できなくなることです。DDoS攻撃はさまざまな方法で分類できますが、通常は次の3つのタイプにグループ分けされます:
- ボリュメトリック攻撃: ボットネットがリソースに大量の偽のトラフィックを送信します。このタイプの攻撃では、pingフラッド、スプーフィングパケットフラッド、UDPフラッドなどが使用されます。ボリュームベースの攻撃は、ビット毎秒(BPS)で測定されます。
- アプリケーション層攻撃: アプリケーション層攻撃は、HTTP GETやHTTP POSTなどの一般的なリクエストを悪用します。これらの攻撃は、サーバーおよびネットワークリソースに影響を与えるため、他の種類のDDoS攻撃と同じ破壊的効果を得るために、より少ない帯域幅で達成できます。この層での正当なトラフィックと悪意のあるトラフィックを区別することは困難です。アプリケーション層攻撃は、リクエスト毎秒(RPS)で測定されます。
- ネットワーク層攻撃: ネットワーク層攻撃、またはプロトコル攻撃は、ターゲットに大量のパケットを送信します。ネットワーク層攻撃は、オープンなTCP接続を必要とせず、特定のポートをターゲットにしません。ネットワーク層攻撃は、パケット毎秒(PPS)で測定されます。ネットワーク層攻撃の例には以下が含まれます:
- Smurf攻撃:インターネット制御メッセージプロトコル(ICMP)パケットを使用してサーバーをネットワークレベルで洪水させ、IPの脆弱性を悪用しようとします。
- SYNフラッド:サーバーへの接続を開始し、その接続を閉じずに、結果としてサーバーを圧倒します。このタイプの攻撃は、スプーフィングされたIPアドレスを使用して膨大な量のTCPハンドシェイクリクエストを送信します。
ほとんどの攻撃はボリュームベースですが、「低速で遅い」DDoS攻撃もあり、小さく安定したリクエストのストリームを送信して長期間にわたりパフォーマンスを低下させ、検出を回避します。低速で遅い攻撃はスレッドベースのウェブサーバーをターゲットにし、正当なユーザーに非常に遅い速度でデータを送信しますが、タイムアウトエラーを引き起こすほど遅くはありません。低速で遅い攻撃に使用されるツールには、Slowloris、R.U.D.Y.、Sockstressなどがあります。
2. クロスサイトリクエストフォージェリ(CSRF)
CSRF攻撃は、ウェブサイトがユーザーのブラウザを信頼していることを悪用します。攻撃者は、ログイン中のユーザーにリンクをクリックさせたり、ページを訪問させたりし、ユーザーの知らないうちに別のログイン済みウェブサイトで悪意のあるアクションを実行させることができます。
成功したCSRF攻撃では、攻撃者は被害者のユーザーに意図しない行動をさせます。たとえば、アカウントのメールアドレスを変更したり、パスワードを変更したり、資金の移動を行ったりすることが考えられます。アクションの性質によっては、攻撃者がユーザーのアカウントを完全に制御できる可能性があります。もし侵害されたユーザーがアプリケーション内で特権的な役割を持っている場合、攻撃者はアプリケーションのすべてのデータと機能を完全に制御できるかもしれません。CSRF攻撃が可能であるためには、以下の3つの重要な条件が必要です:
- 関連するアクション: 攻撃者が誘導する理由があるアクションがアプリケーション内に存在します。これは、他のユーザーの権限を変更するような特権アクションや、ユーザー固有のデータに関する任意のアクション(たとえば、ユーザーのパスワードを変更すること)かもしれません。
- クッキーに基づくセッション管理: アクションには、1つ以上のHTTPリクエストを発行することが含まれ、アプリケーションはリクエストを行ったユーザーを識別するためにセッションクッキーのみを信頼しています。他のセッションを追跡したり、ユーザーリクエストを検証するためのメカニズムはありません。
- 予測不可能なリクエストパラメータがない: アクションを実行するリクエストには、攻撃者が決定または推測できないパラメータの値が含まれていません。たとえば、ユーザーのパスワードを変更する際、関数が既存のパスワードの値を知っている必要がある場合、攻撃者はそれを利用できません。
たとえば、アプリケーションにユーザーのアカウントのメールアドレスを変更する機能があるとします。ユーザーがこのアクションを実行すると、次のようなHTTPリクエストを行います:
POST /email/change HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 30
Cookie: session=yvthwsztyeQkAPzeQ5gHgTvlyxHfsAfE
email=wiener@normal-user.com
これは、CSRFに必要な条件を満たしています:
- ユーザーのアカウントのメールアドレスを変更するアクションは、攻撃者にとって興味深いものです。このアクションの後、攻撃者は通常、パスワードのリセットをトリガーし、ユーザーのアカウントを完全に制御できる可能性があります。
- アプリケーションは、どのユーザーがリクエストを発行したかを識別するためにセッションクッキーを使用します。他にセッションを追跡するためのトークンやメカニズムはありません。
- 攻撃者はアクションを実行するために必要なリクエストパラメータの値を簡単に特定できます。
これらの条件が整っている場合、攻撃者は次のようなHTMLを含むウェブページを構築できます:
<html>
<body>
<form action="https://vulnerable-website.com/email/change" method="POST">
<input type="hidden" name="email" value="pwned@evil-user.net" />
</form>
<script>
document.forms[0].submit();
</script>
</body>
</html>
もし被害者のユーザーが攻撃者のウェブページを訪れると、次のことが起こります:
- 攻撃者のページが脆弱なウェブサイトへのHTTPリクエストをトリガーします。
- ユーザーが脆弱なウェブサイトにログインしている場合、ブラウザは自動的にセッションクッキーをリクエストに含めます(SameSiteクッキーが使用されていない場合)。
- 脆弱なウェブサイトはリクエストを通常通り処理し、被害者のユーザーによって行われたものとして扱い、メールアドレスを変更します。
3. クロスサイトスクリプティング(XSS)
クロスサイトスクリプティング(XSS)は、攻撃者がユーザーと脆弱なアプリケーション間の相互作用に干渉できるウェブセキュリティの脆弱性です。攻撃者は、異なるウェブサイトを分離するために設計された同一生成元ポリシーを回避することができます。クロスサイトスクリプティングの脆弱性により、攻撃者は被害者のユーザーになりすまし、ユーザーが実行できる任意のアクションを実行し、ユーザーのデータにアクセスできます。被害者のユーザーがアプリケーション内で特権アクセスを持っている場合、攻撃者はアプリケーションのすべての機能とデータを完全に制御できる可能性があります。
クロスサイトスクリプティングは、脆弱なウェブサイトを操作して悪意のあるJavaScriptをユーザーに返すことによって機能します。悪意のあるコードが被害者のブラウザ内で実行されると、攻撃者はそのユーザーとのアプリケーションの相互作用を完全に侵害できます。XSS攻撃には主に3つのタイプがあります:
反射型XSS: 悪意のあるスクリプトが現在のHTTPリクエストから来るものです。
反射型XSSは、最も単純な種類のクロスサイトスクリプティングです。これは、アプリケーションがHTTPリクエスト内のデータを受け取り、そのデータを即座に安全でない方法で応答に含めるときに発生します。
以下は、反射型XSSの脆弱性の簡単な例です:
https://insecure-website.com/status?message=All+is+well.
<p>Status: All is well.</p>
アプリケーションはデータの他の処理を行わないため、攻撃者は次のような攻撃を容易に構築できます:
https://insecure-website.com/status?message=<script>/*+Bad+stuff+here...+*/</script>
<p>Status: <script>/* Bad stuff here... */</script></p>
ユーザーが攻撃者によって構築されたURLを訪れると、攻撃者のスクリプトがユーザーのブラウザ内で実行され、そのユーザーのアプリケーションとのセッションのコンテキスト内で実行されます。その時点で、スクリプトはユーザーがアクセスできる任意のアクションを実行し、データを取得できます。
保存型XSS: 悪意のあるスクリプトがウェブサイトのデータベースから来るものです。
保存型XSS(永続型または二次型XSSとも呼ばれます)は、アプリケーションが信頼できないソースからデータを受け取り、そのデータを後のHTTPレスポンスに安全でない方法で含めるときに発生します。
問題のデータは、HTTPリクエストを介してアプリケーションに提出される場合があります。たとえば、ブログ投稿へのコメント、チャットルームのユーザーのニックネーム、顧客注文の連絡先情報などです。他の場合、データは他の信頼できないソースから到着することがあります。たとえば、SMTP経由で受信したメッセージを表示するウェブメールアプリケーション、ソーシャルメディア投稿を表示するマーケティングアプリケーション、ネットワークトラフィックからのパケットデータを表示するネットワーク監視アプリケーションなどです。
以下は、保存型XSSの脆弱性の簡単な例です。メッセージボードアプリケーションでは、ユーザーがメッセージを提出でき、他のユーザーに表示されます:
<p>Hello, this is my message!</p>
アプリケーションはデータの他の処理を行わないため、攻撃者は他のユーザーを攻撃するメッセージを簡単に送信できます:
<p><script>/* Bad stuff here... */</script></p>
DOMベースのXSS: 脆弱性がサーバー側のコードではなく、クライアント側のコードに存在するものです。
DOMベースのXSS(DOM XSSとも呼ばれます)は、アプリケーションに信頼できないソースからのデータを安全でない方法で処理するクライアント側のJavaScriptが含まれているときに発生します。通常、データはDOMに書き戻されます。
以下の例では、アプリケーションが入力フィールドから値を読み取り、その値をHTML内の要素に書き込むためにJavaScriptを使用しています:
var search = document.getElementById('search').value; var results = document.getElementById('results'); results.innerHTML = 'You searched for: ' + search;
攻撃者が入力フィールドの値を制御できる場合、彼らは自分自身のスクリプトを実行する悪意のある値を簡単に構築できます:
You searched for: <img src=1 onerror='/* Bad stuff here... */'>
典型的なケースでは、入力フィールドはHTTPリクエストの一部から、たとえばURLのクエリ文字列パラメータからポピュレートされ、攻撃者は悪意のあるURLを使用して攻撃を仕掛けることができます。
4. SQLインジェクション攻撃(SQLI)
SQLインジェクション(SQLi)は、攻撃者がアプリケーションがデータベースに対して行うクエリに干渉できるウェブセキュリティの脆弱性です。これにより、攻撃者は通常は取得できないデータを表示できるようになります。これには、他のユーザーに属するデータや、アプリケーションがアクセスできるその他のデータが含まれる可能性があります。多くの場合、攻撃者はこのデータを変更または削除でき、アプリケーションの内容や動作に永続的な変更を引き起こすことがあります。ある場合には、攻撃者がSQLインジェクション攻撃をエスカレートさせて、基盤となるサーバーやその他のバックエンドインフラストラクチャを危険にさらすことができる場合もあります。また、サービス拒否攻撃を行うことも可能です。
成功したSQLインジェクション攻撃の結果、パスワード、クレジットカード情報、個人ユーザー情報などの機密データに対する不正アクセスが発生する可能性があります。SQLインジェクション攻撃は、多くの著名なデータ漏洩で使用されており、評判の損失や規制上の罰金を引き起こしています。ある場合には、攻撃者が組織のシステムに永続的なバックドアを取得し、長期間にわたって気づかれない状態で侵害が続くことがあります。
基本的なSQLインジェクション: たとえば、アプリケーションのログインフォームが次のSQLクエリを通じてユーザーを検証する場合:
SELECT * FROM users WHERE username = '$username' AND password = '$password';
アプリケーションがユーザー入力を適切にサニタイズしない場合、攻撃者はユーザー名またはパスワードフィールドに特別に作成された入力を入れることができ、たとえば:
' OR '1'='1
これにより、SQLクエリは次のようになります:
SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '' OR '1'='1';
「1」=「1」は常に真であるため、このクエリはすべてのユーザーを返し、潜在的に不正アクセスにつながる可能性があります。
クエリを終了させるためにコメントを使用する:攻撃者はSQLコメント記号--または/* */を使用して、クエリの条件の一部を終了させ、すべてのデータを含むクエリを結果として得ることがあります。たとえば:
' OR 1=1 --
これにより、クエリのパスワードチェック部分がコメントアウトされ、セキュリティチェックがバイパスされることになります。
ユニオンクエリインジェクション:攻撃者はUNION演算子を使用して、悪意のあるクエリを元のクエリと結合することができ、データベースが追加の機密情報を返す可能性があります。たとえば:
' UNION SELECT * FROM users WHERE '1' = '1
時間遅延インジェクション:攻撃者は、データベースに遅延を引き起こすコマンドを挿入することで、アプリケーションのSQLインジェクション脆弱性をテストできます。たとえば、MySQLでは:
' OR SLEEP(10) --
このクエリを実行した後、アプリケーションが10秒遅延する場合、それはSQLインジェクション攻撃に対して脆弱であることを示す可能性があります。
重要なウェブアプリケーション防御戦略とは?
上述のように、ウェブアプリケーションはさまざまな手段やタイプで攻撃を受けています。したがって、防御戦略も多様で変化しています。システムの脆弱性と攻撃手法が継続的にアップグレードされる中で、現代のインターネットの脅威状況は非常に厳しいものとなっています。特定のビジネスニーズに合った「チップ」セキュリティサービスなしでは、企業、団体、または個人が攻撃を受ける可能性があります。
- DDoS保護:DDoS保護とは、悪意のあるトラフィックの急増によってサービスが圧倒され、サーバーが過負荷になる状況を指します。リアルタイムのネットワークトラフィック監視に基づき、DDoS攻撃が特定されると、トラフィックが即座に浄化され、フィルタリングされます。DDoS保護は、攻撃プロファイル、行動パターン分析、AIによる認識、その他の保護アルゴリズムに基づいた事前設定された防御戦略も提供し、サーバーが安定して稼働し続けることを可能にします。
- ウェブアプリケーションファイアウォール(WAF):WAFは、ウェブアプリケーションとインターネット間のHTTPトラフィックをフィルタリングおよび監視し、ウェブアプリケーションのセキュリティを保護します。通常、WAFはクロスサイトフォージェリ、クロスサイトスクリプティング(XSS)、ファイルインクルージョン、SQLインジェクションなどのさまざまな攻撃からウェブアプリケーションを保護します。新しい脆弱性は迅速かつ静かに現れるため、WAFはウェブシステムにとって重要です。
- ボット管理:ボット管理は、機械学習やその他の専門的な検出手法を使用して、自動トラフィックと人間のユーザーを区別し、前者がウェブアプリケーションにアクセスするのを防ぎます。
- クライアント側のセキュリティ: 新しいサードパーティのJavaScript依存関係や、ウェブアプリケーションが依存しているサードパーティのコードの変更をチェックし、悪意のあるフロントエンドの脆弱性をより早く捕捉するのを助けます。
- 攻撃面管理: 攻撃面管理ツールを使用して、ウェブページをマッピングし、脆弱性をテストし、潜在的なセキュリティリスクを特定し、これらのリスクの存在を手動で確認します。
Tencent EdgeOneはウェブアプリケーションの攻撃をどのように防ぐか?
Edge Security Acceleration Platform EO(Tencent EdgeOne、以下EdgeOne)は、世界中の多くの都市に広がるグローバルネットワークを運営しています。これは、Tencentのエッジコンピューティングノードに基づいて、DDoS保護、ウェブアプリケーションファイアウォール、ボット管理、その他のセキュリティソリューションを含む加速およびセキュリティサービスを提供します。これにより、eコマース、小売、金融サービス、コンテンツ情報、ゲームなどの業界を保護し、ユーザー体験を向上させます。
EdgeOneは、任意のデータセンターで運用でき、攻撃をソースで遮断します。その機能は、ウェブサイトのサービスとパフォーマンスを補完し、使用することでサービスを加速させるだけでなく、さまざまなウェブ攻撃から保護します。さらに、すべてのEdgeOneサービスはさまざまなウェブインフラストラクチャに適しており、通常は簡単な構成で開始できます。
詳細については、
加速サービスおよびアクセスセキュリティサービスをご覧いただくか、
EdgeOneに登録してください。現在、無料トライアルを開始しました。詳細については
こちらをクリックするか、
お問い合わせください。