前回の続きから。この圧縮を解凍しない限りは、その本来の動作を明らかにすることはできない、とはどういう意味かを説明しよう。まず、マルウェア解析のプロセス概略を図に示す。

マルウェア解析のプロセス概略

実のところ、一般的な感覚からして苦痛この上ない「アセンブラの黙読」などしなくてもマルウェア解析を行うことは実際のところ可能である(ただ、アセンブラを読むことが大好き、という人もたまにいるが…)。それは動的解析(「ブラックボックス解析」などと呼ばれることもある)という、マルウェア検体を実際にSandbox環境で実行し、動作を記録してその内容をレビューすることで実現する。とはいえ、次のような感染動作を見出すことは動的解析だけでは難しい。

  1. 特定の日時で発生するDDoS攻撃
  2. 特定のアルゴリズムで生成されるURLを明らかにすること
  3. 感染PCで利用者が特定のWebサイトにアクセスした場合のみに発生する感染動作

1はわかりやすい例なので説明は省くとして、2は実際に"Conficker"のように毎日アクセス先が変わるような検体の感染動作である。3はいわゆる"Bancos"と呼ばれるマルウェアにみられるような、特定のオンラインバンクにアクセスしたときのみに特定の感染動作を発生させるものである。Bancosはこのような特定サイトへのアクセスが発生したときのみ感染動作を発生させ、それ以外は沈黙しながら、ただひっそりと感染PCに潜むのである。 このように「得体の知れない」あるいは「ヒントのない」マルウェア検体に直面した場合、コードレベルの解析、いわゆる「静的解析」を行わざるを得ない局面となる。そこで、障壁となるのがPackerの存在である。単なる圧縮と思ってはならない。これは「泥沼のはじまり」である。

前回述べたとおり、近来のマルウェアにはPackerによる圧縮が行われていることが大半である。こうしたPackerによって圧縮されたバイナリに対して静的解析を行っても意味はない。なぜならば、静的解析によって得られたコードは、Packerの自己解凍コードだけしかないためである。つまり、Packerによって圧縮されたバイナリに対して静的解析を行っても、特定条件下の感染動作を明らかにすることはできないのだ。したがって、Packerによる圧縮を解凍する必要がある。この解凍は「Unpack(アンパック)」と呼ばれる。

では、そもそもPackerの種類は一体どれくらいあるのだろうか?

SANS Internet Storm CenterのHandlerのひとりであるJim Clausing氏の作成したPackerシグネチャデータベースによると、その数は3700を超えている。また、これらPackerを独自に修正することでも新しい圧縮方法を生み出すことができる。加えて、これらPackerの中には「アンチマルウェア解析」と呼ぶことのできる、解析妨害機能が備わっている。従って、Unackを実施するためには少なくとも3700個のPackerに関する知識(といっても、これは相当類型化できるが)と、解析妨害機能に対する準備をしておかなくてはならない。

前書きが非常に長くなったが、このようにマルウェア解析を効率的に行う上で障壁となっているのがPackerである。そして、筆者の参加したトレーニングは、まさにこのPackerの自動Unpackに関するものであったのだ。