Como fanático acérrimo de los teléfonos Android, si tu teléfono se cae repentinamente, tu primer pensamiento sería "¡Dios mío!". ¿O que tu dinero en Google Pay o Paypal no está seguro? Si la última aplicación descargada no solo muestra varios anuncios aburridos sino también notificaciones inesperadas, ¿pensarías que podría ser un intento de phishing y desinstalarías la aplicación inmediatamente?
¿Cómo podemos garantizar que nuestra aplicación brinde una experiencia segura para los usuarios que no tienen suficiente conocimiento de las vulnerabilidades de seguridad de Android? ¿Cuáles son las vulnerabilidades de seguridad en el ecosistema de Android? ¿Dónde podemos explorar nuevas técnicas de prueba de seguridad de Android? ¿Cómo podemos agilizar el proceso de pruebas de seguridad?
En primer lugar, la ventaja de desarrollo de código abierto del sistema operativo Android también oculta problemas de seguridad inherentes a su desarrollo, como el sistema sandbox del sistema Android (es decir, la máquina virtual). Sin embargo, la capa subyacente tiene una vulnerabilidad tras otra, lo que permite que programas (o herramientas) maliciosos obtengan acceso raíz y rompan las restricciones del entorno limitado. Al igual que en la era de las PC, no existe un sistema operativo de PC absolutamente seguro; En la era de Internet móvil, tampoco existe un sistema operativo móvil absolutamente seguro. Los riesgos de seguridad del ecosistema de código abierto de Android son como campanas de alarma manchadas de sangre, que golpean los corazones de todos los desarrolladores de Android.
En segundo lugar, los riesgos de seguridad en el proceso de desarrollo de la APLICACIÓN/SDK de Android son como agujeros negros desconocidos. Nunca sabemos dónde está el punto final de la confrontación de seguridad, quiénes son los atacantes, quiénes son los terminadores y cómo defendernos de ellos.
Finalmente, a nivel de usuario, ¿cuáles son algunas vulnerabilidades de comportamiento de seguridad comunes y reconocibles?
Tanto las aplicaciones de Android como los SDK tienen vulnerabilidades de seguridad hasta cierto punto. Quizás algún día su aplicación se vea afectada por una de las vulnerabilidades de seguridad mencionadas anteriormente. Casualmente, mientras probábamos recientemente un SDK de Android, descubrimos una vulnerabilidad de seguridad relacionada con los componentes de la aplicación de Android. Con base en este ejemplo, se resumen los métodos, técnicas y procesos para las pruebas de seguridad del SDK de Android.
Descripción general de las causas de vulnerabilidad
Un componente opcional de una aplicación (en lo sucesivo, la aplicación) SDK de Android ha abierto un puerto aleatorio localmente para monitorear si el servicio de la capa Java está activo. Sin embargo, cuando la capa Java se comunica con el componente, no verifica estrictamente los parámetros de entrada, lo que genera la posibilidad de que se llene de código de ataque y ataques maliciosos al llamar a la función "sistema()" del sistema Linux.
La siguiente captura de pantalla muestra que después de que el puerto de simulación es atacado, la intención del componente de la aplicación modifica el contenido de la URL durante la comunicación y la vista web muestra código confuso:
Los cuatro componentes principales de las aplicaciones de Android: actividad, receptor, servicio y proveedor de contenido, así como las funciones de seguridad de los componentes de la aplicación que se comunican a través de la intención de IPC, no se analizarán en detalle aquí. Aprovechando la vulnerabilidad relacionada con el componente en el ejemplo anterior, el siguiente diagrama muestra las dimensiones del ataque relacionadas con el lado de la aplicación del terminal:
Debido al entorno de aplicación local de la aplicación de Android, el socket de red carece inherentemente de un mecanismo de autorización y autenticación detallado. Por lo tanto, si se utiliza el cliente Android como servidor, se utiliza el código inverso para buscar el número de puerto aleatorio local de la aplicación y el ataque se envía activamente al puerto, se acecharán los siguientes riesgos de seguridad:
Ejecución de comando local: cuando el nombre del paquete de la aplicación integrada se especifica como la aplicación misma y el nombre del componente se especifica como la actividad de la aplicación, cualquier actividad de la aplicación puede ser iniciado, incluida la actividad protegida no exportada, provocando así un riesgo para la seguridad. Por ejemplo, se puede encontrar una vulnerabilidad de denegación de servicio iniciando varias actividades no exportadas una por una a través de solicitudes HTTP.
Control de comando para modificar los permisos de la aplicación: pase la intención de iniciar los componentes de la aplicación de Android a través del puerto de socket abierto y luego ejecute operaciones como iniciar actividad y enviar transmisión con los permisos del aplicación atacada. Debido a que los intents pasados a través del socket no pueden realizar comprobaciones detalladas de la identidad y los permisos del remitente, evitando la protección de permisos proporcionada por Android para los componentes de la aplicación, y pueden iniciar los componentes de la aplicación no exportados y protegidos por permisos, lo que representa un peligro para la seguridad.
Divulgación de información confidencial, control del teléfono móvil : un servicio local abre el puerto UDP para escuchar y, después de recibir una palabra de comando específica, puede devolver la información confidencial del teléfono móvil. Por ejemplo, el mayordomo de teléfonos móviles de Baidu puede administrar de forma remota la clave secreta del teléfono celular, y luego los atacantes no autorizados pueden administrar completamente el teléfono celular a través de la red.
Optimización de la versión de refuerzo de seguridad de Android
Agregue comprobaciones para comandos del sistema y filtrado de caracteres especiales en las capas nativa y Java.
Cifrar comunicación de socket para el proceso del demonio JNI Watchdog.
Agregue función de verificación para URL, intenciones y actividades en funciones de notificación local para evitar el redireccionamiento a enlaces maliciosos al hacer clic en notificaciones.
Cambie la ubicación de almacenamiento del nombre del paquete en el almacenamiento local de la aplicación.
Agregar funcionalidad de configuración en línea.
Estos son los requisitos importantes para esta optimización del refuerzo de la seguridad.
Si sigue las pruebas de rendimiento o del sistema convencionales, solo necesita realizar pruebas directas en función de los requisitos cambiantes. Sin embargo, para las pruebas de seguridad, garantizar la solidez de la seguridad del SDK requiere pruebas especiales inversas, simulando varios métodos de ataque a la seguridad y casos de prueba divergentes para los puntos modificados.
Datos de privacidad: Seguridad del almacenamiento externo y seguridad del almacenamiento interno; comprobar si los nombres de usuario, contraseñas, registros de chat, información de configuración y otra información privada se guardan localmente y se cifran; verificar la integridad de la información antes de usarla.
Ataques de permiso: verifique el directorio de la aplicación y asegúrese de que sus permisos no permitan que otros miembros del grupo lean o escriban; compruebe si los permisos del sistema están bajo ataque.
Protección de permisos de componentes de Android: evita que programas de terceros llamen arbitrariamente a los componentes internos de la aplicación: evita que programas de terceros llamen a actividades, evita el secuestro de actividades; garantizar la recepción y la seguridad de la transmisión, recibir solo las transmisiones enviadas por la aplicación y evitar que terceros reciban el contenido transmitido; impedir el inicio o la detención de servicios de forma maliciosa; verificar los permisos de operación del Proveedor de Contenidos; Si es necesario llamar a los componentes externamente, verifique si se han aplicado restricciones de firma a la persona que llama.
Actualizaciones: Verifique la integridad y legalidad del paquete de actualización para evitar el secuestro.
Bibliotecas de terceros: si se utilizan bibliotecas de terceros, haga un seguimiento de sus actualizaciones y verifique su seguridad.
Seguridad de ROM: Utilice ROM oficiales o ROM proporcionadas por equipos autorizados para evitar la adición de anuncios implantados, troyanos, etc.
Contramedidas anti-craqueo: contrarresta la descompilación, haciendo imposible descompilar utilizando herramientas de descompilación u obtener el código de desensamblado correcto después de la descompilación; contrarrestar el análisis estático mediante el uso de cifrado y ofuscación de código; contrarrestar la depuración dinámica agregando código para detectar depuradores y emuladores; evite la recompilación comprobando las firmas y verificando el valor hash del archivo dex compilado.
Después de completar las pruebas especiales de seguridad y las pruebas de proceso regulares, realice pruebas de regresión continua para las funciones existentes de la aplicación, la compatibilidad entre versiones nuevas y antiguas y la compatibilidad con diferentes versiones del sistema operativo Android.
En comparación con los casos de prueba de funcionalidad del sistema y rendimiento ordinarios, los casos de prueba de seguridad requieren una comprensión más completa del ecosistema de Android, como por ejemplo: cubrir el nivel de apariencia de seguridad del usuario, el nivel de ataque local y remoto del sistema de aplicaciones y el nivel de vulnerabilidad del sistema operativo, con más enfoque en el diseño de casos de prueba de pensamiento de ataque inverso.
Si el punto de partida del desarrollo es la defensa de la seguridad, el punto de partida de las pruebas es la mentalidad de ataque de los piratas informáticos. El diseño de casos de prueba para escenarios de ataque y la implementación de técnicas de prueba de ataques determina la solidez de la seguridad del SDK.
Para garantizar el más alto nivel de seguridad para sus aplicaciones, considere utilizar WeTest Application Security Testing. Este servicio proporciona una evaluación integral de los problemas de seguridad en las aplicaciones, detección oportuna de vulnerabilidades del programa y ofrece ejemplos de reparación de código para ayudar con la reparación de vulnerabilidades.
Confíe en WeTest para proteger su aplicación contra posibles amenazas y mantener una experiencia de usuario segura.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3