Introducción y práctica del mecanismo de seguridad de Android.

Introducción y práctica del mecanismo de seguridad de Android.

Conceptos básicos del marco de Android


La imagen de arriba es el conocido diagrama de arquitectura del sistema Android: la estructura en capas favorece la gestión jerárquica de permisos y proporciona una cierta garantía para la seguridad del sistema.
El sistema Android adopta una arquitectura en capas, que consta de la capa del kernel de Linux, la capa HAL, la capa de biblioteca nativa y de biblioteca en tiempo de ejecución, la capa JNI, la capa de marco y la capa de aplicación desde la capa inferior hasta la superior.
Los componentes de la aplicación de Android son los componentes básicos de las aplicaciones de Android. Los tipos de componentes incluyen Actividad, Servicio, Receptor de transmisión, Proveedor de contenido, etc.
El kernel de Android es esencialmente una versión mejorada del kernel de LInux, LMK (Low Memory Killer) de administración de baja memoria, memoria compartida anónima (Ashmem), mecanismo de comunicación Binder, etc. Estas mejoras del kernel permiten a Android mejorar aún más la seguridad de la administración de la memoria, la comunicación de procesos y otros aspectos mientras hereda el mecanismo de seguridad del kernel de LInux.


La imagen de arriba es el diagrama de flujo de inicio del sistema Android. La descripción específica es la siguiente:
El sistema Android se ejecuta en el kernel de Linux. El proceso de inicio es el primer proceso iniciado por el espacio del usuario. Sus principales responsabilidades son desembolsar la clave del sistema. entradas (Daemons), servicemanager, zygote, etc.; Proporcionar atributos del sistema de gestión de servicios, etc.
Zygote es creado por el proceso de inicio de acuerdo con los elementos de configuración del archivo init.rc. Zygote es un proceso de máquina virtual y una incubadora de máquinas virtuales. Responsable de la inicialización de la máquina virtual, carga e inicialización de bibliotecas preestablecidas, etc. Cada vez que el sistema solicita ejecutar una aplicación de Android, Zygote crea un proceso para ejecutar la aplicación.
SystemSever es el primer subproceso de Zygote, nace del proceso Zygote y, como núcleo del marco de Android, es el principal responsable de inicializar el sistema Android e iniciar otros servicios para que se ejecuten en el espacio del proceso.

Mecanismo de seguridad de Android


En la actualidad, los dispositivos terminales inteligentes con sistema Android representan la mayoría de los dispositivos terminales inteligentes del mundo, y cada vez hay más problemas de seguridad, que son un tema importante en el desarrollo de Android.
Desde una perspectiva de arquitectura técnica, el modelo de seguridad de Android se basa en la robusta seguridad del kernel del sistema operativo Linux, que se mejora aún más mediante el mecanismo de espacio aislado del proceso, la administración de memoria única, el mecanismo de comunicación de proceso seguro y eficiente, el mecanismo de firma de aplicaciones y el mecanismo de administración de permisos de aplicaciones. , etc. Seguridad del sistema.

El mecanismo de seguridad del sistema Android incluye principalmente los siguientes aspectos:

  1. Mecanismos de seguridad del código.
  2. Mecanismo de caja de arena del proceso.
  3. Aplicar mecanismo de permiso.
  4. Aplicar mecanismo de firma.
  5. Mecanismo de control de acceso a archivos.
  6. Otros mecanismos de seguridad.

mecanismo de seguridad del código

Java es diferente de C/C++. Java es un lenguaje interpretado y existe el riesgo de que el código se descompile. Android ha introducido la tecnología de ofuscación de código. El ofuscador predeterminado es proguard. Proguard también se puede utilizar para comprimir y optimizar el código de bytes de Java y eliminar información inútil. clases Campos, métodos, propiedades, anotaciones, etc.
Método de configuración:
establezca LOCAL_PROGUARD_FLAG_FILES en Android.mk: =
proguard.flags
incluye $(BUILD_PACKAGE)
Principio
: no confunda los métodos nativos y relacionados con la API del SDK y el modelo, no confunda otras clases y métodos que no necesitan confundirse.
sintaxis ofuscada

-keep class com.android.launcher3.CellLayout {
    
    
  public float getBackgroundAlpha();
  public void setBackgroundAlpha(float);
}
-keep class com.android.launcher3.DragLayer$LayoutParams {
    
    
  public void setWidth(int);
  public int getWidth();
  public void setHeight(int);
  public int getHeight();
  public void setX(int);
  public int getX();
  public void setY(int);
  public int getY();
}

El archivo de clase obtenido después de descompilar el código después de la ofuscación.

Mecanismo de aislamiento de la zona de pruebas del proceso

