アイキャッチ_SQLインジェクションとは 攻撃の仕組みや被害例、対策方法を解説

SQLインジェクションとは? 攻撃の仕組みや被害例、対策方法を解説

Webサービスが広く普及するなか、脆弱性が放置されているWebサイトやWebアプリケーションが少なくないのが現状です。この脆弱性をついて第3者がSQL文を挿入し、データベースへ不正にアクセスしたりデータを改ざんしたり、情報を盗み取ったりするSQLインジェクションの被害が増加しています。本記事では、こうしたSQLインジェクションの仕組みや被害例、効果的な対策について解説します。

 

SQLインジェクションとは?

「SQLインジェクション」とは、第3者がWebサイトの脆弱性を悪用し、データベースへの不正なアクセスやデータの改ざん、情報窃取などを企むサイバー攻撃です。

「SQL(Structured Query Language)」は、最も普及しているデータベース言語のひとつです。ISO(国際標準化機構)によって標準化されており、データベースを操作・制御します。

SQLインジェクションでは、脆弱性が放置されたWebサイトの入力フォームや検索ボックスなどの入力欄に、不正な操作をさせるためのSQL文を挿入することで、データの削除や窃取、システムの認証を回避して不正にログインといった被害を発生させます。

関連記事:2023年のサイバー攻撃における代表的な事例や被害額まとめ

近年SQLインジェクションは増加傾向にあり、2023年1~3月には前年同期比で1.5倍もの被害件数が報告されています。
(参照元:株式会社サイバーセキュリティクラウド「『SQLインジェクション』が前年同期比で+150%増加 ~2023年1-3月『Webアプリケーションを狙ったサイバー攻撃検知レポート』を発表~」)

また、IPAの調査によると、2023年の脆弱性の種類・影響別累計届出件数において、SQLインジェクションは2番目に多く報告されています。
(参照元:IPA「ソフトウェア等の脆弱性関連情報に関する届出状況[2023年第3四半期(7月~9月)]」)

 

SQLインジェクション攻撃の仕組み

ユーザーがWebサイトのフォームに情報を入力した際、通常は入力値に基づいて、サーバに送信される適切なSQL文が生成されます。そのSQL文に従ってデータベースが操作され、適切な結果がユーザーに返ってくる仕組みです。

しかしWebサイトに脆弱性がある場合、悪意を持った第3者が入力欄から不正なSQL文を挿入すると、そのSQL文によってデータベース内のデータの改ざんや個人情報の窃取といった不正な操作が行われてしまいます。

 

SQLインジェクション攻撃の被害例

 

・情報が盗まれる

情報漏えいは、SQLインジェクションの代表的な被害のひとつです。
例えば、顧客の個人情報や企業の機密情報などの漏えいも多数発生しています。IDやパスワードの流出によりアカウントが乗っ取られたり、クレジットカード情報が悪用されて不正送金の被害に発展したりする恐れもあります。

 

・データベースのデータが改ざん・削除される

SQLインジェクションによるデータの改ざんでは、ECサイトにおける商品の紹介文や価格が書き換えられてしまうといった事例があります。Webサイトに偽の情報が掲載されていると企業の信用が損なわれてしまいます。
また、データベース内のデータをすべて削除・破壊される攻撃を受けて、事業継続が難しくなるケースもあります。

 

・Webサイトを改ざんされる

不正なSQL文の命令によってサーバのファイルが書き換えられ、Webページが改ざんされてしまうこともあります。閲覧するとマルウェアに感染してしまう悪質なサイトのURLがページに埋め込まれ、ユーザーがその悪質なサイトに誘導されてしまうという被害も報告されています。

 

・攻撃の踏み台にされる

SQLインジェクションによって乗っ取られたメールアカウントからスパムメールを大量に送付するなど、攻撃に利用されてしまうこともあります。
また、SQLインジェクションでバックドアという侵入経路がサーバに仕掛けられることで、知らないうちに別のサーバを攻撃する踏み台にされてしまう事例もあります。

 

SQLインジェクションの対策方法

SQLインジェクションの被害を受けてしまうと、企業価値の毀損やブランド力の低下など、大きな影響を及ぼします。従ってセキュリティの強化対策は、企業の将来性を左右する重要なポイントです。以下で、SQLインジェクションへの対策方法4点を紹介します。

 

・1. プレースホルダを利用する

Webサイト画面の入力値がそのままSQL文として読み込まれると、悪意のある第3者が入力した不正なSQL文が、そのまま実行されてしまいます。この問題を解決するには、プレースホルダを使ってSQL文を組み立てるのが有効です。
プレースホルダとは、SQL文の変数部分に当てはめる記号のことです。プレースホルダを入れることで、変数部分と操作命令に関わる特殊な文字列の部分がそれぞれ確定します。こうすることで、変数部分に特殊な文字列が入力されて不正なSQL文を生成しようとしても無効化できます。

