HOME»情報処理安全確保支援士令和4年春期»午前Ⅱ 問1
情報処理安全確保支援士令和4年春期 午前Ⅱ 問1
問1
Webサーバのログを分析したところ,Webサーバへの攻撃と思われるHTTPリクエストヘッダーが記録されていた。次のHTTPリクエストヘッダーから推測できる,攻撃者が悪用しようとしていた可能性が高い脆弱性はどれか。ここで,HTTPリクエストヘッダー中の"%20"は空白を意味する。
〔HTTPリクエストヘッダーの一部〕
〔HTTPリクエストヘッダーの一部〕
GET /cgi-bin/submit.cgi?user=;cat%20/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
Accept: */*
Accept-Language: ja
UA-CPU: x86
Accept-Encoding: gzip,deflate
User-Agent: (省略)
Host: test.example.com
Connection: Keep-Alive
- HTTPヘッダーインジェクション(HTTP Response Splitting)
- OSコマンドインジェクション
- SQLインジェクション
- クロスサイトスクリプティング
- [出題歴]
- 安全確保支援士 R2秋期 問1
- 安全確保支援士 H30春期 問2
分類
テクノロジ系 » セキュリティ » 情報セキュリティ
正解
イ
解説
HTTPリクエストヘッダー中で注目すべきは「?user=;cat%20/etc/passwd」の部分です。
catは、UNIX系のOSにおいて指定ファイルの内容をそのまま標準出力に出力するコマンドです。そして/etc/passwdは、ユーザーのアカウント情報(ユーザー名・パスワード等)が記録されているファイルですから、cat%20/etc/passwdはシステムが管理するユーザーのアカウント情報を全て表示する操作を意図したものです。
もしWebアプリケーションの処理内でOSのシェルを利用する関数※を使用し、これにuserパラメータの値をそのまま実行時引数として与えたとすると、サブルーチンとして呼び出されるOSのコマンド解釈プログラムでは以下の命令が実行されます。
このような攻撃を受ける可能性があるため、サブシェルに渡すコマンドに外部から与えられたデータを含める場合は値のチェックが欠かせません。「;」以外にも、「|」「&」「`」「(」「)」などは別コマンドの実行に使われるものとして特に警戒する必要があります。
設問の攻撃はWebアプリケーションに任意のOSコマンドを実行させようとするものですから、OSコマンドインジェクションの脆弱性を悪用したものと言えます。したがって「イ」が正解です。
※Perlのexec(),open()、PHPのexec(), passthru(), proc_open(), shell_exec(), system()、Pythonのos.system(), os.popen()などがある。
catは、UNIX系のOSにおいて指定ファイルの内容をそのまま標準出力に出力するコマンドです。そして/etc/passwdは、ユーザーのアカウント情報(ユーザー名・パスワード等)が記録されているファイルですから、cat%20/etc/passwdはシステムが管理するユーザーのアカウント情報を全て表示する操作を意図したものです。
もしWebアプリケーションの処理内でOSのシェルを利用する関数※を使用し、これにuserパラメータの値をそのまま実行時引数として与えたとすると、サブルーチンとして呼び出されるOSのコマンド解釈プログラムでは以下の命令が実行されます。
本来実行されるコマンド名 ;cat /etc/passwd
実行時引数内の「;(セミコロン)」は命令の区切りを意味するため、システムは上記の文字列を以下の2つの命令であると解釈します。本来実行されるコマンド名
cat /etc/passwd
この結果cat /etc/passwdが実行され、ブラウザの結果画面に秘密情報であるアカウント情報が表示されてしまいます。cat /etc/passwd
このような攻撃を受ける可能性があるため、サブシェルに渡すコマンドに外部から与えられたデータを含める場合は値のチェックが欠かせません。「;」以外にも、「|」「&」「`」「(」「)」などは別コマンドの実行に使われるものとして特に警戒する必要があります。
設問の攻撃はWebアプリケーションに任意のOSコマンドを実行させようとするものですから、OSコマンドインジェクションの脆弱性を悪用したものと言えます。したがって「イ」が正解です。
※Perlのexec(),open()、PHPのexec(), passthru(), proc_open(), shell_exec(), system()、Pythonのos.system(), os.popen()などがある。