SQLインジェクション:WordPressユーザーのためのガイド
公開: 2021-05-26Webサイトのセキュリティに真剣に取り組んでいる場合は、SQLインジェクションの危険性とそれらに対抗する方法について学ぶときが来ました。
SQLインジェクション(SQLiとも呼ばれる)という用語は、ハッカーがコンテンツ管理システムとしてWordPressを実行しているサイトを含む、あらゆる種類のWebサイトを侵害する一般的な方法であるサイバー攻撃手法の一種を指します。
このガイドでは、SQLインジェクション攻撃がどのように見えるか、およびそれを回避するために必要な正確な手順について詳しく説明します。 見てみましょう。 これらの攻撃がどのように機能するか、防御することが非常に重要である理由、およびこれらの脆弱性の実際の例についてすべて学習します。 飛び込みましょう!
はじめに:SQLを理解する
SはQ ueryでLのanguage、または「SQL」は(言葉「続編」のように発音)リレーショナルデータベース管理システムであるtructured。 1974年に発明され、コンピュータシステム上で多くの種類のデータを保存および取得する最初の簡単な方法でした。
それ以来、この言語の人気は急上昇し、今日でもWordPressのような多くのコンテンツ管理システム(CMS)で使用されています。 この言語が科学研究コミュニティで普及した直後に、今では悪名高いSQLインジェクションの問題が発生しました。
WordPressのようなシステムでは、多くの操作でSQLクエリを使用してデータを取得および保存します。 これらのSQLクエリは開発者によって作成されたものであり、順応性があるようには設計されていません。
残念ながら、SQLの開始以来、SQLインジェクション攻撃は、WordPressデータベースのようなこのタイプのデータベースを使用するシステムにとって永続的な問題でした。 高品質のWordPressセキュリティプラグインを使用すると、壊滅的な攻撃や違反に見舞われるリスクを確実に軽減できます。 しかし、GIジョーが言うように、あらゆる形態のサイバー攻撃に関しては、「知ることは戦いの半分です」。
SQLインジェクション(SQLi)とは何ですか?
一言で言えば、SQLインジェクション(SQLi)は、ハッカーが脆弱なSQLクエリを利用して独自のクエリを実行できるようにする攻撃です。 SQLインジェクションは、攻撃者がサーバー上で独自のSQLを実行できる場合に発生します。SQLインジェクションは、技術出版物では「SQLI」または「SQLi」と呼ばれることがよくあります。 これらの攻撃は、SQLまたはSQLの派生物を使用してデータを管理するすべてのシステムで発生する可能性があることを忘れないでください。 特にWordPressSQLインジェクションは、WordPressプラットフォームで実行されるサイトの量が非常に多いため、非常によく研究され、文書化されています。
これらの攻撃が何で構成されているかについて、より技術的な支出を見てみましょう。
SQLインジェクションの定義
定義上、SQLインジェクションの意図は常に悪意があり、通常、次の3つの目標の1つ以上を達成することを目的としています。
- 不正なデータの取得– SQLでは、SELECTコマンドを使用してデータを取得します。 攻撃者がSELECTベースのクエリを正常に操作できる場合、攻撃者はデータベースの内容を「ダンプ」することができます。 これが、すべてのデータベースを一般に公開してはならない情報で暗号化することが重要である理由です。
- データの変更–その他の場合、WordPress SQLインジェクションの目的は、データベースのエントリを変更することかもしれません。 これは通常、特定のアカウントまたはアカウントのセットに、通常は持っていない権限を割り当てるためのものです。
- サービス拒否(DoS) – DoS攻撃とは、悪意のあるユーザーが正当なユーザーがサイトやサービスにアクセスするのをより困難にすることです。 データを削除するSQLの一般的なコマンドは、単にDELETEです。 攻撃者は、データベースのコンテンツを大量に削除して、ターゲットサイトに到達できない、または使用できないようにすることがよくあります。
クイックヒント:ウェブサイトを定期的にバックアップしてください!
多くのベテラン開発者は、WordPressサイト用に作成したすべてのSQLのサーバー外コピーを保持しています。 .sqlファイルの形式で、これらをWordPressバックアッププラグインと組み合わせて使用すると、攻撃者がセキュリティを妨害したとしても、非常に短い時間で回復できます。 BackupBuddyのようなWordPressバックアッププラグインは、WordPressデータベース全体とWordPressインストール内の他のファイルをバックアップします。

