検索
  • サポート

  • Secure the Enterprise

  • Secure the Cloud

  • Secure the Future
  • その他
  • サポート

LabyREnthセキュリティ コンテスト: ドキュメント種目の解答

Richard Wartell, Tyler Halfpop and Jeff White 8 22, 2016 at 03:00 午後

※本記事は2016年8月18日に米国で掲載されたブログ記事の抄訳を基にしています。

脅威リサーチャーのコミュニティの皆様には、Unit 42セキュリティ コンテスト、LabyREnthにご参加いただきありがとうございました。コンテストが終了いたしましたので、いよいよ各種目の解答を発表いたします。週に1種目ずつ解答を公開しまし。まず、ドキュメント種目から始めます。

ドキュメント1課題: まあ、どうしてこんなマクロをクリックしちゃったの?

課題作成者: Tyler Halfpop @0xtyh

課題の文書を開くと、数多くの文書マルウェアによく見られるこの画像が目に入ります。また、マクロを有効にするためのプロンプトが画面上部に表示されます。

マクロを有効にし、FakeNetのようなツールを実行すると、次のような出力が得られます。

興味深いことに、これはRFC 1918が定めるプライベートIPアドレス10.1.133.7からevil.exeをダウンロードしようとしています。Wordのマクロ ビューアーを使うか、decalageのolevbaのようなツールでマクロをダンプすることでマクロを調べることができます。

見てお分かりのように、このコードは文字列を符号化し難読化していますが、きれいに整理すれば次のようにきわめて簡単なものになります。

さて、ここまでくるとFakeNetで目にしたものとこれが合致することが分かります。検索しているURLはbase64で表現されているようです。復号化してみると、次のようになります。

アスキー16進数文字列のように見えますが、バイト列に変換してもこれはと思えるものが得られません。しかし、このURIにはもうひとつ別の1バイトx58が含まれています(xで始まるのでこのように仮定します)。このバイトを使って16進数文字列を復号化してみるとキーが得られます。ここで、問題のURLからキーを表示するPythonスクリプトの例をご紹介します。

ドキュメント2課題: あなたにドキュメントのクラッキングができるかな?

課題作成者: Tyler Halfpop @0xtyh

この課題用に“CrackDoc.doc”という名前のファイルが与えられています。このファイルを開くと‘UsersForm1’という画面が現れ‘Key’の値を入力するよう言われます。

入力したキーの値が合っていないと“U can do. Try harder…”というメッセージとともに可愛らしい犬の写真が表示されます。

裏に隠れているマクロを見てみようとするとVBProjectがパスワードで保護されていることが分かります。

これを回避するため、使い慣れているバイナリ エディタに文書を読み込ませ、文字列‘DPB=”’を‘DPX=”’に変更してみます。

ファイルが再度開かれ、この文字列が構文解析される場合にこれが正しいキーではないことが分かるよう文書を改変したわけです。しかしそれでもプロジェクトをロードさせることができるので‘DPB’による保護の回避が可能になります。

一度プロジェクトに入ってしまえば‘Project Properties’(プロジェクトのプロパティ)に行き、‘Protection’(保護)タブの‘Lock project for viewing’(プロジェクト表示のロック)のチェックを外してパスワードを永久に削除することができます。

コードを調べてみると‘UserForm1’という名前のフォームと‘NewMacros’というモジュールが見つかります。このフォーム上を右クリックして‘View Code’に行くと、私たちの関心事だった隠れたマクロが表示されるので、キーを構成するバイト配列が直ちに見つかります。

Xがバイト文字列に等しければ勝利のメッセージを手にすることが分かります。値Xは入力を受け渡す‘suchcrypto’関数および4代目‘General Vidal’に由来します。この関数をリバース エンジニアリングするのはさほど難しくなさそうです。

しかし、この課題に打ち勝つために、さらに怠惰な手段をとることにしました。マクロにはマクロで対抗することに決めました。潜在する値の配列を作成し、それらをそれぞれ‘suchcrypto’関数に渡すことで、何がキーで、どのタイミングで一致する値が見つかり、次へ移動するかを簡単に列挙できます。

