
Rechercher des secrets dans les volumes EBS exposés
Dufflebag est un outil qui parcourt les instantanés publics d'Elastic Block Storage (EBS) à la recherche de secrets qui auraient pu être laissés accidentellement. Vous pourriez être surpris par tous les mots de passe et secrets qui traînent !
L'outil est organisé sous forme d'application Elastic Beanstalk (« EB », à ne pas confondre avec EBS), et ne fonctionnera définitivement pas si vous essayez de l'exécuter sur votre propre machine.
Dufflebag comporte beaucoup de pièces mobiles car il n'est pas trivial de lire réellement des volumes EBS en pratique. Vous devez être dans un environnement AWS, cloner l'instantané, créer un volume à partir de l'instantané, attacher le volume, monter le volume, etc... C'est pourquoi il est conçu comme une application Elastic Beanstalk, afin qu'il puisse automatiquement monter ou descendre en charge selon vos souhaits, et pour que l'ensemble puisse être facilement démantelé une fois l'opération terminée.
Gardez simplement un œil sur votre console AWS pour vous assurer que rien ne s'emballe et n'accumule les factures. Nous avons essayé de penser à toutes les éventualités et de fournir une gestion des erreurs... mais vous êtes prévenu !
Vous devrez ajouter quelques autorisations IAM AWS supplémentaires au rôle : aws-elasticbeanstalk-ec2-role. Vous pouvez également créer un tout nouveau rôle avec ces autorisations et configurer EB pour utiliser ce rôle, mais c'est un peu plus complexe. Dans tous les cas, vous devrez ajouter :
L'application principale est écrite en Go, vous aurez donc besoin d'un compilateur Golang. Mais l'application EB est en fait construite dans un fichier .zip (c'est ainsi que fonctionne EB) donc le makefile produira un zip pour vous.
Vérifiez votre région. Dufflebag ne peut fonctionner que dans une seule région AWS à la fois. Si vous souhaitez rechercher dans toutes les régions, vous devrez déployer autant d'instances. Pour changer la région, modifiez le contenu du fichier source region.go.
Installez les dépendances : Ubuntu 18.04 x64 :
sudo apt install make golang-go git
go get -u github.com/aws/aws-sdk-go
go get -u github.com/deckarep/golang-set
go get -u github.com/lib/pq
go get -u lukechampine.com/blake3
make
Vous devriez maintenant voir un fichier dufflebag.zip dans le répertoire racine du projet.
dufflebag. Les noms de bucket S3 doivent être globalement uniques, vous aurez donc probablement besoin d'un suffixe qui est un charabia ou quelque chose du genre.Allez dans votre console AWS et trouvez l'option de menu Elastic Beanstalk. Cela est probablement faisable via la CLI aussi, mais cette description utilisera la console. Sélectionnez Actions -> Create Environment.

Ensuite, dans la fenêtre suivante, choisissez Worker environment et cliquez sur Select.

Dans la fenêtre suivante, choisissez Preconfigured -> Go pour la Platform.

Sous Application Code, choisissez Upload your Code.

Cliquez sur le bouton Upload et sélectionnez le fichier dufflebag.zip que vous venez de construire.

