ひび割れた! KringleCon 5 のハイライト: ゴールデン リング

ひび割れた! KringleCon 5 のハイライト: ゴールデン リング

2022 SANS Holiday Hack Challenge で学習と楽しみが融合 – 北極でクラッカージャックに乗って、グリンチャムの悪い計画を阻止し、XNUMX つのゴールデン リングを取り戻します

に参加するのは今年が初めてです SANS ホリデー ハック チャレンジ そしてそれは爆発でした。 簡単なものから難しいものまで、一連の 16 の課題を通じて、疑わしいネットワーク トラフィックと PowerShell ログの分析を練習し、 Suricata ルール、から抜け出す Dockerコンテナ、漏洩したキーを見つけて悪用する GitLab CI/CD パイプラインAWS ユーザー、実施 XML 外部エンティティ攻撃、スマートコントラクトをハッキングして購入する 変更不可のトークン.

この経験の最大の利点は、新しいツールとテクノロジーを紹介してくれたことで、サイバーセキュリティの知識がさらに広がりました。 ここでは、課題を解決する際のハイライトをいくつか紹介します。

利き手

すべての参加者は、北極に設定されたブラウザー内のビデオ ゲーム環境をナビゲートするためのアバターを受け取ります。

割れた! KringleCon 5 のハイライト: Golden Rings PlatoBlockchain Data Intelligence。垂直検索。あい。

オリエンテーション中に、ゲームが課題を完了するために KringleCoins を授与するために使用し、最後の課題でスマート コントラクトをハックするために使用する暗号通貨ウォレットを受け取ります。 興味深いことに、ゲームはすべての KringleCoin トランザクションを Ethereum ブロックチェーンで追跡します。つまり、進行状況の完全な記録がこのブロックチェーンにも保存されます。

ゲームの最初のリングに。

1.トールキンリング

割れた! KringleCon 5 のハイライト: Golden Rings PlatoBlockchain Data Intelligence。垂直検索。あい。

トールキンの指輪を見つけるには、ログ分析の筋肉を鍛える必要がありました。

Wireshark フィッシング

まず、Wireshark を使用して、提供された .pcap サーバーを明らかにしたファイル adv.epostoday[.]英国 ファイルのダウンロード Ref_Sept24-2020.zip コンピュータに:

割れた! KringleCon 5 のハイライト: Golden Rings PlatoBlockchain Data Intelligence。垂直検索。あい。

ZIPファイルの中をのぞくと、実行可能ファイルが見つかりました Ref_Sept24-2020.scr これにより、ESET Endpoint Security で XNUMX つの検出がトリガーされました: バット/ランナー.ES & ジェネリック.TAGTBG. このマルウェアは、最終的に、メモリ内で実行される悪意のある実行可能ファイルにつながります。 config.dll ESETによって検出されます 高度なメモリ スキャナー as Win32/Dridex.DD.

Windowsイベントログ

次に、提供された .evtx イベント ビューアーで PowerShell ログを含むファイル。 PowerShell のログを分析するツールは他にもありますが、攻撃者が生活圏外のバイナリを使用してレーダーの下に留まる方法を知っている場合、防御者はオペレーティング システムが提供するネイティブ ツールにも精通している必要があります。

ログには 10,434 件のイベントが含まれていたため、イベントを日付別にグループ化し、[検索] アクションを実行して、 $ キャラクター。 PowerShell では、 $ 作成および参照に使用されます variables. 24 年 2022 月 XNUMX 日に、攻撃者が次のスクリプトを実行したときに攻撃が発生していることがわかりました。

割れた! KringleCon 5 のハイライト: Golden Rings PlatoBlockchain Data Intelligence。垂直検索。あい。

攻撃者が秘密のレシピを見つけて、秘密の材料を切り替えたようです 蜂蜜 for 魚油、そして新しいレシピファイルを作成しました。 これにより、リモート PowerShell コマンドの実行を表す ID 4104 のイベントがトリガーされました。 そこで、この ID でイベントをフィルター処理して、追加の悪意のあるイベントをより迅速に見つけられるようにしました。

Suricata レガッタ

Tolkien Ring の最後の演習は、Dridex の侵入についてネットワーク トラフィックを監視するための XNUMX つの Suricata ルールを作成することでした。

alert dns $HOME_NET any -> any any (msg:"既知の不正な DNS ルックアップ、Dridex 感染の可能性"; dns.query; content:"adv.epostoday.uk"; nocase; sid:1; rev:1;)

