Bibliothèque
Ma bibliothèque

+ Ajouter à la bibliothèque

Contacter-nous !
Support 24/24 | Rules regarding submitting

Nous téléphoner

0 825 300 230

Forum

Vos requêtes

  • Toutes : -
  • Non clôturées : -
  • Dernière : le -

Nous téléphoner

0 825 300 230

Profil

Android.Oldboot.1

Added to the Dr.Web virus database: 2014-01-20

Virus description added:

A Trojan that resides in the boot partition of the file system.

Once the infected device is turned on, the kernel image containing a modified init.rc script, /sbin/imei_chk, and /sbin/.bootinfo is extracted. After that, the init.rc script is read by the operating system.

The init.rc script has the following changes:

service imei_chk /sbin/imei_chk
class core
socket imei_chk stream 666

Based on these commands, the operating system launches the /sbin/imei_chk bootkit and creates a socket with the same name.

Bootkit's operation

/sbin/imei_chk acts as an installer of GoogleKernel.apk and libgooglekernel.so and as a gate though which GoogleKernel.apk can execute commands with root privileges via the socket at imei_chk.

Once launched, the bootkit extracts the GoogleKernel.apk and libgooglekernel.so files from its body and installs them as follows:

#scans /proc/mounts and identifies mounting /system
#remounts system to
mount -o remount,rw %s /system
#saves libgooglekernel.so
/system/lib/libgooglekernel.so
chown system.system libgooglekernel.so
chmod 644 libgooglekernel.so
#copies GoogleKernel.apk
/system/app/GoogleKernel.apk
chown system.system GoogleKernel.apk
chmod  644 GoogleKernel.apk
mount -o remount,ro rootfs /system
pm enable com.android.googlekernel

Among environmental variables, the bootkit searches for the socket created on system startup and listens for the following commands:

cmds—can execute any command with root privileges via console,
get_mnt_dev_name—name of the mounted device,
get_channel_id—command results in the reply with 888888 or a string from /sbin/.bootinfo.

GoogleKernel.apk and libgooglekernel.so components

GoogleKernel.apk is a bot that operates as a service. It contains lib/armeabi/libgooglekernel.so that can be used when root privileges are not available. It closely communicates with the libgooglekernel.so library that performs main malicious actions and has a number of exported functions. Moreover, native code of this library can call Java classes using JNI.

Once launched, GoogleKernel.apk creates a system thread and calls the main exported function doWork.

Communication with the server

The bot communicates with several command and control servers and can receive lists with new addresses.

Step 1—get a domain list

First, the bot reads the configuration file and decrypts it.

/data/data/com.android.googlekernel/db/data.i

Decryption routine is as follows:

function despan($data){
    $key="\xA1\x12\xF3\x92\xAE\x3E\x29\xCD";
    $l=strlen($data);
    $s="";
    $j=0;
    for ($i=0;$i<$l;$i++){
    $s.=chr(ord($data[$i])^ord($key[$j]));
    $j++;
    $j=$j%8;
    }
    return $s;
}

The bot also examines the checksum of the file as follows:

function checksum($data){
    $r=0;
    $l=strlen($data);
    for ($i=0;$i<$l;$i++){
    $r=$r+(ord($data[$i]));
    }
    return $r;
}

File structure is as follows:

struct CFG{
    uint8 encrypt_data[];
    uint32 sum;
};

This file contains the list of domains separated by commas. If the file is missing, it is downloaded from http://info.[xxxxxxxxxx].com/data.i.

In reply to the download request, the bot receives an encrypted file with details on its checksum. An unchecked file is saved to /data/data/com.android.googlekernel/db/data.i.

Step 2—GET request and acquiring basic configuration data to activate bot's backup servers

