シマンテックは8月25日、Androidを狙うランサムウェア(身代金型ウイルス)が検出をすり抜け解析を回避する手口を同社ブログで解説した。
ランサムウェアの多くは、Androidスマートフォンなどのモバイルデバイスへの攻撃として使われており、セキュリティベンダーが使う静的解析ツールや静的シグネチャシステムによって検出されにくい傾向がある。
同社は、Android.LockdroidとAndroid.Simplockerのマルウェアファミリーを分析。この2つは以前、コードやデータが同じにならないよう意図して亜種を作りながら、画像やアイコンなどのリソースファイルの一部を変更しなかった。その後、変化が定着し始めると、新しい亜種は画像も変えてくるようになった。
新しい亜種は、画像をアプリのパッケージに格納するのをやめて、データURI(Uniform Resource Identifier)スキームで画像を埋め込むようにした。データURIスキームを使うと、まるで外部リソースのようにWebページにインラインでデータを埋め込むことができる。こうすることで、Base64でエンコードされたデータに画像をインラインで保存することができる。
ランサムウェアは、スキャンツールの解析を回避するため、データの文字列を操作し、別のプログラムに見せかけている。文字列の操作にはいくつか方法がある。
1つは、文字列を逆順の形式で格納し、実行時に正しい形を構築して利用するというもので、実際の文字列は静的解析のときまで判明しない。
2つ目は、実際の文字列の先頭や末尾に、連続したゴミ文字を埋め込むというもの。完成した文字列をBase64によるエンコードを実行し、マルウェアのコードで使う。その後、プロセスを逆に実行して、実際の文字を取得する(まず文字列をBase64デコードを実行し、次に先頭または末尾に追加された連続のゴミ文字を削除すれば、実際の文字列が得られる)。
3つ目は、ハードコードされた暗号鍵を使い、文字列をAESで暗号化するというもの。文字列を暗号化すると静的な解析ツールには無意味に見えることになる。マルウェアが動作し、文字列が復号されて初めて文字列は意味を成すようになる。
4つ目は、特定の文字列を検索されないようにするために、空白やカンマを付け加えたり、Unicodeに変換したりする方法。例えば、「Child's」という単語を「Child\u2019s」と表すことで検索を回避できる可能性がある。
上に挙げた手法は、1つしか選べないわけではないので、複数の手口を組み合わせているランサムウェアもある。
変数名を故意にあいまいにする
また、ランサムウェアは、静的解析ツールやフレームワークの動作を遅らせる各種の手法を利用することもある。これは、同じ名前の複数のフィールドを持つクラスファイルを生成することを狙った手口となる。
実行するには、DEXファイル(Dalvik実行可能ファイル)形式でfieldid構造を操作し、すべての変数で同じstringidエントリを指すようにname_idxフィールドの値を変更する。操作された変数は、すべて同じ名前でデコンパイル/逆アセンブルされた出力が作られ、あいまい性が生じて平均的な静的アナライザでは判断できなくなる。
複数の関数呼び出しがあるスパゲッティコード
ほかの手口でWindowsマシン向けに設計されたマルウェアから借用したものがある。通常のコードフロー中に意味のないゴミ関数が呼び出されると、スパゲッティ構造が生じる。こうなると、コードの一部から別の部分に多数の分岐が発生してコードが意味もなくらせん状になり、結果的に解析が遅くなる。
コードの全体で無意味な算術 null 計算を使う
続く手口は使われていない複数のゴミ算術演算を実行するというもの。静的なコード解析にかかる時間を引き延ばすための命令が書かれている。
DEXファイルを動的に読み込み、データを.apkリソースに格納する
また、比較的最近に出てきた亜種では、メインペイロードのコードが暗号化された1つ以上のDEXファイルとして、アセットフォルダ内に格納されている。実行時にアセットファイルが復号され、DexClassLoaderによって動的に読み込まれ、ペイロードが実行される。
URLその他の文字列データをAndroidパッケージファイル(.apk)のリソースに格納し、実行時にはコードとデータのブリッジ(R.java)を使ってそれにアクセスするという手口もある。特定のデータを.apkリソースに隠すことによって、マルウェアの作成者は解析手法を回避しようとしている。
同社は、ユーザーがランサムウェアからの攻撃からモバイルデバイスを守るために、見たことのないサイトからアプリをダウンロードすることは避け、信頼できるサイトからだけダウンロードするよう呼び掛けている。
また、アプリがリクエストする許可の種類にも注意が必要だという。デバイスとデータを保護するため、ノートンなどの適切なモバイル用セキュリティアプリをインストールすることを推奨している。