私がいつものようにAndroidマルウェア分析を行っている際、特定のサンプルのクラス・モジュールにざっと目を通していると、以下のようなコードを見つけた。
昨年後半、私はPortable Network Graphics(PNG)画像フォーマット、特にテキスト情報を持つフィールドについて、より詳細にチェックしていた。コードを見ていると、なぜこのアプリケーションはPNGファイルの「tEXt」チャンクが存在しているかどうか、チェックする必要があるのかということについて、すぐに疑念が生じた。
私はコードに目を通し続け、この特定コードが画像ファイルを特定するため、どこでコールされるかを発見した。
同コードのこの部分は、画像ファイルがリソース名「icon.png」を使用し、アプリケーションとバンドルされていることを示している。それからこの画像は開かれ、PNGチャンク(図1)をチェックするコードがコールされる方法へと送られる。
APKパッケージのリソースを検査することで、似たような名称の3つのファイルが現れる。これはtEXtチャンクの初回の発生にしか興味を持っていないため、私はただちにHEXビューワを取り出し、全ファイルの最初のtEXtチャンクを調べた。これらは皆、特定のチャンク用に同一のバイナリデータを含んでいた。以下は、この画像の内部表示と、HEXビューワでレンダリングの際にどう見えるかを示している。
この画像は、アプリケーションのアイコンとしても使用されている。よって、デバイスへのインストール中もインストール後も、非常に良く目にする。
現時点で、図3のデータは私にはほとんど意味が無いが、tEXtチャンクがバイナリデータ、もしくは読めないストリングを持つのは普通ではない。そこで図1の残りのコードの分析を続けた。更に分析して分かったのは、これが図3の隠されたデータを読み、ハードコードされたtext stream(「キー」)に対してビットごとのXOR演算を、どのバイト読み出しでも実施することだ。
私はPython派なので、図3から隠れた情報をデコードするため、以下のような小さなスクリプトを作成した。このアルゴリズムは、図5のコードで分かったことに基づいている。スクリプト(図6.a)を実行した後、驚いたことに、読み取り可能な英単語と数がいくつかあった!
これらのプレーンテキスト情報が、アプリケーションに対して何を意味するのかは、依然としてハッキリしないが、現時点で、こえららのデータ(図6.b)をPNGファイル(図3)のtEXtチャンクデータから隠すため、電子透かしを使用していることが分かった。しかし、電子透かしの厳密な定義を見ると、このサンプルが本当に電子透かし的であると考えられるのかどうかは、議論の余地がある。PNGファイルのチャンクの一つで、エンコードされたデータのシンプルな埋め込みに過ぎないからだ。
図5の残りのコードの分析を続けると、これら隠された情報(部分的なスクリーンショットは以下の通り)が、アプリケーションの主要な動機(すなわち有料番号にSMSを送信するということ)をサポートするために使用されているという事実がさらに強固となった。
上のコードを発見したほか、SMSの送信オペレーションのため、これら情報を実際に使用していることを確かめるため、Androidデバイスエミュレータでアプリケーションの実行も行った。そしてここでは、送出されるSMSイベントが記録され、図6.bのデコードされたデータとよく似た詳細が得られた。このイベントは、私が新たにインストールされたアプリケーションのメインUIから、「Next」ボタンをヒットした途端に起こった。
このアプリケーションのsha1は「ac118892190417c39a9ccbc81ce740cf4777fde1」で、「Trojan:Android/FakeRegSMS.B」として検出される。
Threat Solutions post by ? Jessie
----
2012年1月30日:電子透かしについてさらに詳述するため、タイトルとテキストに修正を加えて更新した。
図1
昨年後半、私はPortable Network Graphics(PNG)画像フォーマット、特にテキスト情報を持つフィールドについて、より詳細にチェックしていた。コードを見ていると、なぜこのアプリケーションはPNGファイルの「tEXt」チャンクが存在しているかどうか、チェックする必要があるのかということについて、すぐに疑念が生じた。
私はコードに目を通し続け、この特定コードが画像ファイルを特定するため、どこでコールされるかを発見した。
図2
同コードのこの部分は、画像ファイルがリソース名「icon.png」を使用し、アプリケーションとバンドルされていることを示している。それからこの画像は開かれ、PNGチャンク(図1)をチェックするコードがコールされる方法へと送られる。
APKパッケージのリソースを検査することで、似たような名称の3つのファイルが現れる。これはtEXtチャンクの初回の発生にしか興味を持っていないため、私はただちにHEXビューワを取り出し、全ファイルの最初のtEXtチャンクを調べた。これらは皆、特定のチャンク用に同一のバイナリデータを含んでいた。以下は、この画像の内部表示と、HEXビューワでレンダリングの際にどう見えるかを示している。
図3
この画像は、アプリケーションのアイコンとしても使用されている。よって、デバイスへのインストール中もインストール後も、非常に良く目にする。
図4
現時点で、図3のデータは私にはほとんど意味が無いが、tEXtチャンクがバイナリデータ、もしくは読めないストリングを持つのは普通ではない。そこで図1の残りのコードの分析を続けた。更に分析して分かったのは、これが図3の隠されたデータを読み、ハードコードされたtext stream(「キー」)に対してビットごとのXOR演算を、どのバイト読み出しでも実施することだ。
図5
私はPython派なので、図3から隠れた情報をデコードするため、以下のような小さなスクリプトを作成した。このアルゴリズムは、図5のコードで分かったことに基づいている。スクリプト(図6.a)を実行した後、驚いたことに、読み取り可能な英単語と数がいくつかあった!
これらのプレーンテキスト情報が、アプリケーションに対して何を意味するのかは、依然としてハッキリしないが、現時点で、こえららのデータ(図6.b)をPNGファイル(図3)のtEXtチャンクデータから隠すため、電子透かしを使用していることが分かった。しかし、電子透かしの厳密な定義を見ると、このサンプルが本当に電子透かし的であると考えられるのかどうかは、議論の余地がある。PNGファイルのチャンクの一つで、エンコードされたデータのシンプルな埋め込みに過ぎないからだ。
図6
図5の残りのコードの分析を続けると、これら隠された情報(部分的なスクリーンショットは以下の通り)が、アプリケーションの主要な動機(すなわち有料番号にSMSを送信するということ)をサポートするために使用されているという事実がさらに強固となった。
図7
上のコードを発見したほか、SMSの送信オペレーションのため、これら情報を実際に使用していることを確かめるため、Androidデバイスエミュレータでアプリケーションの実行も行った。そしてここでは、送出されるSMSイベントが記録され、図6.bのデコードされたデータとよく似た詳細が得られた。このイベントは、私が新たにインストールされたアプリケーションのメインUIから、「Next」ボタンをヒットした途端に起こった。
図8
このアプリケーションのsha1は「ac118892190417c39a9ccbc81ce740cf4777fde1」で、「Trojan:Android/FakeRegSMS.B」として検出される。
Threat Solutions post by ? Jessie
----
2012年1月30日:電子透かしについてさらに詳述するため、タイトルとテキストに修正を加えて更新した。