martedì 3 gennaio 2017

Cerberus App

In questi giorni sta avendo diffusione il video di un giovane filmmaker che racconta le vicessitudini sul furto (voluto) di un telefono Android




Invece di utilizzare le applicazioni tipiche di Android e IOS per tracciare la posizione del telefono, e' stata impiegata un app specifica Cerberus....vale la pena darci un'occhio

Una prima differenza: su Play Store esiste una versione del software mentre sul sito se ne possono scaricare due versioni differente (la prima e' identica a quella del Play Store la seconda utilizza dei metodi piu' avanzati per nascondersi come app di sistema)

Ovviamente per la prova ho utilizzato un telefono di prova settato su un account di prova..il software prende il controllo completo del telefono e quindi se cade nelle mani sbagliate sono guai. Cerbarus ha subito nella sua storia un leak delle informazioni degli utenti

Al momento attuale l'applicazione e' gratuita ma per una sola settimana ed per un solo dispositivo. Dopo l'abbonamento e' di 5 euro/anno

Schermata di installazione
Tutti i servizi passano dai server di Cerberus (di fatto non si ha una diretta interazione con il telefono remoto ma solo con l'interfaccia web ospitata sui server Cerberus). L'username e password di login sono le stesse per loggarsi sul sito e per configurare l'app




alcune funzioni richiedono che il terminale sia rootato



Un aspetto divertente e' che se si cerca di disinstallare l'applicazione nel modo standard il pulsante non e' cliccabile. 



Altrettanto curiosamente non e' necessaria nessuna password per procedere...basta andare Impostazione/Sicurezza/Amministratori dispositivo e togliere la spunta a Cerberus. Dopo questa operazione l'applicazione e' disistallabile. A meno di un blocco remoto quindi chi ha in mano il telefono puo' sempre rimuovere il blocco



Nell'interfaccia web sulla sinistra si selezionano i comandi da inviare al terminale e sulla destra si ha il log



Si possono scattare foto da remoto ed acquisire l'audio ambientale




Visto che l'apk e' semplicemente ho provato a disassemblarlo con Jadx 

Librerie offuscate

Come era facile da prevedere il codice principale e' stato offuscato ma si sono un po' di cose interessanti. Prima di tutto il file Manifest piu' mostruoso che si possa immaginare (la API di Google e' stata modificata)
----------------------------
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="11" android:="2.1.2" package="com.lsdroid.cerberus.client" platformBuildVersionCode="22" platformBuildVersionName="5.1.1-1819727">
    <uses-sdk android:="15" android:="22" />
    <uses-permission android:="android.permission.SEND_SMS" />
    <uses-permission android:="android.permission.READ_CONTACTS" />
    <uses-permission android:="android.permission.PROCESS_OUTGOING_CALLS" />
    <uses-permission android:="android.permission.RECEIVE_SMS" />
    <uses-permission android:="android.permission.READ_SMS" />
    <uses-permission android:="android.permission.READ_PHONE_STATE" />
    <uses-permission android:="android.permission.INTERNET" />
    <uses-permission android:="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:="com.google.android.providers.gsf.permission.READ_GSERVICES" />
    <uses-permission android:="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:="android.permission.WRITE_SETTINGS" />
    <uses-feature android:="20000" android:="true" />
    <uses-feature android:="android.hardware.telephony" android:="false" />
    <application android:="@style/" android:="@string/" android:="@drawable/icon" android:="o.ᑊ">
        <activity android:="@style/" android:="@string/" android:="o.ᐠ" android:="2" android:="fb0" android:="2" />
        <activity android:="@style/" android:="@string/" android:="o.ᕀ" android:="1" android:="fb0" android:="2" />
        <activity android:="@string/" android:=".StartActivity" android:="1" android:="fb0" android:="2">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:="@string/" android:="o.ᔊ" android:="1" android:="fb0" android:="2" />
        <activity android:="@style/" android:="@string/" android:="o.เ" android:="1b0" android:="@string/" android:="2" />
        <receiver android:=".StartReceiver">
            <intent-filter android:="2147483647">
                <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </receiver>
        <receiver android:=".SmsReceiver">
            <intent-filter android:="100">
                <action android:name="android.intent.action.DATA_SMS_RECEIVED" />
                <data android:="sms" android:="*" android:="12346" />
            </intent-filter>
        </receiver>
        <service android:="o.ˆ" />
        <service android:="o.ᕑ" />
        <service android:="o.ˀ" />
        <service android:="com.google.android.gms.analytics.CampaignTrackingService" />
        <receiver android:="com.google.android.gms.analytics.CampaignTrackingReceiver" android:="true">
            <intent-filter>
                <action android:name="com.android.vending.INSTALL_REFERRER" />
            </intent-filter>
        </receiver>
        <meta-data android:="com.google.android.gms.version" android:="@integer/" />
        <meta-data android:="com.google.android.maps.v2.API_KEY" android:="AIzaSyCLvVIVynRBR7yC2Wa18i" />
    </application>
</manifest>
----------------------------

c'e' anche l'uso della libreria okhttp 
Ovviamente,e per fortuna, per l'uso del software ci vuole almeno un accesso fisico al dispositivo e cio' ne limita l'uso non idoneo alla sua funzione principale. In definitiva comunque un buon software (se non fosse che la licenza d'uso permette agli sviluppatori di divulgare dati...e visto il controllo di informazioni che si possono raccogliere e' meglio stare attenti a non dare la propria chiave di casa in mani sconosciute)