alert http 192.185.57.242 any <> any any (msg:「疑わしい接続を調査してください。Dridex 感染の可能性があります」; sid:2; rev:1;)

alert tls any any -> any any (msg:"不正な証明書の調査、Dridex 感染の可能性"; tls.cert_subject; content:"CN=heardbellith.Icanwepeh.nagoya"; sid:3; rev:1;)

alert http any any -> any any (msg:"疑わしい JavaScript 関数、Dridex 感染の可能性"; file_data; content:"let byteCharacters = atob"; sid:4; rev:1;)

これらのルールは、次の DNS ルックアップを順番にキャッチします。 adv.epostoday[.]英国、IPアドレスへの接続 192.185.57[。]242、悪意のあるサーバーの使用 hadbellith.Icanwepeh[.]名古屋 一般名 (CN) TLS 証明書での使用、および JavaScript の使用 atob() base64 でエンコードされたデータを含むバイナリ文字列をクライアントでデコードする関数。

これらの XNUMX つの課題を完了すると、Tolkien Ring を獲得できました。

割れた! KringleCon 5 のハイライト: Golden Rings PlatoBlockchain Data Intelligence。垂直検索。あい。

XNUMXつ目のリングへ。

2.エルフェンリング

割れた! KringleCon 5 のハイライト: Golden Rings PlatoBlockchain Data Intelligence。垂直検索。あい。

Elfen Ring の最も顕著な課題は、Prison Escape と Jolly CI/CD でした。

刑務所エスケープ

Prison Escape は、Docker コンテナー内のユーザーに root 権限を付与することは、ホスト システムで root 権限を付与するのと同じくらい有効であることを強く思い出させてくれました。 挑戦は、コンテナから抜け出すことでした。 まあ、あなたがルートになっているときは簡単にできます:

割れた! KringleCon 5 のハイライト: Golden Rings PlatoBlockchain Data Intelligence。垂直検索。あい。

root ユーザーとして、デバイスのパーティション テーブルを一覧表示し、ホスト ファイルシステムをマウントして、ホストへのフル アクセスを許可しました。 これで、キーを検索できるようになりました。このキーは、ゲーム内のヒントで明らかになったように、ホーム ディレクトリにあるはずです。

割れた! KringleCon 5 のハイライト: Golden Rings PlatoBlockchain Data Intelligence。垂直検索。あい。

陽気な CI/CD

それは迅速でしたが、Jolly CI/CD を理解するのに最も時間がかかりました。 まず、HTTP 経由でクローンを作成するための Git リポジトリが提供されました。

割れた! KringleCon 5 のハイライト: Golden Rings PlatoBlockchain Data Intelligence。垂直検索。あい。

URLから、リポジトリの名前が wordpress.flag.net.内部、ということで、リポジトリに移動して、WordPress の Web サイトを見つけました。 Web サイトが公開されているかどうかを確認しました。

割れた! KringleCon 5 のハイライト: Golden Rings PlatoBlockchain Data Intelligence。垂直検索。あい。

うん、ウェブサイトは機能していた。 ソースコードの履歴にキーの漏洩がないか気になりました。 はいの場合、編集内容をソース コードにプッシュできるはずです。 だから私は走った gitログ:

割れた! KringleCon 5 のハイライト: Golden Rings PlatoBlockchain Data Intelligence。垂直検索。あい。

コミットメッセージから、それは コミット フープを修正するためにアセットを追加した後に作成されました。 フープ前のコミットを確認する時間です。

割れた! KringleCon 5 のハイライト: Golden Rings PlatoBlockchain Data Intelligence。垂直検索。あい。

素晴らしい、見つけた .ssh キーを持つディレクトリ。 これらのキーをコピーして、SSH エージェントと Git ユーザーを構成し、これらのキーの所有者になりすますことができるかどうかを確認してみましょう。

割れた! KringleCon 5 のハイライト: Golden Rings PlatoBlockchain Data Intelligence。垂直検索。あい。

メイン ブランチに戻り、ソース コードに些細な変更をプッシュできるかどうかをテストします (nano を使用して、ファイルの XNUMX つにスペースを追加しただけです)。

割れた! KringleCon 5 のハイライト: Golden Rings PlatoBlockchain Data Intelligence。垂直検索。あい。

というわけで、WordPress 開発者の XNUMX 人になりすましてチャレンジの最初の部分を達成しましたが、Web サイトは私のプッシュ後も機能していましたか?