SQLインジェクション攻撃の種類の説明
SQLベースの攻撃が引き起こす可能性のある損傷のいくつかを調査したので、次はインジェクションのより技術的な側面を調査します。 知っておくべき注射タイプの重要なサブセットがいくつかあります。
クラシックSQLインジェクション(SQLi)
最も一般的なタイプのインジェクションであるクラシックバージョンは、攻撃者がSQLコードを事前に知っている場合です。 これは、WordPressで最もよく使用されるタイプのインジェクションでもあります。 WordPressはオープンソースであるため、一般の人々はSQLクエリを含むすべてのコンポーネントにアクセスできます。
少し後で実際の例に飛び込みますが、この形式のインジェクションでは、攻撃者はクエリを操作して、クエリの最初の部分を「キャンセル」することがよくあります。 次に、元の開発者が作成したかのようにサーバーが実行するカスタムクエリを挿入できます。
ブラインドSQLインジェクション(SQLi)
従来のバージョンとは異なり、ブラインドSQLインジェクションは、攻撃者がSQLコードにアクセスできず、知識に基づいて推測する必要がある場合に発生します。 さらに、このタイプは、攻撃が成功した結果が攻撃者に表示されないため、従来のSQLiよりもはるかに多くのスキルを必要とします。
そうは言っても、悪意のあるユーザーが結果を少しずつ自動的に取得するのを支援する利用可能なプログラムはたくさんあります。
複合SLQインジェクション(SQLi)
この形式の攻撃は、別の攻撃をSQLiと組み合わせて、目的の結果を得る場合です。 3つのサブグループの中で最も洗練された攻撃者は、それ自体では機能しないSQLiを実行できるようにするエクスプロイトを実行する必要があります。 このジャンルの攻撃でSQLiに最も一般的に伴うエクスプロイトは、認証違反、分散型サービス拒否(DDoS)攻撃、DNSハイジャック、およびクロスサイトスクリプティング攻撃です。
WordPress WebサイトがSQLインジェクションに対して脆弱なのはなぜですか?
WordPressは、非常に広く使用されており(現在、すべてのWebサイトの40%を占めています!)、しばらくの間(2003年以降)使用されているため、特定のSQLインジェクションに対して脆弱です。 WordPressは、MySQLと簡単に統合できるように設計されたサーバーサイドプログラミング言語であるPHPに基づいています。
WordPressはSQLデータベースを使用して、コメントから投稿、アカウント、eコマース情報までほとんどすべてを保存します。 WordPressのSQLインジェクションの試みの大部分は、攻撃者が悪用したいSQLクエリを含むPHPスクリプトにデータを送信するフォームで行われます。
これは設計上の欠陥ではなく、WordPressの設計方法の副作用です。 「ドットコム時代」の前から始まり、セキュリティを念頭に置いて設計されたものではないことを忘れないでください。 実際のところ、現在廃止されているPhrack Webマガジンは、1998年12月号でSQLiについて議論した最初の公開ソースでした。
最初のSQLiエクスプロイトはWordPressのような最新のCMSで機能することはほとんどありませんが、攻撃者は何年にもわたって巧妙になっています。 完全に保護されていないWebサイトでSQLiがどのように表示されるかを示す簡単な例を見ていきます。 次に、WordPressのさまざまなバージョンの既存のエクスプロイトを確認する方法を示します。
SQLインジェクションに関する重要な警告
先に進む前に、WordPressとサイバーセキュリティの共同の旅を順調に進めるために、もう1つ明確にしておきたい重要な注意事項があります。
WordPressのバージョンを最新の状態に保つことは、SQLiの悪用に対する最善の防御策の1つです。 一時的にいくつかのプラグインを壊すことを意味する場合でも、サイトのセキュリティにとっては価値があります。SQLインジェクションの例
これらの免責事項がわからなくなったので、SQLiの例を見てみましょう。 これらを理解するには、SQLの専門用語を少し知っておく必要があります。 SQLは、SELECTなどのコマンドを使用してデータを取得し、DROP TABLEを使用してデータベース内のテーブルを完全に破棄し、DELETEを使用してテーブルから行を削除します。 さらに、「*」文字はSQLでは「すべて」を意味します。
SQLの最も基本的なクエリは、SELECT * FROMTABLE_NAMEです。 これは、基本的に「TABLE_NAME」という名前のテーブルからすべてのデータを出力することを意味します。 ログインフォームにデータを送信すると、クレデンシャルをユーザーのテーブルと照合するPHPスクリプトが実行されます。 この例では、サイバーセキュリティが非常に苦手で、USERおよびPASSという列を持つ完全に暗号化されていないクリアテキストテーブルがあると想定します。
クエリの準備
非常に安全性の低いデータベースでは、ユーザー名とパスワードを含むテーブルはBADLY_DONE_TABLEと呼ばれます。 ログインしているユーザーを認証するためのクエリは、次のとおりです。SELECT* FROM BADLY_DONE_TABLE WHERE USER = '[フォームからのユーザー名]' AND PASS = '[フォームからのパスワード]'。
ご覧のとおり、フォームに入力されたユーザー名とパスワードが一致する場合は、ユーザーの「リスト」を取得するように言っています。これは1つだけである必要があります。 SQLでは、クエリに表示されるANDのように、キーワードORを条件ステートメントで使用することもできます。
さて、エクスプロイトを作成する時が来ました。
保護されていないSQLクエリの活用
ユーザー名とパスワードが一致した場合にユーザーを返すようにクエリが設定されています。 一重引用符で文字列を終了することを念頭に置いて、ユーザー名として「Blahblahblah」と入力してから、「OR」「1」=「1」と入力できます。
クエリは動的に形成され、入力は実行前に「サニタイズ」されないという事実を利用しています。 基本的に、数値「1」が数値「1」と等しい場合(驚くべきことに、そうです!)、入力した資格情報が正しいかどうかに関係なく、テーブルからすべてをダンプします。
1998年には、これはうまくいったでしょう。 現在、WordPressの実用的なエクスプロイトを作成するには、通常、SQLとSQLiの両方ではるかに多くのスキルが必要です。
SQLインジェクションとWordPressウェブサイト
前の例は、サイト管理者がすべてのセキュリティ対策を無効にするために邪魔にならない限り、最新のWordPressサイトでは機能しません。 ただし、同じ原則を使用して、ハッカーはSQLiエクスプロイトを作成し、他の悪意のあるユーザーに販売します。
WordPressはオープンソースであり、背後に大規模な開発コミュニティがあるため、多くのセキュリティ研究者は、ハッカーよりも先にこれらのエクスプロイトを見つけることがよくあります。 次に、それらをWordPressチームに報告すると、エクスプロイトにパッチが適用されます。 いくつかの不幸なケースでは、ハッカーが最初にエクスプロイトを見つけて「野生」にし、WordPressチームにできるだけ早く修正を加えてアップデートとしてリリースすることを余儀なくさせます。
WordPressの現在および以前のインジェクションのエクスプロイトを確認したい場合は、CVEデータベースを確認できます。 これには、製品名、影響を受けるバージョン、およびエクスプロイトの仕組みの一般的な説明を含むセキュリティ脅威のインデックスが含まれています。 このようなリストにあるほとんどすべてのエクスプロイトにはパッチが適用されていますが、学習教材として使用するのに最適です。
SQLインジェクションの防止
これを読んだ後、あなたはおそらくあなたのWordPressサイトがSQLi攻撃の次の犠牲者にならないようにする方法を疑問に思っているでしょう。 幸いなことに、SQLi攻撃から身を守るために、セキュリティの専門家である必要はありません。
- 他のサイトから作成または取得してインストールするPHPファイル(具体的には、WordPressプラグイン)には十分注意してください。 必要なのは、WordPressサイトを台無しにするためにユーザー入力をサニタイズしない弱く作られたPHPスクリプトだけです。
- iThemes Security Proなどのよく知られたセキュリティ監視プラグインを使用して、誰かがサイトに対してこの攻撃を実行しようとした場合に警告を発し、事前にブロックできるようにします。
- 最も重要なことは、WordPressサイトを常に最新バージョンに更新しておく必要があります。 多くのサイト所有者は、何らかの理由で更新を延期しており、これがデータ侵害の大部分の理由です。
- WordPressプラグインとテーマを最新の状態に保ちます。 十分に言えません。 脆弱なテーマとプラグインは、WordPressサイトがハッキングされる最大の理由です。
WordPressのSQLインジェクションを防ぐための5つのステップ
1. iThemes SecurityProプラグインをダウンロードしてインストールします
サイトの保護と保護を開始するには、iThemes SecurityProプラグインをダウンロードしてインストールします。
今すぐiThemesSecurityProを入手
2.バージョン管理をアクティブにして、WordPressコア、プラグイン、テーマを最新の状態に保ちます
簡単に言えば、Webサイトで古いバージョンのワードプレス、プラグイン、テーマを実行していると、攻撃のリスクにさらされます。 バージョンの更新には、SQLインジェクションやリモートコード実行(RCE)の脆弱性など、コードのセキュリティ問題に対するパッチが含まれていることが多いため、WordPressWebサイトにインストールされているすべてのソフトウェアの最新バージョンを常に実行することが重要です。