GoogleKernel.apk consecutively sends GET requests to domains from the /data/data/com.android.googlekernel/db/data.i list for the %chanal_id%.json script. The chanal_id parameter is stored in the bot's body (the value equals 8008). Then the bot waits for a JSON object. The configuration file can contain the following commands:

  • su—activate HZ_main (http://[xxxxxxxx]666.com:8090/backurl.do, [xxxxxxxx]666.com, [xxxxxxxx]666.com) and main (http://[xxxx]108.net/install.html, [xxx]6.com, [xxxx]fy.com, [xxx]jobs.com);
  • type—activate MY_main (http://[xxxxxxx]999.com:8090/backurl.do, [xxxxxxxx6666].com);
  • install—download and install an APK file on the device; the file contains additional parameters (id, app, main, ver, vercode, size, path);
  • uninstall—remove APK (app).

Step 3—POST request and sending bot statistics

Depending on the command type (“su” (HZ_main, main) and “type” (MY_main)), relevant features and configuration files are activated. These functions are identical and differ only in domain names and path to saved settings.

MY_main function

Files are placed into the following directory:

/data/data/com.android.googlekernel/bakdata/
mnt/sdcard/.android_security/bakdata.i
bakdata.i—command and control server at [xxxxxxxxx]666.com
dns.i—DNS parameter domains
post.i
db.i

The bot sends a POST request and the /installreq.do /installreq2.do script with the bot's information in GZIP format (urlencode(JSON)) to [xxxxxxxxx666].com to port 8090 or 9090.

<?xml version='1.0' encoding='UTF-8 ' ?>
<HB>
    <DN>golden</DN> #Build.DEVICE
    <DT>GT-I8190</DT> #Build.MODEL
    <OS>4.1.2</OS> #Build.VERSION.RELEASE
    <EI>356507059351894</EI> #localTelephonyManager.getDeviceId()
    <SI>250026699187743</SI> #localTelephonyManager.getSubscriberId()
    <AC>30</AC> #versionspan
    <PN>3.0</PN> #versionName
    <ID>8631ccb43a5dc066ae7920c43f36dc40</ID> #getId
    <CI>8008</CI> #getChannelId
    <TN></TN> #localTelephonyManager.getLine1Number()
    <NE>TYPE_WIFI</NE> #NETWORK_TYPE
    <MAC>9C:3A:AF:51:01:F6</MAC> #MAC
    <PATH>D</PATH> #debug, release
    <ISS />
    <RSS />
</HB>

Then the malicious program waits for a JSON command.

[{"addr":"","cardid":"db8ce287d3e712a9c2936a39bf165e43","dns":"[xxxxxxxx]66.com","repost":"1","time":"720","install":[],"uninstall":[]}]

The following commands can be executed:

  • addr—phone number (this feature is not implemented),
  • install—install APK,
  • uninstall—remove APK,
  • dns—domains (ACTION_TEST_BROADCAST, TEST_BROADCAST_LABEL executes broadcast),
  • repost—number,
  • cardid—server sends ID that is stored to a file,
  • time—timeout.

HZ_main function

http://[xxxxxxxx]666.com:8090/backurl.do
[xxxxxxxx]666.com,[xxxxxxxx]666.com
/data/data/com.android.googlekernel/bak/
dns.i
post.i
db.i
mnt/sdcard/.android_security/
mnt/sdcard/.android_security/bakdb.i

main function

http://[xxxx]108.net/install.html
[xx]y6.com,[xxxx]fy.com,[xxx]jobs.com
/data/data/com.android.googlekernel/data/
dns.i
post.i
db.i
mnt/sdcard/.android_security/
mnt/sdcard/.android_security/db.i

This functions sends a GET report as follows:

http://[xxxxxxxx]666.com:8090/installapp.do?cardid=db8ce287d3e712a9c2936a39bf165e43&appid=db8ce287d3e712a9c2936a39bf165e44&net=NETWORK_TYPE_UMTS&channelid=540042

The bot gets the following domains from the server:

[xxx]pfr.net, [xxx]ile.net, [xx]ppw.net, [xxx]tte.net

Recommandations pour le traitement


Android

  1. Si votre appareil mobile fonctionne correctement, veuillez télécharger et installer sur votre appareil mobile le produit antivirus gratuit Dr.Web для Android Light. Lancez un scan complet et suivez les recommandations sur la neutralisation des menaces détectées.
  2. Si l'appareil mobile est bloqué par le Trojan de la famille Android.Locker (un message sur une violation grave de la loi ou une demande de rançon s’affichent sur l'écran de l'appareil mobile), procédez comme suit :
    • démarrez votre Smartphone ou votre tablette en mode sans échec (si vous ne savez pas comment faire, consultez la documentation de l'appareil mobile ou contactez le fabricant) ;
    • puis téléchargez et installez sur votre appareil contaminé le produit antivirus gratuit Dr.Web для Android Light et lancez un scan complet puis suivez les recommandations sur la neutralisation des menaces détectées ;
    • Débranchez votre appareil et rebranchez-le.

En savoir plus sur Dr.Web pour Android