ファイルインクルードの対策

2018.05.16

Webセキュリティ

webセキュリティに対して知識を増やしていると、「こんな方法で攻撃されてしまうの?」と驚くことが多いのではないでしょうか。

ファイルインクルードについても同様であり、本来の用途や意図とは違った方法で悪用されてしまう攻撃手法です。

 

ファイルインクルードはどんなものなのか。どのような被害が起こり得るのか。

ファイルインクルードの対策方法なども含めてご説明致します。

目次

1.ファイルインクルードとは?

ファイルインクルードとは、プログラムの中で別ファイルを参照するコードがあった場合に、実際に参照すべきファイルとは別のファイルやデータを読み込ませて、本来意図しない不正なデータ処理を行わせる攻撃です。

 

システム上に脆弱性がある場合、ファイルインクルードで攻撃されることで、ユーザーIDやパスワードが漏洩し、システムの乗っ取りなどを引き起こす可能性があります。

2.ファイルインクルードで考えられる被害

そもそもファイルをインクルードすることは、プログラムやシステム、スクリプトでは自然なことです。

 

本来意図するファイルにアクセスすれば問題ないですが、悪意のあるコードを読み込まれることや不正な動作を引き起こされてしまうことが問題です。

 

ファイルインクルードの対策をしないままで考えられる被害について見てみましょう。

 

2-1.悪意のある攻撃は権限の奪取が目的
ファイルインクルードだけでなく、悪意のある攻撃のほとんどは本来権限を与えられていない第三者がプログラムやコードを書き換えたり、ファイルやデータをアップロード・ダウンロードする権限、機密情報にアクセスする権限を得るために、様々な脆弱性を突いてIDやパスワードを手に入れることです。

 

2-2.サーバー上のデータを狙われている
権限のあるユーザー・アカウントのIDとパスワードさえあれば、サーバー上にある全てにアクセス可能であり、webページの改ざんをされたり、個人情報を含むデータを不正にダウンロードされたりします。

 

例えば、ニュースなどで「~~社から○○○人分の個人情報が流出・漏洩」というものを見かけますが、何も知らない方であれば自分の氏名や住所が漏れて困ることなんてないだろうと思われるでしょう。

 

しかし、どんな小さな情報でも悪意のある第三者の手に渡れば直接的な被害が発生する可能性もありますし、何よりも情報が流出・漏洩してしまえば社会的信用を失うことになります。

3.ファイルインクルードの種類

ファイルインクルードはwebアプリケーションで利用している言語によって違いはあるものの、2つに大きく分けることができます。

 

ただし、webセキュリティの脆弱性を利用した悪意のある攻撃については分類が難しものや、分類されていないものもあるので柔軟に対応・対策を考えることが大切です。

 

まずはリモートファイルインクルードとローカルファイルインクルードについて見てみましょう。

 

3-1.リモートファイルインクルード
リモートファイルインクルード、RFIは悪意のある第三者が外部に作成し、用意したコードをサーバーが読み込んでしまうことで本来サーバー上にはないデータやコードを実行させられてしまうことです。

 

外部ファイルを参照させることでwebページの改ざんだけでなく、場合によっては任意のスクリプトを実行してしまうため危険性が非常に高く、何らかの被害を受けることは免れません。

 

3-2.ローカルファイルインクルード
ローカルファイルインクルードは、外部ファイルの読み込みではなくサーバー内のファイルを不正に読み込んだり、意図しない動作を起こして脆弱性を発生させたりします。

 

意図しない動作を発生させることで不正なデータ処理を実行したり、ユーザーの一覧やパスワードや場合によっては機密データへのアクセスが可能になる恐れもあります。

 

3-3.ファイルインクルードと他の攻撃を組み合わせてくる
悪意のある攻撃の多くは、一つの手段を用いるだけでなく、複数の手段を用いて攻撃してきます。

 