プレースホルダは、次に解説する「エスケープ処理」と組み合わせることで、さらなる安全性を目指せます。
(参照元:IPA「安全なSQLの呼び出し方」)

 

・2. エスケープ処理 を行う

エスケープ処理とは、プログラム言語で利用される特殊な文字列や記号を、ルールに従って別の文字列に置き換えることです。SQLインジェクション対策の場合は、「シングルクォート(‘)」や「セミコロン(;)」などの記号が対象になります。

第3者によって挿入された、不正なSQL文に含まれる特定の文字列や記号を変換・削除し、攻撃を無効化します。なお、データベースごとに特殊記号の扱いは異なるので、それぞれのデータベースに合わせた対策が必要です。

 

・3. 動作環境をすべて最新に保つ

Webサイトを構築するためのCMS(WordPressなど)やOS、Webアプリケーションなど、すべての環境を最新の状態にアップデートすることも効果的です。

これらのアップデートは、バグ解消や機能追加だけではなく、脆弱性への対応も含まれています。サイバー攻撃は脆弱性を狙うため、動作環境をすべて最新の状態を保つことで、セキュリティを強化できます。

WordPressのセキュリティについて、詳しくは関連記事「WordPressのセキュリティ|脆弱性を狙った攻撃事例や対策」もご覧ください。

・4. WAFを導入する

「WAF(Web Application Firewall)」を導入すると、サーバに対して悪意のある通信が行われた場合は、自動的に通信をシャットアウトしてくれます。従来のファイアウォールでは防ぎきれなかった、Webサイトの脆弱性への攻撃防止が可能です。特にクラウド型のWAFであれば、常に自動で最新のセキュリティ環境を維持できます。

 

まとめ

SQLインジェクションの被害は近年増加しています。有効なセキュリティ対策方法としては、プレースホルダやエスケープ処理 の利用、動作環境のアップデート、WAFの導入などが挙げられます。

ペンタセキュリティのWAF、「Cloudbric WAF+」は、クラウド型のセキュリティプラットフォームです。常に最新のセキュリティ環境を維持できるので、SQLインジェクション対策にも役立ちます。

関連記事:Cloudbric WAF+

 

▼WAFをはじめとする多彩な機能がひとつに。企業向けWebセキュリティ対策なら「Cloudbirc WAF+」

▼製品・サービスに関するお問い合わせはこちら

Web攻撃と脆弱性

【必見】最新版!Web攻撃と脆弱性について10のパターンを紹介!

近年、Webサイトを対象とした悪意のある攻撃者からのサイバー攻撃が後を絶ちません。ペンタセキュリティ株式会社とクラウドブリック株式会社が共同で公開した2021年第2四半期のWeb脆弱性トレンド情報によると、Web脆弱性発生件数は上昇傾向にあり、2021年6月は70件が発生しました。Webアプリケーションの脆弱性を狙った攻撃が巧妙化し、セキュリティ対策の必要性はますます高まっています。 そのため、Webアプリケーションを利用したサービス提供をしているのなら、最新のWeb攻撃の動向や事例は、知っておくべきでしょう。

 本記事では、Webアプリケーションの脆弱性を狙ったWeb攻撃の動向や事例についてまとめました。

Web攻撃動向レポートのダウンロードはこちら

 

最新版!Web攻撃と脆弱性10選

Webアプリケーションとは、インターネット上で稼働するシステムの総称で、主に、Webサーバー上で動作し、ChromeなどのWebブラウザで操作します。それに対して、スマートフォンなどの端末やパソコンにインストールして利用するアプリケーションはネイティブアプリケーションと呼んでいます。ちなみに、これらの2つの大きな違いは、利用する際にインターネットアクセスの有無で、一般的には、Webアプリケーションはインターネットへアクセスする必要があるため、攻撃者からのサイバー攻撃に遭遇する危険性が伴います。 

それでは、最新のWebアプリケーションへ主に発生する10のWeb脆弱性について詳しく見てみましょう。

  • クロスサイトスクリプティング
  • サービス運用妨害(DoS)
  • メール不正中継
  • バッファオーバーフロー
  • 強制ブラウズ
  • ディレクトリトラバーサル
  • コマンドインジェクション
  • SQLインジェクション
  • URLパラメータの改ざん
  • ファイルアップロード

過去のWebアプリケーション脆弱性についての記事は、こちらをご覧ください。

 

クロスサイトスクリプティング(XSS攻撃)

「クロスサイトスクリプティング」とは、悪意のあるスクリプトが挿入されたWebサイト(ページ)を直接的なターゲットとしているのではなく、サイト利用者・閲覧者をターゲットとした攻撃のことです。例えば、攻撃者が悪意のあるスクリプトを埋め込み、それを利用者が閲覧し実行してしまった場合、利用者は偽サイトに移動(クロスサイト)してしまいます。

