Clés AWS codées en dur dans les applications mobiles
Cet article explique comment gérer les clés d'accès AWS lorsque vous utilisez des services AWS dans votre application mobile.
Cet article explique comment gérer les clés d'accès AWS lorsque vous utilisez des services AWS dans votre application mobile.
L'une des principales raisons qui rendent les clients réticents face au cloud est le contrôle des données et la sécurité de toute la chaîne. Pour répondre à cette préoccupation, AWS a défini dans le modèle de responsabilité partagée (Shared Responsibility Model) les limites entre AWS et le client en matière de contrôles de sécurité, et a décrit les bonnes pratiques de sécurité à suivre lors de l'utilisation des services AWS à chaque niveau.
Le modèle de responsabilité partagée d'AWS
En résumé, AWS est responsable de la sécurité du cloud (représentée par la partie orange), tandis que le client est responsable de la sécurité dans le cloud (représentée par la partie verte). En tant que client, vous êtes donc responsable de la gestion des utilisateurs et de la manière dont ils accèdent aux services.
Lorsque vous accédez à AWS par programmation, vous utilisez une clé d'accès pour vérifier votre identité et celle de vos applications. Toute personne qui possède votre clé d'accès dispose du même niveau d'accès que vous à vos ressources AWS. C'est pourquoi vous ne devez en aucun cas rendre votre clé d'accès publique. Uber n'oubliera pas cette leçon : https://awsinsider.net/articles/2017/11/21/uber-aws-data-breach.aspx
Si vous envoyez votre code vers un dépôt git, vous pouvez utiliser git-secrets, qui vérifie et vous empêche de commiter des clés d'accès dans les dépôts git.
Si vous accédez aux services AWS via votre application mobile, coder les clés d'accès en dur est une vulnérabilité à haut risque, car vos secrets peuvent être compromis par quiconque examine votre code.
Pour vérifier si vos clés sont codées en dur dans votre application, vous pouvez utiliser le scanner de sécurité Ostorlab, qui détecte les clés d'accès codées en dur dans votre application mobile (Android et iOS).
Dans l'exemple, j'utiliserai une application Android qui envoie des photos vers AWS S3.
Le premier exemple utilise les clés codées en dur directement dans la fonction d'envoi :
// 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();
Le second exemple utilise les clés dans un fichier de configuration de ressources :
<?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 est capable de détecter la présence des deux clés :

En cliquant sur les informations sensibles AWS codées en dur dans l'application, nous pouvons retrouver les clés dans la section des détails techniques :
Si vous développez donc une application mobile et utilisez des services AWS : - Vérifiez si vous codez des clés d'accès en dur - Obfusquez votre code pour éviter une récupération triviale des clés d'accès (vous pouvez consulter Proguard) - Stockez vos clés dans un composant distinct et ne les récupérez qu'en cas de besoin, en utilisant par exemple AWS Secret Manager.