Todos los creditos para mi bro overxfl0w.0verfl0w: escribió: Buenas a todos, hacia ya tiempo que no me pasaba por ningún foro .
Después de unas cuantas horas invertidas en la creación de un detector de malware para aplicaciones Android (APK), veo que ya hay algo más o menos estable y me he decidido a hacer un post para publicar y comentar el sistema.
Como ya he dicho se trata de un detector de malware para .apk empleando en este caso algoritmos de aprendizaje automático.
Para ver visualmente un proceso similar [Enlace externo eliminado para invitados]
Este es un problema de clasificación en 2 clases (Malware,NoMalware) por lo que se tienen muestras de entrenamiento para Malware (que se colocarán en Samples/RAW/Train/Malware) y muestras de entrenamiento para NoMalware (Samples/RAW/Train/NoMalware) además de las muestras para test (las que se quiere comprobar si son malware o no, en Samples/RAW/Test/), todo en .apk .
De forma sencilla, de cada apk del conjunto de datos de entrenamiento y del conjunto de datos de test se extraen características en un espacio
, las características que se extraen de cada aplicación son:
El sistema permite 2 enfoques, resolver el problema usando métodos no supervisados (clustering con K-medias) y usando métodos supervisados (kernel perceptron, K nearest neighbours, clasificador multinomial y perceptron, estos 2 últimos no se han integrado aun), en función de un método u otro se genera un vector de características diferente (e.g. si es supervisado se requiere la etiqueta de clase), que tendrá una forma semejante a esto .BOOT_COMPLETED ACTION_SENDTO ACTION_SEND ACTION_SEND_MULTIPLE ACTION_GET_CONTENT ACTION_IMAGE_CAPTURE ACTION_VIDEO_CAPTURE ACTION_VIEW ACTION_INSERT ACTION_OPEN_DOCUMENT ACTION_CREATE_DOCUMENT ACTION_VIEW INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH ACTION_CREATE_NOTE SEARCH_ACTION ACTION_WEB_SEARCH ACTION_SETTINGS ACTION_WIRELESS_SETTINGS ACTION_WIFI_SETTINGS ACTION_APN_SETTINGS ACTION_BLUETOOTH_SETTINGS ACTION_DATE_SETTINGS ACTION_LOCALE_SETTINGS ACTION_INPUT_METHOD_SETTINGS ACTION_DISPLAY_SETTINGS ACTION_SECURITY_SETTINGS ACTION_LOCATION_SOURCE_SETTINGS ACTION_INTERNAL_STORAGE_SETTINGS ACTION_MEMORY_CARD_SETTINGS READ_CALENDAR WRITE_CALENDAR CAMERA READ_CONTACTS WRITE_CONTACTS GET_ACCOUNTS ACCESS_FINE_LOCATION ACCESS_COARSE_LOCATION RECORD_AUDIO READ_PHONE_STATE CALL_PHONE READ_CALL_LOG WRITE_CALL_LOG ADD_VOICEMAIL USE_SIP PROCESS_OUTGOING_CALLS BODY_SENSORS SEND_SMS RECEIVE_SMS READ_SMS RECEIVE_WAP_PUSH RECEIVE_MMS SEND_MMS READ_EXTERNAL_STORAGE WRITE_EXTERNAL_STORAGE *chmod* */system/app* */system/bin/* *remount* *pm install* *chown* *mount* Ldalvik/system/DexClassLoader Ljava/security/spec/KeySpec Landroid/telephony/TelephonyManager/ and getDeviceId Landroid/telephony/TelephonyManager/ and getCellLocation Landroid/telephony/TelephonyManager/ and getSimSerialNumber Landroid/telephony/TelephonyManager/ and getSubscriberId Landroid/telephony/TelephonyManager/ and getCallState Landroid/telephony/TelephoneManager/ and getSimOperator* Landroid/telephony/TelephoneManager/ and getLine1Number Landroid/telephony/TelephonyManager/ and getNetworkOperator* Landroid/telephony/gsm/SmsManager and sendTextMessage Landroid/content/pm/PackageManager and getInstalledPackages Landroid/app/ActivityManager and getMemoryInfo Landroid/app/ActivityManager and getRunningServices Landroid/app/ActivityManager and restartPackage Landroid/app/ActivityManager and getRunningAppProcesses Landroid/content/BroadcastReceiver and abortBroadcast Landroid/content/Context and getApplicationInfo Landroid/content/Context and startService Landroid/content/Context and getFilesDir Landroid/content/ContentResolver and insert Landroid/content/ContentResolver and query Landroid/content/ContentResolver and delete Landroid/os/Handler and sendMessage Landroid/os/Handler and obtainMessage Landroid/os/Process and myPid Landroid/os/Process and killProcess Ljava/io/File and delete Ljava/io/File and exists Ljava/io/File and listFiles Landroid/net/ConnectivityManager/getNetworkInfo Landroid/net/NetworkInfo/ and getState Landroid/net/NetworkInfo/ and isConnected Landroid/net/WifiManager/ and getWifiState Landroid/net/WifiManager/ and setWifiEnabled Ljava/Runtime and getRuntime and exec Ljava/lang/System and loadLibrary Ljava/lang/reflect Ljava/util/zipZipInputStream Ljavax/crypto/ }
En cualquier método se pasará antes por 2 puntos clave, entrenar el sistema con las muestras de entrenamiento y finalmente comprobar la clasificación de los apk de los que se quiere saber si son malware o no. Cuantos más datos de entrenamiento se empleen mejor funcionará el sistema (alcanzará un límite en función del algoritmo elegido) sin embargo será más costoso entrenarlo. Este proceso de entrenamiento, en principio, se debe realizar una única vez con todo el conjunto de muestras disponibles sin embargo dado que no se da entrenado ni tamcoco (de momento) la posibilidad de almacenar el "estado" del entrenamiento (e.g. los vectores de pesos en perceptron) se tendrá que entrenar el sistema cada vez que se quiera reconocer una muestra, esto se solucionará en versiones siguientes.
Para ejecutarlo solo teneis que llamar al script ApkMalwareDetector.py y él se encarga de realizar todos los procesos que os he comentado tomando los valores por defecto que se indican en Config.py que son:
Os dejo un link de descarga (es mi carpeta tal cual pero con unos 150MB menos en apks,no la iba a subir entera) y el enlace al git (no está actualizado, recomiendo el otro link):PATH_RAW_TRAIN_MALWARE_SAMPLES = "./Samples/RAW/Train/Malware/" PATH_RAW_TRAIN_NO_MALWARE_SAMPLES = "./Samples/RAW/Train/NoMalware/" PATH_RAW_TEST_SAMPLES = "./Samples/RAW/Test/" MANIFEST = "AndroidManifest.xml" BACKSMALI = "classes.dex" CLASSIFIERS = {0:KMeans,1:KernelPerceptron,2:K_nearest_neighbour} CLASSIFIER = 1 VERBOSE = True
[Enlace externo eliminado para invitados]
[Enlace externo eliminado para invitados]
Comentar también que lleva únicamente un .apk para entrenamiento y test (el mismo además, por lo que siempre acertará), si lo usáis recordad ponerle más muestras en las carpetas que dije anteriormente. Visualización de extracción de caracteristicas, entrenamiento y clasificación:
Y eso es todo, si queréis colaborar solo enviadme un pv2 y vemos que se puede ir haciendo, saludos
Ikarus: Backdoor.VBS.SafeLoader
Agnitum: Trojan.VBS.Safebot.A
http://indeseables.github.io/
Agnitum: Trojan.VBS.Safebot.A
http://indeseables.github.io/