Bad SNSで脆弱性検査の練習!

3行で言うと…


全仏オープンテニスも2週目に入り熱い戦いが続いています。残念ながら地元期待の錦織圭さんは4回戦で敗れましたが3回戦までの完全アウェイ状態で戦う様子はとても勇気をいただきました。状況に負けない強い心は見習いたいと感じました。

私が開催している山陰ITPro勉強会の番外編を4月に開き、Bad SNSを使った脆弱性検査のハンズオンをしました。

山陰ITPro勉強会 番外編#06 - 山陰ITPro勉強会

講師を置かず、WEB+DB PRESS Vol.103に掲載されている 「体験!脆弱性の見つけ方&ふさぎ方」 の記事に従い参加者が自分達でもくもくと手を進めて行き、最後に感想を交換する形態で開催しました。本の記事って読んで理解はできるものの、なかなか時間を作って実際にやってみるのは難しいですよね。イベントとして時間を作り、有志が集まってみなで同じ事をやってみることで面白い取り組みになりました。

事前準備

この記事はリクルートテクノロジーズのメンバーの方々の著作で、そのメンバーの方が脆弱性検査の練習用に作成され公開されているのがBad SNSアプリです。


Bad SNSのメイン画面

実際にやってみた感想ですが、この記事通り実践するためには、あらかじめの準備(ツールのダウンロードとセットアップ)が大切だと感じました。
必要となるツールは、

また脆弱性の検証のためにMetasploitから攻撃用ファイルもダウンロードします。

非常に必要となるツール類が多く、ダウンロードにそれなりに時間も掛かるので、あらかじめ行う内容に目を通し必要なツールをダウンロードしておくことをお勧めします。

ブラウザの設定

私は普段からいくつかのWebブラウザを用途で分けて使用しています。そして検査にはFirefoxを使う事が多いです。他のWebブラウザではXSS(クロスサイトスクリプティング)と判断した際に、自動でその処理を止める機能を持っているものもありますが、Firefoxではその処理は行われないなど検査に向いていると感じていることやウェブ標準への準拠性が高いと個人的に感じていることなどが理由です。また検査ツールを使用する際にプロキシ設定を変更する必要がありますが、OSの設定とは別にWebブラウザ単体で設定が行えるといった点も理由の一つです。

検査では検査対象以外の通信が発生すると紛らわしくなるため、できるだけ余計な通信を止めて確認をします。 しかしWebブラウザの拡張機能やWebブラウザ自身の更新管理の為など、私たちが意図して通信を発生させたものでは無い通信が実際には起きてます。普段は拡張機能などを活用して便利に使いたいですが、検査を行うにはこういった通信をできるだけ起こさない様に、あまり拡張をしていないWebブラウザを使いたいです。

Firefoxではプロファイルを作成してこれらの設定情報などを管理することができます。私は検査をする前はFirefoxを再起動し専用のプロファイルで立ち上げて使用しています。プライベートなCookie情報や履歴などをさらす危険も無く、またプロキシ設定も済ませているのですぐに作業に取りかかることができます。

プロファイルの作り方などはFirefox公式のヘルプをご確認ください。

プロファイルマネージャーを使用して、Firefox のプロファイルを作成または削除する | Firefox ヘルプ

Bad SNSを使った脆弱性検査の体験

注意:当該アプリは攻撃体験により診断スキルや脆弱性対策を身につけることを目的に作成されたものです。 同様の調査活動や診断作業を他人のシステムに無断で行わないでください。法令により罰せられる可能性があります。

記事の1、2章は各ツールのインストールや全体的な説明です。

第3章ではユーザアカウント作成の場面での脆弱性を利用した下記の攻撃の体験が書かれています。


アプリケーションのデータベース設定ファイルの内容を表示!

4章はログイン画面やメイン画面での、ミドルウェアを含めた脆弱性を利用した下記の体験でした。


アプリケーションの動作ログをWebブラウザに表示させた!

5章ではAndroid Studioを使用しスマホアプリに関する下記の攻撃体験の記事が書かれています。

実際にどの様な処理をするかについては記事にあるので今回のブログでは触れません。丁寧に操作や原因、対策が解説されていますので、とても順調に体験を進めることができました。


BurpSuiteを使用してリクエストパラメータを書き換えている例

