views4GCPのストレージサービスについてまとめてみた。Exp:49212雑食エンジニア/にわかSF者TweetShareHatena注意この記事は2014年7月18日に更新されたもので、内容が古い可能性がありますのでご注意ください。セキュリティチェックしてますか?今、世の中では多くの分野で、WEBアプリケーションが利用されており、その中には、個人情報や重要な情報を扱っているものも多くあります。そのため、WEBアプリケーションが攻撃対象となることも少なくありません。したがって、開発者はセキュリティ対策に気を配る必要があります。その際、脆弱性を発見する手がかりとして、自動セキュリティチェックツールが非常に有用になるでしょう。今回、取り扱うのはskipfishというWEBアプリケーション用セキュリティ調査ツールです。2.0で公開されています。GCEやGAE等で作成したアプリについても当然、Googleのノウハウが入ったツールを利用して脆弱性チェックを行うことが可能です。skipfishの特徴は、再帰的なクローリングだけでなく、辞書ファイルや、学習したキーワードを使って、様々なリクエストを生成するところです(下図を参照)。本記事ではskipfishについて、以下のような構成でご紹介します。13.10上で動作の検証を行いました。豊富なオプションインストールインストール方法はソースコードをダウンロードし、makeコマンドでコンパイルするというLinuxではよく見られる方法です。バイナリでのプログラムの配布は行われていません。この章では、ソースコードを入手し、コンパイルする方法について説明します。コンパイルの前にソースコードをダウンロードする前に、コンパイルに必要なものを確認しましょう。#1に必要なコンパイラやライブラリが列挙されています。ここに挙げられているものはすべて、APTでインストール可能です。筆者が最初にコンパイルを試みたときは、zlib以外は使用環境にインストールされていなかったので、以下のコマンドでインストールしました。\libidn11-devコンパイルソースコードはhttps://code.google.com/p/skipfish/からダウンロードできます。skipfish-2.10b.tgzをクリックして、ソースコードをダウンロードしてください。ダウンロードが完了したら、ターミナルを立ち上げて、ダウンロードしたファイルを保存したディレクトリに移動し、ファイルを展開します。skipfish-2.10b展開されたディレクトリ、skipfish-2.10bの中に移動し、makeコマンドを実行します。makemakeコマンドが正常に終了すると、skipfishという名前の実行ファイルが生成されているはずです。以下のコマンドでskipfishのヘルプを表示することができます。-hこれでヘルプが表示されれば、正常にコンパイルできたと考えてよいでしょう。次はいよいよ実行です。実行する前の注意事項セキュリティ調査ツールは、その性質上、実際にサイトに対して攻撃を仕掛けるので、実行する際は、以下の注意事項を守るようにしてください。自分のサイトや、テストを許可されているサイト以外に対しては、実行しないでください。悪意ある攻撃をしないよう作られているはずですが、必ずしも、対象のサイトの正常な運用を害さないとは限らないので、注意してください。実行コマンドさて、skipfishでは、再帰的なクローリングによって、アクセス可能なURLを抽出するだけでなく、指定した辞書ファイルに含まれるキーワードや、クローリングしたデータから学習した単語を組み合わせて、brute-force方式でURLを生成して、サイトのスキャンを行うことができます。辞書ファイルはdictionariesディレクトリに、あらかじめ以下のものが用意されています。complete.wlmedium.wlminimal.wlextensions-only.wlまず、最も簡易なスキャンを行うコマンドを示します。<クロールを開始するURL>上述の例では、そのような単語を組み合わせて、brute-forceでスキャンを行わないようオプションしています。読み込み用+学習したデータを追記する辞書ファイル次に、辞書ファイルを指定して、軽めのbrute-forceスキャンを行うコマンドの例を示します。<クロールを開始するURL>この例では、書き込み用に空のファイルnew_dict.wlを初めに作成して、-Sオプションで読み込み専用の辞書ファイルを指定しています。実際にコマンドを入力して、実行してみましょう。コマンドを実行すると、ターミナルに以下のような表示がされます。この状態で、なにかキーを押すか、60秒放置すると、スキャンが開始され、以下のような経過のレポートが表示されます。フロントエンドで実行され、実行中はレポートが随時更新されるので、ターミナルを閉じず、そのままにしておいてください。実行が終了すると、以下のようなメッセージが表示され、プロンプトが返ってきます。スキャン対象のサイトのコンテンツが多いと、1日放置しても終了しないということもあり得るので、注意してください。Cで強制終了すると、スキャンが終了した分だけの結果を出力して終了します。結果の見方スキャンが終了すると、指定した出力フォルダに、結果が出力されます。その中のindex.htmlをウェブブラウザで開くことで結果を見ることができます。以下はindex.htmlを開いた時の画面です。結果の見方については、詳しいドキュメントは存在しない(専門家が見れば、意味がわかるように書かれているからだそうです)のですが、ここでは、実際の結果にもとづいて、見方を説明します。overview”の3つの大項目に別れており、それぞれの項目の内容は、以下の表のようになっています。リスクの度合いごとに、検出された問題の件数を表示。サイトマップに沿って、各URLで検出された問題を閲覧可能。リクエストURLに対して、どのようなタイプのコンテンツが返されたかを表示。検出された問題を、種類ごとに、リスクの高い順に表示。overview”について、もう少し説明したいと思います。overview”内の各項目をクリックすると、どのURLにアクセスした時に、その問題を検出したかとその問題に関するメモの表示が開かれます。以下はいくつかの項目を開いた時のスクリーンショットです。vectorが検出されており、Memoには、あるパラメータに”9-8”を指定して、アクセスした際に、サーバサイドで算術演算されたことを示唆する結果が返ってきた旨が記されてています。+]をクリックすると、具体的なリクエストとレスポンスを表示するウインドウが開きます。必要であれば、これを見て、検出された問題について、さらに詳しく分析することができるでしょう。結果に関する注意事項skipfishを使うと、WEBアプリケーションの網羅的なセキュリティチェックを、手軽に行えますし、結果も見やすく出力してくれるので、非常に便利なのですが、結果をそのまま鵜呑みにしないよう注意してください。脆弱性を見逃す場合や、逆に、誤検出をする可能性もあります。結果を参考にして、ソースコードをチェックするなどして、きちんと判断を行ってください。Tipsskipfishには、様々なオプションが用意されており、それにより、実行時の挙動を制御することができます。ご紹介した辞書ファイルの指定以外で、使用頻度の高そうなものをいくつかご紹介します。実行中にメモリ不足で落ちる場合skipfishは、デフォルトでは、クローリングしたデータをすべてメモリ上に持つため、コンテンツの多いサイトに対して実行すると、メモリが枯渇してしまうことがあります。2.10bから–flush-to-diskというオプションが追加され、データをdiskにflushすることができるようになりました。このオプションを指定することで、メモリ不足で実行中にskipfishが落ちるのを回避することが可能です。認証が必要なサイトへの対応skipfishには、いくつかの認証方法で、認証をクリアして、スキャンを行うためのオプションが用意されています。1Basic認証-Aオプションを使って、以下のようにユーザ名とパスワードを指定します。user:pass2Cookieクッキーに認証情報を保持する-Cオプションで、Cookieのパラメータ名と値を指定します。-Xオプションを使うと、指定した文字列にマッチしたURLはスキャン対象から除外できるので、ログアウトアクションでCookieが削除されるのを回避するため、ログアウトアクションURLを指定しておきましょう。<ログアウトアクションURL>3その他の一般的なフォームフォームにユーザ名とパスワードを入力させ、データベースの内容と照合するような認証の場合、ログインフォームページや、パラメータ名、ログインアクションURLなどを、それぞれ、オプションで指定して、認証させることができます。2.0で公開されています。単語の組み合わせによるbrute-force再帰的なクローリングだけでなく、辞書ファイルやクローリングしたデータから学習した単語を組み合わせて、いろいろなURLを生成し、アクセスを試みます。結果はHTMLで出力され、検出された問題を、リスクの度合いなども含めて、見やすく表示されます。問題を検出した際の、具体的なリクエストやレスポンスも結果に出力、表示してくれます。