Enfin, cliquez sur Create Environment pour démarrer.
Cela prendra quelques minutes pour qu'AWS crée tout et démarre. Une fois créé, Dufflebag se mettra immédiatement au travail. Aucune autre action n'est nécessaire.
Une fois que cela est opérationnel, vous pouvez réessayer avec la vanne de sécurité retirée. Par défaut, Dufflebag ne recherche que 20 instantanés EBS. (Pour éviter que cela ne s'emballe dès le premier essai). Pour étendre la recherche à toute la région, allez dans populate.go, supprimez la ligne de code suivante, et reconstruisez :
//#####################################################################
//#### Safety Valve ####
//#### Remove this line of code below to search all of your region ####
//#####################################################################
snapshots = snapshots_result.Snapshots[0:20]
L'une des raisons pour lesquelles Dufflebag est conçu comme une application Elastic Beanstalk est de pouvoir automatiquement monter ou descendre en charge facilement. Par défaut, il s'exécutera sur une seule instance et sera assez lent. Mais si vous souhaitez l'accélérer un peu, ajustez l'autoscaling dans Elastic Beanstalk. Les options complètes dépassent un peu le cadre de ce document, je vous laisse donc les explorer. Mais en pratique, j'ai constaté qu'un simple déclencheur basé sur l'utilisation du CPU fonctionne assez bien.
Lors de la configuration de l'environnement ci-dessus, vous trouverez les options sous le bouton Configure more options (au lieu de cliquer sur Create environment), puis cliquez sur Scaling.

Dufflebag copiera tous les fichiers intéressants vers le bucket S3 que vous avez créé précédemment. (Techniquement, Dufflebag utilisera le premier bucket S3 dont le nom commence par "dufflebag".)
Vous pouvez simplement regarder les fichiers arriver un par un dans votre bucket S3. Ils seront nommés :
originalfilename_blake3sum_volumeid
Si tout se passe bien, vous n'aurez pas besoin de lire les journaux. Mais au cas où, Elastic Beanstalk permet aux applications d'écrire dans des fichiers journaux pendant leur exécution, et ceux-ci sont capturés en naviguant vers l'onglet Logs. Cliquez ensuite sur Request Logs puis Last 100 Lines. Cela vous donnera le lot le plus récent des journaux de Dufflebag. Cliquez sur le bouton Download pour le lire. Ce fichier contiendra beaucoup d'autres journaux système, mais la partie Dufflebag se trouve sous "/var/log/web-1.log" en haut.
Pour voir l'historique complet des journaux, sélectionnez Full Logs au lieu de Last 100 Lines. (Notez qu'EB fera automatiquement tourner les journaux assez agressivement par défaut)
De plus, vous pouvez avoir une idée de la progression globale en regardant la file d'attente SQS de l'environnement. Les environnements de travail Elastic Beanstalk utilisent SQS pour gérer le flux de travail. Chaque message dans la file d'attente de Dufflebag représente un volume EBS à traiter :

La colonne Messages Available indique combien de volumes n'ont pas encore été traités. La colonne Messages in Flight indique combien de volumes sont en cours de traitement.
Dufflebag est programmé pour rechercher des choses que nous pensions susceptibles d'être « intéressantes » : clés privées, mots de passe, clés AWS, etc... Mais que faire si vous voulez vraiment rechercher quelque chose de spécifique à VOUS ? Par exemple, vous travaillez pour bank.com et souhaitez voir ce qui existe qui référence bank.com.
Pour cela, une modification mineure du code de Dufflebag sera nécessaire, mais pas trop. Ne vous inquiétez pas ! La logique de ce qu'il faut rechercher se trouve dans inspector.go. La fonction pilfer() est une goroutine qui inspecte un fichier. Le code peut sembler un peu intimidant au premier abord, mais voici ce qu'il fait (et comment le modifier sans trop de difficulté).
Listes noires de noms de fichiers :
blacklist_exact)blacklist_contains)blacklist_prefix)Vous pouvez modifier la logique de recherche assez facilement en changeant simplement le contenu de ces trois listes. Cependant, je recommande généralement de les laisser telles quelles. Ces listes noires sont conçues pour couvrir les fichiers ennuyeux présents dans de nombreux systèmes de fichiers et empêcher Dufflebag d'avoir à inspecter en profondeur chaque fichier sur tout AWS. Les données sensibles que vous recherchez pourraient se trouver dans ces fichiers... mais probablement pas.
Liste blanche de noms de fichiers :
IsSensitiveFileName() vérifie le nom du fichier par rapport à une expression régulière qui trouve les noms de fichiers sensibles. (Tels que /etc/shadow, bash_history, etc...)Contenu des fichiers :
checkContentsRegex() vérifie le contenu du fichier par rapport à un ensemble d'expressions régulières. (L'argument d'entrée du fichier est ligne par ligne, donc l'entrée de cette fonction est une ligne d'un fichier, pas le fichier entier.) Donc pour rechercher des mots-clés liés à votre organisation, modifiez simplement les expressions régulières dans checkContentsRegex().