NFLabs. エンジニアブログ

セキュリティやソフトウェア開発に関する情報を発信する技術者向けのブログです。

GREM 合格体験記

みなさんこんにちは、事業推進 研究開発担当のonaotoです。
今回の記事ではマルウェア解析の認定資格GREMの紹介と試験合格までに行ったことを紹介したいと思います。

GREMとは

GREMとはGIAC Reverse Engineering Malwareの略称で、SANS Instituteが提供するGIAC(Global Information AssuranceCertification)認定試験の一つです。この試験に合格することで、マルウェアの解析技術を十分に取得していると認定されます。

米国におけるGIACの評価は以下のようになっています。

  • ガートナーグループは、情報セキュリティの分野における最上位の認定はGIACであるとの調査結果を公表しています。
  • Foote Partnersは、GIAC認定を受けた個人は、情報セキュリティに関して最も高いスキルを有すると認められ、高いサラリーとボーナスを得ているとの調査結果を公表しています。
  • NSA (国家安全保障局)は、SANSのSEC-401について、NSTISSI 4013(情報セキュリティのトレーニング標準)を完全に満たしているとの見解を示しています。
  • ANSI(米国規格協会)より、ISO(国際標準化機構)/IEC(国際電気標準会議)17024の認証を受けた、情報セキュリティプロフェッショナル向けの資格であり、同分野における世界的標準となっています。

https://www.sans-japan.jp/giac より抜粋

GIAC*1およびGREM*2の詳細は公式ページを参照してください。

GIACの認定試験はそれ単体で受験することも可能ですが、それぞれの認定試験に対応した学習コースが用意されています。 GREMに対応するコースはFOR610で、このコースではマルウェア解析に使うツールや解析の手法を学ぶことができます。 例えばコードの静的解析にはGhidraというNSAが開発したフリーのリバースエンジニアリングツールを使い、これを使って実際のマルウェアに対する静的解析を行います。

今回私はFOR610を受講後GREMの試験を受けました。

合格までにやったこと

ここから、FOR610受講後GREMの試験合格までにやったことを紹介したいと思います。

教科書を読む(1回目)

まずは、配布された教科書を隅から隅まで一通り読みました。 1冊が大体150〜200ページあり、全て英語で書かれているため1冊読み切るのに平均で5時間くらいかかりました。 また後半に向かうにつれ内容が高度になっていくのでその分、後半の方が読み切るのに時間がかかりました。

1回目の模擬試験

教科書を全て読み終えた段階で、1度目の模擬試験を受けました。 この時の正答率は60%でした。圧倒的に不合格です。 言い訳をすると、この時は試験の雰囲気を掴んで最後にまとめて不正解だったところを確認すれば良いというスタンスでした。 そのため答えがわからない問題を雰囲気で解答し、試験時間も大幅に残して終了となりました。 しかし、これは大間違いでした。というのも、試験終了後に不正解だった問題を詳細に確認することができなかったからです。確認できるのはカテゴリ毎の大まかな正答率だけです。 こうして、1回目の模擬試験は大失敗に終わるのでした。

教科書を読む(2回目)

GIAC認定試験はオープンブックポリシーを採用しており、教科書や自前のノートなどを持ち込むことが可能です。 そこで、2回目は教科書を読みながら自前のノートを作成しました。 このノートに教科書の何ページに何が書かれているのかを2、3行でまとめていきました。

例えば、FOR610のコースデモ*3で閲覧できる部分をまとめたノートは以下のようになります。

ノート抜粋

今数えてみたところノートは全部で60ページほどで、元の教科書が大体800ページくらいなので10分の1以下に圧縮することができました。 ノートには他に、アセンブラのジャンプ命令の表やレジスターの名前と目的の表を書いたりしました。

わからない問題があったらまずこのノートを参照し、それでもわからない場合は教科書の該当ページを読むという方針で試験に臨むことにしました。

このノートとは別に、解析に使われるツールやWin32APIの名前とそれが記載されているページ番号の表を作りました。 名前順で表を作ったので、簡単に教科書の該当箇所にたどり着けるようになりました。

