Il s'agit du cadre d'évaluation des défauts avancés conjoint pour les applications Android (JAADS, nom d'origine Jade renommé pour éviter un problème de marque potentiel), écrit en 2014. Jaadas est un outil écrit en Java et Scala avec la puissance de la suie pour fournir à la fois l'interprocedure et l'intraprocédure Analyse statique pour les applications Android. Ses caractéristiques incluent l'analyse par abus API, l'analyse locale-déni de service (crash de l'intention), l'analyse du flux de souillure du style interproce (de l'intention à l'API sensible, c'est-à-dire en obtenant une parcelable à partir de l'intention et en l'utilisant pour démarrer l'activité).
Les Jaadas peuvent également combiner Multidex en un et les analyser complètement. La plupart des capacités de détection de Jaadas peuvent être définies dans le fichier de configuration et le fichier de texte de Groovy (fichier source et puits de Soot).
Jaadas est emballé dans une archive de pot unique et je fournis un fichier de règles de vulnérabilité par défaut. Il y a deux mode principaux pour les jaadas.
FullAnalysis déchaîne la pleine puissance des jaadas et de la suie, y compris l'analyse de l'application entière interproceuse et l'analyse du flux de données interprocésées. Mais il peut également consommer beaucoup de temps et peut ne pas finir sur les machines avec une petite mémoire (<16 Go). La valeur par défaut est en mode complet.
FastAnalysis se termine généralement en moins de 1 minute et est destiné à une analyse par lots à grande échelle. L'analyse interprocédure est désactivée pour atteindre la flexibilité du maxmium. Dans les situations normales, ce mode est suffisant pour l'audit commun.
- La fastanalyse permet une analyse rapide et désactive la pleine analyse.
Ligne de commande pour l'analyse: java -jar jade-0.1.jar vulnanalysis -f 1.apk -p /xxx/android-sdks/platforms/ -c /xxx/JAADAS/jade/config/ --fastanalysis
### - C Option -C doit être fourni en tant que répertoire pour les fichiers de configuration, y compris les règles de souillure, la source et le puits, la description de l'API vulnérable, etc. Si vous ne comprenez pas le contenu des fichiers config, ne les modifiez pas, laissez-les tels quels.
### - P Option -P L'option Spécifie le répertoire de plate-forme Android, qui pointe généralement vers $ {Android_Sdk} / Platforms /.
Soot nécessite que la version spécifique de Platform.jar soit présentée, par exemple, si votre objectif d'analyse a Targetsdk = 22, alors Soot recherchera des plates-formes / Android-22 / Android.jar, sinon augmentera l'erreur. Si vous n'avez pas le pot spécifique, vous pouvez en fait faire un symbolique à cette position pointant ce que vous avez déjà, disons, Android-16.jar pour rendre Soot heureux. Cela n'affectera pas la précision des résultats de l'analyse.
-F option spécifie l'APK à analyser.
Jaadas sortira le résultat d'une liste de console et écrit également le résultat JSON-ED à la sortie / répertoire: {MD5_OF_INPUT_APK} .txt. Un échantillon peut être trouvé dans le répertoire de sortie de ce repo: https://github.com/flankerhqd/jaadas/blob/master/output/92db77bbe1cae9004f11ef9d3d6cbf08.txt
Fragment:
}, {
"desc" : " sensitive data flow " ,
"sourceStmt" : " $r24 = virtualinvoke $r2.<android.content.Intent: java.lang.String getStringExtra(java.lang.String)>($r24) " ,
"custom" : " " ,
"vulnKind" : 2 ,
"destMethod" : " <cn.jpush.android.service.PushReceiver: void onReceive(android.content.Context,android.content.Intent)> " ,
"paths" : [],
"destStmt" : " virtualinvoke $r1.<android.content.Context: void sendBroadcast(android.content.Intent,java.lang.String)>($r27, $r24) " ,
"sourceMethod" : " <cn.jpush.android.service.PushReceiver: void onReceive(android.content.Context,android.content.Intent)> "
}, {
"desc" : " sensitive data flow " ,
"sourceStmt" : " $r4 = virtualinvoke $r2.<android.content.Intent: android.os.Bundle getExtras()>() " ,
"custom" : " " ,
"vulnKind" : 2 ,
"destMethod" : " <com.fugao.fxhealth.receiver.JPushReceiver: void onReceive(android.content.Context,android.content.Intent)> " ,
"paths" : [],
"destStmt" : " virtualinvoke $r1.<android.content.Context: void startActivity(android.content.Intent)>($r2) " ,
"sourceMethod" : " <com.fugao.fxhealth.receiver.JPushReceiver: void onReceive(android.content.Context,android.content.Intent)> "
}, {
"desc" : " sensitive data flow " ,
"sourceStmt" : " $r6 = virtualinvoke $r2.<android.content.Intent: java.lang.String getStringExtra(java.lang.String)>($r6) " ,
"custom" : " " ,
"vulnKind" : 2 ,
"destMethod" : " <cn.jpush.android.data.x: void a(android.content.Context)> " ,
"paths" : [],
"destStmt" : " virtualinvoke $r1.<android.content.Context: void startActivity(android.content.Intent)>($r2) " ,
"sourceMethod" : " <cn.jpush.android.service.PushReceiver: void onReceive(android.content.Context,android.content.Intent)> "
}, {
"desc" : " sensitive data flow " ,
"sourceStmt" : " $r9 = virtualinvoke $r2.<android.content.Intent: java.lang.String getStringExtra(java.lang.String)>($r9) " ,
"custom" : " " ,
"vulnKind" : 2 ,
"destMethod" : " <cn.jpush.android.data.x: void a(android.content.Context)> " ,
"paths" : [],
"destStmt" : " virtualinvoke $r1.<android.content.Context: void startActivity(android.content.Intent)>($r2) " ,
"sourceMethod" : " <cn.jpush.android.service.PushReceiver: void onReceive(android.content.Context,android.content.Intent)> "
}]}Pour éviter l'OOM, ajoutez -xmx l'option à Commandline, par exemple Java -Jar -xmx8192m Jade-0.1.jar
Jaadas est organisé par Gradle. Exécuter gradle fatJar à la racine du répertoire source et un JAR à un seul est généré sur ./jade/build/ Chaque répertoire représente en fait un sous-module GIT à l'origine. Pour plus de simplicité, je les combine dans les mêmes répertoires racines et vous pouvez le changer comme vous le souhaitez, suivre les changements de suie en amont.
https://speakerdeck.com/flankerhqd/jade-joint-advanced-defct-assesment
https://github.com/flankerhqd/jaadas/wiki
https://github.com/flankerhqd/jaadas/releases/download/release0.1/jaadas-0.1.zip
Merci des auteurs de suot (https://github.com/sable/soot) pour avoir fourni un si bon cadre.
Ce n'est qu'un prototype de recherche, à vos propres risques. Les résultats peuvent contenir de faux positifs et de faux négatifs en raison de la nature de l'analyse statique. N'hésitez pas à se chasser et à le tirer.
JDK> = 1,8 (MUST)
Scala> = 2.11 testé