公開日:2007年9月26日
独立行政法人情報処理推進機構
セキュリティセンター
本ページの情報は2007年9月時点のものです。
記載の資料は資料公開当時のもので、現在は公開されていないものも含みます。
Unix系およびGNU/Linux系のプラットフォームにおいては、秘密保持が必要なパラメータをコマンドライン引数を通じてプログラムに渡すことを避けた方がよい。これらのプラットフォームには、システム内で動作中のプロセスの情報を誰でも調べることのできるpsコマンドが備わっているからである。
Unix系およびGNU/Linux系のプラットフォームには、システム内で現在動作中のプロセスの情報を収集するpsコマンドが備わっている。
例 psコマンド
$ ps -ax
PID
|
|
STAT |
TIME |
COMMAND |
1 |
?
|
S
|
|
init |
2 |
?
|
SW
|
|
[keventd] |
721 |
?
|
S
|
0:00
|
|
730 |
?
|
S
|
0:00
|
|
821 |
?
|
S
|
0:00
|
|
825 |
?
|
S
|
0:00
|
|
1177 |
|
S |
0:00
|
|
1188 |
|
S |
0:00
|
|
1189 |
?
|
|
0:40 |
X :0 |
1192 |
|
S |
0:00
|
|
1208 |
|
S |
0:00
|
|
1210 |
|
S |
0:00
|
|
1212 |
?
|
S
|
0:00
|
ssh-agent /etc/X11/xinit/Xclients |
$
上記の例は、実行中のプロセスの次の情報を表示している。
このほかにもpsコマンドは、プロセスの動作状況に関する諸情報を数十種類表示する機能をもっている。このようなことから、例えば、次のような必要が生じたときにはpsコマンドで情報を収集し、コンピュータ運用に役立てることができる。
また、psコマンドは一般ユーザに使用が解放されており、そのコンピュータにログインできる人物であれば誰でも使えるコマンドである。
psコマンドは便利ゆえに一部に情報漏えいの心配がある。それは、他のアカウントが所有しているプロセスであっても、起動時のコマンドライン文字列を表示してしまうことである。
プログラムを起動する際、コマンドライン引数にパラメータを指定することがしばしば行われる。これらの引数は、そのプロセスがシステム内に存在している間であればpsコマンドによって収集され、そのシステムにログイン可能なユーザすべての目に触れる可能性がある。
したがって、次のようなデータをコマンドライン引数で受け渡すことは避けたほうがよい。
プロセス起動時のコマンドライン引数がpsコマンドによって盗み見られる問題への対策として次のものが考えられる。
可能なら、プロセスへのパラメータをコマンドライン引数で渡すのではなく、パイプやテンポラリファイルを通じて渡すようにする。その際、パラメータの受渡しに使うテンポラリファイルへの部外者のアクセスを防ぐ工夫をする。
プロセスへのパラメータをコマンドライン引数で渡さざるを得ない場合、値を平文で渡すのではなく、暗号化して渡す。その際、弱い暗号アルゴリズムの使用を避け、暗号鍵の保護に留意する。
可能なら、一般ユーザのpsコマンドの使用を制限する。psコマンドのファイルのアクセスパーミッションの設定を厳しくし、psコマンドの使用をrootや管理者グループのみに許すようにする。
ただし、psコマンドに制限をかけることのみをこの問題への対策とすることは推奨できない。上記1) 2) を補強する手段として用いるべきである。
Unix、GNU/Linuxに備わっているpsコマンドは、他人が所有するプロセスのコマンドライン引数の閲覧を可能にする。重要なパラメータをコマンドライン引数で受け渡さない工夫およびコマンドライン引数を覗き見られても支障が起きないようにする工夫が必要である。