Log of the Security

The main topic of this blog is computer science such as Security, Operating System, and Other

マルウェア解析入門2~basic static~

1.静的解析

 皆さんこんにちは。よっちです。今回は静的解析を実際に行っていこうと思います。static analysisはまずマルウェアのコードや構造を調べます。そのときマルウェアは実際に動作させない。対象にdynamic analysisは実際にマルウェアを動作させて解析を行います。dynamic analysisは今後やっていこうと思います。

実際に基本的な静的解析でやることを以下に示します。

マルウェア解析ツールを用いた静的解析

・ハッシュを使いマルウェアの識別

マルウェアのコードから必要な文字列を抜き出し、情報を集める。

 

以上をやっていきたいと思います。

 

2.マルウェアスキャン

 マルウェアの多くはパターンが決まっています。なのでマルウェアのデータベースと照合することでどのようなマルウェアなのか知ることができます。ただときどき検出できないマルウェアがあります。なぜならばシンプルにデータベースにないからです。データベースはあくまでも既存のマルウェアしか検知できません。亜種や新しく出てきたマルウェアは検知できません。しかしたいていの場合既存のデータベースで検知できます。ここで最も使われているウェブベースのデータベースを紹介したいと思います!

virustotal(www.virustotal.com)

f:id:yottiii:20180430130930p:plain

ここでマルウェアと思われるソフトをアップロードすれば自動で調べてくれます!実際にアンドロイドのマルウェアを検知させて見ます!

f:id:yottiii:20180430131237p:plain

こんな感じで検知してくれました!

ちなみに私は研究目的でマルウェアを保持しているので、皆さんはマルウェアを保持していると逮捕されるので気をつけてください^^;;

このデータベースは非常に優秀で数十種類のアンチウイルスソフトの結果を出してくれます。たいていのウイルスはここで引っかかるでしょう!

 

 

3.ハッシュを用いたマルウェアの検知

 ハッシュ関数というのはご存知でしょうか?初心者の方にわかりやすく説明すると、ハッシュというのはマルウェアをはじめとしたすべてのアプリケーション、オブジェクトの識別番号を振るための関数です。

f:id:yottiii:20180430132548j:plain

一方向性関数とも呼ばれます。データをハッシュ関数を通すことで、512ビットの文字列にすることができます。この文字列からデータを割り出すことはできません。いわゆる不可逆です。もっと詳しく知りたい方はggってみてください。

 

これからわかるように、各アプリケーションにもハッシュが割り振られているわけです。

ここで実際にwindowsの電卓のハッシュ値を調べてみます。

f:id:yottiii:20180430133608p:plain

ハッシュが以上のようになったことがわかります。

ここでプログラムの内部を1ビットでも変えるとまったく違うハッシュ値になります。

そこで照合を行い、改ざんされていると知ることができます。

これがハッシュを用いたマルウェアの検知です。

 

3.文字列を探す

 アプリケーションから特定の文字列を探したいと思うこともあるでしょう。文字列というのは基本的にASCIIとUnicodeが使われています。皆さんも一度は聞いたことがあるのではないでしょうか?ここでASCIIとUnicodeの仕組みについてふれておきましょう。

f:id:yottiii:20180430140636p:plain

このようにunicodeは一文字に対してnullがあるということがわかります。実際文字列を探索するときは、この属性や形式は無視します。しかし実際に文字列は間違った文字列を検知してしまう。たとえば"VP3"という文字列は,0x56,0x50,0x33,0x00である。しかし実際にこれはメモリーのアドレスだったり、プログラムを使用するときのCPUの割り振りの可能性がある。

しかし幸いにもそのような無効な文字列は明らかである。なぜならば、それらの文字列は正当な文字列ではないからである。

文字列の検知する例のプログラムは

・bit.ly/ic4plLからダウンローできる。

このプログラムで実際のアプリケーションの例をみてみよう!

f:id:yottiii:20180430143125p:plain

長いのでかなり省略したが、これらの文字列はlibrary等のコードであることがわかる。DLLの説明に関しては、また次回以降で行っていきたいとおもう。