当初は自前のノートを作成するのではなく、教科書に付箋を貼ることで情報へのアクセス性を上げようとしていました。 しかし、以下の問題があり自前のノートを作成する方針に切り替えました。

  • 付箋の量が大量になるので目的の情報が探しづらい
  • 付箋が大量にあって邪魔くさい
  • 付箋が剥がれる
  • 字が汚くて読みづらい(これは私が悪い)

ハンズオンの復習

講義の中で実施したハンズオンを再度実施しました。GREMではCyberLive形式*4の問題を採用しています。 CyberLiveは単に知識を問うのではなく、テスト中に仮想マシンを起動し、実践的な操作を行うことで問題に対する回答を得る問題形式です。

このような形式の問題が出題されるため、講義で実施したハンズオンは全てできるようになっている必要があります。

教科書を見ながらでも良いので、全ての演習が解けるように復習することをお勧めします。 10時間くらい復習して全ての問題が解けるようになりました。

2回目の模擬試験

試験の2日前に2回目の模擬試験を実施しました。教科書やノートのおかげで正答率は76%でした。

合格点には達しましたが、自分では丁寧に問題文を読んで解答したつもりでしたが、ケアレスミスで不正解となってしまった問題がいくつかあったのがショックでした。

また、丁寧に解いたつもりでしたが試験時間が1時間も余ってしまったのは意外でした。

時間があるのにケアレスミスで失点するのは勿体無いので、本番はより丁寧に問題文を読み解答しようと決心しました。

試験本番

試験は新宿の西新宿テストセンターというところで受けました。これは時勢によるものだと思いますが、私が受けた時は受付後即試験を開始する必要がありました。施設内で最後の見直しや予約時間まで待つということはできません。 直近で受講する予定の方は到着時間を十分に調整することをお勧めします。

試験はオープンブックポリシーですが、教科書やノートを袋やクリアファイルに入れて持ち込むことはできません。教科書やノートは両手で持てる範囲の量にとどめましょう。

試験の結果は正答率92%で無事合格でした。

模擬試験の時よりも問題を解くペースが悪かったので多少焦りましたが、模擬試験では時間が1時間も余ったことを思い出し心を落ち着けて、丁寧に解答したのが良かったのだと思います。 実際雰囲気で解答していたら、不正解だった問題が何問かありました。

試験を終えて

1回目の模擬試験では正答率60%と合格とはほど遠い結果で、不安でいっぱいでしたがひとまず合格できて良かったです。

大学や会社でアセンブラやWin32APIを使った開発をしていた経験が生きたと思います。 CreateProcess関数がどのような引数をとって何を返すのか、アセンブラのmovがどのような命令なのかといった前提知識があったので、マルウェア解析の本質的なところに集中して学習できたと思っています。

模擬試験に関しては必ず2回やることをお勧めします。本番の試験も模擬試験とほぼ同じシステムで実施されます。

私としては、試験の出題形式や問われる問題を把握してからノートを作成する方が効率的だと思うので、1回目の模擬試験をやってからノートの作成に取り掛かるのをお勧めします。

そして、2回目の模擬試験は見直しやノートの修正のことを考えると1週間くらい前に実施するのが良いと思います。

振り返ってみると70時間くらい勉強したことになります。 GIAC試験は対応する学習コースの終了から120日以内に試験を受ける必要があります。これくらいの時間で合格できるので毎日終業後に1時間勉強するだけで十分合格することができると思います。

ちなみに試験に合格するとデジタルバッジをもらうことができて、ブログや講演資料などに貼り付けることができます。

終わりに

FOR610を受講した少し後にWaniCTF 2021*5というCTFがありそれに参加したのですが、問題の中にEmoemotet*6というEmotet*7を模したものがありました。(もちろん競技用に作られた無害なもので、システムに害を与えるものではありません)

これがまさにFOR610で学んだ内容を使って解くことのできる問題で、マルウェア解析をやったことのない自分がEmotetを解析できるようになったのかと感動しました。 *8

FOR610はマルウェア解析に興味がある人にとっては有意義なコースでGREMは解析能力を担保してくれる素晴らしい資格だと思います。学習コース・試験の料金は個人で払うには高額*9ですが、十分な成果を得られると思います。興味がある人は是非受講を検討してみてください。