一つの攻撃では外のあるものではなくても複数組み合わさることで、セキュリティ対策が十分でない新たな脆弱性が産まれる可能性もあるのです。

 

例えば、ファイルインクルードを行ってユーザーIDなどを取得・他のサーバー攻撃と組み合わせてパスワードをダッシュし、システムの権限を得るなど想像し得ない方法攻撃してきます。

 

webセキュリティを意識する時、管理する立場であれば単一的にではなく、複合的に対策を練られるようにすることも大切です。

4.ファイルインクルードの対策

ファイルインクルードの対策をする時は言語やスクリプトごとに考える必要があります。

 

どのような方法でファイルインクルード対策が可能なのかをお伝えします。

 

4-1.外部ファイルの参照を無効にする
ここで言う外部ファイルの参照とは、プログラムやスクリプトのコード内で外部ファイルの参照を行えないようにすること、またはRFIを無効にすることを意味します。

 

ファイルインクルードの対策の一つとして悪意のある第三者が作成し、外部へアクセスすることを防ぐことは有効な手段でもあります。

 

もし、システムを形成する上でどうしても外部サーバーのデータを読み込まなければならない場合でも、IPアドレスなどでの制限を相互に掛けたり、その他の対策を練ることも検討しましょう。

 

4-2.ファイル・フォルダのアクセス権や権限を見直す
外部からの入力やアクセスでデータを読み込まれたり、改ざんされてしまうのはアクセス権が適切でない可能性もあります。

 

例えば、CMSの中には特に知識がなくても簡単にwebページを作成できてしまうものも多く、特に権限などを意識しないままコンテンツを生成することができます。

 

何らかの不具合が起きた時にパーミッションなどを変更してしまい、元に戻さないままだと外部からのアクセスで被害が出る可能性もあります。

 

外部からのアクセスや入力に対し、適切なアクセス権・権限が付与することが対策の一つになります。

 

また、対策をしていても何らかの脆弱性によって、データにアクセス・改ざんされてしまう可能性があることも視野に入れておきましょう。

 

付随する対策としては、知識のないまま安易に企業やサービスの公式ページを作るのではなく、作る前からwebセキュリティについて学んでおくことがとても大切です。

 

4-3.外部入力の特殊文字などに禁則ルールを作る
外部からの入力をもとに、外部へのアクセスを促すコードや文字列自体を無効にしたり、場合によっては特定のフォームやページ以外からの入力を無効にすることも視野に入れます。

 

ただし、サービスやwebページを提供する側としては、ユーザーからの入力が必要な部分も多く、セキュリティを高めることと、ユーザーの利便性が損なわれることの双方をしっかりと考えなくてはいけません。

 

4-4.推測されにくいファイル名やフォルダ構造を考える
ファイルインクルードの対策を考える時に、フォルダやファイルの位置や名前などを推測され、不正な処理をされることでデータ不正に閲覧されたり、改ざんされる可能性が生まれます。

 

また、何らかの方法でフォルダ構造を知り、フォルダやファイル名をが閲覧できた場合、推測ではなく狙って情報をダウンロードされたり改ざんされてしまうこともあります。

 

アクセス権の付与の仕方とともに、フォルダやファイル名、そして位置などについてもwebセキュリティを考えて作成することも視野に入れておきましょう。

まとめ

ファイルインクルードについてその種類や起こり得る被害、対策などについてご説明しました。

 

webセキュリティを学ぶ中で「どの情報が正しいのか」または、「どの情報が最新なのか」について悩む場合もあるでしょう。

 

ファイルインクルードについて記述する中で現時点では言語やスクリプト、サーバーで対策がとられているものもあり、ファイルインクルード以外の攻撃手法が流行っている情報も見受けられました。

 

しかし、悪意のある攻撃の多くは「過去に流行っていた」からこそ対策がされているだろうという憶測、意識の隙を狙うこともあります。

 

過去の情報・現在の情報とともに、多角的に信頼のおける情報を得られるように意識することも忘れないようにしてください。