Técnica de codificación segura: El problema de los permisos personalizados
Al desarrollar para móviles, las aplicaciones suelen tener que solicitar algunos permisos al sistema. Pueden necesitar acceso a los contactos del usuario, a la conexión Bluetooth o la capacidad de enviar mensajes SMS. Todos los permisos mencionados anteriormente son permisos de plataforma, definidos por el framework de Android.
Pero hay casos en los que estos no son suficientes y la aplicación necesita definir su propio permiso personalizado. Utilizaré nuestra propia empresa como ejemplo. Secure Code Warrior puede crear una aplicación que guarde algunos datos privados como parte de un perfil, incluyendo el rendimiento del usuario en la plataforma SCW. Y nos gustaría permitir que otra aplicación de formación en seguridad, digamos DevTrainer, utilice estos datos si el usuario le da permiso para hacerlo. Se trata de datos sensibles, el usuario ciertamente no querría que cualquiera los conociera, pero la SCWApp no debería ocultarlos y protegerlos completamente, ya que podrían ser útiles. Por lo tanto, deseamos que el usuario tenga control sobre ella. Aquí es donde entran los permisos personalizados.
La SCWApp crea un permiso personalizado, DevTrainer solicita este permiso y el usuario puede decidir si quiere permitirlo o no. Esta es una práctica común y una buena manera de restringir el acceso a las aplicaciones de la lista blanca.
Lamentablemente, hay algunos comportamientos poco intuitivos en torno a los permisos personalizados que los hacen arriesgados desde el punto de vista de la seguridad. Concretamente, los permisos personalizados pueden ser definidos por cualquier app en cualquier momento, y "el primero gana", y esta estrategia viene con algunas consecuencias.
Para el siguiente escenario, definimos dos perfiles de aplicaciones que hemos introducido anteriormente (todas estas aplicaciones son ficticias a efectos demostrativos):
1. SCWApp: la aplicación que define un permiso personalizado y defiende un componente utilizando este permiso.
2. DevTrainer: esta aplicación define el mismo permiso que SCWApp y declara al usuario que desea tener este permiso.
Este es un escenario común acuñado como el caso de las Peer Apps. Si la aplicación DevTrainer fuera sólo un plugin para la SCWApp no tendría que definir el permiso personalizado. La suposición, en este caso, es que SCWApp se instalaría antes que DevTrainer y no se produciría ningún comportamiento inesperado. Si de alguna manera el usuario instala primero DevTrainer, no se le informa de la solicitud del permiso. Si el usuario instala más tarde SCWApp, no se concede el permiso a DevTrainer de forma retroactiva, por lo que los intentos de la aplicación DevTrainer de utilizar el componente seguro fallarán.
Aquí es donde entra en juego el caso de la aplicación Peers. En algunos casos, no se puede esperar que una aplicación se instale antes que la otra. Digamos que si Facebook y Twitter quieren utilizar los componentes del otro, tienen que definir los permisos personalizados del otro.
Sin embargo, aquí es donde la cosa se complica. Si la aplicación DevTrainer se instala primero, el usuario no es informado de su solicitud de permiso personalizado. En este punto, aunque el usuario no haya sido informado, DevTrainer tiene el permiso personalizado y puede acceder al componente protegido.
La cosa se complica aún más. La aplicación DevTrainer puede cambiar el nivel de protección de los permisos. Android no utiliza el nivel de protección del defensor, sino el nivel de protección que se define primero, lo que significa que la aplicación que se instaló primero puede definirlo. Esto significa que si DevTrainer cambia el nivel de permiso a normal, entonces cualquier aplicación futura que solicite este permiso no tendrá que ser confirmada por el usuario, sino que se le concederá automáticamente el acceso.
Este escenario está inspirado en la explicación de este problema que se encuentra en el github de cwac-security.
La estrategia "el primero gana" tiene algunas consecuencias peligrosas y el desconocimiento de su comportamiento puede llevar al desarrollador a tomar decisiones de seguridad basadas en entradas no fiables y permitir que aplicaciones no deseadas accedan a datos sensibles o servicios protegidos. Para obtener más información sobre cómo evitar las decisiones de seguridad a través de entradas no fiables, visite nuestra plataforma. Este comportamiento se modificó a partir de Android 5.0 (Lollipop). Pero como actualmente, más del 22% de los dispositivos Android siguen ejecutando una versión inferior de Android es importante mitigar los riesgos del comportamiento original en tu aplicación. Comprueba si el permiso ya se ha definido en la primera ejecución de tu app y toma las medidas adecuadas si es el caso para resolver cualquier riesgo de seguridad.
Buena suerte con la codificación y hasta la semana que viene.
Al definir los permisos personalizados, una aplicación puede compartir sus recursos y capacidades con otras aplicaciones.
https://developer.android.com/guide/topics/permissions/defining.html
Al definir los permisos personalizados, una aplicación puede compartir sus recursos y capacidades con otras aplicaciones.
Investigador de seguridad de aplicaciones - Ingeniero de I+D - Candidato a doctor
Secure Code Warrior está a disposición de su organización para ayudarle a proteger el código a lo largo de todo el ciclo de vida de desarrollo de software y crear una cultura en la que la ciberseguridad sea una prioridad. Tanto si es director de AppSec, desarrollador, CISO o cualquier persona implicada en la seguridad, podemos ayudar a su organización a reducir los riesgos asociados a un código inseguro.
Reservar una demostraciónInvestigador de seguridad de aplicaciones - Ingeniero de I+D - Candidato a doctor
Al desarrollar para móviles, las aplicaciones suelen tener que solicitar algunos permisos al sistema. Pueden necesitar acceso a los contactos del usuario, a la conexión Bluetooth o la capacidad de enviar mensajes SMS. Todos los permisos mencionados anteriormente son permisos de plataforma, definidos por el framework de Android.
Pero hay casos en los que estos no son suficientes y la aplicación necesita definir su propio permiso personalizado. Utilizaré nuestra propia empresa como ejemplo. Secure Code Warrior puede crear una aplicación que guarde algunos datos privados como parte de un perfil, incluyendo el rendimiento del usuario en la plataforma SCW. Y nos gustaría permitir que otra aplicación de formación en seguridad, digamos DevTrainer, utilice estos datos si el usuario le da permiso para hacerlo. Se trata de datos sensibles, el usuario ciertamente no querría que cualquiera los conociera, pero la SCWApp no debería ocultarlos y protegerlos completamente, ya que podrían ser útiles. Por lo tanto, deseamos que el usuario tenga control sobre ella. Aquí es donde entran los permisos personalizados.
La SCWApp crea un permiso personalizado, DevTrainer solicita este permiso y el usuario puede decidir si quiere permitirlo o no. Esta es una práctica común y una buena manera de restringir el acceso a las aplicaciones de la lista blanca.
Lamentablemente, hay algunos comportamientos poco intuitivos en torno a los permisos personalizados que los hacen arriesgados desde el punto de vista de la seguridad. Concretamente, los permisos personalizados pueden ser definidos por cualquier app en cualquier momento, y "el primero gana", y esta estrategia viene con algunas consecuencias.
Para el siguiente escenario, definimos dos perfiles de aplicaciones que hemos introducido anteriormente (todas estas aplicaciones son ficticias a efectos demostrativos):
1. SCWApp: la aplicación que define un permiso personalizado y defiende un componente utilizando este permiso.
2. DevTrainer: esta aplicación define el mismo permiso que SCWApp y declara al usuario que desea tener este permiso.
Este es un escenario común acuñado como el caso de las Peer Apps. Si la aplicación DevTrainer fuera sólo un plugin para la SCWApp no tendría que definir el permiso personalizado. La suposición, en este caso, es que SCWApp se instalaría antes que DevTrainer y no se produciría ningún comportamiento inesperado. Si de alguna manera el usuario instala primero DevTrainer, no se le informa de la solicitud del permiso. Si el usuario instala más tarde SCWApp, no se concede el permiso a DevTrainer de forma retroactiva, por lo que los intentos de la aplicación DevTrainer de utilizar el componente seguro fallarán.
Aquí es donde entra en juego el caso de la aplicación Peers. En algunos casos, no se puede esperar que una aplicación se instale antes que la otra. Digamos que si Facebook y Twitter quieren utilizar los componentes del otro, tienen que definir los permisos personalizados del otro.
Sin embargo, aquí es donde la cosa se complica. Si la aplicación DevTrainer se instala primero, el usuario no es informado de su solicitud de permiso personalizado. En este punto, aunque el usuario no haya sido informado, DevTrainer tiene el permiso personalizado y puede acceder al componente protegido.
La cosa se complica aún más. La aplicación DevTrainer puede cambiar el nivel de protección de los permisos. Android no utiliza el nivel de protección del defensor, sino el nivel de protección que se define primero, lo que significa que la aplicación que se instaló primero puede definirlo. Esto significa que si DevTrainer cambia el nivel de permiso a normal, entonces cualquier aplicación futura que solicite este permiso no tendrá que ser confirmada por el usuario, sino que se le concederá automáticamente el acceso.
Este escenario está inspirado en la explicación de este problema que se encuentra en el github de cwac-security.
La estrategia "el primero gana" tiene algunas consecuencias peligrosas y el desconocimiento de su comportamiento puede llevar al desarrollador a tomar decisiones de seguridad basadas en entradas no fiables y permitir que aplicaciones no deseadas accedan a datos sensibles o servicios protegidos. Para obtener más información sobre cómo evitar las decisiones de seguridad a través de entradas no fiables, visite nuestra plataforma. Este comportamiento se modificó a partir de Android 5.0 (Lollipop). Pero como actualmente, más del 22% de los dispositivos Android siguen ejecutando una versión inferior de Android es importante mitigar los riesgos del comportamiento original en tu aplicación. Comprueba si el permiso ya se ha definido en la primera ejecución de tu app y toma las medidas adecuadas si es el caso para resolver cualquier riesgo de seguridad.
Buena suerte con la codificación y hasta la semana que viene.
Al definir los permisos personalizados, una aplicación puede compartir sus recursos y capacidades con otras aplicaciones.
https://developer.android.com/guide/topics/permissions/defining.html
Al desarrollar para móviles, las aplicaciones suelen tener que solicitar algunos permisos al sistema. Pueden necesitar acceso a los contactos del usuario, a la conexión Bluetooth o la capacidad de enviar mensajes SMS. Todos los permisos mencionados anteriormente son permisos de plataforma, definidos por el framework de Android.
Pero hay casos en los que estos no son suficientes y la aplicación necesita definir su propio permiso personalizado. Utilizaré nuestra propia empresa como ejemplo. Secure Code Warrior puede crear una aplicación que guarde algunos datos privados como parte de un perfil, incluyendo el rendimiento del usuario en la plataforma SCW. Y nos gustaría permitir que otra aplicación de formación en seguridad, digamos DevTrainer, utilice estos datos si el usuario le da permiso para hacerlo. Se trata de datos sensibles, el usuario ciertamente no querría que cualquiera los conociera, pero la SCWApp no debería ocultarlos y protegerlos completamente, ya que podrían ser útiles. Por lo tanto, deseamos que el usuario tenga control sobre ella. Aquí es donde entran los permisos personalizados.
La SCWApp crea un permiso personalizado, DevTrainer solicita este permiso y el usuario puede decidir si quiere permitirlo o no. Esta es una práctica común y una buena manera de restringir el acceso a las aplicaciones de la lista blanca.
Lamentablemente, hay algunos comportamientos poco intuitivos en torno a los permisos personalizados que los hacen arriesgados desde el punto de vista de la seguridad. Concretamente, los permisos personalizados pueden ser definidos por cualquier app en cualquier momento, y "el primero gana", y esta estrategia viene con algunas consecuencias.
Para el siguiente escenario, definimos dos perfiles de aplicaciones que hemos introducido anteriormente (todas estas aplicaciones son ficticias a efectos demostrativos):
1. SCWApp: la aplicación que define un permiso personalizado y defiende un componente utilizando este permiso.
2. DevTrainer: esta aplicación define el mismo permiso que SCWApp y declara al usuario que desea tener este permiso.
Este es un escenario común acuñado como el caso de las Peer Apps. Si la aplicación DevTrainer fuera sólo un plugin para la SCWApp no tendría que definir el permiso personalizado. La suposición, en este caso, es que SCWApp se instalaría antes que DevTrainer y no se produciría ningún comportamiento inesperado. Si de alguna manera el usuario instala primero DevTrainer, no se le informa de la solicitud del permiso. Si el usuario instala más tarde SCWApp, no se concede el permiso a DevTrainer de forma retroactiva, por lo que los intentos de la aplicación DevTrainer de utilizar el componente seguro fallarán.
Aquí es donde entra en juego el caso de la aplicación Peers. En algunos casos, no se puede esperar que una aplicación se instale antes que la otra. Digamos que si Facebook y Twitter quieren utilizar los componentes del otro, tienen que definir los permisos personalizados del otro.
Sin embargo, aquí es donde la cosa se complica. Si la aplicación DevTrainer se instala primero, el usuario no es informado de su solicitud de permiso personalizado. En este punto, aunque el usuario no haya sido informado, DevTrainer tiene el permiso personalizado y puede acceder al componente protegido.
La cosa se complica aún más. La aplicación DevTrainer puede cambiar el nivel de protección de los permisos. Android no utiliza el nivel de protección del defensor, sino el nivel de protección que se define primero, lo que significa que la aplicación que se instaló primero puede definirlo. Esto significa que si DevTrainer cambia el nivel de permiso a normal, entonces cualquier aplicación futura que solicite este permiso no tendrá que ser confirmada por el usuario, sino que se le concederá automáticamente el acceso.
Este escenario está inspirado en la explicación de este problema que se encuentra en el github de cwac-security.
La estrategia "el primero gana" tiene algunas consecuencias peligrosas y el desconocimiento de su comportamiento puede llevar al desarrollador a tomar decisiones de seguridad basadas en entradas no fiables y permitir que aplicaciones no deseadas accedan a datos sensibles o servicios protegidos. Para obtener más información sobre cómo evitar las decisiones de seguridad a través de entradas no fiables, visite nuestra plataforma. Este comportamiento se modificó a partir de Android 5.0 (Lollipop). Pero como actualmente, más del 22% de los dispositivos Android siguen ejecutando una versión inferior de Android es importante mitigar los riesgos del comportamiento original en tu aplicación. Comprueba si el permiso ya se ha definido en la primera ejecución de tu app y toma las medidas adecuadas si es el caso para resolver cualquier riesgo de seguridad.
Buena suerte con la codificación y hasta la semana que viene.
Al definir los permisos personalizados, una aplicación puede compartir sus recursos y capacidades con otras aplicaciones.
https://developer.android.com/guide/topics/permissions/defining.html
Haga clic en el siguiente enlace y descargue el PDF de este recurso.
Secure Code Warrior está a disposición de su organización para ayudarle a proteger el código a lo largo de todo el ciclo de vida de desarrollo de software y crear una cultura en la que la ciberseguridad sea una prioridad. Tanto si es director de AppSec, desarrollador, CISO o cualquier persona implicada en la seguridad, podemos ayudar a su organización a reducir los riesgos asociados a un código inseguro.
Ver el informeReservar una demostraciónInvestigador de seguridad de aplicaciones - Ingeniero de I+D - Candidato a doctor
Al desarrollar para móviles, las aplicaciones suelen tener que solicitar algunos permisos al sistema. Pueden necesitar acceso a los contactos del usuario, a la conexión Bluetooth o la capacidad de enviar mensajes SMS. Todos los permisos mencionados anteriormente son permisos de plataforma, definidos por el framework de Android.
Pero hay casos en los que estos no son suficientes y la aplicación necesita definir su propio permiso personalizado. Utilizaré nuestra propia empresa como ejemplo. Secure Code Warrior puede crear una aplicación que guarde algunos datos privados como parte de un perfil, incluyendo el rendimiento del usuario en la plataforma SCW. Y nos gustaría permitir que otra aplicación de formación en seguridad, digamos DevTrainer, utilice estos datos si el usuario le da permiso para hacerlo. Se trata de datos sensibles, el usuario ciertamente no querría que cualquiera los conociera, pero la SCWApp no debería ocultarlos y protegerlos completamente, ya que podrían ser útiles. Por lo tanto, deseamos que el usuario tenga control sobre ella. Aquí es donde entran los permisos personalizados.
La SCWApp crea un permiso personalizado, DevTrainer solicita este permiso y el usuario puede decidir si quiere permitirlo o no. Esta es una práctica común y una buena manera de restringir el acceso a las aplicaciones de la lista blanca.
Lamentablemente, hay algunos comportamientos poco intuitivos en torno a los permisos personalizados que los hacen arriesgados desde el punto de vista de la seguridad. Concretamente, los permisos personalizados pueden ser definidos por cualquier app en cualquier momento, y "el primero gana", y esta estrategia viene con algunas consecuencias.
Para el siguiente escenario, definimos dos perfiles de aplicaciones que hemos introducido anteriormente (todas estas aplicaciones son ficticias a efectos demostrativos):
1. SCWApp: la aplicación que define un permiso personalizado y defiende un componente utilizando este permiso.
2. DevTrainer: esta aplicación define el mismo permiso que SCWApp y declara al usuario que desea tener este permiso.
Este es un escenario común acuñado como el caso de las Peer Apps. Si la aplicación DevTrainer fuera sólo un plugin para la SCWApp no tendría que definir el permiso personalizado. La suposición, en este caso, es que SCWApp se instalaría antes que DevTrainer y no se produciría ningún comportamiento inesperado. Si de alguna manera el usuario instala primero DevTrainer, no se le informa de la solicitud del permiso. Si el usuario instala más tarde SCWApp, no se concede el permiso a DevTrainer de forma retroactiva, por lo que los intentos de la aplicación DevTrainer de utilizar el componente seguro fallarán.
Aquí es donde entra en juego el caso de la aplicación Peers. En algunos casos, no se puede esperar que una aplicación se instale antes que la otra. Digamos que si Facebook y Twitter quieren utilizar los componentes del otro, tienen que definir los permisos personalizados del otro.
Sin embargo, aquí es donde la cosa se complica. Si la aplicación DevTrainer se instala primero, el usuario no es informado de su solicitud de permiso personalizado. En este punto, aunque el usuario no haya sido informado, DevTrainer tiene el permiso personalizado y puede acceder al componente protegido.
La cosa se complica aún más. La aplicación DevTrainer puede cambiar el nivel de protección de los permisos. Android no utiliza el nivel de protección del defensor, sino el nivel de protección que se define primero, lo que significa que la aplicación que se instaló primero puede definirlo. Esto significa que si DevTrainer cambia el nivel de permiso a normal, entonces cualquier aplicación futura que solicite este permiso no tendrá que ser confirmada por el usuario, sino que se le concederá automáticamente el acceso.
Este escenario está inspirado en la explicación de este problema que se encuentra en el github de cwac-security.
La estrategia "el primero gana" tiene algunas consecuencias peligrosas y el desconocimiento de su comportamiento puede llevar al desarrollador a tomar decisiones de seguridad basadas en entradas no fiables y permitir que aplicaciones no deseadas accedan a datos sensibles o servicios protegidos. Para obtener más información sobre cómo evitar las decisiones de seguridad a través de entradas no fiables, visite nuestra plataforma. Este comportamiento se modificó a partir de Android 5.0 (Lollipop). Pero como actualmente, más del 22% de los dispositivos Android siguen ejecutando una versión inferior de Android es importante mitigar los riesgos del comportamiento original en tu aplicación. Comprueba si el permiso ya se ha definido en la primera ejecución de tu app y toma las medidas adecuadas si es el caso para resolver cualquier riesgo de seguridad.
Buena suerte con la codificación y hasta la semana que viene.
Al definir los permisos personalizados, una aplicación puede compartir sus recursos y capacidades con otras aplicaciones.
https://developer.android.com/guide/topics/permissions/defining.html
Índice
Investigador de seguridad de aplicaciones - Ingeniero de I+D - Candidato a doctor
Secure Code Warrior está a disposición de su organización para ayudarle a proteger el código a lo largo de todo el ciclo de vida de desarrollo de software y crear una cultura en la que la ciberseguridad sea una prioridad. Tanto si es director de AppSec, desarrollador, CISO o cualquier persona implicada en la seguridad, podemos ayudar a su organización a reducir los riesgos asociados a un código inseguro.
Reservar una demostraciónDescargarRecursos para empezar
Evaluación comparativa de las competencias en materia de seguridad: optimización del diseño seguro en la empresa
El movimiento Secure-by-Design es el futuro del desarrollo de software seguro. Conozca los elementos clave que las empresas deben tener en cuenta cuando piensan en una iniciativa Secure-by-Design.
DigitalOcean reduce su deuda de seguridad con Secure Code Warrior
El uso por parte de DigitalOcean de la formación Secure Code Warrior ha reducido significativamente la deuda de seguridad, permitiendo a los equipos centrarse más en la innovación y la productividad. La mejora de la seguridad ha reforzado la calidad de sus productos y su ventaja competitiva. De cara al futuro, SCW Trust Score les ayudará a seguir mejorando las prácticas de seguridad y a continuar impulsando la innovación.
Recursos para empezar
La puntuación de confianza revela el valor de las iniciativas de mejora de la seguridad mediante el diseño
Nuestra investigación ha demostrado que la formación en código seguro funciona. Trust Score, que utiliza un algoritmo basado en más de 20 millones de puntos de datos de aprendizaje procedentes del trabajo de más de 250 000 alumnos en más de 600 organizaciones, revela su eficacia a la hora de reducir las vulnerabilidades y cómo hacer que la iniciativa sea aún más eficaz.
Seguridad reactiva frente a seguridad preventiva: Prevenir es mejor que curar
La idea de introducir la seguridad preventiva en el código y los sistemas heredados al mismo tiempo que en las aplicaciones más recientes puede parecer desalentadora, pero un planteamiento basado en el diseño seguro, aplicado mediante la mejora de las competencias de los desarrolladores, puede aplicar las mejores prácticas de seguridad a esos sistemas. Es la mejor oportunidad que tienen muchas organizaciones de mejorar su seguridad.
Ventajas de la evaluación comparativa de las competencias de seguridad de los desarrolladores
La creciente atención que se presta al código seguro y a los principios del diseño seguro exige que los desarrolladores reciban formación en ciberseguridad desde el principio del proceso de desarrollo de software, con herramientas como Secure Code Warrior's Trust Score, que ayudan a medir y mejorar sus progresos.
Impulsando iniciativas de seguridad por diseño para empresas con éxito significativo
Nuestro último documento de investigación, Benchmarking Security Skills: Streamlining Secure-by-Design in the Enterprise, es el resultado de un análisis profundo de iniciativas reales de Secure-by-Design a nivel empresarial y de la derivación de enfoques de mejores prácticas basados en hallazgos basados en datos.