Android aplica el mecanismo de aislamiento multiusuario de Linux al aislamiento de aplicaciones. Una identificación de usuario (UID) identifica a un usuario determinado y diferentes permisos de aplicación permiten o limitan el acceso de la aplicación a los recursos del dispositivo.
Configuración de permisos de la aplicación
ID de usuario compartido significa compartir un proceso.
Los certificados del sistema que lleva el árbol de código fuente de Android incluyen "medios", "plataforma", "compartido", "clave de prueba", etc., entre los cuales se encuentra el certificado de "medios". utilizado en escenarios multimedia y de descarga; el certificado de "plataforma" se utiliza en el escenario del sistema; el certificado "compartido" se utiliza en los escenarios del iniciador y la guía telefónica; el certificado "testkey" se utiliza en el escenario de desarrollo, y estos certificados se ubicado en el directorio; los atributos "sharedUserId" actualmente admitidos incluyen " build/target/product/securityandroid .uid.system", "com.android.uid.test", "android.uid.calendar", "android.media", "com.android.framework .externalsharedpermstestapp", "android.uid.shared", "android .uid.phone", etc. Los más utilizados incluyen "android.uid.system", "android.media", "android.uid.shared", etc.

Mecanismo de permiso de aplicación

Los permisos se utilizan principalmente para agregar restricciones a las operaciones de las aplicaciones, evitar que aplicaciones maliciosas realicen operaciones ilegales y filtren datos confidenciales a los usuarios y controlen ilegalmente dispositivos, y eviten cargos maliciosos.
Los niveles de permiso son los siguientes: permiso normal, permiso peligroso, permiso de firma o sistema y permiso de firma.
Ubicación de la definición de permisos de la capa de marco

frameworks/base/core/res/AndroidManifest.xml


<!-- Allows app to write to internal media storage -->
    <permission android:name="android.permission.WRITE_MEDIA_STORAGE"
        android:permissionGroup="android.permission-group.STORAGE"
        android:label="@string/permlab_mediaStorageWrite"
        android:description="@string/permdesc_mediaStorageWrite"
        android:protectionLevel="signature|system" />

Establecer permisos de aplicaciones

<uses-permission android:name="android.permission.BLUETOOTH" /> 
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> 

Verificación de permisos
Android proporciona múltiples métodos que se pueden utilizar para verificar si la persona que llama tiene los permisos correspondientes.
Si la persona que llama tiene los permisos correspondientes, PackageManager. PERMISSION_GRANTEDde lo contrario se devuelve el valor de retorno de la verificación de permisos PackageManager.PERMISSION_DENIED.

Código de muestra

if (permission != null) {
    
    
    if (mContext.checkCallingOrSelfPermission(permission)
            != PackageManager.PERMISSION_GRANTED) {
    
    
        return WindowManagerGlobal.ADD_PERMISSION_DENIED;
    }
}

Seguridad de la base de datos

SQLite utilizado por Android actualmente utiliza texto plano para almacenar datos; la seguridad implica cifrado, lectura y escritura, búsqueda, etc.
Configuración de permisosandroid:permission android:readPermission android:writePermission

<provider android:name="ContactsProvider2" 
            android:authorities="contacts;com.android.contacts" 
            android:label="@string/provider_label" 
            android:multiprocess="false" 
            android:exported="true" 
            android:readPermission="android.permission.READ_CONTACTS" 
            android:writePermission="android.permission.WRITE_CONTACTS"> 
            <path-permission  数据库安全--搜索 
                    android:pathPrefix="/search_suggest_query" 
                    android:readPermission="android.permission.GLOBAL_SEARCH" /> 
            <path-permission 
                    android:pathPrefix="/search_suggest_shortcut" 
                    android:readPermission="android.permission.GLOBAL_SEARCH" /> 
            <path-permission 
                    android:pathPattern="/contacts/.*/photo" 
                    android:readPermission="android.permission.GLOBAL_SEARCH" /> 
            <grant-uri-permission android:pathPattern=".*" /> 
 </provider> 

Mecanismo de firma de aplicaciones

El mecanismo de firma de Android es en realidad un mecanismo de verificación de la integridad del paquete APK y la singularidad de la organización editorial.
Solo las aplicaciones con el mismo nombre de paquete y el mismo certificado digital se consideran la misma aplicación;
el mayor uso de los certificados digitales es la actualización de aplicaciones y la configuración de permisos para la comunicación entre aplicaciones;

Mecanismo de control de acceso a archivos

Android aplica el ACL(Access Control List)mecanismo de permisos de Linux en la gestión de permisos.
En el nivel de partición
, cuando el sistema se está ejecutando, la capa más externa de protección de seguridad la proporciona el sistema Linux. La partición donde se encuentra system.img es de solo lectura y los usuarios no pueden escribir, mientras que la partición donde se encuentran los datos. img se encuentra, se puede leer y escribir y se utiliza para almacenar datos del usuario.
Los permisos de usuario para las particiones init.rcse definen en .
Archivos individuales
El control de derechos de acceso a archivos individuales se divide en grupos, usuarios y permisos.
Los permisos se dividen en legibles, de escritura y ejecutables.
Comando: chown\chgrp\chmod.

