Marco de seguridad móvil (MobSF): un marco de evaluación de seguridad de aplicaciones móviles todo en uno

Mobile Security Framework (MobSF) es una aplicación móvil completa y automatizada (Android / iOS / Windows) para pruebas de penetración, análisis de malware y evaluación de seguridad capaz de realizar análisis estáticos y dinámicos.

MobSF admite binarios de aplicaciones móviles (APK, IPA y APPX) junto con código fuente comprimido y proporciona API REST para una integración perfecta con su canal de CI / CD o DevSecOps. El analizador dinámico le ayuda a realizar evaluaciones de seguridad en tiempo de ejecución y pruebas instrumentadas interactivas.

Índice de contenidos

    Capturas de pantalla:

    • Análisis estático - Android
    Pantalla de análisis estático de Android MobSF

    Pantalla de análisis de código de Android MobSF

    Captura de pantalla de la aplicación de Android MobSF

    • Análisis estático - iOS
    Captura de pantalla de MobSF iOS Static Analyzer

    Pantalla de análisis de código de MobSF iOS

    • Análisis dinámico - Android APK
    Captura de pantalla del analizador dinámico de Android MobSF
    Pantalla del monitor de la API de Android MobSF
    Pantalla Base64 de MobSF Android Frida API Monitor

    • Visor de API web
    Pantalla de herramientas HTTP del visor de API web de MobSF

    Requerimientos:

    • Mac:
      • Instalar Idiota
      • Instalar Python 3.6 - 3.7 (3.8 no es compatible)
      • Los usuarios de MacOS Catalina deben desinstalar python3 existente e instalarlo desde Python.org. Después de la instalación, vaya a / Aplicaciones / Python 3.7 / y correr Instalar certificados en el comando Y Actualice Shell Profile.com y
      • Instalar JDK 8+
      • Instalar herramientas de línea de comando xcode-select --instalar
      • Descargar e instalar wkhtmltopdf a partir de instrucciones wiki
      • Usuarios de MacOS Mojave, instale encabezados si están disponibles:
    sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /

    • Linux basado en Ubuntu / Debian:
      • Instalar Git sudo apt get install git
      • Instalar Python 3.6 - 3,7 sudo apt-get install python3
      • Instalar JDK 8+ sudo apt-get install openjdk-8-jdk
      • Instale las siguientes dependencias
    sudo apt install python3-venv python3-pip python3-dev build-essential libffi-dev libssl-dev libxml2-dev libxslt1-dev libjpeg8-dev zlib1g-dev wkhtmltopdf

    Si está ejecutando MobSF en un host de Windows, no necesita configurar nada más que interactuar con el script de instalación automatizado por primera vez cuando ejecuta MobSF. Sin embargo, si está utilizando un sistema operativo host diferente, debe configurar una máquina virtual de Windows. Desafortunadamente binskim solo está disponible en Windows. Entonces, incluso para el análisis estático, se requiere una máquina virtual de Windows.

    Pasos en la máquina virtual de Windows:

    • Instale los siguientes requisitos en la VM
      • Python 3
      • rsa (a través de python -m pip instalar rsa)
    • Descargar el setup.py script y ejecutarlo
    • Hay alguna interacción manual, pero si no hay errores, todo está bien y el servidor RPC debería estar ejecutándose.

    Recordar: Utilice Windows-VM independiente para MobSF y no lo exponga a un rango de red del que podría provenir un ataque. La mejor solución es configurarlo en modo de solo host.

    • Para integrar una máquina virtual de Windows en MobSF, siga estos pasos.
      • Obtenga la IP de su VM y configúrela en el archivo MobSF / settings.py (busque WINDOWS_VM_IP)
      • (Si aún no lo ha hecho 🙂 Copie la clave rsa privada de vm a MobSF

    Si ve errores como este:
    Unhandled Exception: System.NotSupportedException: The requested security protocol is not supported.
       at System.Net.ServicePointManager.set_SecurityProtocol(SecurityProtocolType value)
       at NuGet.CommandLine.Program.MainCore(String workingDirectory, String[] args)
       at NuGet.CommandLine.Program.Main(String[] args)
    
    AttributeError: ConfigParser instance has no attribute 'getitem'

    El script de instalación de MobSF asume que su máquina virtual o host de Windows tiene una unidad C y que tiene permisos completos para realizar operaciones de lectura / escritura en C: MobSF. Este error ocurre si no tiene los permisos de lectura / escritura adecuados.

    IMPORTANTE:

    • Establezca la variable de entorno JAVA_HOME.
    • iOS IPA Analysis solo funciona en contenedores Mac, Linux y Docker.

    Análisis dinámico:

    • El escaneo dinámico no funcionará si está utilizando el contenedor Docker de MobSF o si está instalando MobSF dentro de una máquina virtual.
    • Instalar Gencluyendo

    Instalación:

    Probado en Windows 10, Ubuntu (18.04, 19.04), macOS Catalina
    # Please make sure that all the requirements mentioned above are installed first.
    
    git clone https://github.com/MobSF/Mobile-Security-Framework-MobSF.git
    cd Mobile-Security-Framework-MobSF
    # Linux or Mac users
    ./setup.sh 
    # Windows users
    setup.bat
    
    IMPORTANTE: Los usuarios de Windows, antes de ejecutar setup.bat, cierren todas las carpetas abiertas de MobSF o editores de texto con MobSF abierto. Ambos pueden interrumpir la instalación provocando errores de autorización.

    Ejecutando MobSF

    • Para Linux y Mac: ./run.sh
    • Para ventanas: run.bat

    Puedes navegar a http: // localhost: 8000 / para acceder a la interfaz web de MobSF.

      Configuración del analizador dinámico

      No se admite el análisis dinámico con un teléfono móvil real.

      Ejecute una máquina virtual Android Genparmi antes de iniciar MobSF. Todo se configurará automáticamente en tiempo de ejecución. MobSF requiere Genidanza Android x86 VM versión 4.1 a 9.0 para análisis dinámico. Le recomendamos que utilice Android 7.0 y superior.

      Las versiones de Android 5 y superiores se MobSFyed automáticamente en la primera ejecución. Para las versiones de Android anteriores a la 5, debe MobSFy el tiempo de ejecución de Android antes del análisis dinámico por primera vez. Haga clic en el botón MobSFy Android Runtime en la página Dynamic Analysis para MobSFy Android Runtime Environment.


      Proxy HTTPS

      • Para las versiones de Android 4.4 - 9.0, la configuración de proxy global se aplica automáticamente en tiempo de ejecución.
      • Para las versiones de Android 4.1 - 4.3, configure el proxy de VM de Android como se muestra en la página Análisis dinámico.

      Si Dynamic Analyzer no detecta su dispositivo Android, debe configurarlo manualmente ANALYZER_IDENTIFIER en MobSF / settings.py. Ejemplo: ANALYZER_IDENTIFIER = '192.168.56.101:5555'. Puede encontrar la IP del dispositivo Android en la barra de título de Genparmi, y el puerto predeterminado es 5555.

      Contenedor móvil MobSF

      ¿Le da pereza configurar MobSF? Utilice la imagen más reciente de la ventana acoplable MobSF (no se admite el análisis dinámico)

      docker pull opensecurity/mobile-security-framework-mobsf
      # Static Analysis Only
      docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
      

      Cursos y certificaciones de e-Learning de MobSF

      Tenemos 2 cursos de aprendizaje electrónico a su propio ritmo que cubren MobSF y otras herramientas de seguridad de Android.

      • OpSecX - Evaluación automática de la seguridad de aplicaciones móviles con MobSF - MAS (en actualización)
      • OpSecX - Experto en herramientas de seguridad de Android - ATX

        Actualización de MobSF

        Si está actualizando MobSF, en la mayoría de los casos es posible que deba realizar migraciones de base de datos o verá errores como

        [ERROR] Saving to DB (E:Mobile-Security-Framework-MobSFStaticAnalyzerviewsandroiddb_interaction.py, LINE 236 "static_db.save()"): table StaticAnalyzer_staticanalyzerandroid has no column named 
        

        Ejecute el siguiente comando para migrar su base de datos

        python manage.py makemigrations
        python manage.py makemigrations StaticAnalyzer
        python manage.py migrate
        

        Si los cambios anteriores no funcionaron, es posible que deba ejecutar setup.sh o setup.bat nuevamente, lo que eliminará los resultados del análisis anterior.

        APKiD

        APKiD está habilitado de forma predeterminada. Para deshabilitarlo, configure APKID_ENABLED para falso en MobSF / settings.py.

        Escaneo de VirusTotal

        VirusTotal Scan está desactivado de forma predeterminada. Debe agregar su clave API de VirusTotal antes de habilitarla.

        Información sobre la Play Store de AppMonsta para Android

        Usamos la API de AppMonsta para recuperar detalles de Google Play Store como seguridad para nuestra implementación principal. Está deshabilitado por defecto. Para habilitarlo, se requiere la clave API de AppMonsta.

        • Obtenga la clave de API de AppMonsta de: Clave de API de AppMonsta
        • En MobSF / settings.py, agregue su clave API a APPMONSTA_KEY y reinicie MobSF.

        Análisis de masa estática

        MobSF admite análisis estático de masas. A continuación, se explica cómo realizar un análisis de masa estático:

        • Ejecute el servidor MobSF.
        python manage.py runserver 8000
        • Correr mass_static_analysis.py
        usage: mass_static_analysis.py [-h] [-d DIRECTORY] [-s IPPORT]
        
        optional arguments:
          -h, --help            show this help message and exit
          -d DIRECTORY, --directory DIRECTORY
                                Path to the directory that contains mobile app
                                binary/zipped source code
          -s IPPORT, --ipport IPPORT
                                IP address and Port number of a running MobSF Server.
                                (ex: 127.0.0.1:8000)
        

        Ejemplo: python mass_static_analysis.py -s 127.0.0.1:8000 -d / home / files /

        Usando Postgres DB en lugar de SQLite:

        Instalar psycopg2: pip3 instala psycopg2-binary

        Ir a MobSF settings.py

        Comente lo siguiente:

        DATABASES = {
            'default': {
                'ENGINE': 'django.db.backends.sqlite3',
                'NAME': DB_DIR,
            }
        }
        

        Ahora descomente lo siguiente:

        DATABASES = {
            'default': {
                'ENGINE': 'django.db.backends.postgresql_psycopg2',
                'NAME': 'mobsf',
                'USER': 'postgres',
                'PASSWORD': '',
                'HOST': 'localhost',
                'PORT': '',
            }
        }
        

        Cree una base de datos en Postgres llamada mobsf y configure los ajustes anteriores con el nombre de usuario, la contraseña y otros detalles correctos.

        Aplicar migraciones:

        python3 manage.py makemigrations
        python3 manage.py migrate

        Ahora puede iniciar el servidor MobSF y haber configurado Postgres correctamente como base de datos.

        Soporte de directorio raíz:

        Si desea que todas las cargas, descargas y configuraciones de usuario se creen en el directorio raíz, habilite la compatibilidad con el directorio raíz:

        Es posible que sea necesario habilitar la compatibilidad con el directorio de inicio para proporcionar una versión personalizada de MobSF a varios usuarios en un sistema operativo o para agrupar MobSF con una distribución pentest.

        Para habilitar la compatibilidad con el directorio de inicio, vaya a settings.py y configure USE_HOME a Verdadero.

        USE_HOME = True

        Esto asegurará

        • Todas las cargas, bases de datos y descargas de usuarios ahora se crean en .MobSF directorio en el directorio de inicio del usuario.
        • Las configuraciones de usuario se leen desde .MobSF / config.py en el directorio raíz. Si el formato es incorrecto o no se encuentra el archivo, las configuraciones de usuario se leen desde MobSF / settings.py Si.

        Imagen de Docker para análisis estático de MobSF

        Construyendo imagen a partir de Dockerfile

        git clone https://github.com/MobSF/Mobile-Security-Framework-MobSF.git
        cd Mobile-Security-Framework-MobSF
        docker build -t mobsf .
        docker run -it -p 8000:8000 mobsf
        

        Esto ejecutará MobSF en 0.0.0.0:8000

        Cree una imagen detrás de un proxy de Dockerfile

        docker build --build-arg https_proxy="http://proxy_ip:proxy_port" --build-arg http_proxy="proxy_ip:proxy_port" --build-arg NO_PROXY="127.0.0.1" -t mobsf .
        (replace `proxy_ip` with the value of your proxy ip address and `proxy_port` with the proxy port used 
        

        Reconstrucción de la imagen de Dockerfile desde cero

        docker rmi ubuntu:18.04
        docker build --no-cache --rm -t mobsf .
        

        Imagen predeterminada de Docker MobSF
        https://hub.docker.com/r/opensecurity/mobile-security-framework-mobsf/

        docker pull opensecurity/mobile-security-framework-mobsf
        docker run -it --name mobsf -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
        

        Por persistencia

        docker run -it --name mobsf -p 8000:8000 -v :/root/.MobSF opensecurity/mobile-security-framework-mobsf:latest
        

        Para soporte de postgres

        Necesitará docker-compose: consulte https://docs.docker.com/compose/install/

        • construir las imágenes construir docker-compose
        • servicios de lanzamiento docker-compose up -d (en el fondo) o docker-dial (en primer plano)

        Luego verifique que los 2 servicios estén activos:

        docker ps
        CONTAINER ID        IMAGE                                   COMMAND                  CREATED             STATUS              PORTS                          NAMES
        7de107c5b853        mobile-security-framework-mobsf_mobsf   "python3 manage.py r…"   5 weeks ago         Up 5 weeks          0.0.0.0:8000->8000/tcp         mobile-security-framework-mobsf_mobsf_1
        149a3ffa61ca        postgres:latest                         "docker-entrypoint.s…"   5 weeks ago         Up 5 weeks          5432/tcp                       mobile-security-framework-mobsf_postgres_1
        

        Si no desea usar docker-compose, primero deberá iniciar un contenedor de postgres, luego iniciar MobSF usando el dockerfile y la configuración POSTGRES variable a Cierto.

        docker build --build-arg POSTGRES=True -t mobsf .

        Puede cambiar la información de conexión de Postgres en postgres_support.sh Haz esto antes de construir la imagen.

        #!/bin/bash
        set -e
        POSTGRES=$1
        echo "Postgres support : ${POSTGRES}"
        if [ "$POSTGRES" == True ]; then
         echo "Installing Postgres"
         pip3 install psycopg2-binary
         #Enable postgres support
         sed -i '/# Sqlite3 suport/,/# End Sqlite3 support/d' ./MobSF/settings.py && 
         sed -i "/# Postgres DB - Install psycopg2/,/'''/d" ./MobSF/settings.py && 
         sed -i "/# End Postgres support/,/'''/d" ./MobSF/settings.py && 
         sed -i "s/'PASSWORD': '',/'PASSWORD': 'password',/" ./MobSF/settings.py && 
         sed -i "s/'HOST': 'localhost',/'HOST': 'postgres',/" ./MobSF/settings.py
        fi
        

        Si tiene un error en el primer arranque

        docker exec -it mobile-security-framework-mobsf_mobsf_1 python3 manage.py makemigrations
        docker exec --it mobile-security-framework-mobsf_mobsf_1 python3 manage.py migrate
        

        ** Para ver qué sucedió en el contenedor cuando se ejecuta con -d en lugar de -it: **

        docker logs -f --tail 100 mobsf

        Tener acceso a la cáscara en el contenedor.

        docker exec -it  mobsf /bin/bash

        API REST

        MobSF proporciona API REST. Puede acceder a los documentos de la API desde la aplicación.

        CI / CD

        Para CI / CD, puede aprovechar la API REST de MobSF.

        Integración de la canalización MobSF CI / CD

        docker-app render omerl/mobsf-ci:0.3.0 --set target_folder= --set target_apk= --set output_folder= | docker-compose -f - up --exit-code-from scan
        

        Para analizar el informe, utilice Pegamento OWASP.

        Uso:

        • Clonar el repositorio
        • Crea una carpeta llamada objetivo en la carpeta raíz y coloque el destino allí (p. ej. target / my_app.apk).
        • Ejecute las pruebas usando:
        TARGET_PATH='target/' docker-compose up --build --exit-code-from scan
        
        • Espere a que se complete el comando, tomará algún tiempo. Cuando se complete el comando, verifique el informe a continuación output / report.json.
        • Uso Pegamento OWASP para procesar el informe ejecutando:
        docker run -it -v $(pwd)/output:/app owasp/glue:raw-latest ruby bin/glue -t Dynamic -T /app/report.json --mapping-file mobsf --finding-file-path /app/android.json -z 2
        

        Prueba de funcionamiento:

        Puede ejecutar todas las pruebas unitarias con Tox -e pelusa, prueba (la pelusa no funciona en Windows)

        Presentaciones:

        • OWASP APPSEC UE 2016

        • NULLCON 2016

        • c0c0n 2015

        • Webcast G4H 2015

        Deja una respuesta

        Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

        Subir