割れた! KringleCon 5 のハイライト: Golden Rings PlatoBlockchain Data Intelligence。垂直検索。あい。

Web サイトがポート 8080 にリダイレクトされるようになったため、プッシュによって何かが変わりました。

これまで、課題を完了するための鍵となるはずの課題の CI/CD 部分を無視していました。 リポジトリには .gitlab-ci.yml GitLab CI/CD パイプラインの構成を提供するファイル。 リポジトリにプッシュするたびに、CI/CD システムが作動し、 GitLab ランナー この YML ファイル内のスクリプトを実行します。 これは、GitLab Runner がインストールされているサーバーでリモート コード実行を実現するのと同じくらい良いことだと思いました。

よく見ると、 rsync Git リポジトリのすべてのファイルを、Web サイトが提供されていた Web サーバー上のディレクトリにコピーするスクリプト。 とりあえず使ってみた rsync すべてのファイルを Web サーバーから Git リポジトリにコピーしてデータ フローを逆にしますが、成功しません。

多くの仮説テストの後、最終的に画期的な洞察を得ました。それは、WordPress Web サイトを「修正」しようとしたり、ビルド システムを介して悪意のあるスクリプトを実行したりする代わりに、Web サーバーから情報を漏えいする Web サイトを提供することです。 中身 index.phpを (リポジトリの最上位にあります)、WordPress Web サイトをロードするコードをコメント アウトし、Web サーバーをプローブする PHP コマンドを実行できます。

実際、PHP でシェル コマンドを実行することもできます。 見つけた passthru() 簡単に働きました。

In index.phpを、私は使用しました // XNUMX行をコメントアウトして、追加しました passthru('ls -la /'); 最後の行に。 これにより、Web サーバーのルート ディレクトリにあるすべてのファイルを一覧表示する Web サイトが作成されます。

割れた! KringleCon 5 のハイライト: Golden Rings PlatoBlockchain Data Intelligence。垂直検索。あい。

次に、この変更を Git リポジトリにプッシュすると、GitLab CI/CD システムが Web サイトを更新してくれました。

割れた! KringleCon 5 のハイライト: Golden Rings PlatoBlockchain Data Intelligence。垂直検索。あい。

ああ、エルフェンリングが入っているに違いない フラグ.txt! 前の手順を繰り返しましたが、今回は パススルー('猫/flag.txt'); 次にウェブサイトをリクエストしたときにエルフェンリングを明らかにしました。

割れた! KringleCon 5 のハイライト: Golden Rings PlatoBlockchain Data Intelligence。垂直検索。あい。

XNUMXつ目のリングへ。

3. ウェブリング

割れた! KringleCon 5 のハイライト: Golden Rings PlatoBlockchain Data Intelligence。垂直検索。あい。

私にとって最も楽しいチャレンジは Open Boria Mine Door でしたが、Glamtariel's Fountain は謎を提示しながら面白かったです。

ボリア鉱山の扉を開く

Open Boria Mine Door では、入力検証または コンテンツセキュリティポリシー パイプの色を一致させるなど、ピン間の入口パイプと出口パイプを接続します。 ほとんどのピンでは、HTML を使用して接続文字「o」のリストを作成しました。 これが私の最終的な解決策です:

割れた! KringleCon 5 のハイライト: Golden Rings PlatoBlockchain Data Intelligence。垂直検索。あい。

ピン1

ピン 1 の検証は行われなかったので、HTML とインライン CSS の単純な問題でした。

ピン2

ピン 2 には、JavaScript を許可しないがインライン CSS を許可する Content Security Policy があったため、私の方法では問題ありませんでした。

ピン3

ピン 3 には、CSS を許可しないがインライン JavaScript を許可するコンテンツ セキュリティ ポリシーがあったため、代わりに JavaScript を使用してスタイルを変更しました。

ピン4

ピン 4 にはコンテンツ セキュリティ ポリシーがありませんでしたが、クライアント側に、二重引用符、単一引用符、左山かっこ、および右山かっこを削除する sanitizeInput 関数がありました。 ここでのトリックは、この関数がフォームの送信によってトリガーされたのではなく、 オンブラー イベント。 つまり、マウスを入力フィールドから離すと、 オンブラー イベント、入力のサニタイズ。 解決策は、を押してフォームを送信することでした 入力します 入力フィールドの境界の外にマウスカーソルを移動しないように注意しながら、キーを押します。

ピン5

ピン5は同じでした サニタイズ入力 機能し、インライン CSS を禁止するがインライン JavaScript を許可するコンテンツ セキュリティ ポリシーと共にバイパスします。