Otros mecanismos de seguridad


Algoritmo de cifrado de seguridad de red
(datos confidenciales) DES (simétrico), 3DES (simétrico), RSA (asimétrico), MD5, RC2/RC4 (simétrico), IDEA, AES, BLOWFISH y otros
servicios web (capa HTTP)
tres métodos WS-Seguridad , SSL, firmas digitales. Actualmente, ksoap no admite la capa de enlace de datos SSL y TSL
de la capa TCP de WS-Security WAPI.


SEAndroid

SE Android(Security-Enhanced Android)Es una combinación de Android y SE Linux. Es un paquete de mejora de seguridad para el sistema operativo Android lanzado por la NSA de EE. UU. en 2012 para admitir SE Linux utilizado en la plataforma Android. Control de acceso discrecional
DAC y MAC Un proceso teóricamente tiene los mismos permisos que el usuario que lo ejecuta. Por ejemplo, si inicia el navegador como usuario root, el navegador tiene los permisos del usuario root y puede hacer cualquier cosa en el sistema Linux.
DAC(Discretionary Access Control)

MAC(Mandatory Access Control)El control de acceso obligatorio
significa que cualquier proceso que quiera hacer algo en el sistema SELinux primero debe recibir permisos en el archivo de configuración de la política de seguridad. Cualquier permiso que no aparezca en el archivo de configuración de la política de seguridad, el proceso no tiene los permisos.

Nota: Bajo el control de acceso MAC, los privilegios de root no pueden leer ni escribir en ningún archivo; cualquier proceso que acceda a recursos específicos debe seguir ciertas políticas de control.

Contexto del archivo después de activar selinux
Contexto del proceso después de abrir selinx

herramienta de análisis

Logcat herramienta de depuración
logcat 、adb 、 dumpsys

logcat [options] [filterspecs] #打印log

Introducción de opciones

-b 查看日志类型,比如radio, main, events等,默认为main
-c 清空日志
-s 	#设置过滤器
logcat -s callMode:V #tag为callMode,级别为V的log
-f <filename> #输出到文件
-v <format> #设置log的打印格式,<format>是下面的一种:brief process tag thread raw time threadtime long
log format 形式如下:
-v process # D( 4816) volume state changed for /mnt/usbhost3 (unmounted -> removed)  (MountService)
-v brief #I/SystemServer( 4816): Entered the Android system server!....
-g #得到环形缓冲区的大小并退出
130|root@mars-200:/ # logcat -g
/dev/log/main: ring buffer is 256Kb (255Kb consumed), max entry is 5120b, max payload is 4076b
/dev/log/system: ring buffer is 256Kb (111Kb consumed), max entry is 5120b, max payload is 4076b


adb devices adb shell adb install / uninstall adb pull/push adb shell service list
La herramienta de introducción dumpsys del comando adb comúnmente utilizada
dumpsys se utiliza para mostrar información detallada del sistema Android.Es dumpsysuna poderosa herramienta de análisis del sistema que puede ver información del dispositivo, información de uso de memoria de proceso, información de paquete de aplicaciones, información de servicio, información de configuración de permisos y administración de energía. información de estado e información de actividad.
Formato de herramienta:dumpsys [option]

dumpsys | grep DUMP 获取dump支持的命令;
dumpsys activity: 显示activity的相关信息,包括任务栈等;
dumpsys window: 显示键盘,窗口和它们的关系;
dumpsys diskstats: 磁盘相关信息

Prácticas relacionadas con la seguridad

Ingeniería inversa de Android

En el proceso de aprender a desarrollar Android, a menudo aprendes cómo se desarrollan las aplicaciones de otras personas. Esas hermosas animaciones y diseños exquisitos pueden hacer que lo dejes de lado. Como desarrollador, es posible que desees saber cuáles son estas interfaces de efectos. Cómo lograr esto ?En este momento, puede descompilar y ver el APK de la aplicación modificada.

El propósito de la descompilación no es causar daño, el objetivo principal es promover que los desarrolladores aprendan, aprendan de un buen código y mejoren su nivel de autodesarrollo.

Herramienta de descompilación
dex2jar apktool jd-gui

Proceder de la siguiente:

  1. Cambie el nombre del archivo apk a un archivo .zip y descomprímalo.
    classes.dex
  2. Convierta el archivo class.dex en un paquete jar mediante la herramienta dex2jar
    ./d2j-dex2jar.sh classes.dex
  3. apktool restaurar archivos de recursos apk
    ./apktool.sh -d test.apk

su control de permisos

Se pueden agregar permisos relevantes al control de permisos del tiempo de ejecución de Android y su uso se puede controlar en función de firmas, archivos de configuración, etc.

Supongo que te gusta

Origin blog.csdn.net/u011897062/article/details/132990240
Recomendado
Clasificación