SQLインジェクションへの対策例

2021.07.06

Webセキュリティ

SQLインジェクションへの対策例

SQLインジェクション攻撃の「インジェクション」とは「注入」を意味します。Webアプリケーションに対してSQLと呼ばれるコマンドの入力が不正に行われることでサーバーのデータを抽出・改ざんします。この記事ではSQLインジェクションへの対策例について解説します。

目次

SQLインジェクションの影響は?

脆弱性のあるWebアプリケーションがSQLインジェクション攻撃を受けると、そのWebアプリケーションと接続しているデータベースが攻撃者に対して無防備な状態となる場合があります。個人情報をはじめとしたさまざまなデータの流出・漏洩、さらにはデータの改ざんによって、Webサイト運営者の意図と異なる内容が表示されたり、データ削除によりシステムを利用できなくなるなどの問題が生じる可能性があります。

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

SQLインジェクションはWebアプリケーションの脆弱性を悪用した攻撃のため、脆弱性への対策が行われている安全性の高いWebアプリケーションを利用する必要があります。

 

また、Webアプリケーションを開発する企業側には、安全なWebアプリケーションの開発が求められます。

 

サイバー攻撃とセキュリティ対策はいたちごっこでもあるので、安全なWebアプリケーションを開発しても、それを突破するようなサイバー攻撃が登場します。Webサイトを運営する側は安全なWebアプリケーションを導入することに加え、安全に利用し続けるために定期的なセキュリティアップデートを心掛けましょう。セキュリティアップデートに迅速に対応するためには、自動更新の設定を有効にする対策を行いましょう。このような対応を予め見込んだ予算を確保しておくことが望まれます。

1.安全なWebアプリケーションを開発しましょう

Webアプリケーション開発における受注者(開発企業)は、安全なWebアプリケーションの開発を行いましょう。安全なWebアプリケーションの開発は、SQLインジェクション攻撃への根本的な解決策となります。

 

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

 

SQLには通常、プレースホルダを用いてSQL文を組み立てる仕組みがあります。SQL文の雛形の中に変数の場所を示す記号(プレースホルダ)を置いて、後に、そこに実際の値を機械的な処理で割り当てるものです。ウェブアプリケーションで直接、文字列連結処理によってSQL文を組み立てる方法に比べて、プレースホルダでは、機械的な処理でSQL文が組み立てられるので、SQLインジェクションの脆弱性を解消できます。(IPA「安全なウェブサイトの作り方 – 1.1 SQLインジェクション」参照)

 

プレースホルダにクエリ内のパラメータの値だけを変更してクエリを実行できるプリペアドステートメント機能を利用します。プレースホルダに実際の値を割り当てる処理をバインドと呼びます。

 

1-2 エスケープ処理を行う

 

エスケープ処理では、検索バーや入力フォームなどSQLインジェクション攻撃を受けやすい機能を実装しているWebサイトに対して、特定の文字が普通の文字として解釈されるよう処理します。エスケープ処理を行うことで、SQLインジェクションを受けた際に、攻撃コードの中の特定の文字列や記号を削除したり置き換え、攻撃を無効化できます。エスケープ処理の実施には専門的な知識が必要ですが、その分高い効果を期待できます。

 

1-3 Webアプリケーションに渡されるパラメータにSQL文を直接指定しない

 

Webアプリケーションに渡されるパラメータにSQL文を直接指定する実装は、そのパラメータ値の改変により、データベースの不正利用につながる可能性があります。IPAが提供する「安全なウェブサイトの作り方 – 1.1 SQLインジェクション」では避けるべき実装として挙げられています。

 

1-4 適切な権限管理を行う

 

アカウントの権限が強い場合、SQLインジェクション攻撃を受けた際の被害が大きくなります。そのため、必要に応じてアカウントの権限を低く設定します。

 

そして、あらかじめWebアプリケーションからデータベースに送信できる命令文を特定して権限レベルで制限をかけます。そうすることで攻撃者が不正なSQL文を入力した場合でも、情報漏洩などの被害を抑えることができます。

2.脆弱性診断サービスを利用しましょう

