Conclusions TL;DR
En moins d'une heure, en utilisant les données de Censys , nous avons trouvé 7 640 buckets S3 potentiels, 49 complètement ouverts (World Read + Write), 16 buckets avec un accès anonyme en écriture, 1 235 avec un accès anonyme en lecture, et plus encore.
Trouver des cibles S3 avec Censys
Amazon S3 (Amazon Simple Storage Service) est un produit qui permet le stockage d'objets sur le web et qui est utilisé par d'innombrables personnes et organisations dans le monde entier. Il est facile à utiliser, mais malheureusement, il est très facile de mal le configurer. Le 20 décembre 2022, on a appris que les buckets S3 de l'éditeur d'éducation McGraw Hill avaient été exposés à l'internet sans la configuration appropriée, laissant les informations personnelles de plus de 100 000 étudiants à la disposition des pirates. Et il ne s'agit pas d'un événement rare ; cela se produit encore et encore.
Bien que Censys ne dispose pas actuellement d'un scanner S3 natif, nous pouvons toujours utiliser les données que nous collectons pour alimenter d'autres outils. Lorsqu'un utilisateur crée un panier, il lui attribue un nom unique qui est ensuite traduit en DNS ; par exemple, si j'ai nommé un panier S3 "censys", ce panier sera disponible via le nom DNS "censys.s3.amazonaws.com ". Ainsi, avant de pouvoir déterminer si un seau S3 est accessible au public, nous devons savoir quel nom a été donné à l'objet de stockage lui-même.
De nombreux outils de sécurité peuvent aider les utilisateurs à trouver des buckets S3 ouverts, mais l'une des parties les plus difficiles est la découverte des cibles (les noms des buckets). Une méthode standard consiste à utiliser la création de noms par force brute ou des combinaisons aléatoires de mots et à tenter de demander le nom à AWS. C'est de cette manière que de nombreux attaquants malveillants trouvent le fruit à portée de main, à savoir des seaux S3 non sécurisés.
Étant donné que Censys a scanné et indexé un nombre considérable d'hôtes sur Internet (environ 276 millions d'hôtes et 2,1 milliards de services au moment de la rédaction de ce document), nous pouvons exploiter ces données pour trouver des noms de seaux S3 potentiels, que nous pouvons ensuite introduire dans l'outil open-source S3Scanner pour déterminer les types d'accès disponibles.
Tout d'abord, nous avons créé une requête SQL qui déverse le contenu de tout corps HTTP contenant le mot "s3" sur Internet dans une autre base de données contenant des métadonnées sur l'hôte. Ensuite, nous avons écrit un script python qui a parcouru chacun de ces corps de réponse HTTP et a analysé les URL de type s3 pour extraire les noms de seaux s3, qui sont ensuite écrits dans un fichier.
Une fois ce script exécuté, nous avons utilisé le fichier de sortie contenant uniquement les noms des seaux comme entrée de l'outil S3Scanner: