Skip to content

ラボ 1.2: 偵察とOSINT

VPN不要

この演習にはOpenVPN接続は必要ありません。インターネットアクセスが必要です。

背景

Hiboxyに対する攻撃を開始する前に、そのインフラストラクチャと潜在的な攻撃対象領域について包括的なインテリジェンスを収集する必要があります。公開されている情報のみを使用して、企業への電子メールフロー、公開IPスペース、使用しているサードパーティサービス、証明書透明性ログを通じたWebプレゼンスを調査します。

調査により、NTLM認証が有効になっているExchangeサーバーを含む、公開されている認証エンドポイントが明らかになります。これは、MFAが他の場所で有効になっている場合でもこれらのエンドポイントが攻撃される可能性があるため、重要な所見です。DNS偵察を通じて、Hiboxyが使用しているさまざまなクラウドサービスとSaaSプラットフォームも明らかになり、ソーシャルエンジニアリングとパスワードスプレー攻撃に役立つ貴重なインテリジェンスを提供します。この受動的な偵察フェーズにより、アクティブなエンゲージメントを開始する前に、対象環境を徹底的に理解できます。

ラボのセットアップ

使用する仮想マシン:

  • Windows

ラボ – ステップバイステップの手順

このラボでは、対象組織を絞り込み、後の攻撃のために有用な攻撃対象領域を見つけるために使用される偵察技術のいくつかを実演します。いくつかの組織例を見て、最後にボーナスとしてランダムなS&P 500企業に対して同じアプローチを試す機会があります。

重要: あなたはいかなる対象も攻撃する権限がありません。純粋に公開されている情報のみを見ています。

1: 企業への電子メールフロー

電子メールを受信するには、企業がDNSにMXレコードを公開する必要があります。これらのレコードは、ドメインの電子メールを受け入れるメールサーバーを指します。PowerShellを使用していくつかの企業のMXレコードを検索します。

デスクトップ上の「Terminal」リンクをクリックしてPowerShellターミナルを開き、次を実行してください:

コマンド

Resolve-DnsName -Type MX -Name lowes.com

想定される結果

PS C:\Users\sec560> Resolve-DnsName -Type MX -Name lowes.com

Name                                     Type   TTL   Section    NameExchange                              Preference
----                                     ----   ---   -------    ------------                              ----------
lowes.com                                MX     5     Answer     lowes-com.mail.protection.outlook.com     10

...possible additional results omitted for brevity...

PowerShellウィンドウのサイズによって、正確な列は異なる場合があります。ここでは、@lowes.comアドレスに送信された電子メールがMicrosoft 365(mail.protection.outlook.com)に送信されることがわかります。つまり、電子メールは送信元の電子メールサーバーからMicrosoftに直接流れます。

他にどのような選択肢がありますか?一部の企業は、ProofPointやMimecastなどのサードパーティの電子メールセキュリティサービスを使用して、電子メールがメールサーバーに到達する前にフィルタリングしています。ProofPointを使用している企業の例を見てみましょう -- SANSです。

コマンド

Resolve-DnsName -Type MX -Name sans.org

想定される結果

PS C:\Users\sec560> Resolve-DnsName -Type MX -Name sans.org

Name                                     Type   TTL   Section    NameExchange                              Preference
----                                     ----   ---   -------    ------------                              ----------
sans.org                                 MX     5     Answer     mxa-002c1802.gslb.pphosted.com            10
sans.org                                 MX     5     Answer     mxb-002c1802.gslb.pphosted.com            10

...possible additional results omitted for brevity...
Resolve-DnsNameのLinux版について知りたいですか?

Linuxではdigコマンドを使用してDNSレコードを検索できます。同等のコマンドは次のとおりです:

dig sans.org MX +short

ここでは、@sans.orgアドレスに送信された電子メールが最初にProofPointの電子メールフィルタリングサービスに送信されることがわかります。フィルタリング後、ProofPointは電子メールをSANSの実際のメールサーバーに転送します。実際のメールサーバーがどこにあるかをどうやって知るのでしょうか?これは難しい場合もありますが、GetUserRealmエンドポイントを介して、企業がMicrosoft 365を使用しているかどうかを簡単に確認できます。このエンドポイントは、Microsoftアプリケーションが特定のドメインのユーザーを認証する方法を決定するために使用されます。これにより、ドメインがMicrosoftを直接使用しているか、Okta、PingIdentity、SecureAuth、RSA SecurID Access、ADFSなどのサードパーティのIDプロバイダーを使用しているかがわかります。

GetUserRealmエンドポイントはhttps://login.microsoftonline.com/GetUserRealm.srfにあり、loginクエリパラメータ(検索する電子メールアドレス)を受け取ります。対象ドメインの任意の電子メールアドレスを使用できます(実際に存在するかどうかは関係ありません)。sans.orgドメインを検索してみましょう:

コマンド

Invoke-WebRequest -Uri "https://login.microsoftonline.com/GetUserRealm.srf?login=invalid@sans.org" | Select-Object -ExpandProperty Content | ConvertFrom-Json

想定される結果

State                  : 4
UserState              : 1
Login                  : invalid@sans.org
NameSpaceType          : Managed
DomainName             : sans.org
FederationBrandName    : Escal Institute of Advanced Technologies DBA SANS Institute
CloudInstanceName      : microsoftonline.com
CloudInstanceIssuerUri : urn:federation:MicrosoftOnline

この場合、@sans.orgアドレスへの電子メールは最初にProofPointに送信され、その後Microsoft 365に転送されることがかなり明確です。また、NameSpaceTypeManagedであることから、SANSがID管理にMicrosoftを直接使用していることがわかります。

NameSpaceTypeの選択肢は何ですか?

  • Managed: ドメインはID管理にMicrosoftを直接使用しています。
  • Federated: ドメインはID管理にサードパーティのIDプロバイダーを使用しています。AuthURLフィールドにIDプロバイダーのURLが示されます。
  • Unknown: ドメインはMicrosoft 365を使用していません。
Federatedの例を見たいですか?

以下は、サードパーティのIDプロバイダーを使用している企業の例です。AuthURLフィールドはIDプロバイダーのURLを示しています。これらのURLをWebブラウザでアクセスして、IDプロバイダーのログインページを見ることができます(もちろん、変更される可能性があります)。

上記で使用したのと同じGetUserRealm URLを使用して、これらの企業のいずれかの現在の結果を検索できます。例えば、https://login.microsoftonline.com/GetUserRealm.srf?login=invalid@packagingcorp.com(必要に応じてドメインを置き換えてください)。

Active Directory Federation Services (ADFS)に関するヒント

URLに/adfs/ls/が表示されている場合、企業はIDプロバイダーとしてADFSを使用しています。ADFSは、Active Directoryと統合されるオンプレミスのIDプロバイダーです。Webページにアクセスして、変更がないか注意深く確認してください。企業は、パスワードのリセット、サポートへの連絡、その他の有用な情報へのリンクを提供することがよくあります。

企業がMicrosoft 365を使用していない場合、ドメインのSPFレコードを検索することで、実際のメールサーバーを見つけることができることがよくあります。SPFレコードは、ドメインの電子メールを送信する権限を持つメールサーバーを示すDNS TXTレコードです。例としてfastenal.comのSPFレコードを検索してみましょう:

コマンド

Resolve-DnsName -Type TXT -Name fastenal.com | Where-Object { $_.Strings -like "v=spf1*" }

想定される結果

PS C:\Users\sec560> Resolve-DnsName -Type TXT -Name fastenal.com | Where-Object { $_.Strings -like "v=spf1*" }

