【目から鱗】Webサイトの脆弱性診断は職人技! 診断の裏側を大公開!
Webセキュリティ診断、実際にやっているところを見てみたい!と思ったブログ担当のワタクシもちゃじ。ツールを使うとか、手作業でやるとか、その両方を組み合わせたハイブリッドで診断するとか話は聞いているものの、実際の診断は見たことがありません。診断しているところを見たい! 診断中の診断員はどんなことを考えているのか知りたい! ということで、当社のハイブリッドWebセキュリティ診断「ABURIDA®」で診断している様子を見学しました。
今回は、その「ABURIDA®」での診断の様子をお届けします。
Webセキュリティ診断の流れ
最初に診断の流れを見ていきましょう。診断には、四つのプロセスがあります。
- 事前準備
- 診断
- 分析
- 報告書の作成
1.事前準備
Webセキュリティ診断は、綿密な事前準備から始まります。まず、診断対象となるWebサイトやWebアプリケーションを調べて、全ての画面や機能を洗い出し、診断する項目数を出します。メニューや分岐が多い場合は、診断項目が1000件になることも。
内容やリクエスト数によって診断にかかる費用が変わってくるので、見積時にはこれらの情報が必要です(リクエストの中でも診断しなくて大丈夫そうなやつは、削ることもあるそうです。例えば「GETメソッド+パラメータなし」とか)。そのため、診断前にこれらの作業をして診断項目を洗い出します。
そして診断内容に応じて、スケジュールを決めていきます。
事前準備ですることをまとめると、このようになります。
- 対象の把握
- 診断の範囲とスケジュール設定
診断項目について知りたい方は、こちらの記事をご覧ください。
事前準備でExcelにリストアップされた診断項目を見て、その膨大さに一瞬気が遠くなったのはここだけの話。でも、このExcelは診断が終了するまでずっと使うので、気が遠くなってもいられなかったのでした。
2.診断
準備を終え、お客さまとのスケジュールを調整したら、診断に入ります。
診断では、対象の脆弱性を網羅的に洗い出すために、ツールを使って脆弱性の可能性を自動的に検出します。そしてその自動診断ツールの検出箇所を、一つひとつ診断員が手作業で診断していきます。ツールが苦手だったり見つけきれなかったりする脆弱性も、手作業で一つひとつ、つぶしていきます。
まとめるとこんな感じです。
- ツールを使って自動的に脆弱性の可能性を検出
- 自動診断ツールで検出された箇所や、自動診断ツールで見つけきれない脆弱性を手作業で診断
ツールによる診断について、詳しくはこちらの記事をご覧ください。
手作業による診断について、詳しくはこちらの記事をご覧ください。
3.分析
診断結果はサイトの特性、社会的な影響度、攻撃の実現度を考慮して危険度を判定します。
それ以外にも
- ベテランによるレビュー
- 脆弱性の状況を確認して、セキュリティ的な被害や実現度を考慮しつつ、指摘する/しない/危険度を下げる、などを検討する
- 発生している脆弱性から、さらに別の脆弱性が発生しないか検討する
- サーバーを壊すような攻撃はしないけど、できるかな?くらいの想定までは攻める
- 定期的に繰り返し診断をしているサイトは、過去の脆弱性の傾向も参考にする
このように、多角的に考えて分析していきます。
4.報告書の作成
報告書は、発見された脆弱性の概要、再現方法、対策方法を、図解などを用いて分かりやすく書いていきます。
報告書については、こちらの記事をご覧ください。
と、この流れを踏まえて、もちゃじが実際に見学した診断、分析、報告書作成までの様子をレポートします。
実際の診断は「膨大なデータ」との徹底的な戦い
もちゃじが見学させてもらったのは、とあるチケット購入もできるWebサイトのWebアプリケーション診断です。事前に診断項目を洗い出してある状態からスタートしました。
クロールして脆弱性の可能性を検出(ツールによる診断)
少しややこしいのですが、ここからツールが二つ出てきます。ローカルプロキシツールと自動診断ツールです。
まず、ローカルプロキシツール(ABURIDA®ではBurp Suiteを使っています)で、自動診断ツールに診断したいWebサイトの情報を読み込ませ、クロールします。そうすると、自動診断ツールにクロールした情報が保存されます。
自動診断ツールだけでは脆弱性を網羅しきれない場合もあるので、ブラウザやリクエストも確認していきます。ここに結構な時間がかかって、数時間かかることもあるんだそう。今回は、前日の夜に自動診断ツールに仕込んでおいたもののチェックからしていきました。なるほど。仕込みがあるとは。
気を付けるポイント
画面遷移がよく分からないのが診断あるあるだそうで、以下が気を付けるポイントとのこと。
- URLが正しいか
- パラメータの数と内容が正しいか
特にパラメータについては、事前調査でお客さまと合意したパラメータ内容と一致しているか、数が不足していないかなど、入念にチェックするそうです。もしパラメータ数が違っていると、違う遷移の場合があるので入念にチェック!
もちゃじの理解度が低いことを察した診断員。診断対象が「検索」なのに間違えて「履歴検索」を診断していないですか?というようなチェックですね。と、分かりやすく補足説明してくれました。
例えば「チケット購入」のフローの場合
今回はチケットを購入できるWebサイトを診断していたので、「チケットを購入する」のところを例にしてみます。
例えば、以下のようなフローがあったとします。
- 新規登録:新規ユーザーの登録フロー
- ログイン:既存ユーザーのログインフロー
- チケット購入:チケット購入フロー
- 決済:クレジットカード決済などの決済フロー
それぞれのフローで、どのようなリクエストが流れているのか、いくつ流れているのかをチェック。チケット購入のフローだったら、日付を選ぶ、枠は空いているか、何枚か、いろいろと入力する箇所がありますよね。そこの通信に脆弱性がないか全部チェックしていきます。
選択したチケットで申し込み、決済が完了する流れのリクエストをいっぱい流しておく。
とにかく流す流す流す!
自動診断ツールの判定
流し終えて自動診断ツールが脆弱性の可能性を判定するまでに、また時間がかかります。2時間ほどかかることもザラなんだとか。
自動診断ツールが脆弱性の可能性のあるところにフラグを立ててくれます。これはツールが正しく終了したサイン。成功の場合はサマリーが表示されるので、事前調査で作成した、診断項目が書かれたExcelにサマリーの内容を記入していきます。
HTTPエラーの「401(Unauthorized)」と表示が出ることもあって、これは失敗していることを表します。認証失敗。セッションが切れたんだろうか、ログインが切れたんだろうか……。診断員の大きなため息が聞こえてくるよう…….。でもよくあることらしく、実際は「セッションが切れていたみたいだね。ログインからやり直します」とクールにやり直す診断員。そこの判断も診断員がするそうです。はぁ、そうですか。もちゃじならがっくりきちゃうけどな。
ちなみに、前日の夜に仕込んだツールの結果は、失敗。がーん。こちらもクールにやり直しておりました。
複数案件を抱えている場合は、自動診断ツールに仕込んでいる間に、別案件の報告書を作成したり他の案件のチェックをしたりしているそうです。
テスト用のユーザーアカウントの作成
驚いたのは、診断しながらECサイトにテスト用のユーザーアカウントを作成して登録することです。言われてみれば、テストするんだからそりゃいくつかアカウントが必要かと思うものの、多い時には20個くらいのアカウントを使ってテストすると聞いて、もう白目。
そうだよね、今ログインしているユーザーで何かしようとしたら、今の診断項目に影響が出ますよね。で、別のユーザーでログインしてやる。
このテスト用のユーザーアカウントは、お客さまが用意してくださる場合もあれば、診断員側で適宜アカウントを作成してねという場合もあり、地味に大変な作業だなと思いました。
プライベートでも何かのサービスを使おうとしたとき、大体アカウント登録するプロセスが発生します。もちゃじはこれが非常にめんどくさい。Googleアカウントでいけるやつ、神と思いますが、全部ひもづけるのも抵抗があるので、地味に捨てメールアドレスで登録したりして……、で、パスワードを忘れたりするんですよね。
と、このようなもちゃじからすると、アカウント作成はすっとばしたいと思うところですが、テストですから! 診断ですから! 必要な分を作成していくんです。
電話番号はどうするの?と疑問に思われた方、診断用に用意している電話番号があったりなかったりするらしいですよ。
じゃあ、クレジットカード番号は?というと、テスト用の番号があるんですって。各クレジット会社がテスト用の番号を発行しているので、それを使うんですって。へぇぇ。もちろん、お客さまとは事前にどのクレジットカード番号を使うかの話し合いをしています。
診断診断診断(手動による診断)
診断員の先輩が前日に自動診断ツールに仕込んでいたやつがことごとく失敗だったため、別案件の診断を見学させてもらいました。
自動診断ツールで検出されたものを、手動で一つひとつ、つぶしていくのがこれからの作業です。ここからはローカルプロキシツールのBurp Suiteが活躍します。
まず、自動診断ツールにフラグが立っていないか見ていきます。自動診断ツールの結果を見て、フラグが立っている箇所はBurp Suiteも使ってしっかりとチェックしていきます。
フラグが立っているものは、全部見ます。一つひとつインターセプトして、攻撃値を入れ、対象のブラウザで確認していきます。繰り返しますが、一つひとつ全部です。
対象のサイトからのレスポンスの中身や状況を見て、ちょっとした違いを見つけたり、過去の経験から「これ怪しいぞ」と思ったりするところも確認していきます。はー職人技だわ。
攻撃が成功しちゃっているのか、そうでないのかを判断するためにも、くどいようですが一つひとつ見ていきます。
とにかく、インターセプトして改ざんしてブラウザで確認! 診断診断診断!
これが手動による診断でした。
診断員がベテランだったこともあり、診断作業は流れるように進んでいき、一体今は何をしているんだろうと無になる瞬間もありましたが、「インターセプトして改ざんしてブラウザで確認」を高速でしているだけなのであろうという結論に至る。
ちなみに、もちゃじも知っているクロスサイトリクエストフォージェリ(CSRF)も検出されていて、本当に出るんだなぁと感慨にふけったものです。
CSRFについて、気になる方はこちらをどうぞ。
後日聞いたところによると、診断員も診断中に「一体今は何をしているんだろう……?」と混乱状態になることもあるそうで、手を止めて30分ほど沈思黙考することもあるんだとか。むぅ。
危険度を判定して、診断結果を報告書にまとめる
手動による診断で一つひとつ確認していたものも、全てExcelにその結果を記入していきます。もちゃじが最初に気が遠くなってしまった、あのExcelです。このExcelには、全ての診断項目、診断の内容、診断結果が記載されていて、これを基に報告書を作成していくことになります。
ABURIDA® の場合は、担当診断員が検出された脆弱性やセキュリティ上のリスクを総合的にまとめ、報告書を作成します。脆弱性の概要、再現方法、対策方法など、検出された脆弱性ごとに書いていく。その後、他の診断員によってチェックリストを基に抜け漏れがないかの確認、セキュリティ部門責任者による最終確認。このように3人の診断員の目を経て、お客さまへ提出となります。
ベテラン診断員の先輩によると、頭の中に知見がたまっているので報告書の作成はそれほど大変ではないとのこと。まじか。さすがにたくさん検出されると大変なのでは? よく検出されるようなものは大変ではないけど、ちょっとエッジの効いた(とは言っていませんが)ようなものが検出されると、しんどいときもあるとのこと。
よかった。もちゃじはそういう弱音を聞きたかったんだよな。ツールに仕込んだものが大量にやり直しになってもクールだったけど、もちゃじの手前クールぶってただけなのでは?と大いに邪推しておこう。
感想
ABURIDA®は、ツールによる診断と手作業による診断を組み合わせたハイブリッド診断だから、手作業部分はともかく、自動診断ツールを使った部分は結構楽なんじゃないかと漠然と思っていたもちゃじ。ここに土下座。
自動診断ツールに入れれば、ぱぱぱっと出てくるわけじゃないんですね。丁寧な仕込みが必要だし、時には振られることもある(先輩は振られまくり)。多少振られようが涼しい顔してまた挑む。さぞメンタルも鍛えられよう。
ABURIDA®のツールはSST社開発の独自ツールを使っていて、誰でも簡単に使えるものでもなく(もちゃじでは無理)、専門性が高く、ツールの使い方を覚えて使いこなせるようになることも大変そうだなと思いました。
手作業による診断部分においては、もう職人技。もちゃじの目が追いつかないスピードで進んでいく。え、これAI? 倍速視聴してるんだっけ?と思ったものです。
興味深かったのは、Webサイトによっても診断のしやすさに違いがあるという話。いわく「診断のしやすさとWebサイトのユーザビリティは極めて近い」。
ほぉぉ。あまたのWebサイトを診断してきた職人の一言は重い。考え抜かれて設計されたWebサイトはスムーズに診断できるそうで、なるほどね(理解度半分)と思ったのでした。
まとめ
Webセキュリティ診断をしている様子を見たいというもちゃじの願望から、以下診断のプロセス2〜4を実際に見学した今回。
診断のプロセス
- 準備:診断前の綿密な調査と計画
- 診断:膨大なデータとの徹底的な戦い
- 分析:発見された脆弱性を分析して危険度を判定
- 報告書の作成:診断結果を分かりやすく伝える
「ツールによる診断って楽なんじゃないか説」がもちゃじの大きな勘違いだったことが分かりました。「手作業で全部を診断することに比べればはるかに時短になるし、楽」とは言えるかもしれないけど、だからといって「ツール=楽」とは言えない。
自動診断ツールの結果を足がかりに、誤判定ではないか、見落としはないか、手作業で一つひとつ確実に診断していく。そしてそれを論理的に分析して分かりやすく報告書に落とし込む。
Webセキュリティ診断の理解が深まり、より一層、「ABURIDA®、推せる!」となったもちゃじでした。
(Webセキュリティ診断の費用が高いうんぬんと言われても、そりゃそうだわとも思ったのでした)
ちなみに診断員には、膨大なデータにもひるまずに診断をやり遂げる鋼のメンタルが備わっていて(やってるうちに鋼になった説)、高度な技術力と緻密な分析力と高い集中力がありました。先輩、すごい人だったんですね。きっとうたぐり深さと粘着気質もあるだろうな。じゃなきゃ、あの膨大な量をこなして確実な判定とか下せないだろうしな(褒めています)。
ふう、書き終えた
部屋の掃除をしていて、昔のラップトップとスマホとガラケーが押し込まれている箱が出てきた。見なかったことにして元に戻した。処分は任せたぞ未来の自分。
ライター/もちゃじ
IT業界に縁なく秘書畑をさすらい、前職はインドで社長秘書。ほぼ日本語とパッションのみで乗り切ったずうずうしさはスキルの一つか。完全なインドア派ながらたまにふらりと旅に出る。行き場のない母性を持て余し、友人の犬を溺愛するもほえられる。体が硬く、インドでヨガティーチャーに笑われたことに深く傷つく一面も。
ITド素人の私がWebセキュリティについて学び、レベルアップしていく(予定です)様子をお届けします。学びを発信することで、少しでもWebセキュリティに関する「難しそう」というイメージが下がり、苦手意識のある方たちに届いたらうれしいです。