โ›ฐ๏ธAnalyse statique (Android)

Mรฉthodes de chiffrement faibles

L'utilisations incorrectes des algorithmes de chiffrement peuvent entraรฎner l'exposition de donnรฉes sensibles, de clรฉs provรฉes, des broken authentication, une session non sรฉcurisรฉe ou encore une attaque par usurpation d'identitรฉ.

Commandes grep intรฉressantes

Recherche de hash MD5

grep -e "[0-9a-f]\{32\}"

Recherches par mots clรฉs

grep -r "SecretKeySpec" *

grep -rli "aes" *

grep -rli "iv"

Prรฉfรฉrences d'activitรฉs รฉxportรฉes

Comme nous le savons, le composant d'activitรฉ d'Android est le ou les รฉcrans d'application et la ou les actions qui s'appliquent ร  ce ou ces รฉcrans lorsque nous utilisons l'application. Lorsqu'une activitรฉ est partagรฉe avec d'autres applications sur l'appareil, elle est donc accessible ร  toute autre application sur l'appareil.

Commande grep pour les lister

cat AndroidManifest.xml | grep android:exported

Backups actifs

Cette fonctionnalitรฉ lorsqu'elle est activรฉe permet ร  n'importe qui d'enregistrer un backup de l'application sur son ordinateur ce qui est considรฉrรฉ comme une mauvaise pratique de sรฉcuritรฉ.

Dรฉtection avec grep

cat AndroidManifest.xml | grep android:AllowBackup

Application dรฉbogable

La fonctionnalitรฉ de dรฉbogage est interessante dans un contexte de prรฉ-production car cela permet de connecter un dรฉbogeur ร  l'application afin de faire toutes sortes d'interactions avec l'application ce qui en fait ainsi un risque car un attaquant peut en profiter ร  des fins malicieuses.

Dรฉtection avec grep

cat AndroidManifest.xml | grep android:debuggable

Permissions

Les autorisations du systรจme sont divisรฉes en deux groupes : ยซ normales ยป et ยซ dangereuses ยป. Les groupes d'autorisation normaux sont autorisรฉs par dรฉfaut, car ils ne prรฉsentent aucun risque pour votre vie privรฉe. (par exemple, Android permet aux applications d'accรฉder ร  Internet sans votre permission.) Cependant, les groupes d'autorisation dangereux peuvent donner aux applications l'accรจs ร  des รฉlรฉments tels que votre historique d'appels, vos messages privรฉs, votre emplacement, votre camรฉra, votre microphone, etc. Par consรฉquent, Android vous demandera toujours d'approuver les autorisations dangereuses.

Certaine applications demandent parfois plus de permissions de nรฉcessaires au bon fonctionnement de l'application. Il est donc important de faire attention ร  cette fonctionnalitรฉe (notamment dans le cas de malwares).

Lister les permissions avec grep

cat AndroidManifest.xml | grep "android.permission."

Via abd:

$ adb shell dumpsys package com.example.xyz
...
declared permissions:
  com.google.android.youtube.permission.C2D_MESSAGE: prot=signature, INSTALLED
requested permissions:
  android.permission.INTERNET
  android.permission.ACCESS_NETWORK_STATE
install permissions:
  com.google.android.c2dm.permission.RECEIVE: granted=true
  android.permission.USE_CREDENTIALS: granted=true
  com.google.android.providers.gsf.permission.READ_GSERVICES: granted=true
...

Liste des permissions considรฉrรฉes dangereuses

READ_CALENDAR
WRITE_CALENDAR
READ_CALL_LOG
WRITE_CALL_LOG
PROCESS_OUTGOING_CALLS
CAMERA
READ_CONTACTS
WRITE_CONTACTS
GET_ACCOUNTS
ACCESS_FINE_LOCATION
ACCESS_COARSE_LOCATION
RECORD_AUDIO
READ_PHONE_STATE
READ_PHONE_NUMBERS
CALL_PHONE
ANSWER_PHONE_CALLS
ADD_VOICEMAIL
USE_SIP
BODY_SENSORS
SEND_SMS
RECEIVE_SMS
READ_SMS
RECEIVE_WAP_PUSH
RECEIVE_MMS
READ_EXTERNAL_STORAGE
WRITE_EXTERNAL_STORAGE

