Giter Club home page Giter Club logo

how_to_become_a_malware_analyst's Introduction

マルウェア解析者になるための勉強方法(work-in-progress)

これは@PINKSAWTOOTHの私見で、必ずしもあなたにとって一番良い方法ではないかもしれません。勉強方法の一例として参照しもらえれば幸いです。

これを読む前に、僕が尊敬するマルウェア解析者の@hasherezade氏がマルウェア解析の勉強をどのように始めたらよいかをブログにまとめています。 重複する部分があると思いますが、一読することをおすすめします。また、以下のブログは英語のソースが中心なので、可能な限り日本語を中心にしたソースを紹介したいと思います。

マルウェア解析の前提となる知識

まず、マルウェア解析の前提となる知識について簡単に説明します。 マルウェア解析について学ぶ前に、最低限コンピュータサイエンス(計算機科学)の知識が必要になります。

  • コンピュータアーキテクチャ
  • コンピュータネットワーク
  • オペレーティングシステム
  • プログラミング言語
  • データ構造とアルゴリズム
  • etc...

これらについては、大学や専門学校で履修する内容が理解できていればよいかと思います。 (どこかの大学のオンラインシラバス等を確認することで、より具体的な内容を知れるかと思います。) 本稿では、プログラミング言語やコンピュータサイエンスをどのように学ぶかはスコープ外としますが、以下がおすすめの資料です。

マルウェア解析に必要となる知識

マルウェア解析に必要となる知識を大きく以下の5つに分けます。

  • マルウェア解析技術、マルウェアの挙動、悪用するテクニックの実装や実現方法に関する知識
  • リバースエンジニアリング対象のプログラム開発に関する知識
  • リバースエンジニアリングに関する知識
  • 解析ツールに関する知識

マルウェア解析技術、マルウェアの挙動、悪用するテクニックの実装や実現方法に関する知識

まずはマルウェアとはなにか、マルウェア解析とは何を行う作業なのかを学ぶ必要があります。 マルウェア解析全般について学ぶのにおすすめの資料、書籍を紹介します。

マルウェア解析のオンライントレーニングもおすすめです。

マルウェアの挙動、悪用するテクニックについてまとめられているページを紹介します。

日々公開されている脅威情報やマルウェア解析を扱ったブログやレポートも重要な情報源になります。RSSリーダなどで更新を通知しておくと便利です。 それらをまとめているサイトもあるので、活用することができます。

これらの中で日本語でマルウェアの詳細な解析を取り上げているものを紹介しておきます。

他にも、YaraやCapaのルールを読むことで、マルウェアの特徴や機能について学習することができます。

リバースエンジニアリング対象のプログラム開発に関する知識

リバースエンジニアリングは、マルウェア解析において一部でしかありませんが、マルウェア解析者になるためには避けて通れない道です。 サンドボックスを使った動的解析やツールを使った動的解析(手動でおこなうデバッグを除く)だけでは、マルウェアの機能の全容や使用されているアルゴリズムを特定することは困難です。

リバースエンジニアリングをおこなうためには、元のソースコードについて理解しておく必要があります。 (マルウェア解析で一般的なWindows環境を想定しますが)Windows APIを使ったプログラミングの経験なしにマルウェア解析をするのは遠回りになるでしょう。

幸いなことにWindows APIはMicrosoftが公式のドキュメントを公開しており、詳細についてはWeb上で確認することができます。 日本語のページがある場合がありますが、英語のページのほうが記載が充実しています。Google翻訳を使ってもいいので英語版を読むようにしましょう。

例としてCreateFile関数のページを記載します。

image

また、Windows APIのサンプルも同ページに記載されている場合があります。こういったサンプルのコードを参考にプログラムを作成してみましょう。  

image image

MicrosoftのGitHubにはWindows APIを使用したサンプルを公開しているページがあります。こちらも参考にしてみてください。

WindowsのOSの仕組みを学ぶのには以下の書籍がおすすめです。

リバースエンジニアリングに関する知識

解析対象の言語や環境でのプログラミング技術が身についたら、リバースエンジニアリングについて勉強していきましょう。 まずはマルウェア解析で一般的なWindowsのPEファイルを解析する場合、まずはCやC++の入門プログラムをリバースエンジニアリングしてみましょう。 次にのステップとしては、自分でコンパイルした(ソースコードが存在する)Win APIを使ったPEファイルを解析してみましょう。同じソースコードでも、選択するプロジェクトやコンパイルやリンクのオプションなどを変更して、実行ファイルにどういった変化が現れるかまで見ておけば、リバースエンジニアリング技術がかなり付くと思います。

