第 11日目は、SOC アナリスト 甘粕 伸幸の記事です。一人前のマルウェア解析エンジニアになることを目指して弊社内で行っているマルウェア解析トレーニングの模様について紹介します。
---
一年半ほど前に別の IT 業界から JOIN しました、甘粕と申します。SOC 内では他の blog でも紹介されるように色々な取り組みがありますが、今回は過去に私も受講しましたマルウェア解析トレーニングについてご紹介したいと思います。
トレーニングが実施される背景として、昨今のセキュリティー意識の高まりからおかげさまでマルウェアなどの分析を依頼される機会が増えてまいりました。さらなる需要増や、マルウェア解析によって得られたナレッジをリアルタイム分析に還元することで SOC 分析力の更なる向上などを目的に、現在私の師匠でさえも "師匠!" と敬う師匠が今回ご紹介するトレーニング内容を作っていただき、昨年よりトレーニングが実施されることになりました。師匠や師匠の師匠は過去 JSAC で登壇するほどのハイレベルなマルウェアアナリスト。普段から後光が見えるような気がします。現在は私の師匠が講師としてマルウェア解析教のさらなる布教のため活動をされております。マルウェア解析教に入門し一年も満たないにも関わらず、何お前偉そうに....と思われるかもしれませんが実際の受講内容や過去受講時の感想を思い出しながらトレーニングの紹介させていただきたいと思います
トレーニングの具体的な内容
弊社のお客様に影響がある部分を考慮しますと、解析対象のマルウェアは Windows 関連のものが多いため Windows OS に関するものをターゲットとしています解析環境は FLARE VM を使用します。あとで実際にマルウェアを動作させ通信挙動を確認するためその辺りで必要なものが動いていない演習に参加できず環境整備は重要でした(私は FakeNet-NG が結構ハマりました)。一応やり切ると、何となくマルウェアの解析者のスタートに立てた達成感にみたされます(後述しますが、実際は全くそんなことはありませんでした)。それでは実際の内容はこちらとなります。
解析する前の下調べ
まず相手が何者なのかを確認します。いきなり何もわからない相手に勝負を挑んでも不利だった負けたりしちゃいますよね。戦う相手を調べます。詳細には色々なツールを使いつつ以下のようなことを調べていきます。
- ファイルタイプは?(Excelファイル?WORDファイル?実行ファイル?.....)
- ファイルのハッシュ値を検索し、何か情報がないか調査。もしかしたらすでに誰かが分析してくれていたりしてくれているかもしれません。
- なにか特徴的な文字列が埋まっているか。プログラムの中に特徴的な文字列が埋まっていたりします。通信先の IP アドレスなどが埋め込まれていたりといった場合があります。
- 暗号化されてる?最初からパッキングという暗号化のようなものが施されていて簡単に解析できないようになっていたりします。
といったことを調べます。以上の結果より、今後の解析の方針を決めます。
アセンブリ言語・IDA 入門
次のステップに行くための初心者講座です。解析対象は実行ファイルが多いため機械語にコンパイルされたものを解析していきます。機械語(0 と 1 の羅列)を読むのは大変なので通常アセンブリ言語という機械語に近い言語に翻訳されたもので分析を進めます。今回の講義の内容はアセンブリ言語の基礎とレジスタ(CPU の中にある固定された変数のようなもの)の種類、制御構造(if とか while とかそういうあたりをアセンブラで表現するとどうなるとか)。
※高級言語がいかに読みやすいか!ということのありがたみがすごく感じます。C 言語で書けることができた、あの何でもないような事が幸せに感じます。あ、私の歳がバレそうですね。
機械語のプログラムをアセンブリ言語にしてくれるソフトウェア(逆アセンブラ)でよく使われる IDA(逆アセンブラ)の使いかたを簡単に習います。いきなり今後の本気度を試すように、アセンブラ言語を C 言語に直してみよう!みたいな宿題がでます。慣れてないので、ウッとなります。
デバッガを使った解析 1
アセンブラを読む前にデバッガで動かしてみて挙動を確認します。動きがわかると、使われている Windows API が把握でき、後で読むべき箇所を絞り込むことができます。
具体的に例を挙げますと、どこかに通信する挙動が見られるときは使用する Windows API を絞れます。その API を呼ぶところでデバッガに止まれ!という設定(BREAK POINT です)することで、マルウェアをアセンブラで見た時に該当するコードはココだな、ということがわかります。
なぜそんなことをするかというと、時間の都合上マルウェアの全てのアセンブラは読みません。重要なのは悪性な挙動であったりその機能を把握することです。全部読むのは効率が悪いため悪い挙動をするところだけを中心にその周辺を分析するようにします。
デバッガは FLARE VM に含まれている x32/x64 dbg を使い、マルウェア動かしつつ、デバッガの使い方をここで習得します。
デバッガを使った解析 2
さらに変な動きをするマルウェアをデバッガで動きを確認する方法を学びます。具体的にはコードインジェクションするようなものをどうやってデバッガで動かすのかということです。コードインジェクションとは正規なアプリケーションに Malware が悪い動きをするコードを挿入して動作させることです。すごいことできますよね、Windows。
デバッガを駆使して、メモリ上に BREAK POINT を設定したりガチャガチャします(このガチャガチャが深いのですが.....長くなるので省略します)。
また解析妨害についての紹介とその回避方法などを教わります 。マルウェアは実行されている環境を把握して、「あ、こりゃ分析されているな?」というのがわかると本来の悪い挙動から異なる動きをすることがあります。
アセンブラを読む 1
終盤になってきました。もうお腹いっぱいいっぱいです。この文章を書いていて胸までもいっぱいになってきました。今度は IDA で実際のアセンブラを見ていきます
メモリ上に C 言語でいう構造体がどのようにデータが入っているかなとなどを説明されながら強烈な演習が課せられます「講師:暗号アルゴリズムが使われている箇所を特定せよ「私:・・・・・」いきなり路頭に迷います。
アセンブラを読む 2
最後です。前回が完全にわかってなかったと思いますが、時とトレーニングは非情にも進みます。マルウェアは C&C と呼ばれる攻撃者と通信をしますが、その内容は分析できないように暗号化されていたりします。アセンブラ読み方伝授されます。
最後の演習は卒業試験の様です。「講師:そのC&C通信を復号化せよ」「私:・・・・・・・・・・マジっすか」
おわりに
いかがだったでしょうか。このトレーニングの濃い内容は泣けてきませんでしょうか。もし伝わらなかったのでしたら私の文才の無さを悔やみます。
恥ずかしながら私もいつの日かマルウェア解析者として一人前となるため、時間を見つけては実際のマルウェアを解析しておりますが、実はこのトレーニング終わりはまだ入口、、、、否、入り口にも満たないこともわかってきました。
一人前の解析者に必要な要素他にもまだまたあると言う事です。具体的には以下です。
- 暗号化のアルゴリズム
暗号化のアルゴリズムの具体的な内容についてシステム開発をする上ではそこまで踏み込む必要はないと思いますが、マルウェア解析を行う上で暗号化されたものを復号することが要求されます。そう言った場合はアルゴリズムまで踏み込む必要が出てきます。しかも著名なアルゴリズムの種類は簡単に特定できる手段があったりしますが、実際のマルウェアは少しカスタマイズされてたりしています。
高級言語でそれが見えないので逆アセンブラ結果とデバッガを駆使し、メモリのここが変わった。ステップ実行。あれ?変わった。???これはおかしいぞ?みたいな分析となり、ものすごーーーーーーく時間がかかりました。慣れてくると逆アセンブラだけ読めば高級言語と同じようにロジックが読めるらしいですがそこにたどり着くのはまだまだですね。
- 普通使わない Windows OS の機能や API の把握
こんな挙動をするマルウェアがあったりします。
- メモリにある領域を確保して、そこに不正な挙動をするアセンブリコードを byte で書き込み、メモリに実行権を付与し、その確保したメモリの先頭アドレスを呼ぶ....
- プロセスを乗っ取る・不正な挙動を隠蔽するような操作(explorer.exe に悪いコードを仕込み実行する)
そういった動きをするマルウェアによく利用されるような API を把握する事で解析が捗ると感じました。知らないとデバッガに BREAK POINT を設定できません。
- 一番の問題:アセンブラの慣れ
スラスラ読めないため、現在は IDA の機能であるデコンパイラ(アセンブリ言語から C 言語に変換してくれる機能)に頼りっぱなしです。入門したてよりはマシになってきたかも知れませんがまだまだです。
- ほかにも
- 32bit → 64ビットとのアセンブラの違い
- 色々な解析妨害とその回避方法
- IDA を使ってもっと効率よく分析するために IDA のディープな使い方→ IDA Python/C スクリプト
- オブジェクト指向言語でコンパイルされているマルウェアの解析方法
このあたりについての師匠や師匠の師匠の助言としては
「後は実際のマルウェアをもっと分析し経験を積むべし」
とのことです。マルウェア解析教はスパルタですね。
このような取り組みを通し、マルウェア解析教を増やし、マルウェアの解析することで日々のリアルタイム分析のナレッジとして還元し、お客様の分析をより高度に実施して参ります