配列全体とNotepad++を使用して、数回、上矢印キーをたたき、最後のバイトを削除してから、結果をコピーして貼り付け、その後、再度実行する小さいマクロを記録しました。一緒に残すものは、‘UserForm()’マクロにコピーできる‘For’ループの長いリストです。

次で始まります。

次で終わります。

ここで、Enterキーを数回たたくと、キーがキー自体を解除し、私たちはそれを見ることができます。


PAN{L4$t_Night_@f@iry_Vizited_M3}

文書3課題: Adobe、pls

課題作成者: Curtis Carmony @c1fe

抽出されたJavascriptをデバッグすることから始めました。デコードされたYouTube URLを見つけたときはかなり扱いやすいと感じました。それは、Rick Astleyが、決して諦めないと歌い始めるまででした。まさに、Curtisはリックロールされました! それがあなた方も解き放してくれると良いのですが。

次に、Cerberoプロファイラのさまざまなストリームに目を通し、最初のオブジェクト内で16進付きのJSタグを見つけました。

それを16進エディタに入力し、キーをテストして課題を完了しました。

文書4課題: マクロは楽しい。

課題作成者: Curtis Carmony @c1fe

この課題では、ファイル“fun.docm”が提供され、拡張子は、私たちがマクロを楽しむ(楽しまない)ことをほのめかしています。

文書を開くと、繰り返し再生される愛らしいエアホーン サウンドとともに色が変わる大きなフォントで、テキスト“MORE MACROS = MORE FUN”が表示されます。VBプロジェクトを開こうとすると、パスワード保護されていることが明らかになるため、最初はこれをバイパスする必要があります。

Docファイルの新しい形式はアーカイブであるため、7zでそれを開き、‘\word\’ディレクトリの下で‘vbaProject.bin’ファイルを探します。これを16進エディタで開き、文字列‘DPB=”’を検索して、その後、それを単に‘DPX=”’などに変更して、ファイルを保存します。ここで、ファイルをロードすると、無効なキーが含まれるプロジェクトに関するエラーが、強制的にそのロードを続行するためのオプションとともに表示されます。この時点で、VBプロジェクトにアクセスして、Project Properties (プロジェクトのプロパティ)に移動し、‘Lock project for viewing’(プロジェクトの表示をロック)を選択解除して、パスワード保護を削除できます。

プロジェクトを見ると、1つのモジュール‘Z1yiWeP’とともに、2つのフォーム‘NpuXrzgq’と‘U8pblvDZuAh8Gy’があることがわかります。メインの文書とモジュールのコードを見ると、多数の関数があるように見えます。そこで、それをデバッグすることから始め、それが何を実行しようとしているのか感じ取ります。最初の‘Document_Open()’関数の後に‘Stop’を挿入すると、プロセスが開始します。

マクロの中身に取り組む前に、4つの‘VBcomponents’が存在するかどうかを確認すると、それが3つしかない場合は問題があることを発見できます。‘zkceuV405Q5LjUp587OYxTI7OR9zTyPdvz8k’関数をステップごとに実行すると、これが、埋め込みのWAVファイルをデコードし、文書内のテキストを変更しながらエアホーンを連続して再生する一連のイベントであることがわかります。

最初のチェックで引っ掛からないようにコードを調整すると、マクロの‘XiqyXdC809pP5esSrC633ag92w0x6otQylY0’関数にたどり着きます。ここではすぐに‘zoycqKJvqznJMeMpHe7Z61xYJfLLmbObxBVy’を呼び出し、関数名を列挙し始めます。

関数‘BqNFmKCS7cTPv9XNFOd2mCLrdqCfmdNm6HBz’は、関数名をデコードし、文書のさまざまなフィールドに基づいてバイト値を変更するbase-64の処理を開始します。

関数は両方ともそれぞれ44と32の1バイトXoRで、これらは‘U8pblvDZuAh8GY.Label1.Caption’のbase-64デコード値(‘xRgWTqWr7ipEjFBfESrOiaYFu9i9Jml3Q171’)と比較されます。

これに基づいて、すべての関数名を取得し、それぞれをbase64デコードし、44と32でそのバイトをXoRするによって一致を素早く判定できます。

この時点で興味深い関数名を入手しています。マクロを強制実行してこの値を使用し、デバッグを継続できます。