マルウェア解析を目的としてリバースエンジニアリングを学ぶ上での資料、書籍を紹介します。(前述の項目で紹介した内容に含まれているので、ここではリバースエンジニアリングに特化したものを紹介します。)

さらにリバースエンジニアリング技術を磨くににはCTFのRev問やCrackmeを解くと良いでしょう。 特にPEファイルの問題やマルウェア解析者を対象としたものが、おすすめです。

また、マルウェアのリバースエンジニアリングでは暗号アルゴリズムの処理をリバースエンジニアリングすることが多いので基本的な暗号技術について学ぶことを推奨します。 アルゴリズムを理解したらGitHubなどで公開されているオープンソースの暗号アルゴリズム実装のソースコードを読み、実際にリバースエンジニアリングしてみましょう。

解析ツールに関する知識

マルウェア解析をすすめるうえで、よりよいツールを使うことやツールを使いこなすことで容易に解析できることがあります。 また、様々な知識を持っていても実際にツールを通して解析するため、ツールの利用方法も理解しておく必要があります。

解析ツールのインストールや更新などの管理のために、FireEyeがFlare VMをリリースしておりWindowsの仮想環境上で簡単に解析ツールの管理をおこなうことができます。 Flare VMによってインストールされるツールの一覧を確認し、それぞれの使い方を学ぶことでマルウェア解析者に一般的に利用されるソフトウェアを使いこなすことができます。

また、以下のリンクで紹介されているツールについても利用してみるとよいでしょう。

マルウェアの入手

前置き

ここではマルウェアの入手方法について触れますが、紹介するサービスを利用する際は利用規約を必ず読んで利用してください。 また、以下の内容は、マルウェアの入手を勧めるものではありません。

正当な理由なくマルウェア(法律的には不正指令電磁的記録)を作成、取得・保管することは法律で禁止されています。 どういった理由であれば法律上の正当な理由にあたるかは、法律の専門家ではないためわかりません。 個人の趣味でマルウェア解析をおこなうことは正当な理由として認めら得ない可能性もあります。 捜査されると困る、裁判になったら困る、正当な理由として提示できる活動実績がない、弁護費用がないなど、平穏な人生を絶対に送りたいという人は、個人の趣味でやらないほうがよいかと思います。

とはいえ過度に怯えすぎて萎縮する必要はないとは思います。 最低限、警視庁が公開している不正指令電磁的記録に関する罪に関するページには目を通して、内容を確認しておきましょう。

マルウェアを扱う上で気にしなければ行けないことは、法律面だけではありません。 マルウェアを実行(故意かどうかは問わない)すると、たいていの場合は攻撃者の用意したサーバにアクセスします。 攻撃者のサーバには自分の利用しているIPアドレスのログが残りますし、接続時に利用しているシステムの情報を送信することもあります。 マルウェアによっては、攻撃者によるコマンドの実行などがおこなわれることも考えられますし、内部ネットワークのスキャンや(一番避けるべき)外部への感染活動などがおこなわれるかもしれません。 攻撃者のサーバに記録された情報は攻撃者自身だけでなく、第三者へ提供されることもあります。また、捜査機関はサーバを差し押さえてログを解析したうえで、ISPに情報開示請求をおこなうことができます。

以下のどれか一つにでも当てはまる場合は、実際のマルウェアを利用した学習は控えましょう。

  • マルウェアを取り扱う上で、不安がある。
  • マルウェア解析のための専用PCや独立したネットワークなど隔離した環境を用意できない。
  • 未成年もしくは学生であるが、マルウェアを扱った解析や研究をするうえで責任者がいない(社会人の場合は、全て自己責任として責任を取れない)。

実際のマルウェアを個人的に入手しなくても、学習する方法は前述しております。 オタクがみんな大好きな以下の名言たちで前置きを終えます。

  • With great power comes great responsibility
  • The abyss gazes also into you.

マルウェア共有サービス/IoC共有サービス

マルウェアのサンプルやIoCを共有するためのサービスがいくつかあります。もっとも登録が多く有名なサービスはVirusTotalですが、有償アカウントのみダウンロードが可能であるため、ここでは無償で利用可能なサービスを紹介します。

オンラインサンドボックス

無料で使用できるオンラインサンドボックスのサービスは本来マルウェアの挙動を解析するサービスですが、他者の投稿したマルウェアをダウンロードすることができます。

OSS

how_to_become_a_malware_analyst's People

Contributors

pinksawtooth avatar

Stargazers

Bang Juwon(方ジュウォン) avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.