アップデートは、利用可能になり次第、WordPressダッシュボードに表示されます。 WordPressサイトにログインするたびに、バックアップを実行してから、利用可能なすべての更新を実行する練習をしてください。 更新を実行するタスクは不便または面倒に思えるかもしれませんが、それは重要なWordPressセキュリティのベストプラクティスです。

開示されたすべてのWordPressの脆弱性を追跡することは困難であり、WordPressの脆弱性のまとめで追跡して共有し、そのリストをWebサイトにインストールしたプラグインやテーマのバージョンと比較します。 ただし、これはWordPressハッカーが既知の脆弱性を持つプラグインやテーマを標的にすることを阻止するものではありません。 既知の脆弱性を持つソフトウェアをサイトにインストールすると、ハッカーはWebサイトを乗っ取るために必要な青写真を得ることができます。
iThemes Security Proプラグインのバージョン管理機能を使用すると、WordPress、プラグイン、およびテーマを自動更新できます。 さらに、バージョン管理には、古いソフトウェアを実行しているときにWebサイトを強化し、古いWebサイトをスキャンするオプションもあります。
バージョン管理の使用を開始するには、セキュリティ設定のメインページでモジュールを有効にします。

次に、[設定の構成]ボタンをクリックして、サイトを保護するように設計された設定を詳しく確認します。

