スキル0から1年間でマルウェア解析を習得した学習方法

みなさん、こんちにはmです。

今回は私が1年の期間でマルウェア解析のスキル0から習得するまでに取り組んだ方法をまとめました。

 

初めに開始時のスキルや1年間でかけたコスト、スケジュールなどを共有します。

 

開始時のスキルなど

  • 表層解析、動的解析、静的解析の違いもあまり理解していない
  • プログラミングはPythonを学び始めた程度
  • 低レイヤーの知識なし
  • アセンブリの知識なし
  • Windowsアプリケーション開発の経験なし
  • SOCアナリストとしてブルーチームの知識は多少
  • 脆弱性診断の経験も(深くはないが)多少
  • エンジニア歴7、8ヶ月目くらい

 

ざっくりですが、このようにマルウェア解析に絡んでくる知識はほぼ0でした。

 

学習にかけたトータルコスト

  • 書籍:約5万円
  • オンライン教材:12万円

 

約17万円近く1年間に使いましたが、お金で直接スキルは買えないので必要経費です。

なお、オンライン教材の12万円については会社に購入してもらったので実質実費は5万円です。

以下が過去Xに投稿したマルウェア解析に関する書籍一覧です。
ここに載せ忘れましたが、インサイドWindows 上・下やアセンブラ関連の書籍がもう1つあります。 

 

スケジュール

 

ブログのタイトルには「マルウェア解析を習得した」と記載していますが、人によって「習得」のレベルが異なると思います。

そのため、今回私は以下の2つがクリアできれば「スキル習得」としています。

  • 海外のマルウェア解析の認定資格である「Zero2Automated」に合格
  • 野良の複数の解析妨害が含まれたランサムウェア解析を一人でできるようになる

 

Zero2Automatedとは

Zero2Automatedは海外のマルウェア解析の学習コンテンツです。

このコンテンツの特徴は静的解析・リバースエンジニアリングに特化しており、
中・上級者向けであるため高度なスキルを学ぶことが可能です。

 

学習を完了させることで最後に認定試験を受けることができます。

試験用の検体が提供されるため、14日間で解析からレポート作成まで行い合格することで認定証をもらうことができます。

コンテンツの説明から合格までは会社のブログに投稿しているため、ここでは詳細は割愛させていただきます。

www.leon-tec.co.jp

 

スケジュール詳細

0 ~ 1ヶ月目

はじめにマルウェア解析の手法から学び始めました。

大分類で表層解析・動的解析・静的解析があることを知り、一番難易度が低い表層解析から学ぶことを開始しました。

 

オンライン上に転がっている情報から表層解析で求められている情報を集め、
Malware Bazaarから実際に検体を落として何種類か解析しました。

bazaar.abuse.ch

表層解析は難しいものではないため、特に時間もかからずに済みました。

 

1 ~ 2ヶ月目

この期間はOffice製品のマクロ機能を悪用したマルウェアの解析技術を学びました。
時期的にも、まだEmotetなどが定期的に話題になっていたため、このスキルは早い段階で習得する必要がありました。

まずMalware Bazaarからエクセルのマルウェアをダウンロードし、習得した表層解析を実施しました。
そのあとは時間をかけてマクロの挙動を把握しました。
また、この時に初めてデバッグ作業を行い動的に処理を追って解析しました。

プログラミング経験がある方であればデバッグは身近なものだと思いますが、私の場合初めてのデバッグはエクセル上でVBAデバッグすることでした。

ここでは難読化されたコードの処理を追ったりC2サーバーの特定など解析から明らかできました。

2 ~ 5ヶ月目

次はWindowsで動作するPE形式のマルウェアを解析することに取り組みました。
ただし、その前に基礎を学ばなければいけません。

そのためこの期間では、「C言語のソースがどのようにコンパイルされるのか」「アセンブリとは」「リバースエンジニアリングとは」などを学ぶことに専念しました。

このタイミングでは、以下の書籍を読み理解を深めました。

最初にリバースエンジニアリングバイブルから読み始めた記憶がありますが、
色々読んだ結果、最初に読むめき本は「解析魔法少女美咲ちゃん マジカル・オープン!」が分かりやすく良かったと思います。

また、マルウェア解析の知識を深めるという意味では、MBSD社さんのマルウェア解析のブログを読み漁ったり、マルウェアの教科書を読み静的解析ではどのような観点で解析するのかなど一般的な情報を取り入れました。

www.mbsd.jp

5 ~ 8ヶ月

この期間のメインは「Practical Malware Analysis」という海外の教材を用いてハンズオン形式で解析スキルを学びました。

Amazon | Practical Malware Analysis: The Hands-On Guide to Dissecting  Malicious Software | Sikorski, Michael, Honig, Andrew | Design Tools &  Techniques

https://www.amazon.co.jp/Practical-Malware-Analysis-Hands-Dissecting-ebook/dp/B007ED2XDS/ref=as_li_ss_tl?s=english-books&ie=UTF8&qid=1488534854&sr=1-1&keywords=practical+malware+analysis&linkCode=sl1&tag=recommend09-22&linkId=50802bff977867931d6d26de43d0d03e

この本は情報自体少し古いですが、基礎を知るには十分すぎるものでした。
全てのチャプターで説明されている解析手順を実際に解析環境で再現することに注力して、理解を深めました。

この本は個人的にかなりオススメです。

