アプリケーション脆弱性診断・サービス

DevSecOpsでの開発、運用を継続的にサイクルさせていくためには、アプリケーションのセキュリティーが非常に重要なポイントです。また、OSやミドルウエアとは異なり、自社アプリケーションのセキュリティーは自社で担保する必要があります。

つまり開発 ⇒ テスト ⇒ リリース のサイクルの中に、「アプリケーション脆弱性診断の実施ステージ」を組み入れる必要があるということです。

オン・デマンド・ワンのアプリケーション脆弱性診断・サービスAppSecOneをご利用いただくと、今日から脆弱性診断のステージを組み入れることが可能です。

AppSecOneの脆弱性診断

  • AppSecOneはChromeの拡張機能を使用してアプリケーションのHTML情報を取得。
  • HTML情報から脆弱性を叩く入力パターンを自動生成。
  • 実際のアプリケーションに対して生成した入力パターンを適用し、 出力結果画面のHTMLを取得。
  • 実施したそれぞれの入力パターンごとにAppSecOneの画面に、結果画面を表示。
  • 目視による脆弱性のチェック、およびOK/NGの判定結果を登録できます。
  • アプリケーションが更新された場合には、自動でチェックを起動できます。
  • テストパターンはOWASP TOP10 に対応した各種脆弱性から必要なものを選択。

AppSecOneの脆弱性診断の実施フロー

AppSecOneの脆弱性スキャン実施フロー

テストカテゴリ一覧

カテゴリ
SQL インジェクション
LDAP インジェクション
フォーマット文字列攻撃
Server Side Include インジェクション
カテゴリ
OSコマンドインジェクション
メールヘッダインジェクション
クロスサイト・スクリプティング
カスタムテスト

AppSecOneでの脆弱性チェックの実際

ここでは、AppSecOneによる脆弱性チェックをbWAppの画面を使用して実施した様子をご覧いただきます。

脆弱性発見にために作成されたbWAPP

bWAppは、Webアプリの脆弱性を発見し、防止することを目的に公開されている意図的に安全でないWebアプリケーションです。

Chrome 拡張機能のインストール

AppSecOneで脆弱性チェックを行うためには、弊社提供のChrome機能拡張をダウンロードしてお使いのChromeにインストールしていただく必要があります。

AppDocOne-設計書管理サービス-の拡張機能
ソースコーコードから設計書を自動生成するChrome機能拡張

アプリケーションのHTML情報をAppSecOneに登録するために使用します。

AppSecOne-脆弱性チェックサービス-の拡張機能
 アプリの脆弱性をスキャンするChrome機能拡張

登録したHTML情報に基づき、自動でテストを行うために使用します。

HTML情報の取得

bWAppのSQL Injection(Search/GET)の画面の対象にHTML情報を取得してみます。

SQLインジェクションをスキャンする
bWAppの SQL Injection (Search/GET)の画面

bWAppが公開している画面の一つで、SQLインジェクションの脆弱性が存在する画面。

"Search for a movie" の入力欄に悪意のある入力が行われるとアプリケーションが問題のある動作を行い、場合によってはユーザーテーブルからユーザー名、メールアドレス、パスワードが画面に表示されてしまいます。

bWAppの SQL Injection (Search/GET) の画面をブラウザで開いた状態でAppDocOneの機能拡張を開いてページを解析する のボタンをクリックします。

アプリを解析する

ページの解析が終了すると、AppSecOneの画面にアプリケーションの入力欄やラベルなどの解析結果が表示されます。

設計書が自動生成される

脆弱性チェックの実行

HTML情報が取得できたことが確認できたら、bWAppの画面に戻って、今度はAppSecOneの機能拡張を開き、ページをテストするのボタンをクリックします。

脆弱性スキャンの実施

ページをテストするのボタンがクリックされると、AppSecOneが自動的に悪意のある入力値を対象の入力項目にセットして、Searchボタンをクリックした結果の画面を取得していきます。

以下の一連の画面は、AppSecOneが実際に実施している画面への入力と、その結果の一部を抜粋したものです。

一連の入力とその入力に対する結果画面をAppSecOneが収集していきます。

SQLインジェクションの脆弱性を検知
AppSecOneの入力

入力値として a' or 1 = 1;-- をセットして Searchボタンをクリックしたときに出力されたHTML情報を取得。

結果から見た脆弱性

本来の入力値として期待しているのは映画のタイトルなのに、 a' or 1 = 1;-- で登録されているすべての映画が検索結果に表示されてしまった。

登録されているすべての映画タイトルが表示されるだけであれば特に問題はないが、この画面には脆弱性があることが露呈してしまっているので、悪意のある攻撃者がこれを見た場合は、さらなる攻撃を試みるきっかけになってしまう。

SQLインジェクションの脆弱性はない
AppSecOneの入力

入力値として a" or 1 = 1;-- をセットして Searchボタンをクリックしたときに出力されたHTML情報を取得。

結果から見た脆弱性

入力されたテキストに一致するタイトルの映画は登録されていないので、 "No movies were found!" のエラーメッセージが表示されている。

アプリケーションとしては期待通りの動きとみてよい。

SQLインジェクションの脆弱性が存在
AppSecOneの入力

入力値として ' and 1=2 union select 1,login,password,3,email,5,6 from users-- -

をセットして Searchボタンをクリックしたときに出力されたHTML情報を取得。

結果から見た脆弱性

本来はアプリケーションに登録された映画のタイトルや、公開年などが表示される画面であるはずが、ログインID、パスワード、emailアドレスが表示されてしまっている。

パスワードは辛うじて暗号化された文字列が表示されているが、ちょっと時間をかければ平文のパスワードを解読することも可能である。

脆弱性チェック結果の表示

このようにして悪意のある入力に対してアプリケーションが出力した画面内容をすべて取得して、AppSecOneにその一覧が表示されます。

脆弱性スキャン結果の表示

それぞれの入力に対する結果を確認した場合は、表示されたチェック結果の画面部分をクリックします。

脆弱性スキャン結果詳細画面

この入力値に対する結果画面は問題があるので、 脆弱性がありとして 失敗ボタンをクリックして AppSecOneに 登録します。

脆弱性スキャン結果を判定

ここででは脆弱性の中でもSQLインジェクションと呼ばれる種類についてのみのご紹介でしたが、AppSecOneでは、SQLインジェクション以外にも最新の脆弱性のまとめサイト OWASP Top 10 で公開されている脆弱性に対してチェックを行うことができます。

AppSecOneのオンラインデモの実施を承ります。ご希望の場合は、このホームページのお問合せから 「AppSecOneのオンラインデモご希望」 と明記の上、お問い合わせください