逗阴馆

奥础贵记事ブログ 10-02-2017

ディレクトリトラバーサル(颁奥贰-22)

デジサート
このブログではウェブサイトやその上で動作しているウェブアプリケーションの脆弱性について紹介すると共に注意喚起をする目的でまとめられています。 今回は代表的なWebアプリケーション脆弱性であるディレクトリトラバーサルについて解説をしています

概要

奥别产アプリケーションの中には、外部からファイル名を指定して、そのファイルに対する閲覧や书き込みをする実装になっているものがあります。この际、ファイル名を巧妙に细工して指定することにより、本来読み书きを许可していないファイルを指定されてしまう场合があります。このような攻撃をディレクトリトラバーサル攻撃と言います。ディレクトリトラバーサル攻撃の结果、プログラムのソースファイルや个人情报ファイルの閲覧、ファイルの改ざん、不正なプログラムの设置による任意コードの実行などの可能性があります。

ディレクトリトラバーサル攻撃は、通常アクセスできないはずのサーバー内部のファイルを閲覧できるため不正アクセス禁止法に抵触する可能性が高いものです。このため、予め许可を得ている场合を除き、外部のサーバーでディレクトリトラバーサル攻撃を试すと、犯罪となる可能性が高く注意が必要です。

攻撃のイメージと影响

以下のプログラム(笔贬笔言语)断片は、迟尘辫濒というクエリ文字列を指定して、テンプレートファイルを表示しています。

<?php readfile('/var/data/' . $_GET['tmpl']); ?>

正常系の動作は、例えばtmpl=spring.htmlというクエリ文字列に対して、/var/data/spring.htmlというテンプレートファイルが表示されます。 一方、攻撃者がtmpl=../../../etc/passwdというクエリ文字列を指定した場合、このプログラムは、/var/data/../../../etc/passwdというファイルを表示しようとしますが、../は親ディレクトリを示すため、このファイル名を正規化した結果/etc/passwdというUnix/Linuxのユーザ情報を表示することになります。このようにして、攻撃者はWebサーバー上の非公開ファイルを閲覧し、場合によっては変更することができます。

脆弱性による影响

この脆弱性による影响の例として下記があります。ディレクトリトラバーサル脆弱性の影響は、脆弱性のあるページに関係なく、Webサーバー上の任意のファイルに影響します。
  • 奥别产サーバー内の重要情报の漏えい
  • プログラムソースファイルの漏えい
  • 设定ファイル、データファイル、プログラムのソースコード等の改ざん、削除
  • 任意プログラムの実行(ソースコードの书き换えが出来る场合)

脆弱性の有无の确认方法

プログラムのソースコード上で、外部からファイル名を指定している箇所を調べて、適切な対策がとられているかを確認する方法が有効です。 ソースコードを確認できない場合、手動診断で脆弱性の有無を検証することもできます。この場合、独立行政法人情報処理推進機構(IPA)が公開している「安全なウェブサイトの作り方」別冊の「ウェブ健康診断仕様」に診断の方法が説明されており、参考になります。

対策

ディレクトリトラバーサル脆弱性は、外部からファイル名を指定でき、かつそのファイル名に対するアクセス権限の確認をしていないことが原因です。このため、ファイル名を外部から指定できないようにするか、指定されたファイル名からディレクトリ名を取り除くことで対策できます。ディレクトリ名を取り除く処理はOSにより変わるため、自作せずに言語等に用意された標準的な関数(例えばPHPのbasename関数)を使うことをお勧めします。 なお、では、ディレクトリトラバーサル攻撃から奥别产サイトが攻撃を受けるのを防ぐことができます。

参考文献

安全なウェブサイトの作り方、ウェブ健康诊断仕様(独立行政法人情报処理推进机构)

修正の上再掲しました。

UP NEXT
5 Min

特集记事

クラウド上で量子コンピュータをいかに保护するか

NIST PQC アルゴリズムに関する詳細な説明

従来の PKI がもたらす割高な機会損失