Firebase instance(s)

Le service Firebase de Google est l'une des plates-formes de dรฉveloppement back-end les plus populaires pour les applications mobiles et Web qui offre aux dรฉveloppeurs une base de donnรฉes basรฉe sur le cloud, qui stocke les donnรฉes au format JSON et les synchronise en temps rรฉel avec tous les clients connectรฉs.

FireBaseScanner

FireBaseScanner est un outil permettant de scanner des bases de donnรฉes Firebase ร  la recherche de problรจmes de configuration.

Exemple d'utilisation:

$ python FireBaseScanner.py -p /path/to/target.apk

ressource: https://github.com/shivsahni/FireBaseScanner

Analyse de code

Secrets hardcodรฉs, mauvaises pratiques de sรฉcuritรฉ dans le code, leaks d'IP interne etc.

Quelques commandes grep interessantes

Recherche d'URI et d'endpoints

grep -aiRPoH โ€˜https?://[a-zA-Z0-9\-\_\.\~\!\*โ€™\โ€™โ€™\
(\)\;\:\@\&\=\+$\, \/\?\#\[\]\%]+โ€™|sed โ€˜s/:/, /

grep -Ei 'api' -Ei 'http' -Ei 'https' -Ei 'URI' -Ei 'URL' -R .

grep -Eio '(http|https)://[^/"]+' -Eio 'content://[^/"]+' -R .

Recherche de secrets

grep -aiRPoH โ€˜password=|key=|pass=|secret=โ€™

Recherche de fichiers et leurs permissions

grep -Ei 'MODE_WORLD_READABLE' -Ei 'MODE_WORLD_WRITEABLE' -R .

grep -Ei 'getCacheDir' -Ei 'getExternalCacheDirs' -R .

grep -Ei 'openFileOutput' -Ei 'FileOutputStream' -Ei 'OutputStream' -Ei 'getExternalFilesDir' -R .

Recherche de base de donnรฉes

grep -Ei 'localUserSecretStore' -Ei 'getWriteableDatabase' -Ei 'getReadableDatabase' -R .

grep -Ei 'realm' -Ei 'getDefaultInstance' -Ei 'beginTransaction' -Ei -R .

grep -Ei 'SQLiteDatabase' -Ei 'insert' -Ei 'query' -Ei 'delete' -Ei 'update' -R .

Recherche d'utilisateurs

grep -Ei 'username' -Ei 'user' -Ei 'pass' -Ei 'passwd' -Ei 'userid' -Ei 'password' -R .

grep -Ei '.config' -Ei 'secret' -Ei 'token' -Ei 'login' -Ei 'auth' -R .

Recherche de logs

grep -Ei 'Log.v' -Ei 'Log.d' -Ei 'Log.i' -Ei 'Log.w' -Ei 'Log.e' -R .

grep -Ei 'log' -Ei 'logger' -Ei 'printStackTrace' -Ei 'System.out.print' -Ei 'System.err.print' -R .

Recherche de content

grep -Ei 'Cursor' -Ei 'content' -Ei 'ContentResolver' -Ei 'CONTENT_URI' -Ei 'Loader' -Ei 'onCreateLoader' -Ei 'LoaderManager' -Ei -R . 

Recherche de keystore

grep -Ei 'AndroidKeystore' -Ei 'KeyStore' -Ei 'crypto' -Ei 'cipher' -Ei 'store' -R .

Classes intรฉressantes

  • SharedPreferences (stock les valeurs clรฉs par paire)

  • FileOutPutStream (utilise stockage interne ou externe)

  • NotificationManager (Vรฉrifier si les notifications envoyรฉs peuvent contenir des infos sensibles)

Fonctions intรฉressantes

  • getExternal* (utilise stockage externe)

  • getWriteableDatabase (retourne SQLiteDB pour รฉcriture)

  • getReadableDatabase (retourne SQLiteDB pour lecture)

  • getCacheDir / getExternalCacheDirs (utiliser les fichiers en cache)

Il est aussi important de faire une analyse des librairies ".so" prรฉsentes dans le repertoire /lib avec IDA.

Derniรจre mise ร  jour