‘XiqyXdC809pP5esSrC633ag92w0x6otQylY0’関数に戻ると、この関数は別の関数名‘d7KRoSK5UEDh35jJNkj0TtcJjOIbmBZlyCql’を取得し、これを対応する名前とともに別の関数に渡します。その関数は‘d7KRoSK5UEDh35jJNkj0TtcJjOIbmBZlyCql’をbase64デコードして配列にします。次に関数‘XWn5TNdoykQb0QoitVEG7sLOxIRSi97XmqmM’に移動すると、ここには‘MsgBox’呼び出しがあり、フラグを印刷することが想定されます。

表示される関数を確認すると、VBProject内のフォームのプロパティ値に対してさらにXoRおよび比較のチェックが行われます。

この時点で、‘d7KRoSK5UEDh35jJNkj0TtcJjOIbmBZlyCql’関数の名前が144と85によってXoRされ、その結果が取得され、‘XJCR/DogZt7bduvvusJgAQu6QX9DmtKN+bZB’のbase-64デコード値に対してXoRされ、一致するかどうかが確認されます。一致しません。

パズルの2つの部分を知っているため、元々の2番目の関数名が何であるべきかを解くためにそこから後方に作業できます。‘XJCR’文字列および‘yRQa’文字列をbase-64デコードし、これらを同時にXoRしてからそれぞれの結果のバイトを144と85でXoRします。

文書5課題: EXCEL.EXEは単なるCALC.EXEではない

課題作成者: Curtis Carmony@c1fe

Crackmeを含むExcel文書が与えられています。キーをテストしようとすると、小癪なポップアップが表示され、間違っている、Excelを閉じ、calc.exeを起動するように命令します。

文書のバックアップを開き、マクロを表示すると、文書を閉じる非常に簡単なマクロが1つだけあります。いたずらがあることは明らかです。

下部のシートを右クリックしてunhide(再表示)をクリックすると、secretという非表示シートが表示されます。

secretシートに移動し、「Show Formulas(数式の表示)」をクリックし、フォントを黒にすると、セルにExcelの関数が表示されます。見えないsuper secretシートを表す興味深そうな1つのセルがA14にあります。

マクロを変更してすべてのシートが表示されるようにし、ボタンをクリックしました。

さらに多くの数式を含むsuper secretシートが表示されます。Excelに非表示シートとスーパー非表示シートを作成できることは非常に驚くべきことです。

「Show Formulas(数式の表示)」のチェックを外し、F13から連結関数を除くすべてを削除すると、Excelは数式を出力します。

=CONCATENATE(D7,A5,C5,B4,E20,B6,A8,B8,A12,B10,E10,C9,B13,D12,C11,B16,A25,A18,B19,
C20,B21,B2,D23,B24,E4,B26,D16,A21,C14,A16)

このキーを元のファイルに入力すると、勝利のメッセージが表示され、EXCELULATORになったことがわかります。Excelで成し遂げたすべてのことは非常に驚くべくことです。

以下にコメントを入力してこれらの課題について感じたことを共有しましょう。他の脅威リサーチャーがこれらの課題をどのように解決したかも確認してください。

文書1課題

·    https://dbheise.github.io/2016/08/15/2016-Palo-Alto-Labyrenth-CTF-Doc-01/

·    https://github.com/uafio/git/blob/master/scripts/labyREnth-2016/labyrenth-2016-docs-1.py

文書2課題

·    https://dbheise.github.io/2016/08/15/2016-Palo-Alto-Labyrenth-CTF-Doc-02/

·    https://github.com/uafio/git/blob/master/scripts/labyREnth-2016/labyrenth-2016-docs-2.py

文書3課題

·    https://dbheise.github.io/2016/08/15/2016-Palo-Alto-Labyrenth-CTF-Doc-03/

·    https://github.com/uafio/git/blob/master/scripts/labyREnth-2016/labyrenth-2016-docs-3.txt

文書4課題

·    https://dbheise.github.io/2016/08/15/2016-Palo-Alto-Labyrenth-CTF-Doc-04/

·    https://github.com/uafio/git/blob/master/scripts/labyREnth-2016/labyrenth-2016-docs-4.py

文書5課題

·    https://dbheise.github.io/2016/08/15/2016-Palo-Alto-Labyrenth-CTF-Doc-05/