クロスサイトスクリプティングは、Webアプリケーションへ主に発生するWeb攻撃(脆弱性)の1つとされており、それに気付かずに情報を入力してしまい、フィッシング詐欺やセッションハイジャックに遭う危険性があります。

 

サービス運用妨害(DoS攻撃) 

「サービス運用妨害」とは、処理に時間のかかるアルゴリズムを採用しているなどの脆弱性を狙ったWeb攻撃です。一般的には、Webアプリケーションへ主に発生するWeb攻撃に起因することから、DoS攻撃とも呼ばれています。例えば、Webサーバーに対して通常の範囲を超えたアクセスメール送信などを行い、メモリやCPUを全稼働させて処理速度を低下させます。

 また最近、DoS攻撃の進化版でもあるDDoS攻撃(不正な方法で乗っ取った複数のマシンを使ったDoS攻撃)の攻撃・被害件数も増加傾向がみられます。

 

メール不正中継

メールサーバ(SMTP)はメールが送られてきた際、自身のドメイン宛てのメールではなかった場合、別のメールサーバに転送します。そして、この機能を利用して攻撃者が他人のサーバを使い、送信元の身元が分からない大量の迷惑メールを送信する攻撃のことを「メール不正中継」と呼びます。Webアプリケーションへ発生するWeb攻撃のポイントとしては、主に下記の2つがあります。

  • 使用している電子メール配送プログラムに、メール中継に関する制限を設定していない
  • そもそも設定がないなどの脆弱性がある

これらの脆弱性により、メール不正中継などのサイバー攻撃を受けてしまう危険性があります。

また、攻撃者から大量の迷惑メールが送られてくることで、サーバが本来必要のないメール配信処理をすることになり、提供しているWebアプリケーションを利用したサービスに影響が出ます。

 

 バッファオーバーフロー

「バッファオーバーフロー」とは、データの受け取りや保管のために用意された領域(バッファ)に想定以上の長さのデータを書き込んでしまうが原因で発生するWebアプリケーションにおけるWeb攻撃のことです。溢れたデータが隣接する領域を不正に書き換えてしまったり、それによって動作異常が発生したりします。

 バッファオーパーフローは、典型的なWebアプリケーションの脆弱性の1つで、攻撃者が外部から故意に想定よりも膨大なデータを送り込んでプログラムを異常終了させたり、攻撃用のコードを送り込んで実行させたりするということです。

 

強制ブラウズ

利用しているWebアプリケーションに、URLへのアクセスを適切に制御していない脆弱性がある場合、「強制ブラウズ」という攻撃に遭遇する危険性があります。強制ブラウズとは、Webページ上からリンクを辿るのではなく、アドレスバーからURLを直接入力して本来システム側では公開していないはずのディレクトリやファイルなどにアクセスを試みること、つまり、強制的にブラウザに表示させられてしまいます。

  • ディレクトリの配置ミス
  • ファイルの配置ミス
  • Webサーバの設定ミス

Webアプリケーションにおける矯正ブラウズの脆弱性発生の原因としては、主に、上記3つが挙げられます。

 

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

「ディレクトリトラバーサル」とは、「../」のような文字列を使ってサーバのディレクトリ・パスを遡る攻撃のことです。Webサーバに置いたままにしている非公開ファイルにアクセスし、そこに保存されている情報を盗まれる危険性があります。

Webアプリケーションを利用して目的のデータを表示させるようなサービスを提供しているサイトに入力される可能性のあるデータに対する考慮不足があった場合、ディレクトリトラバーサルの被害に遭遇する危険性が伴います。

 

コマンドインジェクション

「コマンドインジェクション」とは、コマンド(コンピュータの利用者がOSのシェルに与える文字列による命令のこと)を利用し、Webアプリケーションの脆弱性を悪用する攻撃です。WebアプリケーションのコードにOSコマンドの呼び出し処理があり、ユーザーが入力したデータがコマンドの一部分を構成している場合に発生します。

  • 攻撃者がWebサーバ内に保存されているファイルを読み出す
  • システムに関係する操作、プログラムを不正に実行することが可能
  • 情報漏洩だけでなく、サーバー自体が乗っ取られてしまう危険性がある

コマンドインジェクションによって、上記のような危険性が伴います。

 

SQLインジェクション

「SQLインジェクション」とは、データベース言語(SQL)を利用して、Webアプリケーションの脆弱性を悪用する攻撃のことをいいます。コマンドインジェクションと同様に、攻撃者がWebサーバ内に保存されているファイルを読み出したり、システムに関係する操作、プログラムを不正に実行されたりします。

ユーザIDとパスワードを入力するサイトで、入力情報がアプリケーション内部でSQL文として解釈されてしまう脆弱性がある場合に、被害を受けてしまうため注意が必要です。

 

URLパラメータの改ざん

