アーカイブ

第5章 1.構成ファイルからの情報漏えい対策

公開日:2007年9月26日

独立行政法人情報処理推進機構
セキュリティセンター

本ページの情報は2007年9月時点のものです。
記載の資料は資料公開当時のもので、現在は公開されていないものも含みます。

ソフトウェアの実行イメージ・ファイルや設定ファイルの中には各種の定数パラメータが含まれるものである。ライセンスキー、パスワード、暗号キー等の情報が無防備に収められている状態になっていると、悪意あるユーザがそれを不正な目的に利用するおそれがある。

プログラムファイルがいじられる

他者のコンピュータや携帯デバイスを手に入れた人物が起こす情報セキュリティ侵害には、その機器を使用して正規ユーザ本人になりすまし、ネットワーク接続先の情報システムを不正利用するといったことがまず考えられるが、問題はそれのみではない。

そのコンピュータや携帯デバイスで動作しているプログラムファイルの中に分かりやすい形で重要なパラメータが埋め込まれている場合、次のような侵害も起こり得る。

(1) 別の場所からの不正アクセス

プログラムファイルの内部に埋め込まれている、ネットワーク接続パラメータ、サーバログインパスワード等の値を外へ取り出し、それらのパラメータを使って別の場所からサーバに不正アクセスする。

(2) クライアントユーザを騙す

プログラムファイルの内部に埋め込まれている、ネットワーク接続パラメータ等を偽のサーバのものにすり替えて、クライアントプログラムの利用者を騙す。

(3) 暗号の弱体化

プログラムファイルの内部に固定値として埋め込まれている暗号鍵の値を外へ取り出し、同じプログラムの同じ暗号鍵を使用している他の多くのユーザの秘密データを不正に入手する。

この侵害が明るみに出ると、システムの運用者は別の暗号鍵を組み込んだ新しいプログラムを配布する必要に迫られる可能性がある。

不十分な対策の例

ソフトウェアの適切な稼働に必要な、ライセンスキー、パスワード、暗号キー等は、プログラムからアクセスできることは必要であっても、ユーザ本人には手を触れてもらいたくないという状況があり得る。そのような場合、次の対策では十分でない。

(1) 不十分な対策の例1

重要情報を含んでいるプログラムファイルのアクセスパーミッションを必要最小限にする

理由:他のユーザからアクセスできなくても、ユーザ本人はそのファイルを読み書きできる

(2) 不十分な対策の例2

重要な情報を暗号化しその暗号鍵をプログラムの内部にもつ

理由:暗号化により重要データを簡単には取り出せなくなる。しかし、プログラムファイル内部に暗号鍵が存在している。そのキーを見つけ出されれば、暗号データは複号され得る。

対策: 単純なデータの置き方を避ける

プログラムの実行ファイルの中に埋め込んである値は、比較的容易に外部に抽出できる。その値が文字列の形態をしていれば、抽出はさらに簡単である。

重要なパラメータをプログラム内にもたざるを得ない場合、単純なひとつの値として置くことは避けた方がよい。いずれも限界があるものの、次のような手段には一定の効果がある。

  • 図5-1: 重要なパラメータの防護

(1) プログラム外の保管場所

可能ならば、重要なパラメータをプログラムファイル内には組み込まない。 例えば、インストーラのはたらきによって設定ファイル、レジストリ(Windowsの場合)、証明書ストア(Windows CryptAPI)等に値を格納するようにする。

この方法の限界

インストーラの振舞いが解析されれば、どこに値が書き込まれるかをユーザに知られ得る。

(2) 単純でない表現と配置

プログラムファイル内とそれ以外の場所の両方について、重要なパラメータの値を記録する際、そのまま記録するのではなく、単純には読みとりにくい形に変換し、記録場所も、連続しない複数の箇所に分ける方法が考えられる。

この方法の限界

プログラムをリバースエンジニアリングされれば、どのような変換が施されているかをユーザに知られ得る。

(3) 暗号化

重要なパラメータはどれも暗号化し格納する。そして、暗号鍵を証明書ストア(Windows CryptAPIの場合)のような、比較的取り出し困難な場所に保管する

この方法の限界

エクスポートを禁じる属性を与えておかないと正規ユーザによる証明書ストアからの暗号鍵の取り出しが可能である。エクスポートを禁じていても、メモリ上から暗号鍵を拾いだせる可能性が残っている

対策: 重要データ処理を別プロセスにする

プログラムからアクセスできるがユーザからはアクセスできなくするには、下図のように重要なデータを扱う処理を別プロセス(サービス、デーモン)にする。

  • 図5-2: 重要データ処理を別プロセスにする

この別プロセスは、ユーザ(user-C)とは別なアカウント(application-A)で動作するようにし、重要データの含まれるファイルの所有者を application-A とし、アクセス権を application-A のみに制限する。

このようにすると、重要なデータが含まれるファイルにアクセスできるのは、application-A アカウントのみになる。