Name                                     Type   TTL   Section    Strings
----                                     ----   ---   -------    -------
fastenal.com                             TXT    300   Answer     {v=spf1
                                                                include:spf.protection.outlook.com
                                                                include:spf.mandrillapp.com
                                                                include:spf.criticalimpactinc.com
                                                                include:wappmail.com
                                                                a:b.spf.service-now.com
                                                                ip4:148.163.142.133 ip4:148.163.146.161
                                                                , ip4:192.254.121.248 ip4:23.21.109.197
                                                                ip4:23.21.109.212 ip4:68.73.223.13
                                                                ip4:205.243.112.9 ip4:205.243.112.22
                                                                ip4:205.243.112.227 ip4:216.34.99.11
                                                                ip4:216.34.99.12 ip4:167.89.45.155
                                                                ip4:168.245.103.157 ip4:208.117.50.210 ,
                                                                ip4:146.20.91.152 ip4:146.20.91.153
                                                                ip4:168.245.16.242 ip4:38.117.70.165
                                                                -all}

SPFレコードを完全に解析するのは少し複雑ですが、fastenal.comが電子メールの送信に複数のサードパーティサービスを使用していることがわかります:

  • spf.protection.outlook.com: Microsoft 365(Microsoft 365を使用しているもう1つの信頼できる指標)
  • spf.mandrillapp.com: Mandrill(電子メールマーケティングサービス)
  • spf.criticalimpactinc.com: Critical Impact(電子メールマーケティングサービス)
  • wappmail.com: form.comに関連付けられた自動化プラットフォーム
  • a:b.spf.service-now.com: ServiceNow(ITサービス管理プラットフォーム)
  • ip4:...: ドメインの電子メールを送信する権限を持つさまざまなIPアドレス。これらは企業自身が所有している場合もあれば、サードパーティサービスが所有している場合もあります。

その性質上、特定の企業のメールサーバーを知ると、通常は認証プロバイダーも見つかります。たとえば、企業が電子メールにMicrosoft 365を使用している場合、ID管理にもMicrosoft Entra IDを使用する*必要があります*。

後ほど、AADInternals PowerShellモジュールの一部であるInvoke-AADIntReconAsOutsiderを見ていきます。これはこのプロセスを自動化します。MXレコードの検索を実行し、GetUserRealmエンドポイントをチェックし、対象ドメインで使用されているIDプロバイダーを識別するための追加チェックをいくつか実行します。先を見たい場合は、PowerShellでImport-Module AADInternalsを実行してモジュールをインポートし、Invoke-AADIntReconAsOutsider -DomainName sans.orgsans.orgを対象ドメインに置き換えます)を実行して結果を確認できます。

2: 企業が所有する公開IPスペースの検索

ルーターがBGPを介して互いにトラフィックを送信する方法により、特定の企業が所有する公開IPスペースを検索できます。これにより、後の攻撃の潜在的な対象を特定できます。企業は1つ以上の自律システム番号(ASN)を持つことができ、これは単一の組織によって管理されるIPネットワークのグループを識別するために使用されます。特定の企業が所有するASNを検索し、それらのASNに関連付けられたIP範囲を検索できます。

Hurricane Electric BGP Toolkitを使用してASNとIP範囲を検索します。Home Depotが所有するASNを検索してみましょう:

HE BGP ASN Search

次に、**AS10967**をクリックするか、このリンクをクリックして、Home DepotのASNに関する詳細情報を確認します:

HE BGP ASN Details

このページは、Home Depotによってアナウンスされた**52**個のIPv4プレフィックス(最終更新時点)と**0**個のIPv6プレフィックス(最終更新時点)があることを示しています。**Prefixes v4**タブをクリックして、IPv4プレフィックスのリストを確認します:

HE BGP ASN IPv4 Prefixes

偵察のこの部分は、MasscanやNmapなどのツールを使用して、後のスキャンフェーズに直接フィードされます。

IPv4範囲のリストをファイルに保存することに興味がありますか?

Hurricane ElectricはIP範囲のリストをエクスポートする直接的な方法を提供していませんが、簡単なコマンドライン作業で抽出できます。Linuxターミナルでcurlgrepを使用して行う1つの方法を次に示します:

curl -H "User-Agent: AnythingHere" -s 'https://bgp.he.net/AS10967#_prefixes' | grep -oE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/[0-9]+' | sort -u

サーバーがデフォルトのcurlユーザーエージェントを持つリクエストをブロックするため、カスタムUser-Agentヘッダーが必要です。grepコマンドはCIDR表記でIP範囲を抽出し、sort -uは重複を削除します。