URLパラメータとは、URLにパラメータというプログラムを付け加えたシステムのことです。URL末尾に「?」が付け加えられ、「?」以降の文字列がパラメータとなります。

 このURLに付加されるパラメータ(URLパラメータ)をアドレスバーから直接改ざんして、不正アクセスを行う攻撃が「URLパラメータの改ざん」の手口で、Webサイトが改ざんされたり、Webサーバが誤動作するようにされてしまいます。

 

ファイルアップロード

「ファイルアップロード」とは、攻撃者がWebシェル(悪意のあるプログラム)をアップロードして、悪意のあるスクリプトを注入することです。Webサーバーなどに意図しない動作を引き起こさせたり、情報を抜き出されたりします。ファイルのアップロード機能のあるページの脆弱性を衝いてくる攻撃です。

 

Web攻撃による脆弱性に関する事例を紹介!

当社の「EDB/CVEレポート」で公開している通り、2021年第2四半期(4・5・6月)の脆弱性件数は合計169件でした。

ここでは、2021年第2四半期に脆弱性が観察されたWebアプリケーションの事例として、WordPress事例を紹介します。WordPressとは、Webサイトやブログを簡単に作成できるアプリケーションのことで、Webアプリケーションに起因するシステムの脆弱性により、Web攻撃を受けやすいことが特徴です。しかし、インターネット上の40.0%以上のサイト・ブログでWordPressが採用されていることを受け、WordPressの脆弱性を突いたサイバー攻撃が後を絶ちません。

2021年第2四半期で発生した、サイバー攻撃の手口といえばクロスサイトスクリプティングとSQLインジェクション。しかし、WordPressの事例では、ファイルアップロードなども確認されています。

概要について、下表にまとめました。

