Claves de AWS codificadas en aplicaciones móviles
Este artículo explica cómo gestionar las claves de acceso de AWS al utilizar los servicios de AWS en su aplicación móvil.
Este artículo explica cómo gestionar las claves de acceso de AWS al utilizar los servicios de AWS en su aplicación móvil.
Una de las principales razones que hacen que los clientes sean reticentes a la nube es el control de los datos y la seguridad de toda la cadena. Para abordar esta preocupación, AWS definió en el Modelo de responsabilidad compartida los límites entre AWS y el cliente en lo que respecta a los controles de seguridad, y describió las mejores prácticas de seguridad que deben seguirse al utilizar los servicios de AWS en cada nivel.
Modelo de responsabilidad compartida de AWS
En pocas palabras, AWS es responsable de la seguridad de la nube (representada por la parte naranja), mientras que el cliente es responsable de la seguridad en la nube (representada por la parte verde). Por tanto, como cliente, usted es responsable de gestionar los usuarios y la forma en que acceden a los servicios.
Cuando accede a AWS mediante programación, utiliza una clave de acceso para verificar su identidad y la de sus aplicaciones. Cualquiera que tenga su clave de acceso tiene el mismo nivel de acceso a sus recursos de AWS que usted. Por eso no debe hacer pública su clave de acceso bajo ninguna circunstancia. Uber no olvidará esta lección: https://awsinsider.net/articles/2017/11/21/uber-aws-data-breach.aspx
Si sube su código a un repositorio git, puede utilizar git-secrets, que comprueba y le impide confirmar claves de acceso en repositorios git.
Si accede a los servicios de AWS desde su aplicación móvil, codificar las claves de acceso en el código es una vulnerabilidad de alto riesgo, ya que sus secretos pueden quedar comprometidos por alguien que examine su código.
Para comprobar si sus claves están codificadas en su aplicación, puede utilizar el escáner de seguridad de Ostorlab, que detecta las claves de acceso codificadas en su aplicación móvil (Android e iOS).
En el ejemplo, utilizaré una aplicación Android para subir imágenes a AWS S3.
El primer ejemplo utiliza las claves codificadas directamente en la función de carga:
// KEY and SECRET are gotten when we create an IAM user above
String KEY = "AKIAIUG2TRZ99XFZONBA";
String SECRET = "31eJbrNp5OJgrbvxTyzz38MUZ/MBMNVkG0irtd/2";
BasicAWSCredentials credentials = new BasicAWSCredentials(KEY, SECRET);
AmazonS3Client s3Client =new AmazonS3Client(credentials);
TransferUtility transferUtility =
TransferUtility.builder()
.context(getApplicationContext())
.awsConfiguration(AWSMobileClient.getInstance().getConfiguration())
.s3Client(s3Client)
.build();
El segundo ejemplo utiliza las claves en un archivo de configuración de recursos:
<?xml version="1.0" encoding="utf-8"?>
<keys>
<key name="aws_access_key_id">AIDAJILINIFRJA2HBEEQ </key>
<key name="aws_secret_access_key"> 5syV8k5gCDJXtSCW4BKOjcpCLJHAhgbe/YfSPoJE </key>
</keys>
Ostorlab es capaz de detectar la presencia de ambas claves:

Al hacer clic en la información sensible de AWS codificada en la aplicación, podemos encontrar las claves en la sección de detalles técnicos:
Por tanto, si está desarrollando una aplicación móvil y utiliza servicios de AWS: - Compruebe si está codificando claves de acceso en el código. - Ofusque su código para evitar que las claves de acceso se recuperen de forma trivial (puede consultar Proguard). - Almacene sus claves en un componente distinto y recupérelas solo cuando sea necesario, utilizando AWS Secret Manager, por ejemplo.