OSコマンドインジェクションとは?Webサーバーへのサイバー攻撃対策についてまとめました。
OSコマンドインジェクションとは
OSコマンドインジェクションとは、Webサーバに対して、不正な動作をさせる攻撃です。
攻撃者はWebアプリケーションへ正常な入力値だけでなく不正なパラメータを含ませることで、WebサーバーのOSへ命令文(コマンド)を渡して不正な操作を試みるのが一般的です。
【例:情報処理安全確保支援士試験 平成30年春期 問2】
〔HTTPリクエストヘッダの部分〕 GET /cgi-bin/submit.cgi?user=;cat /etc/passwd HTTP/1.1 Accept: */* Accept-Language: ja UA-CPU: x86 Accept-Encoding: gzip,deflate User-Agent: (省略) Host: test.example.com Connection: Keep-Alive
例えば、Webサーバのログに以下のようなHTTPリクエストヘッダが記録されていたとします。
「?user=;cat /etc/passwd」がOSコマンドインジェクション攻撃の一例です。
これはユーザのアカウント情報(ユーザ名・パスワード等)の出力行うLinuxコマンドです。
(/etc/passwdファイルをcatコマンドで内容を表示)
Webサーバーのプログラム中で、userパラメタ(ユーザーから受け取った値)をLinuxコマンドの引数として実行できるようにしていたとします。
「;cat /etc/passwd」により、正常な命令の後にユーザのアカウント情報を出力するコマンドも実行されてしまいます。
(「;」は命令の区切りとなり、正常な命令とは別の命令として、cat /etc/passwdが実行されてしまいます)
ちなみにWebサーバーに使われるプログラミング言語Perlだと、OSコマンドを実行できる関数としてexec(),open()、PHPだとexec(), passthru(), proc_open(), shell_exec(), system()、Pythonのos.system(), os.popen()などがあります。
対策
このような攻撃の対策としては、サブシェルに渡すコマンドに外部から与えられたデータを含める場合、「;」、「|」、「&」、「`」、「(」「)」などの別コマンドの実行に使われる恐れのある文字列をチェックし、実行させないようにします。
コメント