3: 企業が使用するサードパーティサービスの識別

さまざまな理由で、企業が使用するサードパーティサービスを知ることは有用です。最も簡単な例の1つはソーシャルエンジニアリングです。企業が特定のサードパーティサービスを使用していることがわかっている場合、そのサービスから送信されたように見える、より説得力のあるフィッシングメールを作成できます。

多くのサードパーティサービスでは、対象企業がドメインの所有権を証明するためにDNS TXTレコードを公開する必要があります。たとえば、企業がMicrosoft 365を使用している場合、ドメインの所有権を証明するために特定のTXTレコード(異なる番号のMS=ms12341234)を公開する必要があります。同様に、企業がGoogle Workspaceを使用している場合も、特定のTXTレコード(google-site-verification)を公開する必要があります。

したがって、ドメインのDNS TXTレコードを使用して、企業が使用するサードパーティサービスを識別できます。sans.orgのDNS TXTレコードを検索してみましょう:

コマンド

Resolve-DnsName -Type TXT -Name sans.org | Select-Object -ExpandProperty Strings | sort

想定される結果

PS C:\Users\sec560> Resolve-DnsName -Type TXT -Name sans.org | Select-Object -ExpandProperty Strings | sort
_globalsign-domain-verification=XbqPoFvyLnW1lHWyrKazU_F9bRAXRI-_SoC2KhQHxT
_globalsign-domain-verification=Z0fOVJB0oLvstFlL9BBVBnLszC-egXTqDZTeNuWdCx
amazonses:s3qWj+9usSfVvw6sOrHcxcLqSLUHe4+xX2Bcz382ZY4=
apple-domain-verification=ZZoZ4NmnUelze8au
asv=c92bd4107a8a4880020e898eef0586e7
atlassian-domain-verification=6NyU75cdG0l2wc7/BZnvjf0Vk6le6u8mecfnfsB0aAODfOm0qF5qbI90rXXmVGWN
canva-site-verification=SBkYH7bWYvbsjI0sPM-yIw
dropbox-domain-verification=q0ksfx82ki2b
globalsign-domain-verification=C58F01CCC6203EE0CB8F2A1C6FB794F5
google-site-verification=fdFAbK_U8Wu9OJDEauVhmgZ0OuJxWA-P4DQhZGx3hjs
google-site-verification=qP6oSPKijvCWSIP7JqPOF_HuU0NmQX8NTC8Eln8hXMg
jetbrains-domain-verification=9d0spo0t1rbzwx801jejq5z9i
miro-verification=cb513e5bc26e25d81c0b82a55d647d153d95e378
MS=ms15381092
openai-domain-verification=dv-mQdOkfMBQ2VUSYimMob17Cj0
parallels-domain-verification=d6efc2b9b49e46d292bb3257cf202b17fe4c8b0530e849e7977a803f436ed225
pardot928673=573fbfb6e48d50fe412afebd0623144f1667d7fd7e780b3a403bca1493ef624e
status-page-domain-verification=2w964jh22625
v=spf1 include:%{i}._ip.%{h}._ehlo.%{d}._spf.vali.email ~all
YOfxOkgh96cLKDUd0042Sx/iL9bDXs/ZIJ11T2OczGY4TajTWwW8RXLmRajj6sSrD+sNdelF3pXA0PPmx3cE5Q==
zapier-domain-verification-challenge=b166a197-0f75-4a5a-932e-8c66e7e10991
Linux版もまた見たいですか?

Linuxではdigコマンドを使用してDNSレコードを検索できます。同等のコマンドは次のとおりです:

dig sans.org TXT +short | sort

レコード名自体から企業名を読み取るのが十分簡単な場合もありますが、特定のTXTレコードを検索してどのサービスに属しているかを確認する必要がある場合もあります。以下は、サードパーティサービスとそれに関連するTXTレコードの例です:

4: 企業のWebサイトの識別

証明書の透明性は素晴らしいものです。これは、公的に信頼された証明機関(CA)によって発行されたすべてのTLS証明書の公開ログを提供します。これを使用して、かなり権威的な方法で特定の企業が所有するWebサイトを見つけることができます。amasssubfinderFindomainなど、サブドメインを見つけるために使用できる他のツールもありますが、証明書の透明性は開始するのに最適な場所です。

