私は脆弱性診断の仕事を3年弱しています。今までの経験の中で、脆弱性診断の仕事について思ったことを書かせていただきます。
脆弱性診断とは、2種類に分けられます。①Webアプリケーション診断②プラットフォーム診断です。
やることをざっくり説明すると、Webアプリやプラットフォームに脆弱性がないことを確認します。具体的には、細工したパケットや、リクエストを送信し、そのレスポンスを見て脆弱性の有無を判断します。以降、説明の便宜上、脆弱性診断はWebアプリケーションのことを指します。
脆弱性診断では、手動診断と自動診断が実施されます。手動診断とは、Burp SuiteやFiddlerといったローカルプロキシツールを用いて、細工したリクエストを作成します。細工されたリクエストを送信し、返却されたレスポンスを精査し、脆弱性の有無を判断します。自動診断とは、機械的に検出できる脆弱性を抽出し、まとめてツールによってリクエストを送信し、レスポンスを精査をして脆弱性の検出を行います。これにより、手動診断でかかるはずだった時間を大幅に短縮することが可能になります。時間があるならすべて手動診断で実施することが理想ですが、時間がかかる為、自動診断を併用することで、効率的に脆弱性診断を実施します。
脆弱性診断終了後、検知された脆弱性を報告書にまとめ、報告します。診断ベンダによっては、報告会を実施する会社もあります。脆弱性の報告を受けたお客様は、脆弱性を悪用された場合のリスクや、改修する為のコストなどを考え、脆弱性の検知された箇所を改修するか判断します。
脆弱性の改修が行われた場合、診断ベンダによっては、脆弱性が検出されないか検査する再診断を実施します。報告した脆弱性が検出されないか、改修によって他の脆弱性が検出されないかを検査します。
ここからはあくまで、私の経験上での私の考えをお話をさせていただきます。脆弱性診断をする際、攻撃者の視点を持って診断を行います。手順書通りの診断も行いますが、時間が許す限り様々なことを試します。もちろん、非破壊検査であることや、本番環境を診断するか、開発環境を診断するかによって、検査する攻撃を考えます。
脆弱性を検知した場合、脆弱性を突かれた場合、どのようなリスクがあり、どのような被害に繋がるかを考えます。これは、報告書を読んだお客様からの問い合わせがあった場合に備える為です。お問い合わせの中には、脆弱性の再現手順を聞かれることもありますが、脆弱性を改修する必要があるかと聞かれる場合もあります。そういった場合、想定される攻撃をお話して、ざっくりと想定される被害もお話しします。あくまで脆弱性の改修を行うのは、脆弱性診断を受けたお客様なので、お客様が判断するのに必要な情報を答えるよう意識しています。
脆弱性診断は、診断する側と診断を受ける側の双方の協力と理解があって、初めて有効に働きます。脆弱性があっても時間がないから修正しない、時間がないから自動診断だけで脆弱性診断をしたことにするといった事態になると、お互いにマイナスになってしまうと考えます。脆弱性を潰すことが共通の目的となって実施されることが望ましいと考えます。
ここまで、脆弱性診断とはなにか、どんなことを考えて診断しているかを説明いたしました。少しでも、脆弱性診断サービスを提供している側の気持ちをわかっていただければ幸いです。