ピン6

最後に、ピン 6 は入力をサニタイズしませんでしたが、インライン CSS と JavaScript の両方を禁止するより厳格なコンテンツ セキュリティ ポリシーを使用しました。 私の解決策は、非推奨の HTML を使用して必要なスタイルを取得し、リストの代わりにテーブルを使用することでした。

グラムタリエルの泉

グラムタリエルの泉 練習の機会でした XML 外部エンティティ (XXE) 攻撃. カスタム XML エンティティを定義する方法を理解し、サーバーからファイルを要求するエンティティを定義し、そのエンティティをペイロードとして HTTP 要求に追加することは難しくありませんでした。 最も困難な部分は、サーバーがリークするファイルへのパスを推測するためにゲーム内の謎を解明することでした. 金の指輪の場所を明らかにする画期的なリクエストは次のとおりです。

割れた! KringleCon 5 のハイライト: Golden Rings PlatoBlockchain Data Intelligence。垂直検索。あい。

割れた! KringleCon 5 のハイライト: Golden Rings PlatoBlockchain Data Intelligence。垂直検索。あい。

割れた! KringleCon 5 のハイライト: Golden Rings PlatoBlockchain Data Intelligence。垂直検索。あい。

この挑戦から学んだ教訓を XNUMX つ紹介します。 まず、 コンテンツ タイプ コンバーター の拡張 げっぷ JSON ペイロードを XML に変換します。 次に、XXE ペイロードを別のタグに配置してみてください。 &xxe; のペイロード 必須タイプ の代わりにタグ 画像ドロップ タグ。

XNUMXつ目のリングへ。

4.クラウドリング

割れた! KringleCon 5 のハイライト: Golden Rings PlatoBlockchain Data Intelligence。垂直検索。あい。

Cloud Ring でのプレイは、アマゾン ウェブ サービス (AWS) コマンド ライン インターフェース (CLI) への初心者の進出でした。

この一連の課題のハイライトは、 トリュフホッグ Git リポジトリで AWS 資格情報を検索し、それらを利用して AWS ユーザーとして認証します。 この位置に到達した攻撃者は使用できます AWS 私は コマンドを使用して、ユーザーに適用されるポリシーをクエリし、どのクラウド アセットにアクセスして悪用できるかを確認します。

XNUMXつ目のリングへ。

5. バーニング・リング・オブ・ファイア

割れた! KringleCon 5 のハイライト: Golden Rings PlatoBlockchain Data Intelligence。垂直検索。あい。

この一連の課題で最も有益だったのは、 マークルツリー スマートコントラクトを活用し、 非代替トークン (NFT) を購入するためのプレセール リストに登録する. ここでの課題は、私のウォレット アドレスとマークル ツリーのルート値とともに、私がプレセール リストに含まれていることを証明する証明値を見つけることでした。

証明値を提供しようとして数回失敗した後、提供されたルート値の証明値を計算するために使用されるすべての葉値を知る方法がなかったため、証明値を把握できないことに気付きました。 有効なマークル ツリーを提供できるように、ルート値を変更する必要がありました。

使い方 QPetabyte 教授のツール、ウォレットアドレスと BSRS_nft ゲームの Ethereum ブロックチェーンのブロック XNUMX で、ゲーム内の Blockchain Explorer を使用して見つけたスマート コントラクトです。 このツールは、このツリーのルート値とウォレット アドレスの証明値を生成しました。 次に、Burp を使用してサーバーへのリクエストをインターセプトし、有効なマークル ツリーを送信できるようにデフォルトのルート値を変更しました。 これが私の NFTスポーク 100 KringleCoins の固定価格で購入:

割れた! KringleCon 5 のハイライト: Golden Rings PlatoBlockchain Data Intelligence。垂直検索。あい。

本当に醜い標本。

ファイナル

割れた! KringleCon 5 のハイライト: Golden Rings PlatoBlockchain Data Intelligence。垂直検索。あい。

SANS Holiday Hack Challenge の主催者には、新しい方法で私の心を広げ、サイバーセキュリティの知識を深める手助けをしていただき、心から感謝しています。 来年のチャレンジを楽しみにしているだけでなく、このチャレンジの 2020 年版と 2021 年版も試してみたいと思っています。 以前にこのチャレンジに参加したことがない場合は、これらのハイライトが興味をそそられたことを願っています.

タイムスタンプ:

より多くの 私たちはセキュリティを生きる