製品機能
※ アドバイザー機能を利用することで、検出された脆弱性などの問題についての詳しい情報や一般的な解決方法を知ることができます。
検出方式
リモート コード実行の脆弱性へのリクエストをスキャンします。以下のテストを行うために機械語コード(ペイロード)を挿入しようとします。
- eval()の中で直接コードが実行されるか。
- evalされた文字列の中でコードが実行されるか。
- evalされる前にコードが他の文字列に挿入されるか。
コード インクルードの検出
(リモート)コード インクルードをチェックします。機械語コード(ペイロード)文字列の入力時に、隠しファイルのインクルードが可能かどうかをチェックします。このテストでは、古いバージョンのPHPでは含まれない、NULLバイトで終了する文字列を含んでいます。
PHPバージョン情報の検出
古いバージョンのPHPをチェックします。Chorizoのアドバイザーを使用することで、この問題に関する詳しい情報や一般的な解決方法を知ることができます。
SQLインジェクションの検出
リモートSQLインジェクションの脆弱性へのリクエストをスキャンします。機械語コード(ペイロード)を挿入して、コードにSQLコマンドを入力できるかどうかをテストします。
Chorizo!ではSQLエラーを引き起こす可能性があります。HTMLページにPHPのSQLエラーがあるかどうかをチェックすることでインジェクションが成功したかを確認します。php.iniファイルでdisplay_errors=Offと設定し、サーバーのログファイルの中にログのSQLエラーが設定されている場合、Chorizo!は正常に動作しません。
全てのPHP関数を使用できるサーバー側のPHPエクステンションであるMorcillaにアクセスして、Chorizo!にエラー情報を与えることができます(例えばmysql_error()やPDOのクエリ関数等)。さらに、shell_exec、 preg_*、 fopen、 mail等のようにより多くのエラーを検出します。
セッション インジェクションの検出
セッションIDにコードを入力しようとします。セッションIDでXSSインジェクションを検出することができます。
XSS(クロスサイトスクリプティング)の検出
XSSの脆弱性へのリクエストをスキャンします。以下の目的で機械語コード(ペイロード) コードを挿入します。
- 現在のページのパラメータがXSS攻撃全般に対して脆弱であるかのチェック
- Internet Explorerの脆弱性(例えばNULLバイトの無視)を含む、属性名に対する特殊攻撃
- スクリプト タグの中の特殊攻撃
- CSSの中の特殊攻撃
それぞれの攻撃の種類に対して、Chorizo!は独自のプラグインでいくつかテストを実行します。それらは全て"XSS"プラグイン ファミリーにまとめられています。Chorizoのアドバイザーによって問題(XSS)そのものについての情報や一般的な解決方法、あるいはすぐにXSSバグを直すことができる特殊なPHPコードを知ることができます。
Apacheインデックス ディレクトリの存在の有無の検出
Webサイトの公開Apacheインデックス ディレクトリの存在の有無をチェックするものです。インデックス ディレクトリはApacheの機能で、ディレクトリのコンテンツファイルのリストと共にHTMLページを表示します。通常は製品版のWebサイトではこのような実行は行いません。 Chorizoのアドバイザーを利用することで、この問題に関する詳しい情報や一般的な解決方法を知ることができます。また、Apacheインデックス ディレクトリを無効にする方法も知ることができます。
HTTPレスポンス
PHPのHTTPレスポンスの分割脆弱性をチェックします。
Morcilla PHP エクステンション
Morcillaによって、Chorizo!はスキャンしたいサイトの内部まで見ることができます。他のPHPエクステンションと同様、Morcilla PHPエクステンションのインストールが必要です。My Chorizoページよりダウンロードいただけます。
Morcillaは全てのPHP関数に関与し、Chorizo!に情報を公開することができます。これによって、システムでdisplay_errors=Off と設定している場合でも、Chorizo!によりセキュリティ問題を検出することができます。Morcillaの機能とChorizo!により以下の情報を検出することができます。
エラーが起きた場所の通知
以下の図は、Morcillaが発見したエラーをクリックした時に表示される結果ウィンドウです。これによってサーバーで影響を受けているファイルと、エラーが発生した行を知ることができます。
この例では、ファイルutils.phpの796行目ででコード インクルージョン脆弱性が検出されました。エディタでこのファイルを開いて、796行目を修正するだけで問題を解決することができます。

現在デフォルトで対応しているPHP関数
- mysql_query, mysql_unbuffered_query, mysql_db_query, mysqli_query, mysqli_prepare, mysqli::query
- shell_exec, exec, passthru, system, popen, proc_open
- preg_replace, preg_replace_callback, usort, array_walk, uasort
- fopen, readfile, file_get_contents
php.ini設定によって他のPHP関数に対応させることもできます。
evalしたコードのチェック
Morcillaはeval()関数に対応しているため、evalされたコードをチェックすることができます。これによって、コード インクルージョンを発見することができます。この機能はPHP5とPHP4の両方に対応していますが、PHP4ではZendEngineパッチが必要です。
include/require/include_once/require_onceのチェック
Morcillaプロトコルには変数の読み取り権限があります。アプリケーションでisset()やempty()が定義されていないグローバル変数を呼び出したり、print $foo;ステートメントなどで($fooが定義されていないのに)使用する場合、Chorizo!により検出することができます。ZendEngineパッチではPHP4とPHP5両方に対応しています。
定義されていないグローバル変数のisset/emptyチェック
Morcillaプロトコルには変数の読み取り権限があります。アプリケーションでisset()やempty()が定義されていないグローバル変数を呼び出したり、print $foo;ステートメントなどで($fooが定義されていないのに)使用する場合、Chorizo!により検出することができます。ZendEngineパッチではPHP4とPHP5両方に対応しています。
$_GET/$_POST/$_COOKIES/$_REQUESTのisset/emptyチェック
Morcillaプロトコルにはこれらの変数への読み取り権限があります。アプリケーションでisset()やempty()がこれらの変数の定義されていないエレメントを呼び出したり、print $_GET['article_id']ステートメントで($_GET['articleid']が定義されていないのに)使用する場合、Chorizo!により検出することができます。ZendEngineパッチではPHP4とPHP5両方に対応しています。