複数の証明書透明性検索エンジンが利用可能ですが、この例ではcrt.shを使用します。このリンクをクリックして、インディアナ州クリントン郡に発行された証明書を検索しましょう。次のような結果が表示されるはずです:

crt.sh Clinton County

インディアナ州クリントン郡のような小規模な組織の場合、結果を手動で確認するのは悪くありませんが、大規模な組織では数百または数千の結果がある場合があります。幸いなことに、crt.shはJSON形式で結果をダウンロードする方法も提供しています。以下に示すように、「JSON」というラベルの付いた小さなアイコンをクリックします:

crt.sh JSON Link

PowerShellを使用してJSON結果を解析し、一意のドメイン名(複数行を含む可能性のあるname_valueフィールドから)をファイルに保存できます。PowerShell内で次を実行してください:

コマンド

Invoke-WebRequest -Uri "https://crt.sh/json?identity=clintoncountyin.gov" | Select-Object -ExpandProperty Content | ConvertFrom-Json | Select-Object -ExpandProperty name_value | Sort-Object -Unique | Out-File -FilePath domains_clintoncountyin.gov.txt

想定される結果

PS C:\Users\sec560> Invoke-WebRequest -Uri "https://crt.sh/json?identity=clintoncountyin.gov" | Select-Object -ExpandProperty Content | ConvertFrom-Json | Select-Object -ExpandProperty name_value | Sort-Object -Unique | Out-File -FilePath domains_clintoncountyin.gov.txt
まだLinux版が欲しいですか?

curlコマンドを使用してLinuxでJSON結果をダウンロードし、jqを使用してJSONを解析できます。同等のコマンドは次のとおりです:

curl -s 'https://crt.sh/json?identity=clintoncountyin.gov' | jq -r '.[].name_value' | sort -u > domains_clintoncountyin.gov.txt

ファイルの内容について知りたいですか?

PowerShellでGet-Contentを使用してファイルの内容を表示できます:

Get-Content -Path domains_clintoncountyin.gov.txt

またはLinuxではcat:

cat domains_clintoncountyin.gov.txt

テスト時点では、出力は次のようになりました:

autodiscover.clintoncountyin.gov
mail2.clintoncountyin.gov
cc-archive01.clintoncountyin.gov
clintoncountyin.gov
www.clintoncountyin.gov

テスト時点では、クリントン郡にはまだインターネットに公開されているExchangeサーバーがあり、これはautodiscover.clintoncountyin.govmail2.clintoncountyin.govのエントリからわかります。Exchangeは、Outlook Web App(OWA)でMFAが有効になっている場合でも、デフォルトで複数の認証方法が有効になっています。一般的に、最初の良い推測は、OutlookがExchangeに接続するために使用する/ewsエンドポイントにアクセスすることです。Webブラウザでhttps://autodiscover.clintoncountyin.gov/ewsにアクセスして、アクセス可能かどうかを確認してください。

次のように見える場合、NTLM認証が有効になっています:

Exchange EWS NTLM

これは防御者にとって問題です。なぜなら、OWAでMFAが有効になっている場合でも、攻撃者がExchangeサーバーに直接パスワードのブルートフォースを試みることができることを意味するためです。後ほど、内部側でTHC-Hydraのようなパスワード推測ユーティリティを使用しますが、NTLMReconを使用して、上記で手動で見つけたようにNTLM認証が有効になっているWebサイトに対して外部から使用できます。

5: 侵害データの識別

ログオンは、脆弱性を悪用するよりも常に単純な攻撃ベクトルです。単一要素認証がインターネットに公開されている場合、一定の割合のユーザーが弱い、デフォルト、または再利用されたパスワードを持っています。MFA疲労SIMスワップなどの攻撃がまだあるため、MFAは万能薬ではありませんが、攻撃者のハードルを大幅に上げます。

