要約
構造化クエリ言語(SQL)インジェクション(SQLi)は、データベースクエリに悪意のあるコードを挿入するサイバー攻撃の手法で、機密データを漏洩させたり破壊したりする可能性があります。攻撃者は、WHERE、UPDATE、INSERT、SELECTなどの一般的なSQLコマンドを悪用して、隠されたデータを探索したり、不正なアクセス権を取得したり、将来の攻撃に備えてシステムをマッピングしたりします。SQLi(SQLインジェクション)から防御するには、プロアクティブな脆弱性テストと厳格な入力検証が必要です。たとえば、フォームフィールドでは安全な文字のみをホワイトリストに登録するといった対策が挙げられます。
SQLインジェクション攻撃の仕組み
構造化クエリ言語(SQL)インジェクションは、攻撃の一形態です。ハッカーが、デバイス(コンピューターなど)とデータストレージセンター(サーバーなど)の間で行われるべきプライベートな通信に割り込みます。
ハッカーが侵入に成功すると、ほぼすべての情報を監視、変更、または削除される可能性があります。そして、その結果は壊滅的なものになる可能性があります。
SQLインジェクションとは?
どのようなWebサイトも、コードに依存しています。ブロガーによれば、コーディングはいずれ必須のスキルになるとのことです。現代社会で生き残るためには、誰もがそうする必要があるでしょう。しかし、現時点では、コーディングのスキルを持つ人々がそのスキルを使って、Webサイト運営の根幹部分を操作しています。
最近のウェブサイトのほとんどはデータベース上で実行されており、その中には次のようなものも含まれます。
- 製品を販売します。
- ログインを許可します。
- ブログを公開します。
このようなサイトは、構造化照会言語(SQL)に依存しています。プログラマーは、この言語を使用して、サイトがデータを管理および配信できるようにします。サイトにアクセスする際、ユーザーのリクエストやコマンドはSQLを通じてサイトに送信されます。SQLインジェクション攻撃では、ハッカーがその言語を悪用します。
ハッカーが標的とするSQLコマンドとは?
ハッカーはほぼすべてのSQLコマンドを操作できますが、一般的なターゲットは次のとおりです。
| コマンド | Description |
|---|---|
| 開催方法 | 選択したいデータの場所を検索する際に |
| 更新 | データ更新を要求する場所 |
| 挿入 | 新しいデータを許可する場所 |
| 選択 | 名前で何らかの種類のデータを識別したり、データを並べ替えたりする場合 |
ハッカーは、SQLインジェクションを以下のように使用する可能性があります。
- 追跡。ハッカーがSQLデータを変更すると、隠しておきたい情報が見つかる可能性があります。
- アクセス:ハッカーは、サイトのロジックを変更したり、データベース内のデータを取得したりする可能性があります。これにより、誰かがすべてのユーザー名とパスワードを見て、不正な侵入を許してしまう可能性があります。
- 計画ハッカーは、データベースのプログラミング方法や保存場所を調べることができます。その調査は、次の攻撃に利用される可能性があります。
SQLインジェクションの2つの種類とは何ですか?
SQLインジェクションには主に2つの種類があります。
| タイプ | SCIM の仕組み |
|---|---|
| 初回注文 | アプリケーションはデータを提供する機会を与えます。ユーザーが入力したコードを、システムが安全でない方法で処理します。 |
| 2次 | このアプリケーションは入力を受け取り、後で使用するために保存します(データベースへの保存など)。アプリケーションが別のリクエストを受け取ると、その不正なデータが取得され、安全でない方法で組み込まれてしまいます。 |
SQLインジェクション攻撃は、実際にはどのように機能するのでしょうか?
SQLインジェクション攻撃の一例を説明し、その展開方法を見てみましょう。開発者はコード行を共有できるため、リアルタイムでの実行方法を確認できます。ただし、すべての読者の方にご理解いただけるように、ここでは定義を高度なレベルに維持します。
この例では、データベース内の既知の人物がJohnsonという名前です。
ハッカーがあなたのウェブサイトに侵入し、その人物がログインするように誘導されます。
フィールドに「Johnson」という単語が入力されていません。代わりに、その人は「OR 1 equals 1」のようなコード文字列を入力します。
システムはこれをコマンドとして解釈し、データベース全体を検索して解決しようとします。ハッカーが十分に強力なコードを作成した場合、サーバーはデータテーブル内のすべてのコンテンツを吐き出すように誘惑される可能性さえあります。
WebサイトのGabはこれと同様の攻撃を受け、ハッカーは以下のすべてにアクセスしました:
- 公開投稿
- プライベートなピアツーピアの投稿
- グループ投稿
- プロファイル情報
- ユーザー名
- パスワード
Gabで、他のサイトと同じようなユーザー名とパスワードの組み合わせを使用していたユーザーは、さらに深刻なリスクに直面しました。ハッカーは他のサイトでその認証情報を試して、ユーザーのオンライン活動にさらに深くアクセスした可能性があります。
SQLインジェクション攻撃を防ぐことはできますか?
データベース経由でウェブサイトを管理すると、迅速かつ効率的です。すべてのページを処理するために堅牢なサーバーを用意する必要はなく、ボタンを押すだけでコンテンツを変更できます。ただし、このテクノロジーで構築されたサイトは、注意して保護する必要があります。
SQLインジェクションの脆弱性をテストする方法を教えてください。
独自のSQLコードを送信して、SQLインジェクション攻撃に対する脆弱性を検出します。サーバーがこれらの項目をコマンドとして解釈していることを示す異常な応答を探してください。
次に、許可する文字とコマンドのセットを作成することを検討してください。フィールドボックスに任意の文字列を入力できないようにします。コードと見なされないことがわかっている用語のみに入力を制限します。
よくある質問(FAQ)
1次SQLインジェクションと2次SQLインジェクションの違いは何ですか?
ファーストオーダーSQLインジェクションでは、アプリケーションがデータを提供する機会を提供し、ユーザーがコードを入力すると、システムがそのコードを安全でない方法で処理します。セカンドオーダーSQLインジェクションでは、アプリケーションがユーザーからの入力を受け取り、後で使用するために(データベース内などに)保存します。その後、アプリケーションが別のリクエストを受け取ると、その不正なデータが取得され、安全でない方法で組み込まれてしまいます。
インジェクション攻撃で最も一般的に悪用されるSQLコマンドは何ですか?
ハッカーはほぼすべてのSQLコマンドを操作できますが、一般的な標的には、WHERE(選択するデータの場所を検索)、UPDATE(データの更新を要求)、INSERT(新しいデータを許可)、SELECT(名前によるデータの識別またはデータの並べ替え)などがあります。
SQLインジェクションによって、ハッカーはどのようなデータにアクセスできるのでしょうか?
WebサイトGabへの攻撃で実証されたように、ハッカーは公開投稿、プライベートなピアツーピアの投稿、グループ投稿、プロフィール情報、ユーザー名、パスワードにアクセスできてしまいます。ユーザーが複数のサイトで認証情報を使い回している場合、ハッカーはそれらの認証情報を他のサイトでも試すことで、ユーザーのオンライン活動にさらに深くアクセスする可能性があります。
自社のWebサイトにSQLインジェクションに対する脆弱性があるかどうかをテストするには、どうすればよいですか?
独自のSQLコーディングを送信して、SQLインジェクション攻撃に対する脆弱性を検出します。サーバーがこれらの項目をコマンドとして解釈していることを示す、通常とは異なる応答を探してください。
入力検証とは何か、また、SQLインジェクションの防止にどのように役立ちますか?
入力検証では、フォームフィールドで許可される文字やコマンドのセットを作成します。フィールドボックスにユーザーが好きな文字列を入力できないようにし、コードと見なされないことがわかっている用語のみに入力を制限することで、悪意のあるSQLがサーバーに送信されるリスクを軽減できます。
データベース駆動型Webサイトが特にSQLインジェクション攻撃のリスクにさらされる理由とは?
最近のWebサイトのほとんどはデータベース上で実行されており、SQLを利用するサイトでは、SQLを介してユーザーのリクエストやコマンドを処理します。SQLインジェクション攻撃では、ハッカーが言語を新たな目的に悪用します。つまり、あらゆるユーザー入力フィールドが、悪意のあるコードの侵入経路になる可能性があるということです。
参考文献
2016年のコーディングは1816年の読書に似ている。(2016年10月)Prenda。
データベース駆動型Webサイトに関する5つの重要ポイント。(2016年6月、Business 2 Community.
データベース駆動型Webサイト. (2003年10月). Journal of the Medical Library Association.
極右派向けプラットフォームのGab、ハッキング被害を認める。 (2021年3月)セキュリティ。
SQLインジェクション対策チートシート。(OWASP)