この記事の前置きとして、私のようにマルウェア解析の初心者で予算がない場合、コース教材にアクセスせずに勉強することは、あなたにとって最善の選択ではないかもしれないということをお伝えしたいと思います。 SANS GREM認定を受講資金源なしで目指すには、FOR610コースのSANSワークスタディプログラムに申し込むのが一番です。 コース講師のアシスタントをする代わりに、コースの評価と認定試験への挑戦が許可されます。 また、SANSの教材共有に関するポリシーにより、他の方法では取得できない書籍やコースの教材のコピーも提供されます。 このプログラムの総費用は、実際、私が試験だけのためにポケットマネーで支払った金額よりも低くなっています。
ただし、ワークスタディプログラムに参加するには、申請が受理され、SANS のカンファレンスに 6 日間参加できることが条件となります。 私がこのオプションを追求しなかったのは、私の地域で開催される SANS カンファレンスが、私のスケジュールにおける他の重要な項目と重なっていたからです。 また、このコースは私のプロジェクトの役割と直接関係がないため、雇用主に費用を負担してもらうことは適切でないと考えました。
さて、私がなぜそのようなことをしたのかがわかったところで、「どのように」したのかに入りましょう。
What I Needed to learn
SANS のウェブサイトから、私が必要とした GREM をそのまま引用します。
- Windows のリバース エンジニアリングのためのアセンブリの概念 – IDA Pro で何をするか、なぜアセンブリと C の知識が必要か
- Windows マルウェアの共通の特徴 – API 関数、スレッド、および C の知識。 構造体
- 悪意のある実行ファイルと保護された実行ファイルを徹底解析 -練習してIDA Proで行うこと
- 悪意のある文書解析 -攻撃者はファイルの中にスクリプトを入れる
- 悪意のあるWebブラウザスクリプト解析 -攻撃者はインターネットにスクリプトを入れている。 コマンドと制御トラフィックはワイヤーを介して流れる
- Memory forensics – Volatility
The Importance of Assembly Language and C
私が試験準備に使用した各種リソースに入る前に、少なくとも x86 アセンブリについて概略を把握していることが重要であることを指摘しておきたいと思います。 これがないと、移植可能な実行ファイルやシェルコードをリバースエンジニアリングすることができません。 アセンブリの核心は、コンピュータに何かをさせるための単なる算術です。 バイナリ・リバース・エンジニアリングを学ぶのに必要なのは、x86のレジスタ、変数の型(word, dword, int, charなど)、スタックの基本、そしていくつかのプログラム・フロー命令だけです。 以下は、基本を学ぶのに役立つと思われるリソースです。
C の実務知識は重要ですが、Java などの C に似た言語でプログラミングする方法を知っていれば、必要なことの大部分はわかるはずです。 マルウェアのリバース エンジニアリングに必要な新しい概念は、ポインター、メモリ割り当て、ヒープだけです。 私は、この2つのリソースを通じて必要なことを学びました。
Reverse Engineering「リバースエンジニアリング」
この記事のタイトルを「グレイボックステスト」としたのは、振り返ると、私がこの試験のために行った勉強が基本的にそれであることに気づいたからです。 マルウェア解析の初心者であった私は、何が起こるかほとんど知りませんでした。 試験の準備期間中、私は以下の情報源を参照しました。
- 3 ~ 5 年前にコース料金を支払わずに試験に合格した人たちが投稿した推奨書籍
- SANS FOR610 公式コース シラバス
- Lenny Zeltser が作成した悪意のあるファイル解析チートシート
これらの項目をセクションに分けて、各ソースから私が学んだことを説明したいと思います。
推薦図書
GIAC 試験に参考書として一杯持っていくことが許されているので、有用な本を選ぶことは GREM 成功にとって非常に重要です。 GREM認定者の多くは、試験勉強を何から始めようか悩んでいる人に、準備に使った(SANS以外の)書籍のリストを喜んで教えてくれます。 私の最初のステップは、できるだけ多くのGREM卒業生の推薦図書リストを見ることでした。
- “Practical Malware Analysis” – 行動分析、リバースエンジニアリング、およびアンチ解析を打ち破るための素晴らしいガイドです。 この本は譲れないもので、これを勧めないソースはないでしょう。 情報だけでなく、知識を補強するための非常に役立つラボも付いています。
- “The Malware Analyst’s Cookbook” – マルウェア解析ツールの多種多様なガイドです。 ラボやスクリプトは非常に時代遅れですが、ツールの概要は非常に有用でした。 メモリ フォレンジック、ブラウザ スクリプト マルウェア、および悪意のあるドキュメント解析のセクションを使用して、試験の準備をしました。
- “The Art of Memory Forensics” – これは必ずしも主要リソースとしてではなく、メモリ フォレンジックに関する “Malware Analyt’s Cookbook” のセクションの補足リソースとしてあると役に立ちます。 必要なVolatilityプラグインの多くはあまり詳しく説明されておらず、MACからの情報は本書からの情報と相互参照する必要があります。 また、この本は試験に役立つWindowsインターナルを多くカバーしています。
- “Windows Internals 6 or 7” – 個人的には、これらの本はやり過ぎだと思います。 セキュリティの観点からWindowsに精通しているのであれば、Windows Internalsを理解するのに必要なのは先行する書籍だけです。 これらの本を試験に持ち込むことは決してお勧めできませんし、インデックスをつけることもできません。 すべての関連情報は、すでに「Art of Memory Forensics」または MSDN ウェブサイトにあります。
- The IDA Pro Book – この本を試験に持っていけとは誰も言わないと思いますが、まったく活用しないかどうかは、本当にツールをどう学ぶかという問題なのです。 私はIDA ProはPMAを使って、空いた時間に少しいじりながら覚えたので、結局必要なかったです。 画像やイラストの少ない長い本を読むのが一番ツールの勉強になるという方にはぴったりの本です。
The SANS FOR610 Syllabus
こちらはかなりシンプルな内容になっています。 SANS GREM試験は、SANS FOR610コースに関連する試験なので、コースで学んだことが試験で応用されると考えてよいでしょう。 私はコースにアクセスできませんでしたが、SANSのウェブサイトでシラバスにアクセスし、コースがカバーするトピックとツールの両方の概要を知ることができました。 これはすべてのSANS DFIRコースに当てはまるわけではありませんが、FOR610のシラバスはトピックよりもツールの方が役に立ちました。 一部のコースでは、ツールはほとんど掲載されていないようですが、すべてのトピックの内訳が掲載されています。 コースがどの程度技術的か理論的かによると思います。
シラバスのツールのリストは包括的ではないかもしれませんが、あなたが得ることができる唯一のリストです。 リストにあるすべてのツールについて、それらがどのように見え、どのように機能し、何をするのかに慣れ親しんでください。 私は通常、ツールのgithubページから始めて、そこから進めていきます。 「The Malware Analyst’s Cookbook” と Lenny Zeltser の Web サイトには、素晴らしいツールのリファレンスがあります。 トピックが少し広いように思えたり、ツールが重要すぎてシラバスで言及されていない場合、それはおそらくコースにも試験にも載っていないでしょう。 これらは、FOR610のシラバスやGREMのWebページで言及されているトピックと同じものです。 これらのチートシートの内容を勉強してメモを取るのは良いアイデアかもしれません。
“Practical Malware Analysis” のラボと x86 アセンブリの呼び出し規則で本当に役に立つチートシート:
Next Steps: ラボ、特別なトピック、および適切なインデックス作成
これらの本を読みながら、「Practical Malware Analysis」のラボと「The Malware Analyst’s Cookbook」のメモリ フォレンジックのセクションについて行くことをお勧めします。 一晩に一回、二晩に一回など、自分に合った方法で行ってください。 練習時間は自由に設定できますが、練習は任意ではありません。 練習は、特に多くのツールを扱う場合、教材の理解を深めるための最良の方法です。 ツールを学ぶ最良の方法は、それを使うことです。 悪意のあるドキュメントのフォレンジックについては、Didier Stevens のオンライン ワークショップを受講するのが便利でしょう。 私は、試験に役立ち、かつ、疲弊した試験準備から解放されるようなトピック、つまり、基本的なエクスプロイトとシェルコードの書き方を追求することにしました。 この準備のための休暇を3週間過ごした後、私はリフレッシュし、これまで以上にやる気を出して戻ってきました。
使用するすべての書籍に目を通し、ラボを行い、脳を休ませたら、いよいよ最初の模擬試験の準備に取り掛かります。 多くの人が模擬試験でインデックスを使わないことを推奨していますが、私は模擬試験に挑戦する前にインデックスを作成することが不可欠だと思います。 模擬試験でインデックスの穴がどこにあるのかを知ることができるため、また、インデックスを作成することは、何か月もかけて勉強したすべての情報を復習するための最良の方法だからです。 伝統的に、ほとんどの人は、読んだすべての本のインデックスを試験に持ち込みます。 インデックスは通常、フィルタリングされた列を持つスプレッドシートとして作成されます。 インデックスを色分けすることをお勧めします。 索引には、重要なトピック、各トピックのページ番号、各トピックの注釈をすべて含める必要があります。 私のインデックスには、すべてのトピックが属すると想定されるFOR610のドメインも含まれています。 メモでは、Windows API 関数、構造体、Volatility プラグインなどの重要な事柄を強調しました。 また、試験に持参する書籍にはページ番号をタブで表示するようにしました。 私はインデックスに合わせてタブを色分けしました。これは、何かをすばやく調べる必要があるときに、とても役に立ちました。