ラボ1.1: 侵害へのクレデンシャルスタッフィングで取り上げたように、公開されている侵害データを使用して、対象企業のユーザーの潜在的な認証情報を識別できます。ラボ1.1で詳細に取り上げたばかりなので、このセクションは簡潔にしますが、対象企業に対して偵察を実行するときは、このアプローチを念頭に置いてください。

6: ソーシャルメディア偵察

十分に大きな企業の場合、仕事についてソーシャルメディアに投稿する従業員が多くいることがよくあります。これには、LinkedIn、x.com(以前のTwitter)、Facebook、Instagram、その他が含まれます。従業員は、新規採用、昇進、賞、イベント、その他の企業ニュースについて投稿することがあります。これにより、ソーシャルエンジニアリング攻撃に役立つ情報や、企業の文化と価値観に関する洞察が得られます。

特に有用な情報源の1つはLinkedInです。従業員は職位、部門、場所をリストすることがよくあります。これにより、ソーシャルエンジニアリング攻撃の潜在的な対象を特定し、企業の組織構造を理解し、ユーザー名や電子メールアドレスが実名に基づいていることが多いため、単に名前のリストとしても役立ちます。

このセクションを締めくくるために、従業員が従業員バッジを見せびらかしているソーシャルメディア投稿の例をいくつか指摘します。これは対面でのソーシャルエンジニアリング攻撃に役立つ可能性があります。x.comからのいくつかの例を次に示します:

低解像度の写真であっても、バッジフォーマットを再作成して説得力のある偽のバッジを作成するのに十分な要素を見分けることができることがよくあります。対面でのソーシャルエンジニアリングは実際の攻撃者にとって比較的珍しいものですが、侵入テスト中に物理的なセキュリティ制御の重要性を示すための効果的な方法でもあります。

まとめ

このラボでは、公開されている情報を使用して対象組織の攻撃対象領域をマッピングするためのさまざまな偵察技術を調査しました。MXレコードとGetUserRealmエンドポイントを使用して企業への電子メールフローを識別し、BGPデータを通じて組織が所有する公開IPスペースを発見し、DNS TXTレコードを介してサードパーティサービスを明らかにし、証明書透明性ログを通じて企業のWebサイトを見つけ、インターネットに公開されている単一要素認証を識別しました。

これらの偵察技術は、攻撃者が対象システムに直接触れることなく重要なインテリジェンスを収集する方法を示しています。これらの方法を理解することで、侵入テスターは潜在的なエントリポイントを識別し、防御者はインフラストラクチャに関するどの情報が公開されているかを認識できます。

最初のスコープコールの前であっても、これらの技術を独自の対象組織に対して実行することをお勧めします。請求可能な時間ではないかもしれませんが、エンゲージメントが開始されたらすぐに活動できるようになります。

ボーナス: ランダムなS&P 500企業の選択

ランダムなS&P 500企業に対してこれらの技術を練習したい場合は、GitHub Gistを使用して、次のPowerShellスクリプトを使用してランダムに1つを選択できます:

コマンド

$sp500 = Invoke-WebRequest -Uri "https://gist.githubusercontent.com/jeffmcjunkin/5ba71910b41765ba5a88e241d33f6d81/raw/7dcf999f3cb11fdab3c18836214052828d7dcff5/sp500_companies.csv" | Select-Object -ExpandProperty Content | ConvertFrom-Csv
$randomCompany = $sp500 | Get-Random
$randomCompany | Format-List

想定される結果

PS C:\Users\sec560> $sp500 = Invoke-WebRequest -Uri "https://gist.githubusercontent.com/jeffmcjunkin/5ba71910b41765ba5a88e241d33f6d81/raw/7dcf999f3cb11fdab3c18836214052828d7dcff5/sp500_companies.csv" | Select-Object -ExpandProperty Content | ConvertFrom-Csv
PS C:\Users\sec560> $randomCompany = $sp500 | Get-Random
PS C:\Users\sec560> $randomCompany | Format-List

Company Name        : Cigna Corporation
Company Domain Name : cigna.com

出力は当然異なりますが、Company Domain Nameフィールドを使用して、このラボで取り上げた技術を練習できます。