comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

[Python] APKMalwareDetect

  • 1 Respuestas
  • 1574 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado overxfl0w13

  • *
  • Underc0der
  • Mensajes: 26
  • Actividad:
    0%
  • Reputación 0
  • Hola1
    • Ver Perfil
  • Skype: overxfl0w13
« en: Noviembre 01, 2015, 06:16:29 am »
Buenas a todos, hacia ya tiempo que no me pasaba por ningún foro  :D.

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 No tienes permisos para ver links. Registrate o Entra con tu cuenta

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:

Código: No tienes permisos para ver links. Registrate o Entra con tu cuenta
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 .

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:

Código: Python
  1. PATH_RAW_TRAIN_MALWARE_SAMPLES    = "./Samples/RAW/Train/Malware/"
  2. PATH_RAW_TRAIN_NO_MALWARE_SAMPLES = "./Samples/RAW/Train/NoMalware/"
  3. PATH_RAW_TEST_SAMPLES                     = "./Samples/RAW/Test/"
  4.  
  5. MANIFEST                          = "AndroidManifest.xml"
  6. BACKSMALI                         = "classes.dex"
  7. CLASSIFIERS                       = {0:KMeans,1:KernelPerceptron,2:K_nearest_neighbour}
  8. CLASSIFIER                        = 1
  9. VERBOSE                           = True
  10.  

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

No tienes permisos para ver links. Registrate o Entra con tu cuenta
No tienes permisos para ver links. Registrate o Entra con tu cuenta

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 :D
« Última modificación: Noviembre 01, 2015, 09:36:15 am por overxfl0w13 »

Conectado ANTRAX

  • *
  • Administrator
  • Mensajes: 5401
  • Actividad:
    30%
  • Reputación 31
  • ANTRAX
    • Ver Perfil
    • Underc0de
    • Email
  • Skype: underc0de.org
  • Twitter: @Underc0de
« Respuesta #1 en: Noviembre 01, 2015, 03:05:32 pm »
@No tienes permisos para ver links. Registrate o Entra con tu cuenta! Welcome back!
Que bueno verte nuevamente por casa!
Muchisimas gracias por el aporte! es muy util!

Saludos!
ANTRAX


 

¿Te gustó el post? COMPARTILO!



BeeLogger|KEYLOGGER|PYTHON|EASY

Iniciado por d0r127

Respuestas: 13
Vistas: 6619
Último mensaje Junio 15, 2018, 02:29:43 pm
por Atlas
Spacenet-Python Botnet

Iniciado por lucky1234

Respuestas: 2
Vistas: 1380
Último mensaje Febrero 13, 2018, 02:16:16 pm
por Spaceb4r
Ares-Python Botnet

Iniciado por d0r127

Respuestas: 1
Vistas: 2504
Último mensaje Diciembre 29, 2016, 06:33:30 pm
por sadfud