Webアプリケーション開発における発注者(Webサービス提供企業)は脆弱性診断サービスを利用して、WebサイトやWebアプリケーションにどの程度のセキュリティリスクがあるのかを調査しましょう。脆弱性診断サービスとは、セキュリティ専門企業が実際に疑似的な攻撃を行い、攻撃者の視点からサイトやアプリケーションの脆弱性を調査してくれるサービスです。診断方法にはツールによる診断と手動での診断があります。手動での診断は詳細なチェックを受けられますが、費用はツールによる診断のみの場合よりも高額となります。

SQLインジェクション対策に有効なWAFとは?

Webアプリケーション開発における発注者(Webサービス提供企業)はWAFの導入の検討を行いましょう。SQLインジェクション対策の中で有効な対策の一つとされているのがWAFです。これは「Web Application Firewall」の略称で、その名前の通り不正侵入などをブロックする機能を備えています。安全なWebアプリケーションの開発や脆弱性診断などと合わせた導入はSQLインジェクションなどのサイバー攻撃に効果的です。

 

WAFにはアプライアンス型、ソフトウェア型、クラウド型の3種類があります。パッケージを購入して導入するアプライアンス型やソフトウェア型に対してクラウド型は、初期費用や運用コストが比較的低いのでSQLインジェクション対策として普及が進んでいます。また、Webに関する専門的な知識がなくても利用しやすいことも普及が進んでいる要因です。

 

SQLインジェクション対策としてWAFも合わせて検討してはいかがでしょうか。留意して頂きたい点としては、導入費用が必要なこと、各社WAFサービスにより特徴があり、セキュリティ対策の内容が異なることが挙げられます。サイバー攻撃を受けた際に適切に防御されないなどの可能性があるので、対応している攻撃の種類などを確認しておく必要があります。

 

事前に複数製品について情報収集を行い、WAFへの予算と費用対効果を考慮しての比較検討を行いましょう。

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

攻撃を受けていることに気が付いていない可能性もあるため、セキュリティ対策ソフトなどによる定期的なスキャンもWebアプリケーション開発における発注者(Webサービス提供企業)には有効です。

 

これにより、攻撃によって作成されたファイルやフォルダ、身に覚えのないアカウントの追加などの不審な状況を確認することができます。攻撃を既に受けている可能性を考えたセキュリティ対策も重要ではないでしょうか。

 

また、万一Webサイトに攻撃を受けてしまった場合はすぐにWebサイトの公開を停止する必要があります。公開の停止が遅れるほど情報漏洩や、Webサイトの訪問者へのウイルス感染などの被害が拡大する恐れがあるからです。

 

また、Webサイトへのアクセス監視により不審なアクセスのモニタリングを行うことも有効です。手間は掛かりますが、不審なアクセスからSQLインジェクションを検知できる場合が多いので、不特定多数の利用者があるWebサイトを運営している場合には検討の価値があります。

ひとつではなく複数のSQLインジェクション対策を取り入れよう

サイバー攻撃には多層的な防御が有効です。

 

Webサーバー側でのエスケープ処理やWebアプリケーションの脆弱性のチェックなどと併せてWAFの導入を検討してみましょう。

 

そして日ごろからWebアプリケーションの更新を行うようにしましょう。また、サイバー攻撃を防御できなかった場合の被害の拡大を防ぐ対応についても検討しておく必要があります。サイバー攻撃を完全に防御することは非常に難しく、被害拡大を防ぐことは企業の存続に関わる問題ではないでしょうか。

サイバー攻撃を可視化・遮断する「攻撃遮断くん」

クラウド型WAF 攻撃遮断くん Web Application Firewall
https://www.shadan-kun.com/

 

サイバーセキュリティクラウドが提供する「攻撃遮断くん」はWebサイト・Webサーバへのサイバー攻撃を可視化し、遮断するセキュリティサービスです。

 

ブルートフォースアタック、クロスサイトスクリプティング、Webスキャン、SQLインジェクションなどのサイバー攻撃をリアルタイムで検知・遮断しています。

 

ユーザーごとに提供される管理画面で、契約したWebサーバへの攻撃の情報を確認することができます。

 

(2020/06/10  執筆、2021/07/06 修正)

  • DDoS攻撃対策|導入社数、導入サイト数No.1|選ばれ続ける理由とは?クラウド型WAFでWebセキュリティ対策|今すぐ無料でダウンロード
  • 累計12,000サイトの導入実績 多数の事例から、導入までの経緯と抱えていた課題の解決方法をご紹介