- WordPressアップデート–最新のWordPressリリースを自動的にインストールします。
- プラグインの更新–最新のプラグインの更新を自動的にインストールします。 この設定を有効にすると、WordPressの自動更新プラグイン機能が無効になり、競合が防止されます。
- テーマの更新–最新のテーマの更新を自動的にインストールします。 この設定を有効にすると、WordPressの自動更新テーマ機能が無効になり、競合が防止されます。
- 古いソフトウェアを実行しているときにサイトを強化する–利用可能なアップデートが1か月間インストールされていない場合、サイトに保護を自動的に追加します。
- 古いWordPressサイトのスキャン–攻撃者がサーバーを危険にさらす可能性のある古いWordPressサイトのホスティングアカウントのスキャンを毎日実行します。 脆弱性のある単一の古いWordPressサイトでは、攻撃者が同じホスティングアカウント上の他のすべてのサイトを侵害する可能性があります。
- 脆弱性が修正された場合の自動更新–このオプションは、iThemes Security Proサイトスキャンと連携して機能し、既知のWordPress、プラグイン、およびテーマの脆弱性についてWebサイトをチェックし、利用可能な場合はパッチを適用します。
3.脆弱なプラグインとテーマについてサイトをスキャンします
iThemes Security Pro Site Scannerは、WordPress Webサイトを、すべてのソフトウェアハッキングの最大の原因である古いプラグインや既知の脆弱性を持つテーマから保護するためのもう1つの方法です。 サイトスキャナーは、既知の脆弱性についてサイトをチェックし、パッチが利用可能な場合は自動的に適用します。
チェックされた3種類のWordPressの脆弱性
- WordPressの脆弱性
- プラグインの脆弱性
- テーマの脆弱性
新規インストールでサイトスキャンを有効にするには、iThemes Security Pro設定に移動し、サイトスキャン設定モジュールの[有効にする]ボタンをクリックします。

手動のサイトスキャンをトリガーするには、セキュリティ設定の右側のサイドバーにあるサイトスキャンウィジェットの[今すぐスキャン]ボタンをクリックします。

サイトスキャンの結果がウィジェットに表示されます。

サイトスキャンで脆弱性が検出された場合は、脆弱性のリンクをクリックして詳細ページを表示します。