一般的な脆弱性検査の記事などでは技術的な理解を目的としているため、脆弱性種類毎に検査の手順が書かれているものが多いです。ところがこの記事の手順はアプリケーションやミドルウェア等の弱点をアプリケーションの機能の面から探し出している所が特徴的だと感じました。

また「Ruby on Railsのアプリケーションではあるが仮にPHPも動作する可能性があれば...」といったアプリケーション作成者が 想定しなさそうな 環境に対する検査も行われています。このあたりはいわば「攻撃者目線」での検査であり、検査を行う者が自分の立ち位置を攻撃者として検査を行う必要があることを理解させられました。

その他XSSのサンプルとしてWebブラウザに保存されているパスワードを取得するサンプルが例示されています。多くの記事や例では alert('XSS') といったJavascriptのコードを挿入しダイアログ表示を使用されていますが、「実行できてしまうのを確認する」というだけなので「危険が潜んでいる」という意識にはつながりにくいと常々思っていました。そういった意味でも面白い記事であったと感じました。

感想

雑誌や書籍でサンプルコードなどが掲載され、実際に手を動かして体験する記事をよく見かけます。実際に取り組んでみるのが一番理解が進むのですが、なかなか時間も取れずいつかやろうと思っているうちに後回しとなり新しい課題の方へ意識が移っていきます。今回勉強会として時間を設定し実際に行えたことで、ただ読書をするだけより記事内容への理解が深まった気がしています。

また自動ツールによる検査や定型的な検査と手動検査の考え方の違いと、なぜ手動検査が必要なのかについても良く感じ取れました。

今回の記事ではそれぞれの脆弱性に対する対策方法や、そもそも脆弱性を生まないようにするにはどうするべきかといった記載もあり、検査を行われる方だけでなく、開発に従事されている方々に是非読んで、実践トライしてみてもらいたいと感じました。

告知

Web脆弱性診断の体験についてのトライについて書きましたが、冒頭にも書いた通り個人活動として「山陰ITPro勉強会」という勉強会を主催しています。

次回開催ですが、7月7日(土)に 第35回 山陰ITPro勉強会 を開催します。今回はWebアプリケーションセキュリティの第1人者である EGセキュアソリューションズ代表取締役 徳丸浩様 にお越しいただき、6月21日発売予定の 「体系的に学ぶ安全なWebアプリケーションの作り方 第2版」 についてのお話を伺います。詳細は下記サイトでご確認ください。

公式サイト: 第35回山陰ITPro勉強会のお知らせ - 山陰ITPro勉強会
参加申込みサイト: 第35回山陰ITPro勉強会 - 山陰ITPro勉強会 | Doorkeeper

こちらの記事もオススメです!
OWASP ZAP を使った脆弱性診断
新人教育の一環として、OWASP ZAPで開発中の社内システムの脆弱性検査をしました。
可愛いトラボ郎と一緒に新人研修
新人研修として出場するETロボコンに向けて取り組んでいます。
PlanioスマートフォンスタンドをAlibabaで中国企業に発注した全過程
新ノベルティグッズ「Planioスマートフォンスタンド」を作りました。グッズの制作・発注の全過程を紹介します。
Redmineの画面カスタマイズに便利なView customize plugin
View customize pluginで簡単にRedmineの画面をカスタマイズできます。
中国深圳にRedmineロゴ入りQiワイヤレスチャージャーを発注してみた
新ノベルティグッズとして竹製Qiワイヤレスチャージャーを中国の業者に直接発注しました。
ファーエンドテクノロジーからのお知らせ(2018/10/16更新)
Redmine4.0を記念する会 開催のお知らせ
2018年10月19日(金)にRedmine4.0を記念するパーティを島根県松江市で開催します。お気軽にご参加ください。
第8回情報セキュリティEXPO秋(10/24〜26開催) でRedmineについてのご相談にお応えします
オープンソースのプロジェクト管理ソフトウェア「Redmine」についてのご相談にお応えします。
RubyWorld Conference 2018 (11/1・2開催) でブース出展・ショートプレゼン発表
RubyWorld Conference 2018でブース出展・ショートプレゼン発表を行います。
Redmineの最新情報をメールでお知らせする「Redmine News」配信中
新バージョンやセキュリティ修正のリリース情報、そのほか最新情報を迅速にお届け