これは@PINKSAWTOOTHの私見で、必ずしもあなたにとって一番良い方法ではないかもしれません。勉強方法の一例として参照しもらえれば幸いです。
これを読む前に、僕が尊敬するマルウェア解析者の@hasherezade氏がマルウェア解析の勉強をどのように始めたらよいかをブログにまとめています。 重複する部分があると思いますが、一読することをおすすめします。また、以下のブログは英語のソースが中心なので、可能な限り日本語を中心にしたソースを紹介したいと思います。
まず、マルウェア解析の前提となる知識について簡単に説明します。 マルウェア解析について学ぶ前に、最低限コンピュータサイエンス(計算機科学)の知識が必要になります。
- コンピュータアーキテクチャ
- コンピュータネットワーク
- オペレーティングシステム
- プログラミング言語
- データ構造とアルゴリズム
- etc...
これらについては、大学や専門学校で履修する内容が理解できていればよいかと思います。 (どこかの大学のオンラインシラバス等を確認することで、より具体的な内容を知れるかと思います。) 本稿では、プログラミング言語やコンピュータサイエンスをどのように学ぶかはスコープ外としますが、以下がおすすめの資料です。
- コンピュータはなぜ動くのか 知っておきたいハードウエア&ソフトウエアの基礎知識
- プログラムはなぜ動くのか 第3版 知っておきたいプログラミングの基礎知識
- インテル® 64および IA-32 アーキテクチャのソフトウェア開発者向けマニュアル (最新)
- IA-32 インテル® アーキテクチャー・ソフトウェア・デベロッパーズ・マニュアル、上巻: 基本アーキテクチャー (日本語:古い)
- IA-32 インテル® アーキテクチャー・ソフトウェア・デベロッパーズ・マニュアル、中巻 A: 命令セット・リファレンス A-M(日本語:古い)
- IA-32 インテル® アーキテクチャー・ソフトウェア・デベロッパーズ・マニュアル、中巻 B: 命令セット・リファレンス N-Z(日本語:古い)
- IA-32 インテル® アーキテクチャー・ソフトウェア・デベロッパーズ・マニュアル、下巻: システム・プログラミング・ガイド(日本語:古い)
- マスタリングTCP/IP 入門編(第6版
- CS50.jp
- CS50x
マルウェア解析に必要となる知識を大きく以下の5つに分けます。
- マルウェア解析技術、マルウェアの挙動、悪用するテクニックの実装や実現方法に関する知識
- リバースエンジニアリング対象のプログラム開発に関する知識
- リバースエンジニアリングに関する知識
- 解析ツールに関する知識
まずはマルウェアとはなにか、マルウェア解析とは何を行う作業なのかを学ぶ必要があります。 マルウェア解析全般について学ぶのにおすすめの資料、書籍を紹介します。
- セキュリティ・キャンプ全国大会2015でのマルウエア分析講義
- 中津留氏(@you0708)によるセキュリティ・キャンプ全国大会2015で開催されたマルウェア解析の講義です。
- 初めてのマルウェア解析
- 日本語でマルウェア解析全般の基礎から発展的な内容まで取り扱っている本です。
- リバースエンジニアリングツールGhidra実践ガイド
- 私も著者に入っているGhidraを使った静的解析を通じてマルウェアの実装を学べる本です。
- リバースエンジニアリング入門 @IT連載
- 日本電信電話株式会社の川古谷氏、青木氏、岩村氏によるシェルコードの解析を解説した記事。
- アナライジング・マルウェア
- 2010年発行のため内容は古くなってしまっていますが、アセンブリを読まないという縛りでマルウェア解析について触れられている珍しい本です。
- MWS Cup
- 情報処理学会コンピュータセキュリティ(CSEC)研究会配下のMWS組織員会が主催するマルウェア解析技術を競うコンテスト。過去の問題内容や解説が公開されており参考になります。
- CS6038/CS5138 Malware Analysis, UC
- University of Cincinnati のマルウェア解析講義資料。毎年内容が更新されており、演習用のサンプルも配布されているためおすすめです。無償で公開されている。
- Practical Malware Analysis
- マルウェア解析全般について詳細に解説された洋書。サンプルと解答が公開されているため演習を行いながら学べる。
- malware_training_vol1 by hasherezade
- @hasherezade氏によるマルウェア解析トレーニング資料。WIPだが、演習用のサンプルも配布されているためおすすめです。
- Malware Analysis - CSCI 4976
- Rensselaer Polytechnic Instituteのマルウェア解析講義資料。演習用のサンプルも配布されています。
- Workshop by Malware Unicorn
- @malwareunicorn氏によるリバースエンジニアリングのワークショップ資料
- Youtube channel by SANS Digital Forensics and Incident Response
- 世界的に有名なセキュリティトレーニングSANSのDFIR関連のYoutubeチャンネル
- Youtube channel by OALabs
- OALabsによるマルウェア解析動画を中心としたYoutubeチャンネル
- Youtube channel by hasherezade
- hasherezade氏によるマルウェア解析動画を中心としたYoutubeチャンネル
- RecommendationofPerfectUnpacking
- 中津留氏(@you0708)によるアンパック手法の資料
- 同人誌 by Allsafe
- 私が所属するリバースエンジニアリングやマルウェア解析技術を主にした同人サークルAllsafeの同人誌
- Malware Analysis at Scale ~ Defeating EMOTET by Ghidra ~ by Allsafe
- AllsafeによるEmotet解析ワークショップ資料
- 配布スクリプト
- Advanced Binary Deobfuscation
- @ntddk氏によるGCC Tokyo、セキュリティ・キャンプ全国大会2020のバイナリ難読化とその解除技術の講義
- MÖBIUS STRIP REVERSE ENGINEERING
- CS系の知見とIDAの内部構造を活かした解析記事が豊富 recommended by ntddk。
マルウェア解析のオンライントレーニングもおすすめです。
- The Beginner Malware Analysis Course
- @0verfl0w氏によるマルウェア解析入門トレーニング
- From Zero to Hero
- @0verfl0w氏と@vk_intel氏による実践的なマルウェア解析トレーニング
- Zero2Automated
- @0verfl0w氏と@vk_intel氏による、発展的なマルウェア解析トレーニング
マルウェアの挙動、悪用するテクニックについてまとめられているページを紹介します。
- Snoozy by ry0kvn
- @ry0kvn氏のブログ。マルウェアが使用するテクニックの実装などに触れられている。
- MITRE ATT&CK
- 攻撃の手法やテクニック、手順がフレームワークとして定義されており、マルウェア解析だけでなくサイバー攻撃全般について学ぶのに良い。
- ired.team
- ペンテスター、レッドチーム、攻撃者が使用するテクニックとその実装の紹介
- malpedia
- マルウェアのファミリ毎に、解析レポートがまとめられている。
- Ten process injection techniques: A technical survey of common and trending process injection techniques
- コードインジェクションテクニックの紹介
- Code Injection demos by hasherezade
- コードインジェクションテクニックの実装
- Evasion techniques by cpr
- マルウェアの解析回避テクニックまとめ
- Al-Khaser
- マルウェアのアンチ解析機能を実装したOSSツールとソースコード
日々公開されている脅威情報やマルウェア解析を扱ったブログやレポートも重要な情報源になります。RSSリーダなどで更新を通知しておくと便利です。 それらをまとめているサイトもあるので、活用することができます。
これらの中で日本語でマルウェアの詳細な解析を取り上げているものを紹介しておきます。
- Japan Security Analyst Conference
- JPCERTコーディネーションセンター公式ブログ
- LACレポート by 石川 芳浩氏
- 標的型攻撃の実態と対策アプローチ by マクニカネットワークス(最新記事をリンク)
- NTT Security Japan Technical blog
- MBSD Blog
- fortinetブログ 脅威リサーチ
- Unit42ブログ
- トレンドマイクロ セキュリティブログ
他にも、YaraやCapaのルールを読むことで、マルウェアの特徴や機能について学習することができます。
リバースエンジニアリングは、マルウェア解析において一部でしかありませんが、マルウェア解析者になるためには避けて通れない道です。 サンドボックスを使った動的解析やツールを使った動的解析(手動でおこなうデバッグを除く)だけでは、マルウェアの機能の全容や使用されているアルゴリズムを特定することは困難です。
リバースエンジニアリングをおこなうためには、元のソースコードについて理解しておく必要があります。 (マルウェア解析で一般的なWindows環境を想定しますが)Windows APIを使ったプログラミングの経験なしにマルウェア解析をするのは遠回りになるでしょう。
幸いなことにWindows APIはMicrosoftが公式のドキュメントを公開しており、詳細についてはWeb上で確認することができます。
日本語のページがある場合がありますが、英語のページのほうが記載が充実しています。Google翻訳を使ってもいいので英語版を読むようにしましょう。
例としてCreateFile関数のページを記載します。
また、Windows APIのサンプルも同ページに記載されている場合があります。こういったサンプルのコードを参考にプログラムを作成してみましょう。
MicrosoftのGitHubにはWindows APIを使用したサンプルを公開しているページがあります。こちらも参考にしてみてください。
WindowsのOSの仕組みを学ぶのには以下の書籍がおすすめです。
解析対象の言語や環境でのプログラミング技術が身についたら、リバースエンジニアリングについて勉強していきましょう。 まずはマルウェア解析で一般的なWindowsのPEファイルを解析する場合、まずはCやC++の入門プログラムをリバースエンジニアリングしてみましょう。 次にのステップとしては、自分でコンパイルした(ソースコードが存在する)Win APIを使ったPEファイルを解析してみましょう。同じソースコードでも、選択するプロジェクトやコンパイルやリンクのオプションなどを変更して、実行ファイルにどういった変化が現れるかまで見ておけば、リバースエンジニアリング技術がかなり付くと思います。
マルウェア解析を目的としてリバースエンジニアリングを学ぶ上での資料、書籍を紹介します。(前述の項目で紹介した内容に含まれているので、ここではリバースエンジニアリングに特化したものを紹介します。)
さらにリバースエンジニアリング技術を磨くににはCTFのRev問やCrackmeを解くと良いでしょう。 特にPEファイルの問題やマルウェア解析者を対象としたものが、おすすめです。
- The Flare On Challenge
- FireEyeのマルウェア解析チームflareによるマルウェア解析技術にフォーカスしたCTF。
- Beginner Malware Reversing Challenges by MalwareTech
- MalwareTech氏によるマルウェア解析初心者向け演習問題
- reversing.kr
- PE形式が多いCrackMe配布サイト
- crackmes.one
- CrackMe投稿サイト
また、マルウェアのリバースエンジニアリングでは暗号アルゴリズムの処理をリバースエンジニアリングすることが多いので基本的な暗号技術について学ぶことを推奨します。 アルゴリズムを理解したらGitHubなどで公開されているオープンソースの暗号アルゴリズム実装のソースコードを読み、実際にリバースエンジニアリングしてみましょう。
マルウェア解析をすすめるうえで、よりよいツールを使うことやツールを使いこなすことで容易に解析できることがあります。 また、様々な知識を持っていても実際にツールを通して解析するため、ツールの利用方法も理解しておく必要があります。
解析ツールのインストールや更新などの管理のために、FireEyeがFlare VMをリリースしておりWindowsの仮想環境上で簡単に解析ツールの管理をおこなうことができます。 Flare VMによってインストールされるツールの一覧を確認し、それぞれの使い方を学ぶことでマルウェア解析者に一般的に利用されるソフトウェアを使いこなすことができます。
また、以下のリンクで紹介されているツールについても利用してみるとよいでしょう。
ここではマルウェアの入手方法について触れますが、紹介するサービスを利用する際は利用規約を必ず読んで利用してください。 また、以下の内容は、マルウェアの入手を勧めるものではありません。
正当な理由なくマルウェア(法律的には不正指令電磁的記録)を作成、取得・保管することは法律で禁止されています。
どういった理由であれば法律上の正当な理由
にあたるかは、法律の専門家ではないためわかりません。
個人の趣味でマルウェア解析をおこなうことは正当な理由
として認めら得ない可能性もあります。
捜査されると困る、裁判になったら困る、正当な理由として提示できる活動実績がない、弁護費用がないなど、平穏な人生を絶対に送りたいという人は、個人の趣味でやらないほうがよいかと思います。
とはいえ過度に怯えすぎて萎縮する必要はないとは思います。 最低限、警視庁が公開している不正指令電磁的記録に関する罪に関するページには目を通して、内容を確認しておきましょう。
マルウェアを扱う上で気にしなければ行けないことは、法律面だけではありません。 マルウェアを実行(故意かどうかは問わない)すると、たいていの場合は攻撃者の用意したサーバにアクセスします。 攻撃者のサーバには自分の利用しているIPアドレスのログが残りますし、接続時に利用しているシステムの情報を送信することもあります。 マルウェアによっては、攻撃者によるコマンドの実行などがおこなわれることも考えられますし、内部ネットワークのスキャンや(一番避けるべき)外部への感染活動などがおこなわれるかもしれません。 攻撃者のサーバに記録された情報は攻撃者自身だけでなく、第三者へ提供されることもあります。また、捜査機関はサーバを差し押さえてログを解析したうえで、ISPに情報開示請求をおこなうことができます。
以下のどれか一つにでも当てはまる場合は、実際のマルウェアを利用した学習は控えましょう。
- マルウェアを取り扱う上で、不安がある。
- マルウェア解析のための専用PCや独立したネットワークなど隔離した環境を用意できない。
- 未成年もしくは学生であるが、マルウェアを扱った解析や研究をするうえで責任者がいない(社会人の場合は、全て自己責任として責任を取れない)。
実際のマルウェアを個人的に入手しなくても、学習する方法は前述しております。 オタクがみんな大好きな以下の名言たちで前置きを終えます。
With great power comes great responsibility
The abyss gazes also into you.
マルウェアのサンプルやIoCを共有するためのサービスがいくつかあります。もっとも登録が多く有名なサービスはVirusTotalですが、有償アカウントのみダウンロードが可能であるため、ここでは無償で利用可能なサービスを紹介します。
無料で使用できるオンラインサンドボックスのサービスは本来マルウェアの挙動を解析するサービスですが、他者の投稿したマルウェアをダウンロードすることができます。