【OSコマンドインジェクションとは】Webサーバーへのサイバー攻撃対策

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()などがあります。

対策

このような攻撃の対策としては、サブシェルに渡すコマンドに外部から与えられたデータを含める場合、「;」、「|」、「&」、「`」、「(」「)」などの別コマンドの実行に使われる恐れのある文字列をチェックし、実行させないようにします。

【情報処理入門】テクノロジ系、マネジメント系、ストラテジ系、資格試験
情報処理の基礎知識(テクノロジ系、マネジメント系、ストラテジ系)や資格試験についてまとめました。なお、情報処理技術者試験の出題分野別(テクノロジ系、マネージメント系、ストラテジ系)に各項目を整理しています。そのため、ITパスポート、基本情...

コメント

タイトルとURLをコピーしました