·    https://github.com/uafio/git/blob/master/scripts/labyREnth-2016/labyrenth-2016-docs-5.txt

 


 

ニュース

Wireshark によるパケット解析講座 2

前回は Wiresharkの列表示のカスタマイズ方法について見ていきました。本稿では脅威インテリジェンスの調査上便利なフィルタリングの設定方法について説明します。
January 20, 2019

ニュース

Wireshark によるパケット解析講座 3

前回までではWiresharkの列表示のカスタマイズ方法と表示フィルタの式について見ていきました。本稿ではトラフィックから感染ないし侵害を受けたホスト名やユーザーを特定する方法について説明します。
March 31, 2019

ニュース

Wireshark によるパケット解析講座 4

セキュリティ専門家は、不審なアクティビティのパケット キャプチャ(pcap)をレビューする際、より詳しく調べるために、オブジェクトをpcapからエクスポートしなければならない場合があります。
July 12, 2019

ニュース

Wireshark によるパケット解析講座 1

Wireshark は無料で利用できるプロトコル アナライザです。 Wireshark を使うとネットワーク トラフィックをキャプチャしたり、キャプチャしたパケットを表示させることができます。そこでパロアルトネットワークスの脅威インテリジェンス調査チーム Unit42 に所属するアナリストが、Wireshark を使ってマルウェア検体が生成したトラフィックをレビューするさいに利用している便利な使いかたをご紹介していきます。
January 17, 2019

ニュース

DNSトンネリング: 攻撃者はDNSをどう悪用するのか

悪意のある攻撃者は、ドメインネームサービス(DNS)をコマンド&コントロール(C2)用通信チャネルとして悪用してきました。またこのプロトコルはこのほかに、データを漏出させる目的でも悪用されてきました。DNS の悪用はC2に「ハートビート」接続のために通信するという用途からさらに広がっており、攻撃者はここ数年、悪意のあるデータやペイロードをDNS経由で被害者のシステムに侵入させる用途にもDNSを使っています。本稿では、DNSを悪用したデータ侵入・漏出の種類、方法、使用方法を紹介し、その防御メカニズムへの指針を示します。
March 18, 2019

ニュース

Cortex XDRの紹介

パロアルトネットワークスは、セキュリティの最先端を行く3つのイノベーションを発表しました。これらのイノベーションによって、セキュリティ業界の変革に挑もうとしています。まず1つ目は、ディテクション(検知)・調査・レスポンスSaaSアプリケーションCortex XDRです。これは、高度な攻撃をディテクションして阻止するだけでなく、将来のサイバー攻撃に備えて防御機能を絶えず進化させ、セキュリティ運用をサポートするSaaS型のアプリケーションです。
April 14, 2019

メールニュース購読

イベントへの限定招待、Unit 42の脅威アラート、サイバーセキュリティのヒントなどを配信します。

このフォームを送信すると、利用規約とプライバシーに関する声明に同意したことになります 。
Subscription Reward

リソース

  • 会社概要
  • イベント
  • リソースセンター
  • プレスリリース
  • Unit42 ブログ
  • ブログ
  • JAPAN LIVE COMMUNITY
  • Tech Docs
  • キャリア
  • お問い合わせ
  • Sitemap

法定通知

  • プライバシー
  • 個人情報保護基本方針
  • 利用規約

アカウント

  • 購読の管理
  • パートナーログイン
  • パートナーになる
脆弱性の報告
  • USA (ENGLISH)
  • AUSTRALIA (ENGLISH)
  • BRAZIL (PORTUGUÉS)
  • CANADA (ENGLISH)
  • CHINA (简体中文)
  • FRANCE (FRANÇAIS)
  • GERMANY (DEUTSCH)
  • INDIA (ENGLISH)
  • ITALY (ITALIANO)
  • JAPAN (日本語)
  • KOREA (한국어)
  • LATIN AMERICA (ESPAÑOL)
  • MEXICO (ESPAÑOL)
  • SINGAPORE (ENGLISH)
  • SPAIN (ESPAÑOL)
  • TAIWAN (繁體中文)
  • UK (ENGLISH)
  • Facebook
  • Linkedin
  • Twitter
  • Youtube

© 2020 Palo Alto Networks, Inc. All rights reserved.