August 2021 Archives

Golden SAML part2

gamzatti
Vote 0 Votes

ここしばらく、研究仲間と以前のブログで書いたGolden SAML attackの検証をしてました。

攻撃の手順は細かく書いてくれているので、きちんと読んで手順を飛ばさずやれば再現できるのですが、理解に結構時間がかかりました。

前提条件として、攻撃者がADFSのローカル管理者権限を得ている前提で、ざっくり以下の流れになります。

1)SAMLトークンに署名、暗号化している暗号鍵と証明書を窃取
2)1)で窃取した情報を用いてドメイン管理者のSAMLトークンを生成(これがGolden SAML)
3)2)で生成したSAMLトークンを用いてGraph API(AzureやM365を操作するためのAPI)用のアクセストークンを入手
4)3)で入手したGraph API用のアクセストークンを用いて、アプリケーションに対して、メールの読み書きのパーミッションを追加。
5)Graph APIの実行に必要な認証情報(シークレット)を登録
6)SAMLトークンおよび5)で取得したシークレットを用いて メールを読む APIを実行するためのアクセストークンを取得
7)5)と6)を用いて、メールを読むGraph APIを実行し、ユーザのメールボックスにアクセス

攻撃の一連の流れを理解しようとすると、SAML、Graph API、OAuth、APIのアクセス許可など色んなことを勉強する必要がありそうです。

詳しくは書かないですが、簡単に言うと、Golden TicketのTGTと同様に、一度SAMLトークンが発行されると、有効期限内は信頼されたものとして扱われて、それを元にGraph APIのアクセス権限が得られてしまうところがポイントかなと思います。
Azure ADはポータルが他要素認証なので、Golden Ticketよりも更に数多くの手順を踏む必要がありますし、
Golden Ticket程何でもできるわけではなく、ある程度できることに制限はありそうですが。。

要するに、ドメコンに加えて、ADFSサーバもちゃんと守ることが大切ということですね。

Azure ADはまだまだ私も勉強中なので、今後アップデートしていきたいと思います。
大人になっても、日々勉強ですね..(汗)

アンチエイジングだと思って頑張ります笑

久しぶりにJava関連の脆弱性を調査する機会がありました。
WebLogicのRCEの脆弱性です。動作するPoCも出ています。
Commons Collectionの脆弱性のような、デシリアライズに起因するオブジェクトインジェクションの脆弱性になります。
攻撃はweblogicの7001ポート宛に行われますので、7001ポートがインターネットに空いていないかは要チェックです。

この脆弱性の興味深いところは、Commons Collectionの脆弱性のように、デシリアライズ時にRCEするのではなく、
オブジェクトインジェクションをした後に、RCEをするための別の不正なオブジェクトを攻撃者のサーバからロードするというところです。
詳しくは書かないですが、脆弱性があって悪用されるプログラムの作り上、デシリアライズ時にRCEまで実行することが難しいので、
オブジェクトの生成時に外部リソースにアクセスしに行くようなクラスを悪用して、RCE用のプログラムをロードさせるイメージです。
ちなみに外部リソースからオブジェクトをロードさせる方法はJNDIインジェクションという手法が取られています。
この脆弱性に限らず、数年前からblack hatなどでも講演されている手法になります。

今回も、またデシリアライズ、リフレクション(動的にメソッドなどを実行すること)、RMI(リモートホスト上のJavaプログラム実行)などが

組み合わせて悪用されていますが、まぁ危なそうな機能ではありますよね。。

脆弱性を調査していると毎回思いますが、発見してPoCまで作る人って(ハッカーを含めて)天才ですね。。
よくこんなこと思いつくなぁ。。と感心してしまいます^^;
脆弱性の詳細が知りたい方はこちらの記事を読んでみてください

中国語ですが、最近のWeb翻訳はすごいですね。日本語に訳すとちょっと読みづらかったので、英語に訳した方が読みやすいかもしれません。

About this Archive

This page is an archive of entries from August 2021 listed from newest to oldest.

July 2021 is the previous archive.

September 2021 is the next archive.

Find recent content on the main index or look in the archives to find all content.