ファイルインクルージョン攻撃と任意のコード実行とは?WordPressサイトを狙う脅威の仕組みを徹底解説
ファイルインクルージョンと任意のコード実行(Arbitrary Code Execution)について — 先月、WordPressで構築された航空券予約サイトがハッキングされ、数十万人に上る訪問者の個人情報が漏洩するという事件が発生しました。以前の記事「ハッカーはなぜハッキングを行うのか」では、データ窃取やスパムメール送信、さらにはブラックハットSEO(※関連記事:ファーマハック参照)によって自社製品を上位表示させるなど、ハッカーが攻撃を行うさまざまな動機について解説しました。
ハッカーがどのようにWebサイトを攻撃するのかを理解することは、防御への第一歩です。そのため、過去の記事ではWordPressサイトに対して行われる最も一般的なハッキング攻撃を一覧にまとめました。
一般的な攻撃手法というと、多くの方がまず「ブルートフォースアタック(総当たり攻撃)」を思い浮かべるでしょう。しかし実は、ファイルインクルージョン攻撃と任意のコード実行も、WordPressサイトに対する最も頻発する攻撃の一つなのです。本記事では、これらの攻撃を詳しく掘り下げて解説していきます。
なぜPHPファイルが鍵になるのか?
これらの攻撃の仕組みを理解するために、まず知っておくべきことは、攻撃にPHPファイルが関わっているという点です。なぜなら、ファイルインクルージョン攻撃も任意のコード実行も、いずれもPHPファイルを利用して行われるからです。
では、PHPファイルとは何でしょうか?キッチンの食器棚を想像してみてください。棚の中には砂糖、塩、調味料、調理器具など、それぞれ役割を持ったアイテムが収められています。PHPファイルはこの「食器棚」であり、ファイル内のコードは、ハッカーが目的とする機能を実行できる「アイテム」に相当します。
だからこそ、ハッカーはJPEGやPDFなどのファイルではなく、PHPファイルのアップロードを好みます。JPEGやPDFは実行可能なファイルではないため、ハッカーはこれらを使って機能を実行できません。閲覧(読み取り)はできても、乗っ取ったサイトに変更を加えることはできないのです。
一方、あなたのサイトのサーバーにPHPファイルをアップロードしたハッカーは、そのファイルを使ってサイト上でほぼ何でも行えてしまいます。これこそが、PHPファイルがファイルインクルージョン攻撃や任意のコード実行に悪用される理由です。
ファイルインクルージョン攻撃とは?
複雑なWebサイト攻撃を理解する最良の方法は、実際のシナリオで例えることです。ここでは、あなたが教育機関のWebサイト(college.com)を運営していると仮定しましょう。最近の学園祭で撮影した写真を掲載できるよう、数名の学生にサイトへのアクセス権を付与しました。しかし、そのアクセス権を悪用され、悪意のあるPHPファイル(hack.php)をアップロードされてしまったのです。ハッカーの狙いは、大学サイトの乗っ取りです。
アップロードされたファイルはどこへ行くのか?
学生が悪意あるPHPファイルをアップロードすると、デフォルト設定ではそのファイルは「uploads(アップロード)フォルダ」に保存されます。WordPressの基本構造を知っている者なら、アップロードされたファイルがどこに格納されるかを把握しています。
このファイルは、ハッカーがリモートからサーバーとやり取りするための「扉」のような役割を果たします。ただし、この時点でハッカーはまだサイトを完全には掌握しておらず、通信のための窓口を確保しただけの状態です。分かりやすく例えるなら、入国が許されていない人物Aがある国に入りたい場合、代理人である人物Bを送り込むようなものです。人物Aがハッカー、国が大学サイト、そして人物Bがhack.phpファイルに該当します。
大学サイトにアップロードされたPHPファイル ——> サーバー内にファイルが保存される
人物Bにできることは限られているため、人物Aは次の指示を出す必要があります。同様に、PHPファイルは通信窓口を開いた後、ハッカーからの追加コマンドを待ち受ける状態になります。
ローカルファイルインクルージョン(LFI)とは?
ここで、hack.phpが「さらに別のファイルをサイトにアップロードできる」ように作られていたとしましょう。ハッカーはcontrol.phpという新しいファイルを作成し、すでにサーバー内に存在するhack.phpを使ってそれをアップロードします。このcontrol.phpにより、ハッカーはサイトへの完全なアクセス権を手に入れます。このように、すでにサーバー上に存在するファイル(hack.php)を経由して別のファイル(control.php)をアップロードする手法が「ローカルファイルインクルージョン(Local File Inclusion)」です。
ローカルファイルインクルージョンの実例として、WordPressプラグイン「Easy Forms for MailChimp(v6.0.5.5)」で確認された脆弱性が挙げられます。このプラグインを使うと、サイト運営者はさまざまなフォームをWordPressサイトに設置できますが、脆弱性により、ハッカーはMailChimpのフォームを通じてPHPファイルをサーバーにアップロードできてしまうことが判明しました。ファイルがサーバーに保存された後、ハッカーはそれと通信し、サーバーを制御したり、サイトに深刻なダメージを与えたりするコードを実行できるようになったのです。
リモートファイルインクルージョン(RFI)とは?
次に、別のシナリオを考えてみましょう。大学サイトにファイアウォールが導入されており、ハッカーはcontrol.phpを直接アップロードできません。新しいファイルを送り込むことはできなくても、「既存のファイルに外部ファイルを読み込ませる(include)」ことは可能かもしれません。つまり、すでにサーバー上にあるhack.phpの中に、別のファイルを挿入するのです。
本来なら、control.phpがアップロードされれば、サーバーがそのファイルを読み込み、内部のコードを実行することでハッカーはサイトを自由に操れるようになります。しかしアップロードが不可能なため、ハッカーはサーバーにcontrol.phpを読み込ませる別の方法を探さなければなりません。そこで、ハッカーはオンライン上にアクセス可能なパス(ファイルへの参照先)を作成します。大学サイトのサーバーはインターネット上のパスにアクセスできるため、そのパスからコードを取得して実行を始めてしまいます。コードがハッカーによる完全制御を許す内容で書かれていれば、サイトは乗っ取られてしまうのです。このように、サーバーにリモート(外部)のファイルを読み込ませる攻撃手法が「リモートファイルインクルージョン(Remote File Inclusion)」です。
リモートファイルインクルージョンの有名な事例が「TimThumb」の脆弱性です。TimThumbは、WordPressサイト上で画像を簡単に編集できるプラグインで、imgur.comやflickr.comといった画像共有サイトから取得した画像を誰でも利用できる機能を持っていました。TimThumbはimgurを信頼できるドメイン(ホワイトリスト)として認識していました。ハッカーはこの仕様を逆手に取り、「https://www.imgur.com.badsite.com」のような、正規ドメインを含むURLを持つファイルを作成しました。このようなURLを持つ悪意あるファイルをアップロードすると、プラグインはファイルが信頼できるサイトから来たものと誤認してしまうのです。こうして悪意あるファイルがサーバーに取り込まれました。プラグインの脆弱性を突いて、外部の悪意あるファイルをサーバー内に読み込ませる一連の流れこそが、リモートファイルインクルージョンです。悪意あるPHPファイルがサーバーに保存された後、ハッカーはそれと通信しながら、目的の操作を実行できるようになります。
任意のコード実行(Arbitrary Code Execution)とは?
ローカル・リモート両方のファイルインクルージョンについて理解したところで、次に任意のコード実行について見ていきましょう。ファイルインクルージョンと任意のコード実行は密接に関連しています。ファイルインクルージョン攻撃において、ハッカーの最終的な狙いは常に「サイト上で任意のコードを実行すること」にあります。
先ほどのローカルファイルインクルージョンの例に戻ると、ハッカーは大学サイトにhack.phpをアップロードし、さらにそれを経由してcontrol.phpを送り込みました。「任意のコード実行」とは、ハッキングされたサイト上で、ハッカーが自らの選択したあらゆるコマンドを実行できる能力を指します。PHPファイル(hack.phpとcontrol.php)がサーバー上に配置された時点で、ハッカーは望むどんなコードでも実行可能になります。このように、自分がアップロードしたファイルから任意のコードを実行する一連のプロセスが「任意のコード実行」なのです。
まとめ
ハッキングの手口は非常に複雑です。本記事ではできる限り平易に解説を試みましたが、もし分かりにくい箇所があれば、ぜひお気軽にお問い合わせください。次回の記事では、WordPressサイトに対するもう一つの代表的な攻撃である「クロスサイトスクリプティング(XSS)」について解説します。そちらもぜひご覧ください。
-
Cプログラムを機械語に変換する4つのステップを徹底解説
プログラムの作成と実行の流れプログラムとは、プログラミング言語で記述された一連の命令の集まりです。プログラマーの仕事は、プログラムを作成し、その動作を確認することです。Cプログラムを機械語に変換して実行可能な形にするまでには、次の4つのステップが必要です。プログラムの作成と編集プログラムのコンパイルプログラムのリンクプログラムの実行1. プログラムの作成と編集プログラムの作成には「テキストエディタ」を使用します。テキストエディタを使えば、文字データの入力・修正・保存が自由に行えます。多くの場合、コンパイラには専用のテキストエディタが付属しています。プログラムを書き終えたら、ファイルとしてディス
-
PHPコード実行攻撃の脅威にさらされるWordPressサイト|未完了インストールが招く深刻なリスク
WordPressは、大規模なユーザーベースと多彩な機能を備えていることから、古くからインターネット上の詐欺師たちの格好の標的となってきました。脆弱なプラグインの使用、最新バージョンへの未更新、セキュリティパッチの不定期な適用、セキュリティ対策への怠慢などが、WordPressサイトへの大量攻撃を引き起こす主な要因です。 インストールが未完了のまま放置されたWordPress環境は、世界で最も人気のあるCMSをPHPコードインジェクション攻撃に対して脆弱なものにしています。2017年6月には720万件を超える攻撃が確認されました。このコードインジェクション攻撃キャンペーンは、特に5月から6月に