また、先ほどのMBSD社さんのブログを参考に同じ検体をダウンロードし、ブログで解説されている機能を見つけたり解析妨害を突破したり・・ということにも取り組みました。

8 ~ 10ヶ月

eLearn SecurityからeCMAPというマルウェア解析の資格がでていることを知ります。
また、INEのサブスクライブに登録することで、eCMAPの資格学習ができるということで年間プランで会社に契約してもらいました。

ine.com

 

以下、公式サイトからコピペしてきた項目一覧です。

-Learn about IA-32 CPU Architecture

-Entire module dedicated to x64 bit assembly

-Practical display and dive into the TLS method

-Understand how malware uses Windows APIs to achieve their malicious activity

-Understand and bypass Anti-Reversing techniques

-Perform full manual unpacking on packed executables

-Debug samples using different debuggers

-Learn different methods to locate the important algorithms


このコンテンツの良かった点は実際のマルウェア「WannaCry」 などを解析付きで手順を学ぶことができることです。
また、アンチデバッグやアンチリバースエンジニアリングの回避テクニックも学べます。

ただし、解析の深いところまでは入っていかないので基本的なインジェクションテクニックを学べるところで終わってしまいます。
教材ではProcess Hollowingは含まれていた記憶はありますが、early bird injectionのようなテクニックは含まれていませんでした。

そんなこんなで用意されているコンテンツを全て終えたので、試験に挑もうとeCMAPの試験代を購入しようとしたところ、資格廃止に伴い購入&受験することはできなくなりました。

そのタイミングでZero2Automatedの学習も開始し始めました。

こちらは当時2万4000円ほどで会社に購入してもらいました。

courses.zero2auto.com
10 ~ 12ヶ月

Zero2Automatedの認定試験に合格すべく、まずは用意されている教材に取り組みました。
ただし、Zero2Automatedは7割ほどが文字ではなく動画による解説です。また、一部で字幕翻訳できない動画もあったため動画で行われている内容から何をしているか考えて理解する必要がありました。
恐らくその辺りの理由で価格が安く押さえられているものと思われます。

ある程度学習し終えたところで、一度Malware Bazaarで野良のランサムウェアをダウンロードして解析作業に取り組みました。
この時点で解析妨害も回避するテクニックも身につけていたため、約1ヶ月ほどで存在する機能の洗い出しを完了させました。

野良のランサムウェアを1から解析できたということで、Zero2Automatedの認定試験に挑戦しました。
試験は理論と実技の2パターンに分かれており、先に理論に合格できたら実技試験の案内がきます。

実技試験はお盆休みを活用して、がっつり試験に取り組みました。
初めの1-2日は作業が思うように進みませんでしたが、ある問題を解決できたことによりその後はスムーズに取り組むことができ、トータル10日ほどでレポート作成まで完了しました。


その結果無事に1発で合格することができました。



まとめ

この1年間のスケジュールで私は以下の2つを達成することができました。

 

まだまだ、私自身マルウェア解析者としては未熟でスタート地点にいるようなものですが、最低限の知識は身につけることができました。
今回ご紹介したスケジュールが必ずしも人にオススメできるかというと決してそうではない(休みなど大きく潰して学習したため)ため、結論自分のペースで勉強するのが良いとは思います。

最後まで読んでいただきありがとうございました。

 

365日毎日TryHackMeで学習した話

こんにちは@the_art_of_nerdです。

気が向いたらブログを書くような人間なので、不定期ではありますが何らかの技術ブログを目指しています。

 

今回はTryHackMeという海外のセキュリティ学習サイトで学習連続記録365日を達成した時のことについて、以下の構成でブログにまとめたいと思います。

 

  • TryHackMeとは
  • TryhackMeを始めたきっかけ
  • 365日連続の目標を立てた理由
  • 365日連続続けた結果

 

TryHackMeとは

「TryHackMe」は凄く簡単に説明すると、セキュリティをハンズオン形式で学べる海外の学習サイトです。

攻撃(Offensive)・防御(Defensive)の両方に関する学習コンテンツが充実しているので、幅広い分野についての基本的な知識を得ることが可能です。

もちろん、このサイトだけで特定の分野を全くの初心者からエキスパートまで学ぶことは難しいですが、気になる分野を学び始めるための出発点としてTryHackMeで基本的な知識を学んだ後、それを基に他のリソースでより深く学んでいくといった活用法が考えられます。


また、TryHackMeではラボ環境が提供されているため、自身での環境構築に手間取ることなく学習に取り組むことが可能です。初学者には特にオススメのサイトです。

「TryHackMe」についてさらに詳しく知りたい方は、「のみぞう」さんが初心者向けに分かりやすく紹介している記事を参考にしてみてください。

yawaraka-sec.com

 

TryHackMeを始めたきっかけ

私は現在、SOCアナリスト(Tier1、Tier2)の業務をメインとして、その他マルウェア解析とツール開発を行なっています。


私自身、元々3年前までセキュリティ・IT業界未経験の人間でした。

最終学歴も高校卒業で、卒業後もITとは全く別業界で仕事をしていました。

たまたま業界を変える機会があったため、全くの未経験でしたがセキュリティエンジニアになりたいという思いがあり、現在私が勤めている会社へ連絡したところ「まずは営業としてどうですか?」ということで、セキュリティ業界に足を踏み入れました。

 