日付 脆弱性カテゴリ 脆弱性名
2021.5.19 クロスサイトスクリプティング WordPress Plugin Stop Spammers 2021.8 – ‘log’ Reflected Cross-site Scripting (XSS)
2021.5.24 クロスサイトスクリプティング WordPress Plugin ReDi Restaurant Reservation 21.0307– ‘Comment’ Stored Cross-Site Scripting (XSS)
2021.5.25 クロスサイトスクリプティング WordPress Plugin Cookie Law Bar 1.2.1 – ‘clb_bar_msg’ Stored Cross-Site Scripting (XSS)
2021.5.28 クロスサイトスクリプティング WordPress Plugin LifterLMS 4.21.0 – Stored Cross-Site Scripting (XSS)
2021.6.1 クロスサイトスクリプティング WordPress Plugin WP Prayer version 1.6.1 – ‘prayer_messages’ Stored Cross-Site Scripting (XSS) (Authenticated)
2021.6.7 ファイルアップロード WordPress Plugin wpDiscuz 7.0.4 – Arbitrary File Upload (Unauthenticated)
クロスサイトスクリプティング WordPress Plugin Smart Slider-3 3.5.0.8 – ‘name’ Stored Cross-Site Scripting (XSS)
2021.6.8 ファイルアップロード WordPress Plugin wpDiscuz 7.0.4 – Remote Code Execution (Unauthenticated
2021.6.9 クロスサイトスクリプティング WordPress Plugin visitors-app 0.3 – ‘user-agent’ Stored Cross-Site Scripting (XSS)
2021.6.23 SQLインジェクション WordPress Plugin Poll_ Survey_ Questionnaire and Voting system 1.5.2 – ‘date_answers’ Blind SQL Injection
クロスサイトスクリプティング WordPress Plugin WP Google Maps 8.1.11 – Stored Cross-Site Scripting (XSS)
2021.6.28 クロスサイトスクリプティング WordPress Plugin YOP Polls 6.2.7 – Stored Cross Site Scripting (XSS)

なかには、深刻度が緊急(Critical)および重要(High)の指標も存在し、悪用された場合、第3者に遠隔から任意のコードを実行される危険性(RCE)もあります。Web脆弱性が確認される度に修正はされていますが、今後も注意が必要です。

 

まとめ

今回は、Webアプリケーションへ主に発生するWeb脆弱性の種類と事例について解説してきました。攻撃者はさまざまな巧妙な手口で、Webアプリケーションへの攻撃(脆弱性)を狙ってきます。また、WordPressなどのWebアプリケーションはとても便利ですが、脆弱性については数多く報告されています。そのため、脆弱性を狙った攻撃から守るためにも、Webセキュリティは最新の状態に更新しておきましょう。

最新のWeb脆弱性の情報はこちらからご確認ください。

Web攻撃動向レポートはこちら

 

▼WAFをはじめとする多彩な機能がひとつに。企業向けWebセキュリティ対策なら「Cloudbirc WAF+」

▼製品・サービスに関するお問い合わせはこちら

SQL Injection攻撃

SQL Injectionとは?脆弱性に対する3つの対策について解説!

WebサイトやWebアプリケーションのセキュリティに対する脅威の1つに「SQL Injection」という攻撃手法が存在します。ペンタセキュリティが公開した2021年第1四半期のWeb脆弱性レポートによると、1位はXSS(Cross Site Scripting)で44%、続いてSQL Injectionが26%で2位を占めています。WebサイトやECサイトの運営をしているのであれば、個人情報の漏洩やサイトの改ざん阻止のために「SQL Injection(SQL インジェクション)」についてよく理解しておかなければなりません。本記事では、「SQL Injection」による攻撃のセキュリティ対策のポイントについて解説しています。また、後半では「SQL Injection」の実例も紹介しています。

 

SQL Injectionとは?

Webのデータはすべてデータベース(DB)に格納されています。そもそも、SQLとは「Structured Query Language」の略で、データベース上で下記の操作を行うために使用される言語のことをいいます。

  • データの追加
  • データの更新
  • データの削除
  • データの検索
  • テーブルの作成
  • テーブルの削除
  • テーブルの主キーの設定
  • ユーザ権限の付与

SQLはプログラミング言語ではなく、データベースを操作するためのデータベース言語です。そして、「Injection」は、「注入」と訳せます。つまり、「SQL Injection」とは、不正なSQLをWebサイトに送り、そのサイトを改ざんしたり、情報を漏洩させたりする悪質なサイト攻撃のことを意味します。また、攻撃そのものだけでなく、その攻撃を許してしまう情報セキュリティの脆弱性のことも指します。

「SQL Injection」による攻撃を具体的に説明しますが、通常、WebサイトでユーザIDやパスワードを入力すると不正な文字列が入力されていないか入力エリアのチェックが行われます。しかし、脆弱性があるWebサイトの場合、悪意のある攻撃者が下記のような「SQL文を含む文字列」を入力すると、サイトにログインできてしまったり、ユーザ全員のメールアドレスなどのデータが取得できてしまったりします。

$name = ‘\’ OR 1 = 1;
OR ‘A’ = A
1 or ‘1’ = ‘1’;

 

SQL Injectionが悪用される理由とは?

一般的に、WebサイトのユーザID・パスワード入力では文字列しか入力しません。しかし、脆弱性があるWebサイトの場合、上記のようなSQL文を含む文字列を命令文として認識させることができるのです。そのため、データベースが自由に操作されてしまいます。そして、悪意のある攻撃者がSQL Injectionを悪用する理由は、データベースで個人情報を閲覧したり盗み出したり、データベースの変更・消去といった悪質な行為を行うためです。

 それでは、実際に社員データを出力するプログラムをもとに、SQL Injectionを実践してみましょう。

例えば、下記のようなテーブルがあったとします。

id name mail created
1 一郎 ichirou@example.com 2021-06-05 00:00:00
2 二郎 jirou@example.com 2021-06-05 00:00:00
3 三郎 saburou@example.com 2021-06-05 00:00:00

そして、下記のようなSQL文がプログラム内に書かれていたとします。

$id = $_POST[‘id’];
$sql = ‘SELECT id, name, mail, created FROM employee WHERE id = ‘.$id;

このSQL文は、POSTされたidの値を元にして社員のデータをすべて表示するプログラムです。

例えば、id=1をPOSTすると、下記のデータが出力されます。

id name mail created
1 一郎 ichirou@example.com 2021-06-05 00:00:00

しかし、POSTされたidに、下記のような値が含まれていた場合は、どのようになるのでしょうか。

1 OR 1 = 1

SQL文は、

$sql = ‘SELECT id, name, mail, created FROM employee WHERE id = 1 OR 1 = 1’;

と同様のものが実行されてしまいます。そして、このSQL文を実行すると、下のように他の社員の情報まで出力されてしまいます。これを悪用すれば、「SQL Injection」で個人情報を閲覧できます。

id name mail created
1 一郎 ichirou@example.com 2021-06-05 00:00:00
2 二郎 jirou@example.com 2021-06-05 00:00:00
3 三郎 saburou@example.com 2021-06-05 00:00:00

 

SQL Injection攻撃の脆弱性を2つのポイントで解説!

WebサイトがSQL Injectionによる攻撃を受ける場合、その目的として多いケースが「Webサイトの改ざん」と「個人情報の漏えい」の2つです。

Webサイトの改ざん

脆弱性のあるWebサイトにSQL Injectionを用いることで、そのコンテンツから接続するデータベースに、管理者・開発者の意図しないプログラムを書き込み、改ざんすることが可能です。SQL Injectionによって、Webサイト上に表示されるテキストが改ざんされたり、挿入した覚えのない画像が表示されてしまうなど、コンテンツが不正に変更されるケースも少なくありません。また、被害だけでなく、改ざんしたWebサイトを閲覧したユーザが、マルウェアなどの不正なプログラムに感染する被害が継続的に発生しています。Webサイト改ざんによる被害はそれだけではなく、不正改ざんによってGoogleに危険なサイトと判断されてしまえば、検索順位が大きく下がってしまったり検索結果からの除外されてしまったりする可能性があります。

個人情報の漏洩

SQL Injectionで、データベース内のユーザIDやパスワード・クレジットカードの番号などの重要な個人情報を抜き取ることも可能です。2011年にSONYのゲーム用のサービス「PlayStation Network」を利用しているユーザ情報が漏洩したことがありますが、「SQL Injection」攻撃によることが原因でした。抜き取られた情報のなかには、「会員の氏名」、「住所」、「メールアドレス」、「生年月日」、「会員ID」、「パスワード」などが含まれていたといわれています。

 

必須!SQL Injection攻撃を防止する3つの対策とは?

SQL InjectionによるWebサイト攻撃は、しっかりと対策をすれば防止できます。今回紹介する対策方法は、下記の3つです。

対策① WAFの導入

SQL Injectionを悪用した攻撃への対策の1つに、WAFの導入が挙げられます。WAFとは「Web Application Firewall」の略で、分かりやすくいえばファイアウォールの1種。その特徴は、直接管理・改修することができないWebアプリケーションを攻撃から守ってくれます。導入すれば、Webアプリケーションを用いたネットショッピングやゲーム、インターネットバンキングなどのWebサービスが保護できます

対策② 脆弱性診断によるチェック

Webサイトの脆弱性は、自分ではなかなか判断できません。そのため、セキュリティ診断サービス・脆弱性診断サービスなどを活用して、Webサイトやクラウドサービス上でさまざまなサービス提供を実現するWebアプリケーションの脆弱性の有無をチェックする必要性があります。ちなみに、脆弱性診断サービスには有償のものと無償のものがあります。無償だと費用をかけずに脆弱性診断ができますが、ある程度の知識が必要となります。

そもそも、脆弱性があるとSQL InjectionによるWebサイト攻撃は防止できないため、費用がかかっても脆弱性診断をしておくことはおすすめです。

対策③ エスケープ処理

エスケープ処理は、SQL Injection攻撃における対策の基本です。そもそもエスケープ処理とは、プログラム中で使用する特殊な記号を意味の繋がらない文字として扱う処理のことです。プログラム言語は、記号に特殊な意味を持っていることが多く、そのプログラム言語の特殊性が悪用されてSQL Injection攻撃を受けます。

エスケープ処理をしておけば、WebサイトがSQL Injectionによる攻撃を受けても、入力した言語がプログラム言語ではなく意味を持たない言語として認識されため、被害を防ぐことができます。

 

SQL Injectionにおける対策方法の実例

今回は、SQL Injectionによるデータベースへの問い合わせを実行するプログラムの実例です。プログラム内に脆弱性があり、そこからSQL Injection攻撃を受けますが、その対策方法についても実例で紹介しています。それでは、ユーザ名ごとに情報が分けられているデータベースから、指定したユーザ名に一致する情報を指定する下記のSQL Injectionを例に解説していきます。

SELECT * FROM items WHERE owner = <userName> AND itemname = <itemName>;

対象とするプログラムはこちら。「C#」でのコードを例にしています。

string NameA = ctx.getAuthenticatedUserName();
string valueA = “SELECT * FROM items WHERE owner = ‘” + NameA + “‘ AND toolname = ‘” + ItemName.Text + “‘”;
nsda = new SqlDataAdapter(query, conn);
DTd = new DataTable();
nsda.Fill(dt);


SQLで「USER」の情報を出力。しかし、下記コードには脆弱性がみられます。 

ここに「OR ‘z’=’z’」を追加することで、WHEREを常に真にして、正しいユーザIDとパスワードを入力することなく、データベースにアクセスが可能になります。

 SELECT * FROM items WHERE owner = ‘USER’ AND toolname = ‘name’ OR ‘z’=’z’;

また、「OR ‘z’=’z’」はtoolnameの値に関係なく、検索条件が真として成立してしまい、toolnameが常に返ってきます。そのため、ログインを許可されていないユーザでもログイン可能な状態になってしまいます。

これにより、USERの情報だけではなく、itemsテーブルに格納されているすべてのデータを操作が可能。結果として、下記のSQLと同じ処理が行われます。

SELECT * FROM items;

ちなみに、SQLでは、ユーザIDとパスワードの組み合わせは、次のような形でチェックされます。

SELECT*FROM tableA
WHERE user=’USER′ and pass=’PASSWORD′;

しかし、C#の例と同様に「’or’1’=’1」を使うことでユーザ認証を回避できます。

 WHERE user=’USER′ and pass=”PASSWORD”or’1’=’1′;

同じように、以下のようなSQL文を使うことでデータの消去も可能です。

 name’; DELETE FROM items; SELECT * FROM items WHERE ‘a’=’a

 

さいごに

今回は、「SQL Injection」の危険性とその対策方法について解説してきました。脆弱性のあるWebサイト「SQL Injection」による攻撃を受ける可能性が高く、被害にあった場合はコンテンツやユーザの重要な情報を守ることはできません。悪質な攻撃者による「SQL Injection」での攻撃は、現在も頻発しています。ユーザ情報を扱うWebサイトを運営するのであれば、必ずその対策はしておきましょう。

 

SQL Injection攻撃からWebサイトを守る方法! クラウド型WAFサービス「Cloudbric WAF+」

Cloudbric WAF+

securiy report

今でも続くWebアプリケーションへの攻撃!JPCERT/CCの最新レポートから読み解く攻撃手法を解析

10月15日、一般社団法人 JPCERTコーディネーションセンター(JPCERT/CC)が、2020年第2四半期のインシデント報告対応レポートを発表しました。国内外で発生するコンピューターセキュリティインシデントの報告をとりまとめたもので、今回は2020年7月1日~9月30日までの間に受け付けたインシデント報告の統計および事例について紹介されています。それによると、今期のインシデント件数は8386件で、前四半期の約1.2倍へと拡大しています。またフィッシング攻撃やWebサイトの改ざん、マルウェアサイトなどで増加が見られたということです。今回はこのレポートを基に、今危機感を持つべきWebサイトへの攻撃への高まりとは具体的に何か、その対処法はあるのかを重点においてお届けしていきたいと思います。

 

インシデント報告対応レポート統計

JPCERT/CCは、インターネット利用組織におけるインシデントの認知と対処、インシデントによる被害拡大の抑止に貢献することを目的として活動しています。今回発表されたレポートの統計についてまとめてみました。

インシデント報告関連件数

引用:JPCERT/CC

 こちらの図に示されているWebフォーム、メール、FAX等でJPCERT/CCに寄せられた報告の総件数は13,831件で、前四半期の1万416件から33%増加しています。JPCERT/CC が国内外の関連するサイトとの調整を行った件数は 4,807件で、前年比で調整件数は14%増加しました。

インシデントのカテゴリーごとの内訳

引用:JPCERT/CC

 インシデントの内訳を見ると、「フィッシングサイト」が5845件で前四半期から11%増加しています。7月は1842件、8月は1849件、9月は2154件と後半にかけて増加傾向が見られます。今期気になるのは、「サイト改ざん」と「スキャン」行為といったWebサイトを狙った攻撃の増加です。「サイト改ざん」は374件で、前四半期の291件から増加、「スキャン」行為も1380件で、前四半期の982件から拡大しています。その他「マルウェアサイト(158件)」「標的型攻撃(16件)」といった攻撃も前期を上回っています。

 

Webサイトを狙った攻撃の増加

JPCERT/CCのレポートに基づいたWebサイトを狙った攻撃の増加には主に、「サイト改ざん」と「スキャン」がありました。これらについて具体的に解説していきたいと思います。

サイト改ざん

Webサイト改ざんとは、企業などが運営する正規Webサイト内のコンテンツやシステムが、攻撃者によって意図しない状態に変更されてしまう攻撃です。攻撃者がWebサイトを改ざんする際の攻撃手法としては主に脆弱性攻撃による改ざん、管理用アカウントの乗っ取りによる改ざん、パスワードリスト攻撃の3種類があります。

1. 脆弱性攻撃による改ざん

  • Webサーバ上の脆弱性を攻撃することにより、最終的に改ざんを実現します。
  • 脆弱性の利用方法として、SQLインジェクション、Stored XSS、などの脆弱性攻撃により直接コンテンツの改ざんを行う方法と、脆弱性攻撃によりバックドアを設置するなどして遠隔操作で改ざんを行う方法の2つがあります。
  • 主に、サーバOS、Webサーバ、CMS、管理ツールなどのミドルウェアの脆弱性が狙われます。

改ざんの手口のうち、サーバーソフトウェアの脆弱性攻撃は、サーバ上で動いているCMS(コンテンツマネジメントシステム)やサービスの脆弱性を狙われるものです。例えばブログや簡易な企業サイトで使われているWordPress、Joomla!、Movable Type、XOOPSといったCMSの脆弱性がよく狙われています。

また「SQLインジェクション」攻撃もよく使われる手法です。セキュリティの対策が十分でないウェブサイトに、サイト内を任意のキーワードで検索できるフォームがあるとします。攻撃者がそのフォームへ不正な内容を盛り込んだSQL文を入力し検索を行うことで、そのSQL文の内容が実行されてしまうのです。これにより、本来は隠されているはずのデータが奪われてしまったり、ウェブサイトが改ざんされてしまったりします。攻撃者がウェブサイトに対してSQLインジェクション攻撃をしかけることで、不正なSQLの命令が実行されてしまい、ウェブサイトを利用者するユーザーのID・パスワード・クレジットカードの番号をはじめとした個人情報がすべて奪われてしまう可能性があります。

2. 管理用アカウントの乗っ取りによる改ざん

  • Webサーバにリモートアクセス可能な管理用アカウントの情報を窃取して乗っ取り、正規の方法でWebサイト操作を行って改ざんします。
  • 正規のWebサイト操作方法により改ざんが行われるため、被害に気づきにくい特徴があります。

正規のWebサイトに攻撃を仕掛け、中身を改ざんする手法ですが、その目的は、Webサイトにコンピューターウイルスを仕込んで閲覧者に感染させることです。以前は、いたずら目的でのWebサイトの改ざんが多く見られましたが、最近では、金銭が目的の被害が増えています。自社のサイトがこのような改ざん被害にあって、逆に顧客に被害を与える「加害者」になれば失墜する信頼は計り知れないものとなるでしょう。

3. パスワードリスト攻撃

  • パスワードリスト攻撃とは、攻撃対象となるWebサイトではない別のWebサイトから搾取したユーザー情報を使い、攻撃対象となるWebサイトで不正ログインを試みるサイバー攻撃です。
  • アカウントIDやパスワードをすべて別々に管理することが面倒なため、管理者PCや複数のWebサイトで同じアカウントIDやパスワードを使用しているケースがあります。

パスワードリスト攻撃とは、オンラインサービス等への不正ログインを狙った不正アクセス攻撃の一です。不正ログインのためにIDとパスワードがセットになったリストを利用することから本名称となっています。パスワードリスト攻撃を受けたとなると、Webサービスに対するユーザーからの印象が著しく低下します。「リスト型攻撃は他のウェブサービスから入手したアカウントとパスワードを使って不正アクセスする攻撃だ。ユーザーのアカウントとパスワードの管理の問題だ。」という見解の方もいらっしゃるでしょう。しかし、ユーザーの視点では「不正アクセスを許して個人情報の流出があったサービス」のように見えてしまうのです。

スキャン

スキャン攻撃とは、サイバー攻撃者が、攻撃先を探すために行うポートスキャンです。脆弱性の探索や侵入、感染の試行などを検知した件数が今回のレポートで増加し、警告されています。ポートスキャン自体は、サーバなどに対して稼働しているサービスを探り、開放されているポートを調べる行為で違法なものではありません。しかし、攻撃の事前準備として行われることが多いため、日常から適切な対処が必要となります。サイバー攻撃の手口は年々巧妙化していますが、システムの脆弱性を突くのが攻撃の基本となります。その脆弱性を見つけ出すためにポートスキャンは使われるのです。例えば、空いているポートがわかれば、そのポートを侵入経路として利用することができます。またサーバのOSやバージョンがわかれば、OSに依存する脆弱性を突くことができるのです。ポートスキャンも同様に、これ自体はサイバー攻撃ではなくても、これから被害が発生するかもしれないサイバー攻撃の予兆としてとらえることが重要です。

 

WAFで防御できること

こうした警鐘をならされているWebサービスへの攻撃の増加に対し、有効なのがWAFを用いた防御システムです。例えばWAFで防御できることには以下の様な項目があります。

  • SQLインジェクション
  • クロスサイトスクリプティング(XSS)
  • クロスサイトリクエストフォージェリ(CSRF)
  • OSコマンドインジェクション
  • ディレクトリリスティング
  • メールヘッダインジェクション
  • パス名のパラメータの未チェック/ディレクトリトラバーサル
  • 意図しないリダイレクト
  • HTTPヘッダインジェクション
  • 認証とセッション管理の不備
  • 認可制御の不備、欠落
  • クローラへの耐性

Webアプリケーションに関する脅威をブロックできるのが「WAF」です。WAFを使えばWebアプリケーションに脆弱性があったとしても安全に保護することができます。最近となっては、システムのクラウドへの移行という傾向もあり、クラウド型WAFが注目を集めています。従来のアプライアンス型WAFと比べ、専門の機器の導入やセキュリティ担当者による運用が必要ありません。そのため、リーズナブルな価格で短期間で導入できるといったメリットがあります。クラウド型セキュリティ・プラットフォーム・サービス「クラウドブリック(Cloudbric)」はWAF(Web Applicaion Firewall)サービスに加え、DDoS攻撃対策、SSL証明書、脅威情報データベースに基づく脅威IP遮断サービス、ディープラーニング(AI)エンジンによるWebトラフィック特性学習サービス、といったWebアプリケーションを守るトータル・セキュリティサービスを提供します。

Webアプリケーションを業務で利用するときは、セキュリティ上の脆弱性に注意しなくてはいけません。アプリケーションの開発者がセキュリティ対策を行っていても、人の手で作成されているため、脆弱性を完全になくすのは難しいでしょう。WAFはWebアプリケーションを保護する専用のファイアウォールのため、導入することでWebアプリケーションを安全に利用できます。
今現在、JPCERTのレポートからもわかるようにWebアプリケーションやサービスへの攻撃は劣えてはいません。それらの攻撃に備え、防御するにはWAFを導入することが望ましいといえます。
クラウド型セキュリティ・プラットフォーム・サービス「クラウドブリック(Cloudbric)」につきまして、詳しくは下記リンク先をご確認ください。

https://www.cloudbric.jp/cloudbric-security-platform/