ペネトレーションテストを実施してみたいが、初めてで内容がよくわからないという方にお勧めです。
ペネトレーションテストも、従業員になりすまして、会社に侵入したり、社員にウィルスメールを送り付け、バックドアをインストールしたりなどの本格的なものから、脆弱性診断+αレベルの簡易的なものまで、提供している会社によって、異なってきます。もちろん、費用も様々で、数百万~数千万円とバラバラです。ここでは、弊社で実施している簡易的なペネトレーションテストのやり方について、説明したいと思います。
まず、流れについては、以下のようになります。
・目標設定:実施目的、対象を設定します。
※この「目標設定」が、「ペネトレーションテスト」では一番重要な部分になり、お客様と打ち合わせのうえ、決定致します。
・事前調査:脆弱性診断など行い、事前に情報を収集します。
・シナリオ策定:実施目的と調査結果から、シナリオを策定します。
・侵入検証:シナリオを元に、不正ログインや情報窃取を行います。
・レポート提出:検証結果のレポートを作成し、報告致します。
ペネトレーションテストの実際
目標設定を行う
ここからが本題です。それでは、目標設定しましょう。
まずは、実施目的から、決めます。今回は、「顧客リストが搾取されないか確認したい。」とし、対象は、「顧客リストを管理しているデータベース」としましょう。次に、データベースにどのようにアクセスするのか、経路上の機器のどの脆弱性を利用するのかを事前調査します。VPNで社内にアクセスし、営業が使用しているWebアプリケーションから顧客リストを取得するか、サーバ管理をしている端末やネットワークを利用して、直接データベースサーバをハッキングするか検討します。可能であれば、後者の方が効率がよいので、まずは、そちらを検討してみましょう。
事前調査を行う
OpenVASやOwaspZAPを使用して、サーバやネットワーク機器に脆弱性がないか調査します。なんと、Webサーバに脆弱性があり、Webサーバ経由で、データベースサーバにアクセスできそうです。これは、攻撃者側からすると、ラッキーです。脆弱性対策は、怠ってはいけないという良い例です。
FWもファームウェアが最新にアップデートされていません。こちらも、VPNの脆弱性が見つかりました。VPN経由でもハッキングできそうです。うーん、出来すぎだな~、罠かも……と攻撃者が考えて、アタックをやめてくれればラッキーですが……今回は、当然やります。
シナリオを考える
万が一のために、何パターンか考えておきます。
まずは、Webサーバ経由でのデータベースサーバのハッキングです。次に、VPN経由での営業端末のハッキングです。最後に、VPN経由でのサーバネットワークへの侵入及びデータベースサーバのハッキングです。管理者端末のハッキングでも可とします。
さて、いよいよ、ここからが本番ですが、弊社の場合、脆弱性を検出した段階で、それを使用したアタックが成功したものとみなし、シナリオを次の段階へ進めていきます。
具体的には、WebサーバにSSHの脆弱性があった場合、WebサーバにSSHでアクセスする情報を提示してもらい、次の脆弱性を探します。これなら、実際にアタックをかけるわけではないので、本番環境への影響を極力抑えることができます。
侵入する
では、本題に戻ります。
今回見つかったWebサーバの脆弱性をつけば、バックドアを仕込んでリモートアクセスをすることができますので、WebサーバのSSHのアクセス情報を提示してもらい、リモートアクセスを行います。次に、データベースにアクセスするための設定ファイルを探します。暗号化していれば苦労を強いられますが、ほとんどがテキストファイルのことのほうが多いです。
まず、Webサーバは、何を使っているのかを確認してみます。psでもhttpdを試してみるでも構いませんが、Apacheですね。
となると、/var/www/htmlの下に……ありました。設定ファイルっぽい名前のxxxxx.iniを開いてみると、さらにプログラムの設定ファイルのパスが書いてありました。
さらに、そのファイルを開くと・・・データベースへの接続情報が書いてありました。ここまで来れば、ほぼ確実に情報搾取が可能です。
それでは、いよいよ、データベースにアクセスします。
アクセスできたので、ダンプを頂いて、あえて、ログやhistoryに残ったアクセスした証跡を消さずに、立ち去ることにします。この足跡を運用で検知できるかも確認しておきます。
このように、データベースの情報を盗むだけであれば、リモートアクセスができたら、あとはそんなにスキルは必要ありません。尚、テキストではなく、暗号化していれば、もっと時間がかかるかもしれませんが、秘密鍵を同じサーバにおいていたらアウトです。
今回は、シナリオの1番目だけで実施目的が達成できてしまったので、2番目、3番目についての手法はお伝えできませんでしたが、またの機会に書きたいと思います。