• Nuestros Programas

  • Rincón donde presentamos programas hechos por miembros del foro y donde puedes colaborar como betatester.
Rincón donde presentamos programas hechos por miembros del foro y donde puedes colaborar como betatester.
 #480211  por Scorpio
 01 Nov 2015, 13:12
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 https://i.gyazo.com/af400eeba0c9c44a0539874b89bdc6fb.png

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
Imagen, las características que se extraen de cada aplicación son:
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/
}
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 Imagen.

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:
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
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):

https://www.sendspace.com/file/terj82
https://github.com/overxfl0w/APKMalwareDetect.git

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:

Imagen

Y eso es todo, si queréis colaborar solo enviadme un pv2 y vemos que se puede ir haciendo, saludos
Todos los creditos para mi bro overxfl0w.
 #480218  por sanko
 01 Nov 2015, 17:24
Solo el puede traer machine learning al foro, que tio
 #480219  por SadFud
 01 Nov 2015, 17:32
Realmente muy bueno
Aprende muy rapido, pero le falta que recuerde lo aprendido.
Le añadiria en la lista de PERMISSIONS
"BROADCAST_SMS" y "BROADCAST_WAP_PUSH"
Con el valor 41 y 42 respectivamente.

Saludos
 #480236  por Blau
 01 Nov 2015, 22:54
Todo un genio overxfl0w. A ver si me deja hacerle una GUI que no sea en python
 #480261  por CrypterHacker
 02 Nov 2015, 15:54
Muchas Gracias bro!!
 #480410  por $DoC
 06 Nov 2015, 11:24
buena overxfl0w