Este es un marco de evaluación de defectos avanzados conjuntos para aplicaciones de Android (JAADS, Nombre original Jade renombrado para evitar un problema potencial de marca registrada), escrita en 2014. Jaadas es una herramienta escrita en Java y Scala con el poder del SOOT para proporcionar un análisis estático de interprocedura e intraaprocedura para las aplicaciones de Android. Sus características incluyen el análisis de uso indebido de API, análisis de la denegación de servicio local (accidente de intención), análisis de flujo de contaminación de estilo entre procedimientos (desde la intención hasta la API sensible, es decir, obtener un parcelable de la intención y usarlo para comenzar la actividad).
Jaadas también puede combinar multidex en uno y analizarlos por completo. La mayoría de las capacidades de detección de Jaadas se pueden definir en el archivo de configuración Groovy y el archivo de texto (fuente de Soot y archivo de sumidero).
Jaadas está empaquetada en un solo archivo JAR y proporciono un archivo de reglas de vulnerabilidad predeterminada. Hay dos modos principales para Jaadas.
FullAnalysis desata todo el poder de las jaadas y el hollín, incluido el análisis de aplicación completa entre procesos y el análisis de flujo de datos entre procesos. Pero también puede consumir mucho tiempo y puede no terminar en máquinas con memoria pequeña (<16 GB). El valor predeterminado es completo.
FastAnalysis generalmente termina en menos de 1 minuto y está destinado al análisis por lotes a gran escala. El análisis entre procedimientos está deshabilitado para lograr la flexibilidad de MaxMium. En situaciones normales, este modo es suficiente para una auditoría común.
-El análisis de fastanálisis permite el fastanálisis y deshabilita el análisis completo.
Línea de comando para el análisis: java -jar jade-0.1.jar vulnanalysis -f 1.apk -p /xxx/android-sdks/platforms/ -c /xxx/JAADAS/jade/config/ --fastanalysis
### -La opción C -c debe proporcionarse como directorio para archivos de configuración, incluidas las reglas de mancha, fuente y sumidero, descripción de la API vulnerable, etc. Si no comprende el contenido de los archivos de configuración, no los modifique, déjelos como está.
### -Opción P -p -p especifica el directorio de la plataforma Android, que generalmente apunta a $ {android_sdk}/plataformas/.
El hollín requiere que se presente la versión específica de Platform.jar, por ejemplo, si su objetivo de análisis tiene TargetSDK = 22, entonces Soot buscará plataformas/android-22/android.jar, de lo contrario aumentará el error. Si no tiene el frasco específico, en realidad puede hacer un simbólico en esa posición que señala lo que ya tiene, digamos, Android-16.Jar para hacer feliz hollín. No afectará la precisión del resultado del análisis.
-f opción Especifica el APK que se analizará.
Jaadas emitirá el resultado en una lista a la consola y también escribe el resultado JSON-ed a la salida/ directorio: {MD5_OF_INPUT_APK} .txt. Se puede encontrar una muestra en el directorio de salida de este repositorio: https://github.com/flankerhqd/jaadas/blob/master/output/92db77bbe1cae9004f11ef9d3d6cbf08.txt
Retazo:
}, {
"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)> "
}]}Para evitar OOM, agregue la opción -xmx a la línea de comandos, por ejemplo, java -jar -xmx8192m jade -0.1.jar
Jaadas está organizado por Gradle. Ejecutar gradle fatJar en la raíz del directorio de origen y el jar de un solo presupuesto se generará en ./jade/build/ Cada directorio en realidad representa un submódulo Git originalmente. Por simplicidad, los estoy combinando con los mismos directorios raíz y puede cambiarlo como desee, rastrear los cambios de hollín ascendentes.
https://speakerdeck.com/flankerhqd/jade-joint-acvanced-defect-essessment
https://github.com/flankerhqd/jaadas/wiki
https://github.com/flankerhqd/jaadas/releases/download/release0.1/jaadas-0.1.zip
Gracias Soot Authors (https://github.com/sable/soot) por proporcionar un marco tan bueno.
Este es solo un prototipo de investigación, use bajo su propio riesgo. Los resultados pueden contener falsos positivos y falsos negativos debido a la naturaleza del análisis estático. Siéntase libre de bifurcarse y tirar de él.
Jdk> = 1.8 (debe)
Scala> = 2.11 probado