その後、営業を行ないつつ、セキュリティの知識を学び知識を蓄えていたところ、社内のSOCポジションが人手不足となった際に、部署移動の話が舞い降りてきました。(元々エンジニアとして働きたいという思いは伝えていたため)


営業職を約8ヶ月経験した後、セキュリティエンジニアのポジションに就くことができました(当時はまだエンジニアと称して良いレベルではありませんでした)。初期の業務は主にSOCのTier 1を担当し、余裕のある時間ではPortSwiggerアカデミーでWeb脆弱性診断の知識を深めたり、nmapなどを使用したネットワーク診断の理解を深めていきました。

ただ、社内にはSOCに詳しいメンバーがおらず、SOCの学習コンテンツは何を学べば良いかわからない状態でした。そんな時、約4ヶ月後に職場の同僚からTryHackMeの存在を教えてもらいました。自分の学習スタイルとして、TryHackMeは防御側のコンテンツも充実していたため、主に防御側の学習に力を入れつつ、息抜きに攻撃側やCTFの問題に挑戦していきました。

(100%まで進めていましたが、コンテンツが更新されて99%に減少していました・・・)

 

365日連続の目標を立てた理由

365日連続で学習するという目標を立てたのは、大まかに以下のような理由からです。

  • 毎日学習すれば知識の向上につながる(はず)と考えた

  • 365日連続学習のバッジが欲しかった

  • 継続力が身につくと思った

  • TryHackMeのレベルとランキングが上がるのが楽しかった

 

■毎日学習すれば知識の向上につながる(はず)と考えた

セキュリティという分野は基礎があってこそだと私は思っています。その基礎を確立しながらセキュリティを学び続けるためには、とにかく学習し続ける必要があると考え、それならばこの機会に365日連続で学習しようと思い立ちました。また、同じ会社の他のエンジニアと比べて当時の私のスキルは明らかに劣っていました(実際、スキルはほぼゼロでした)。その差を少しでも縮めたいという思いがありました。

 

■365日連続学習のバッチが欲しかった

TryHackMeではバッジ制度が導入されています。

各バッジの獲得条件はその種類によりますが、バッジを得たとしても具体的な報酬が得られるわけではないため、主にコレクションの要素となります。

毎日TryHackMeで何かを学習し続けることで、Streak系のバッジを得ることができます。これは11問でも正解すればActivityとして記録され、365日連続で続ければGETすることができます。

 

なお、Streak系のバッジは以下のような段階があります。

  • 7日連続
  • 30日連続

  • 90日連続
  • 180日連続
  • 365日連続

 

■継続力が身に付くと思った

これはメンタル面で自身に自信をつけるためでした。

また、「長所は何ですか?」と聞かれた際に「継続力です」と回答でき、その経験と乖離がないようにするためでもありました。

 

■TryHackMeのレベルとランキングが上がっていくのが楽しかった

TryHackMeでは、各学習コンテンツごとに難易度が設定されています。

問題の難易度が高ければ高いほど、解答時に得られるポイントが高くなります。そして、自分の保有ポイントと世界や国内のランキングをLeaderboardsというページから確認することができます。自分が学習した分だけTryHackMe上の自身のアカウントが成長していく感覚が楽しく、結構夢中になりました。

 

365日連続続けた結果

365日連続学習の成果として、無事に365 Day Streakバッチを獲得することができました!

 

以下の画像は、ダッシュボードで確認できるStreak数が365に達したときのものです。

 

このバッチを獲得するためのコツは、どんなに仕事が忙しくても、体調が悪くても、旅行の予定があっても、眠くても、いかなる用事があっても常に頭の片隅「TryhackMe」を置き続けることですw

気合いがあれば誰でも獲得できますが、結構気合いが必要です。

1日でもサボると積み重ねてきたStreak数が0に戻ってしまいます。

 

気持ち面で意識することは上記の内容ですが、実際はそのような場合(あまり時間が割けない時)に手軽に回答できる問題を残しておくことです。休日には少し難しい問題などを解き、平日などの時間が限られている時には基礎問題などを解いてバランスを取ることが大事です。

 

また、当然のことながらTryHackMe内のレベルとポイントも上昇し、ポイント数で国内8位まで上り詰めることができました。

(念の為、他の方はマスキングしています)

2023年1月当時の記録

知識面ではこの一年間で、Web脆弱性診断方法、ネットワーク診断方法、ペネトレーションテストの手法、WazuhSplunkのようなSIEM製品の操作方法、防御側で使用するフレームワークやツールの理解、マルウェア解析の基礎など、幅広い知識とスキルを身につけることができました。

 

最後に

現在はOffensive Security社のコンテンツやZero2Automatedの学習に取り組んでいるため、TryHackMeからは一時的に離れています。しかし、広範囲の知識を得るためには、TryHackMeは非常に良いコンテンツだと感じています。これからセキュリティを始めたい方、セキュリティの新しい分野を少し触れてみたい方には特にオススメです。


最後まで読んでくださってありがとうございました。

 

 

 

新たに登場したランサムグループNovaについて

こんにちは。

今日のブログでは、新興のランサムウェアグループについての調査結果をご紹介したいと思います。

最近、ランサムウェアグループの動向を追跡している中で、新たに浮上してきたと思われる一組織を見つけました。

このグループは「Nova」と名乗っており、ウェブ検索を行っても具体的な情報がほとんど見つからないことから、彼らが新たに登場した可能性が高いと推察します。

 