サイトスキャンの脆弱性ページで、脆弱性に対して利用可能な修正があるかどうかを確認します。 利用可能なパッチがある場合は、[プラグインの更新]ボタンをクリックして、Webサイトに修正を適用できます。
パッチが利用可能になってから、修正を反映するようにiThemes Security VulnerabilityDatabaseが更新されるまでに遅延が生じる可能性があります。 この場合、通知をミュートして、脆弱性に関連するアラートをこれ以上受信しないようにすることができます。
4.ファイル変更検出をアクティブにします
セキュリティ違反をすばやく発見するための鍵は、Webサイト上のファイルの変更を監視することです。 iThemes Security Proのファイル変更検出機能は、Webサイトのファイルをスキャンし、Webサイトで変更が発生したときに警告を発します。
ログに新しいファイル変更アクティビティが表示される正当な理由はいくつかありますが、変更が予期しないものであった場合は、時間をかけて変更が悪意のないものでないことを確認する必要があります。 たとえば、プラグインを更新したのと同じ日時にプラグインに変更が加えられた場合、調査する理由はありません。
ファイル変更の監視を開始するには、セキュリティ設定のメインページでファイル変更検出を有効にします。

ファイル変更検知を有効にすると、iThemes SecurityProはWebサイトのすべてのファイルをチャンクでスキャンし始めます。 ファイルをチャンクでスキャンすると、ファイルの変更を監視するために必要なリソースを削減するのに役立ちます。
最初のファイル変更スキャンは、Webサイトのファイルとそのファイルハッシュのインデックスを作成します。 ファイルハッシュは、ファイルのコンテンツの短縮された、人間が読めないバージョンです。
最初のスキャンが完了した後、iThemes SecurityProはファイルをチャンクでスキャンし続けます。 後続のスキャンの1つでファイルハッシュが変更された場合、それはファイルの内容が変更されたことを意味します。
[ファイル変更検出]設定の[今すぐファイルをスキャン]ボタンをクリックして、手動でファイル変更を実行することもできます。

ファイルの変更は常に発生し、変更のたびに電子メールアラートを受け取ることはすぐに圧倒されます。 そして、あなたがそれを知る前に、それはオオカミの状況を叫んだ少年になり、あなたはファイル変更アラートを完全に無視し始めます。
幸いなことに、iThemes Security Proは正当な変更をインテリジェントに識別して通知を減らし、頻繁に更新されることが予想されるファイルの通知をミュートする方法を示します。 iThemesセキュリティプラグイン内の通知センターからすべてのiThemesセキュリティ通知を管理できます。 WordPress管理ダッシュボードから、 [セキュリティ]> [設定]にアクセスし、通知センターモジュールを見つけます。
5.Webサイトに変更を加えるユーザーに対して2要素認証をオンにします
二要素認証は、2つの別個の検証方法を要求することにより、個人のIDを検証するプロセスです。 Googleはブログで、2要素認証を使用すると自動ボット攻撃を100%阻止できることを共有しました。 悪くないオッズ!
iThemes Securityプラグインを使用すると、WordPressサイトの2要素認証をアクティブ化できるため、ユーザーはログインするためにセカンダリコードを入力する必要があります。
iThemes SecurityProが提供する3つの2要素認証方法は次のとおりです。
- モバイルアプリ–モバイルアプリ方式は、iThemes SecurityProが提供する2要素認証の最も安全な方式です。 この方法では、AuthyやGoogleAuthenticatorなどの無料の2要素モバイルアプリを使用する必要があります。
- 電子メール– 2要素の電子メール方式は、時間に敏感なコードをユーザーの電子メールアドレスに送信します。
- バックアップコード–主要な2要素認証方式が失われた場合にログインに使用できる1回限りの使用コードのセット。
Webサイトで2要素認証の使用を開始するには、iThemes SecurityPro設定のメインページでこの機能を有効にします。

こちらの手順に従って、WordPressサイトの2要素認証の設定を続行します。 推奨事項に従い、特権ユーザーの強制要件を有効にした場合、次に表示されるのは2要素トークンを入力する場所です。

まとめ:より安全なWebへ、一緒に
WordPressサイトを探している潜在的なセキュリティの脅威をすべて発見したときに、少し圧倒されていると感じても心配しないでください。 真実は脅威が多いということですが、解決策は簡単です。
このガイドが、WordPressサイトでのSQLインジェクション攻撃のリスクを理解するのに役立つことを願っています。 上記の5つのステップに加えて、いくつかのWordPressセキュリティのベストプラクティスを実装することで、より優れた防御線が得られます。
Kristenは、2011年からWordPressユーザーを支援するチュートリアルを作成しています。通常、彼女はiThemesブログの新しい記事に取り組んでいるか、#WPprosperのリソースを開発しています。 仕事以外では、クリステンはジャーナリング(2冊の本を書いています!)、ハイキングやキャンプ、料理、家族との毎日の冒険を楽しんでおり、より現代的な生活を送っています。
