ペネトレーションテストに向けた調査工程について
はじめに
MICINの情報セキュリティ部Kurosawaです。
現在、オフィスからのセキュリティ状況の把握を目的とした、第三者によるペネトレーションテストの受診を予定しており、これを機にペネトレーションテストについて調べてみました。今回はその中の一つの工程である「調査」についてご紹介いたします。
免責事項:記事の作成にあたっては細心の注意を払っていますが、記事の記述に誤りや欠落があっても、 MICIN株式会社はいかなる責任も負わないものとします。
記事およびその記述内容は予告なしに変更される場合があります。 それぞれの記事は執筆時点での最新のもので、常に最新の内容であることを保証するものではありません。
また、本記事に掲載した行為を自身の管理下にないネットワーク/コンピューターに行った場合は、攻撃行為と判断される場合があり、最悪の場合、法的措置を取られる可能性もあります。このような調査を行う場合は、くれぐれも許可を取った上で、自身の管理下にあるネットワークやサーバーに対してのみ行ってください。
1. ペネトレーションテストの概要
1–1. ペネトレーションテストと脆弱性診断
特定のホストやIPアドレスに対して技術的な観点から「脆弱性を検出する」事を目的として実施するものが脆弱性診断です。
一方、保護すべきデータやシステムに対して、「正規ではない、何かしらの方法でアクセスできるかを検査する」事がペネトレーションテストです。
様々な手法を試みる脆弱性診断では、特定の範囲に対して網羅的に調査した結果を成果とするのに対し、ペネトレーションテストでは、予め定めたゴール(保護すべきデータへのアクセスなど)への到達の可否を持って完了とします。このため、ペネトレーションテストの結果は網羅性を担保するものでは無いものの、テストを実施する事で、想定外のリスク(アクセス手法)を検出する事に意義を求めます。
また、これらとは別に、レッドチーム演習という用語もありますが、これは「ブルーチームの機能向上」を目的としているため、その目的は脆弱性診断やペネトレーションテストとは異なります。
1–2. ペネトレーションテストの手法
ペネトレーションテストは、実施条件により2つの手法に分かれます。
一つは、あらかじめテストを実施する人に様々な情報を実施者に共有しておくWhiteBox型テスト、もう一つは逆に、ほとんどの情報を共有せずにテストを行う、BlackBox型テストです。
よりテストを効果的にするために、あらかじめ必要な情報を共有しておくこと(WhiteBox型テスト)が推奨されています。
また近年では、一部の情報だけを共有して行うテスト手法が出てきており、これはGrayBox型テストと呼ばれています。
1–3. ペネトレーションテストの進め方
基本的な進め方として調査に始まり、テストの実施、報告を経て、検出された脅威に対して是正措置を行います。
本記事では、特に調査工程に注目し、情報収集の方法や、そのために必要なツール類について触れています。
2. 調査の概要
調査については、大きく2つのステップを経て行います。
3. 公開されている情報を使った調査
3–1. ドメインの検索
最初に行うのは、テスト対象となる企業やサービスについて、ドメインを検索する事です。
調査対象となる企業やサービスの名前がわかっている場合、その名前を検索すると、多くの場合は、何かしらの情報が確認できます。
また、これらの情報の多くは公開されており、調査は比較的容易です。
具体的な調査方法としては、ドメインの登録情報が管理されているサイトで確認する方法があります。
JPRS(日本ドメイン)
Viewdns.info(海外ドメイン)
Viewdns.infoはドメイン検索に特化したサイトではありませんが、ドメインに関する様々な情報を確認することができます。
また、上記以外に以下のサイトでも同様の検索が可能です。
3–2. サブドメインの検索-subbruteの利用
サブドメインの検索は、一般的ではありませんが公開されている情報に対する調査です。
通常、その企業のサービスを利用していたり、HPを参照していて、サブドメインを見つける事はあるかもしれませんが、多くの場合、サブドメインを意識的に収集することはありません。
しかし、サブドメインには、その企業が公開しているサイトやサーバ、それらの用途等を推測するヒントが隠されており、ペネトレーションテストを行う上では非常に重要な情報です。
サブドメインの調査方法には、サイトを使った検索やツールを使った検索があります。
ここではPCにsubbruteというツールをインストールしてサブドメインを検索してみます。
subbruteは、サブドメインを列挙するためのツールです。
オープンリゾルバを使用して問い合わせを行っているツールですので、ひょっとすると将来的には使えなくなってしまうかもしれません。
ターミナルを起動し、任意のフォルダを作成、そのフォルダに移動したら以下のコマンドでsubbruteのファイルを取得します。
wget https://github.com/TheRook/subbrute/archive/master.zip
ダウンロードしたzipファイルを解凍します。
unzip master.zip
解凍したフォルダにて以下のコマンドを実行することで、指定したドメインのサブドメインを検索します。(検索には結構時間がかかります)
./subbrute.py domain_name
以下はcuron.coに対してサブドメインの検索を行ったログです。
一般的にサービスとして公開されているcuron.coに加え、様々なホスト名が検出されてる事が確認できます。
検索結果のサブドメインに対して、nslookupやdigコマンドを使ったり、先に記述したviewdnsinfoのサイトを利用してIPアドレスやその他の情報を取得することが可能です。
3–3. サブドメインにおけるログイン画面の検索
公開されているサブドメインを元に、そのサブドメイン上でWebサイトが動作しているかを調査します。
ここではaquatoneというツールを使います。
aquatoneは、リストアップしたサブドメインのリストに基づき、特定のポート(80、443、8000、8080、8443)にアクセスしてスクリーンショットを取得する事で、そのサブドメインでWebサイトが動作しているかを確認する事ができます。(動作結果画面は割愛します)
ご参考:Viewdnsinfoについて
Viewdnsinfoのサイトには様々なツールがあり、用途に応じてドメインに関する様々な情報が取得できます。
以下はmicin.jpへ、中国のFirewallからアクセス可能かをチェックしたものです。
この結果では、micin.jpには中国からはアクセスできない事が確認できます。
3-4. ユーザーの検索
外部に公開されているサイトがみつかった場合、ペネトレーションテストでは、そのサイトへサインインを試みることがあります。
その際、調査対象となるドメインに所属しているユーザーのメールアドレスをIDとして使用するケースは多々あります。
そこで、こんどは特定のドメインに対し、所属するユーザーのメールアドレスのヒントになりそうな情報を調べます。
この作業には、theHarvesterというツールを利用します。
theHarvesterは、電子メールやホスト名、従業員のユーザー名等の情報を、様々な検索エンジンやSNS(Linkedin)を利用して収集するツールです。
theHarvesterをインストールするには、以下のコマンドを実行します。
brew install theharvester
ターミナルを起動し theHarvester と入力するとツールが起動します。
以下は特定のドメインに対する調査結果を、xmlやjsonで出力するためのコマンドです。
theHarvester -d domain_name -g -s -f file_name -b all
指定しているコマンドオプションを補足します。
- -d:検索したいドメイン名を指定しています。
- -g:Google検索にはGoogle Dorksを使用します。
- -s:Shodan(インターネット接続機器の検索サイト)を使った検索の実施
- -f:結果を指定したファイル名に出力します。
- -b:検索するソースを指定しています。allとした場合、以下のソースを検索対象にします。
baidu, bing, bingapi, bufferoverun, censys, certspotter, crtsh, dnsdumpster, duckduckgo, exalead, github-code, google, hackertarget, hunter, intelx, linkedin, linkedin_links, netcraft, omnisint, otx,pentesttools, projectdiscovery, qwant, rapiddns, securityTrails, spyse, sublist3r, threatcrowd,threatminer, trello, twitter, urlscan, virustotal, yahoo
ユーザーの姓名が判別したら、その情報を元に、メールアドレスを推測することが可能となります。
4. 公開されていない情報の調査
これまでに取得できた情報を元に、更に調査を進めていきます。
ただし、ここからは公開されていない情報に対する調査もあり、手法によっては、不正アクセスとみなされる可能性がありますのでご注意下さい。
4-1. ポートスキャンの概要
サブドメイン、及びそこに到達するためのIPアドレスがわかると、それらのIPアドレスに対してポートスキャンを行います。
これにより、対象となるIPアドレス(ホスト)上で稼働されているサービスや、接続するために必要なポート、稼働しているソフトウェアといった情報が把握できます。
ポートスキャンの実施形態は2種類あり、以下にそれぞれの特徴をまとめます。
※上記表にあるサイトへのリンクは以下の通りです。
ここではCensysというサイトを利用したパッシブポートスキャンを行います。
CensysやShodanは、インターネットデバイス(コンピュータやホスト、IoTデバイス等)を検索するための専用検索エンジンです。
これらサイトは、ウェブからアクセスできるシステムを捕捉し、セキュリティの脆弱性のため悪用される可能性があるデバイスを把握する手段を企業に提供することを目的としています。(一方で誰でも検索を利用できるため、悪用されるケースも無いとは言い切れません)
なお、Censysの利用にあたっては事前にユーザー登録(無料)が必要となります。
サイトの利用方法は、検索フォームに必要な情報を入力するだけです。
入力する情報は、IPアドレスやホスト名、ドメイン名等様々ですが、カーソルが検索フォームにあると、様々な検索オプションが表示されるため、必要なオプションを選択して検索することが可能です。
以下は、micin.jp(ドメイン名)を検索した結果を表示しています。
各ホストのIPアドレスと、接続可能なポート番号、サブドメイン、稼働しているソフトウェアの情報等が表示されます。
特定のホストの詳細を表示してみます。
以下はあるホストの詳細画面です。Apacheが動作しており、80と443のポートに接続できるmacOSserverという事が確認できます。
ご参考:ポートスキャンを行う上での注意点
一般的にCDN(Content Delivery Network)に対してのポートスキャンは意味がないと言われています。
これはCDNがコンテンツを配信するためだけに特化した機能であり、実際のホストではないからです。
また、CDNをサービスとして提供しているベンダー(CloudFlare、CloudFront、Fasty、AkamaiなどCDNベンダー)の管理下にあるリソースに対してポートスキャンを行う事になるため、想定外のサーバに対してアクセス(攻撃)が行われる点にも注意が必要です。
さいごに
本記事ではここまでとなりますが、ご参考として次の工程について少し触れます。
上で集めている情報を元にペネトレーションテスト行う場合、以下のようなテストが可能です。
参考文献・引用サイト
本記載に先立ち、以下の資料やサイトを参考にさせていただきました。
※Kali LinuxのサイトにあるtheHarvestの情報