検体の挙動について

Novaが運用するランサムウェアは、一度実行されると、「ファイルの暗号化」「ログの削除」「アイコンの変更」「壁紙の変更」といった一連の操作を行います。

 

暗号化されたファイルのプロパティ情報です。

 

暗号化が完了すると、以下のコマンドが実行され、「自分自身の削除」「端末の再起動」「Windowsイベントログの消去」が順に行われます。

timeoutl /t 10del /f "C:¥Users¥user¥Desktop¥<自分自身>" shutdown /r powershell "wevtutil el | Foreach-Object {wevtutil cl "$_"}"

 

システムが再起動すると、脅迫文が表示されます。これにはユニークIDと、ランサムウェアグループとの通信手段が記載されています。

 

脅迫文からは、このグループが特定の政治的背景を持たず、金儲けを目的として行動していることが伺えます。

[どのような保証がありますか?
我々は、世界のどこからでも非政治的に動機づけられた国際的なグループであり、我々はあなたのお金以外の何も気にしません。
あなたのネットワークからいくつかの暗号化されたファイルを送信することができ、我々は自由のためにそれを解読します。
私たちは評判を大切にします。もし私たちが仕事と義務を果たさなければ、誰も私たちにお金を払ってくれません。それは私たちの利益になりません。
当社の復号化ソフトウェアはすべて完璧にテストされており、お客様のデータを復号化します。また、問題が発生した場合のサポートも提供いたします。

 

さらに注目すべき点として、このグループは通常のTor経由のチャットページではなく、Telegramまたは電子メールでのコミュニケーションを指定しています。

[+] How to cantact with us?
     1. Download and install Telegram Messenger (https://telegram.org).
     2. Please contact with the ID https://t.me/<ランサムグループ名> 
     3. Or you can contact us via email at <*****>@onionmail.org

 

 

 

ランサムグループとのやり取り

今回はTelegramを介してランサムウェアグループとのコミュニケーションを試み、以下の情報を取得することができました。

  • 身代金の費用(値引きは可能か)
  • 支払い期限
  • ビットコインアドレス
  • 取引履歴

 

まず、脅迫文に記載されていたTelegramIDを調べたところ、該当するアカウントが一つ見つかりました。

 

脅迫文で提供されたIDを用いて復号化ツールの取得を依頼すると、わずか2分後に返信がありました。

調査は日本時間の深夜に行なっていたため、レスポンスも早いかなと思っていましたが、想像をよりも早かったです。

 

 

交渉の初期段階で、ウェブサイトのURLまたは会社の住所が要求されました。ウェブサイトは存在しないと伝えると、身代金額が提示されました。

提示された額は30,000ドルで、7/8現在のレート(1ドル=142円)で換算すると約4,260,000円、つまり約430万円でした。

 

以前に調査した「Black Basta」グループが要求した1700万ドル(約24億円)と比較すると、Novaの要求額は一見リアルな範囲に見えます。

 

身代金の値引きが可能かどうかを探るために、1/3の額を提示してみましたが

 

これは受け入れられませんでした。

しかし、半額の約210万円までなら値引き可能との返答がありました。

これは、Novaが新興のグループであり、実績作りや資金獲得のために値引きに応じる可能性があることが考えられます。

 

もう少し価格交渉を行いお互いが希望する中間を提示してみました。

 

結果的に交渉は失敗しましたw(少し呆れられた様子)

また、支払い期限は2日間と設定されていました。

 

値引きが可能だったことから、次は支払い期限の延長を交渉したところ、最大で3日まで猶予してもらうことができました。

ただし、220万円の身代金を支払う場合は3日以内に支払う必要があり、元の価格の430万円であれば支払い期限は設定されていないようです。

 

最後に、ビットコインアドレスの取得を試みましたが、支払いのタイミングになるまで教えてもらえませんでした。

何度もチャットで交渉を重ね、最初の連絡から約1時間後にようやくアドレスを取得することができました。

 

 

BTCウォレットの追跡情報について

今回は、ビットコイントランザクション履歴をチェックするために「chainFlyer」というサイトを使用しました。

chainflyer.bitflyer.jp

 

以下がその結果です。

該当アドレスでは、合計33回の取引が確認されました。

 

このウォレットで初めて記録された取引は今年の131日で、現在のレートで約93,000円のビットコインが受け取られていました。

したがって、この検体が出現するよりも前から、おそらく他のランサムウェアの身代金として使用されていた可能性が推測されます。

 

次に、2月には受け取り金額が増加し、約100万円を受け取っています。

これが受け取られてからわずか1時間後には、すべて別のアドレスに送金されています。

 

その2日後には約600万円を受け取り、これを3回に分けて別のアドレスへと移動させています。

 

最も大きな取引は311日に行われ、その時には約1400万円が受け取られています。

先ほどと同様に、このビットコインも直ぐに別のアドレスへ全額送金されていました。

 

なお、これらの送金はすべて同一のアドレスへ行われており、そのアドレスでは合計で1,777回の取引が行われていました。

さらに、本日(7/8)もこのアドレスでビットコインの取引が活発に行われていることが確認できました。

 

以上が今回のビットコインウォレットの追跡情報となります。

取引履歴を確認して分かったこととして、まず、取引金額が一定ではないという点です。これは、被害者の規模や特性に応じて身代金の金額を調節している可能性を示唆しています。具体的には、大規模な企業からはより高額な身代金を要求し、小規模な企業や個人からはより低額な身代金を要求している可能性が考えられます。

 

次に、ビットコインの送金速度が非常に速いことです。これは、このランサムウェアグループがお金を最優先に考えていると考える根拠となります。ほとんどの場合、ビットコインがウォレットに入金されるとすぐに別のアドレスに送金されています。これは、ランサムウェアグループが身代金をすばやく安全な場所に移動させることで、自身のリスクを最小限に抑えようとしていると解釈できます。

 

終わり

今回の記事では、「Nova」という新興のランサムウェアグループに焦点を当てて分析しました。このグループは、特定の政治的な意図を持たずに行動し、単純に利益追求が目的であることから、彼らの攻撃対象はインフラ施設や医療機関を含む可能性があります。

身代金の要求については、現実的な範囲内で設定されており、交渉を通じてさらに減額させることも可能でした。しかし、このグループが企業の情報、特に住所やウェブサイトを確認する行動パターンが見られたことから、要求額はターゲットとなる企業の規模や特性に応じて変動することが推察されます。ビットコインによる支払い履歴からも、この傾向が示唆されています。

今回のブログはここまでになります。
最後まで読んでいただき、ありがとうございました。

 

 

 

 

 

 

OSDA試験の裏側: 予想外のトラブルとその乗り越え方

こんにちは。

今回は技術的な内容ではなく、私がOSDAを受験し合格した際のエピソードについて少しまとめたいと思います。

具体的なOSDAの受験記については会社のブログに掲載していますので、興味がある方は以下のリンクからぜひご覧ください。

www.leon-tec.co.jp

 

 

本題

2023年3月3日にOffsec社のOSDA(Offsec Defense Analyst)を受験し、無事に1回目で合格することができましたが、試験中になんと4回もトラブルに見舞われました。今回はその内容について共有したいと思います。

トラブルの詳細に移る前に、OSDAの試験形式について軽く説明しておきます。受験者はVPNを経由して試験機のSIEMにアクセスします。SIEMで収集されるログは、従業員の端末のログやWebサーバーのログなど、様々なものです。

監視対象の環境に対して攻撃フェーズを実行すると、SIEMには何らかのセキュリティインシデントのログが追加されます。

端的に説明すると、この試験ではその攻撃をSIEMから探し出し、「何が起きたか」「原因は何か」「どの程度の影響がでたか」などをレポートにまとめることが求められます。

 

それでは、試験の概要をざっくりと説明したところで、今回の本題に戻りたいと思います。


以下、試験中に起きた4つのトラブルを詳しく説明します。

  1. 攻撃フェーズを実行後も、インシデントに関するログが追加されない(1回目)
  2. 攻撃フェーズを実行後も、インシデントに関するログが追加されない(2回目)
  3. SIEMの操作ができなくなる
  4. レポートの提出を拒否された

 

この4つのトラブルを文字に起こしてみると、思うところがありますね・・・w

とはいえ、合格できたのでまぁまぁという感じです。

もし、この記事を読んでいる方がOSDAを受験される際に、同じような事象に遭遇した場合は、私が試した方法を参考にしてみてください。

 

それでは、1つ目のトラブルについて詳しく説明します。

1. 攻撃フェーズを実行後も、インシデントに関するログが追加されない(1回目)

まずは1回目のトラブルです。

試験は日本時間の9時30分から始まりましたが、事前確認に時間がかかり、少し遅れてスタートしました。

最初の攻撃フェーズを実行した後、SIEMからインシデントを探しましたが、一向に「これだ!」と思えるログが見つかりませんでした。OSDAの試験の攻撃フェーズは一連の攻撃が連なっています。そのため、侵入フェーズから始まると考えていましたが、何も見つけることができませんでした。

 

この時点で「実力足りなかったかなぁ〜・・・」とショックを受けましたが、攻撃フェーズは10段階あるので、次の攻撃フェーズを実行して調査を続行続けることにしました。

 

 

しかし。その結果も、フェーズ1と同じく何も見つけることができませんでした。



「終わった〜・・・」と思いましたが、最後のフェーズまで実行すれば何か見つかるかも知れないと思い、攻撃フェーズの実行と調査を続けました。しかし、結局全てのフェーズで何も見つけることができませんでした。

受験前にはSOC-200のLABを全てクリアし、内容も理解していたので、「これはおかしいのでは?」と感じました。そこで、試験監督(受験中は画面共有で監視されます)に、「全フェーズ実行したが、何も見つからないという状況は異常では?」とチャットで問い合わせました。
もちろん、自分の実力不足で見つけられない可能性もありましたが、それでも恥を忍んで質問しました。

試験監督からの返信は、「Offsecの技術チームが調査するので、試験環境は全てリセットされます」とのことでしたので、調査を依頼しました。

約30分後、「試験環境に問題が確認されましたので、環境を再構築しました」と連絡がありました。

この時点で試験開始からすでに3時間が経過していたので、その時間分を補填してもらい、再度試験を開始しました。

 

 

2. 攻撃フェーズを実行後も、インシデントに関するログが追加されない(2回目)

このようなトラブルも仕方がないと、気を取り直して試験を再開しました。

「問題は解決した」との連絡を受けて、安心して攻撃フェーズを再度実行しました。

しかし・・・・

 

 

結果は同じ、何も見つかりませんでした。

 

 

Offsecの方から「問題が解決した」と言われていたので、そうだろうと思いました。しかし、どの攻撃フェーズを実行しても、前回と同じく何も見つけられませんでした。

一応、最後の攻撃フェーズまで実行した後に、再びチャットで問い合わせました。すると、再度調査が行われることになりました。

 

調査の結果、バグは解決しておらず、SIEMにインシデントのログが追加されない状態でした。再度、調査と復旧にかかった時間は補填してもらいましたが、試験開始からすでに6時間も過ぎていました。

 

当初の試験時間は23時間45分だったのに、既に30時間に延びてしまっていました。
しかし、"三度目の正直"という言葉通り、3回目の攻撃フェーズでは無事にインシデントのログを発見することができ、問題が解決されました。

 

 

3. SIEMの操作ができなくなる

ここでは3度目のトラブルについて話ます。

2回目のトラブル解決後、順調に試験を進めていき、夜中の4時まで作業を続けました。
この段階で調査が約80%完了していたので、一度休憩を取ることにしました。試験監督に「ちょっと寝ますが、何か対応が必要ですか?」とチャットで確認したところ、「そのままで大丈夫です」との返信があり、仮眠を取ることにしました。

約4時間睡眠した後、試験を再開しようとしたところ、SIEMで何か操作をすると全てエラー表示が出てしまい、試験を続行することができなくなっていました。まだ未実行のフェーズもあったため、再度試験監督にチャットで状況を説明したところ、「試験環境はリセットされますが、それでもよろしいですか?」と返信がありました。

 

正直、リセット以外の選択肢はなかったのでので了承しました。しかし。これによりこれまで調査してきたフェーズを遡って調査することができなくなりました。

 

リセット後、調査中だったフェーズまで進めてくれた状態で再開しましたが、どのフェーズを何時何分に実行していたか記録していたメモが意味をなさなくなりました。結局、何分にどのフェーズが実行されたかを自分で調査する必要がありました。

それでも、何はともあれ試験を再開できたのは良かったのですが、試験時間の補填について試験監督から何も連絡がなかったので、「調査と修正に2時間かかりましたが、それに対する補填はありますか?」と質問したところ、「1時間追加しました」との返信がありました。

 

 

 

「2時間失ったのに1時間しか補填されないの・・・?????」

 

 

 

これには納得がいきませんでしたので、再度試験監督に状況を説明しました。それにより、1時間補填されました。ただ、こちらから積極的に問い合わせしなければ対応してくれない状況であったため、いい勉強になりました。

 

 

 

4.  レポートの提出を拒否された

試験中には様々なトラブルが発生しましたが、何とかレポートを完成させることができました。しかし、英文の確認に時間がかかり、提出締め切りの15分前までになってしました。レポートは指定の形式で圧縮し、指定されたサイトからアップロードする必要があります。無事に圧縮などを済ませて10分前にアップロードしたところ・・・

 

 

「受付時間を過ぎたのでレポートは受け付けません。」

 

 

この表示に私の心情は

 

 

「??????????????」

 

 

その原因はすぐに予想できました。「試験時間が3回延長されたことが、レポート提出期限に反映されていなかった」という状況が考えられました。ただ、一応レポートを時間内に作成して提出した証拠を残したかったので、Offsecのサポート宛にメールを送りました。

 

内容は「提出期限が反映されていないためアップロードできず、ひとまずメール経由でレポートを送ります」という旨を記載し、レポートを添付したところ・・・

 

 

 

「時間を過ぎているため、レポートは受け付けれません。再試験はポータルから申し込んでください。」

 

 

 

流石にビックリの返信でした。

試験で起きたトラブルを乗り越え、レポートまで作成した後、スコアが足りずに不合格なら理解できます。しかし、レポートすら見てもらえずに不合格というのは納得できませんでした。そのため、OffsecのDiscordに参加していたので連絡を入れ、メンターやサポーターに事情を伝えました。

その結果、Offsecでは今回の事情を社内で確認し、レポートのアップロード期限を30分延長してくれました。これにより、無事にレポートを提出することができました。

 


その後

10日ほどして合格の知らせが届き、無事にOSDAに合格することができました。

おそらく日本人初のOSDA合格者であるため、非常に嬉しい結果となりました。

OSDA_Certified

 

今回の試験で学んだこととしては、同じようなトラブルに遭遇した場合の対応策を以下にまとめておきます。

 

  • トラブル起きたら迷わずチャットで質問する
  • 念のため最後のフェーズまで実行して調査を行い質問する
  • 時間の補填がない場合は、自分からから積極的に提案を行う
  • メールでの問い合わせには期待できないため、OffsecのDiscordで関係者に直接連絡を取る

 

私が試験を受けてから約1ヶ月後に、新規でOSDAの試験を受けることができなくなっていました。これはおそらく、さまざまなのバグ対応などが行われたからだと思います。
そのため、私が経験したようなトラブルは今後起きにくいと考えられます。しかし、何が起きるかわからないので、OSDAやOffsecの試験を受ける方は注意してください。

長文になりましたが、最後まで読んでいただきありがとうございました。

ProcWatchを使用したマルウェア解析の例

ProcWatchの紹介

マルウェア解析する際、そのマルウェアがどのようなコマンドを実行するのか、プロセスを立ち上げるのか動的解析やリバースを行い特定します。

 

今回はそのようなシーンで(個人的に)使用している「ProcWatch」というツールをご紹介します。

個人的にUIもシンプルで起動するだけで使えるため結構気に入っています。

また、Flarer VMを導入している場合はデフォルトで入っているツールになっています。(そんな記憶があります・・)

 

入手先

SysAnalyzer Installer

http://sandsprite.com/iDef/SysAnalyzer/

 

github.com

 

 

使い方

立ち上げると、その後に実行されたプロセスが履歴として残ります。

Process HackerやProcess EXの場合は現在立ち上がっているプロセスは閲覧できますが、一瞬で消えてしまうプロセスは見落としてしまう可能性があるため、このProcWatchも同時に立ち上げ監視することをオススメします。

 

今回使用したマルウェアの情報

 

マルウェアを実行して少し待機すると以下の結果が表示されました。

これらの結果から、rundll32.exeの不審なプロセスが立ち上がっていたり、別のマルウェアが実行されていることが分かります。

コマンドラインを確認すると3つのコマンドが実行されていました。

1

"C:\Windows\System32\rundll32.exe" "C:\Program Files (x86)\Windows Photo Viewer\PhotoViewer.dll", ImageView_Fullscreen C:\Users\m\AppData\Local\Temp\Onayla.jpg 

 

2

C:\Windows\system32\cmd.exe /c ""C:\Users\m\AppData\Local\Temp\ihbpji.cmd""

 

3

C:\Windows\system32\cmd.exe /c ""C:\Users\m\AppData\Local\Temp\eumpe.bat""

 

そして最後に「ijbkbo.exe  」という実行可能ファイルが実行されていました。

 C:\Users\m\AppData\Local\Temp\ijbkbo.exe  

 

ProcWatchによって、マルウェアが別のマルウェアをTemp配下にドロップして実行していることが確認できました。マルウェアの作りによっては、削除されずにそのまま残っている可能性がありますが、大抵の場合は実行後すぐに自身を削除するマルウェアが多く、基本的に残っている可能性は低いです。

 

Tempフォルダを確認すると削除されることなく残っていました。

 

せっかくなのでドロップされたファイルの中を軽く確認してみます。

 

  • enumpe.cmd

idjder.sfx.exeというファイルに謎の引数を渡して実行するバッチファイル

 

  • enumpe.bat

ijbkbo.sfx.exeというファイルに謎の引数を渡して実行するバッチファイル

 

  • idjder.exe

DIEの結果からメインのマルウェアと似たような構造?

 

  • idjder.sfx.exe

実行するとパスワード入力を求められる

DIEの結果からメインのマルウェアと似たような構造?

 

  • ijbkbo.sfx.exe

実行するとパスワード入力を求められる

 

 

  • ijbkbo.exe

DIEの結果から.NET製のマルウェアと思われる。

 

sfxと名がついたファイルはどちらも実行するとパスワード入力を求めてきたため、動的デバッグすることでパスワードを確認することが出来そうですね。(長くなりそうなので別の機会にでも)

 

また、最後に実行されていた.NET製のマルウェアはdnSpyかdotpeekを使用すれば、どのような機能を有しているのか特定することが可能です。

 

このような流れでマルウェアの種類によってProcWatchを使用することで、解析をスムーズに進めることも可能です。

 

最後までこの記事を読んでくださってありがとうございました。

少しでも読まれた方の参考になれば幸いですが・・・

inno setupを使用したマルウェアの解析

inno setupとの出会い

先日Malware bazaarに転がっている検体を落としてきてDIEに読み込ませたところ、初めて見る結果が表示されました。

inno setupというインストーラーが検知されました。

 

inno setupとは公式の説明を引用すると、Windows用のフリーインストーラのようです。

Inno Setup is free installer for Windows programs by Jordan Russell and Martijn Laan. First introduced in 1997, Inno Setup today rivals and even surpasses many commercial installers in feature set and stability.

jrsoftware.org

 

 

実際にマルウェアデバッグしながら挙動を確認していたところ、特徴的な文字列が見つかりました。

 

何やらセットアップに関する文字列であることが分かったため、全文をコピーして整形した結果が以下です。

inno setupのオプションに関するものが確認できました。

The Setup program accepts optional command line parameters...
/HELP, /? - Shows this information...
/SP- - Disables the prompt at the beginning of Setup...
/SILENT, /VERYSILENT - Instructs Setup to be silent or very silent...
/SUPPRESSMSGBOXES - Instructs Setup to suppress message boxes...
/LOG - Causes Setup to create a log file in the user's TEMP directory...
/LOG="filename" - Same as /LOG, except it allows you to specify a fixed path/filename to use for the log file...
/NOCANCEL - Prevents the user from cancelling during the installation process...
/NORESTART - Prevents Setup from restarting the system following a successful installation or after a Preparing to Install failure that requests a restart...
/RESTARTEXITCODE=exit code - Specifies a custom exit code that Setup is to return when the system needs to be restarted...
/CLOSEAPPLICATIONS - Instructs Setup to close applications using files that need to be updated...
/NOCLOSEAPPLICATIONS - Prevents Setup from closing applications using files that need to be updated...
/RESTARTAPPLICATIONS - Instructs Setup to restart applications...
/NORESTARTAPPLICATIONS - Prevents Setup from restarting applications...
/LOADINF="filename" - Instructs Setup to load the settings from the specified file after having checked the command line...
/SAVEINF="filename" - Instructs Setup to save installation settings to the specified file...
/LANG=language - Specifies the internal name of the language to use...
/DIR="x:\dirname" - Overrides the default directory name...
/GROUP="folder name" - Overrides the default folder name...
/NOICONS - Instructs Setup to initially check the Don't create a Start Menu folder check box...
/TYPE=type name - Overrides the default setup type...
/COMPONENTS="comma separated list of component names" - Overrides the default component settings...
/TASKS="comma separated list of task names" - Specifies a list of tasks that should be initially selected...
/MERGETASKS="comma separated list of task names" - Like the /TASKS parameter, except the specified tasks will be merged with the set of tasks that would have otherwise been selected by default...
/PASSWORD=password - Specifies the password to use...
For more detailed information, please visit http://www.jrsoftware.org/ishelp/index.php?topic=setupcmdline...
Setup...U...V

jrsoftware.org

 

これらの情報から、この検体はinno setup本体(または格納されてる?)と判断しました。

 

とりあえず、この判断が正しいかどうか確認するために正規のinnno setupを公式からダウンロードして、DIEに読み込んだ結果が以下のとおりです。

検体のDIEの結果とほとんど同じ結果が表示されたことが分かりました。

 

また、Stringsから文字列を確認したところIDAでデバッグ中に見つかった文字列が見つかりました。

これらの2つの理由から、この検体はinno setupを使用して新たな検体をドロップして実行する機能があると思われます。

 

デバッグの話に戻ります。

検体はCreateFileA関数を呼び出して自身と同じファイル名のtmpファイルを作成します。おそらくこれがinno setupによって作成されるインストーラーです。

インストーラーがドロップされる場所は、検体が作成したTemp配下のis-<ランダムな文字列>.tmpというディレクトリの中です。

 

ドロップされた検体をDIEに読み込ませた結果です。

 

リソースに潜んでいる実行ファイル

この検体をpestudioに取り込んだ結果、リソースデータに2つの実行可能形式ファイルが見つかりました。

 

 

  • SHFOLDERDLL

 

どちらのファイルもダンプしてハッシュをVTで検索してみましたが、結果だけ見ると不審なファイルではなさそうでした。

結果的に生成されたインストーラーに自動でつくもののようですね(?)

 

インストーラーのデバッグ

話を再度戻してドロップされたnnYotQ.tmpの行方をデバッガで確認して見ると、CreateProcess関数で実行され、引数は以下の内容が指定されていました。

C:\Users\m\Local\Temp\is-<ランダムな文字列>.tmp\nnYotQ.tmp  /SL5="$405C8,140559,56832,C:\Users\m\Desktop\nnYotQ.exe"

 

IDAにnnYotQ.tmpを読み込ませデバッグ時の引数に/SL5="$405C8,140559,56832,C:\Users\m\Desktop\nnYotQ.exe"を追加して実行したところ、nnYotQ.tmpがC2サーバーと接続していることが分かりました。

 

通信部分を特定するためにデバッグを進めていったところ、CFFによって解析妨害された関数にぶち当たりました・・・

(このレベルのCFFは初めてだったので、目的の箇所を見つけるまで約2時間かかりました・・・)

 

トレースを使用して使用しない関数や分岐などを調査して、残った関数からどのタイミングでC2と接続しているか調べていったところ、以下の箇所で通信していることが分かりました。

callされている部分にintoで入ってみると、idp.dllというDLLがメモリ上に展開されていて、その中で通信処理を行なっていました。

 

inno setupのアンパック

このDLLを取り出すためにinnounp.exeを使用します。 

innounp.exeは非公式のツールですが、これを使用することでアンパックすることができるようです。

innounp.sourceforge.net

 

ちなみにFlare VMにはデフォルトで入っていたので、そのまま使用します。

(引数でxを指定してあげると抽出)

無事にアンパックでき、2つのファイルを抽出することができました。

1つは先ほどメモリ上に展開されていたidp.dll。

もう1つはinstall_script.issというファイルです。

 

install_script.issはInno Setupのインストールスクリプトファイルで、インストーラーを作成するにあたって設定や指示が書かれています。

以下はinstall_script.issvscodeで展開した結果です。

 

[Files]
Source: "{tmp}\idp.dll"; DestDir: "{tmp}"; MinVersion: 0.0,5.0; Flags: deleteafterinstall dontcopy 

この箇所でインストールに含まれるファイルを定義しており、インストーラ作成時に「{tmp}idp.dll」ファイルを含み、インストール後に削除し、他の場所にコピーしないことを指定しているようです。

 

軽くidp.dllについて調べてみましたがinno download pluginの略称のようです。

また、VTにハッシュ値を投げてみましたがこのDLL自体は正規のファイルみたいでした。

 

 

これらの結果から、インストーラー(tmp)によってC2と接続して別の検体をダウンロードしていることが分かりました。

 

終わり

今回のブログは、inno setupについてある程度分かったため、ここまでで終わりにします。

なお、インストーラーがC2からダウンロードしてきた検体は.NET製でした。

機会があれば次はこの検体を解析したみたい・・・・と思ってます(いつか)

 

最後までこの記事を見てくださってありがとうございます。

何か間違ったことを書いていれば、Twitterか何かでお叱りいただけると助かりますm(_ _)m