La clé du fichier de l'an dernier
Un stagiaire publie le code d'un site sur un dépôt en ligne. Un fichier de réglages contient la clé de l'hébergeur. Le lendemain, il retire la ligne et enregistre à nouveau.
Tout le monde croit l'affaire close. Un an plus tard, un inconnu lit l'ancienne version du fichier. La clé fonctionne toujours.
La règle unique
Attention
Ce laboratoire est une application qui cache de faux secrets volontairement. Cherchez dans votre copie privée, et nulle part ailleurs : elle n'a aucune sortie vers Internet. Chercher des secrets dans un système qui n'est pas le vôtre, ou sans permission, est un délit dans presque tous les pays.
À la fin de cette leçon
Remarque
Je peux trouver un secret au mauvais endroit et dire où il doit être.
Mots-clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Secret | un mot de passe, une clé ou un jeton qui doit rester privé | |
| Variable d'environnement | un réglage nommé donné à un programme quand il démarre | MOT_DE_PASSE_BASE |
| Gestionnaire de secrets | un coffre qui ne remet les secrets qu'aux programmes autorisés | |
| Historique | toutes les versions passées de chaque fichier d'un dépôt de code | |
| Renouveler | remplacer un secret par un nouveau | |
| Image de conteneur | une copie emballée d'un programme et de ses fichiers |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Un secret fuit par bien des endroits
Un secret fuit partout où une copie peut être lue par quelqu'un qui n'y avait pas droit. Le code n'est qu'un endroit parmi d'autres.
Il peut être dans un fichier source, dans d'anciennes versions ou dans une image de conteneur. Il peut être dans un fichier de réglages, dans un journal, ou dans un script envoyé à chaque visiteur. Un secret dont le navigateur a besoin est connu de tous.
Exemple travaillé : où vit chaque copie
| Endroit | Qui peut le lire | Mieux |
|---|---|---|
| Un fichier source | Quiconque a le code | Le lire dans l'environnement |
| D'anciennes versions | Quiconque a une copie de l'historique | Le renouveler, puis nettoyer l'historique |
| Une image de conteneur | Quiconque peut la télécharger | Le donner au lancement, pas à la fabrication |
| Un script envoyé aux navigateurs | Chaque visiteur | Le garder sur le serveur |
| Un fichier journal | Tous ceux qui lisent les journaux | Ne jamais l'écrire |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Regardez l'application de votre laboratoire
Votre laboratoire fait tourner WrongSecrets. Démarrez-le, puis lancez ces trois commandes. Elles regardent seulement.
La première demande si l'application va bien. La deuxième demande quelles pages de gestion elle offre à n'importe qui. La troisième montre le début d'un script qu'elle envoie à chaque visiteur.
L'application va-t-elle bien ?
curl -s -w "\n" http://wrongsecrets:8080/actuator/healthAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Quelles pages de gestion offre-t-elle ?
curl -s http://wrongsecrets:8080/actuator | grep -o 'actuator/[a-z]*' | sort -uAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Le début du script de chaque visiteur
curl -s http://wrongsecrets:8080/js/index.js | head -n 1 | cut -c 1-120Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Ce que disent les trois réponses
La première affiche une courte ligne qui se termine par "status":"UP". La deuxième affiche trois noms : auditevents, health et info. Demandez-vous lequel un inconnu ne devrait pas lire.
La troisième affiche du code d'allure brouillée. Il est brouillé, pas verrouillé : le navigateur doit tout lire pour l'exécuter, et vous aussi.
Une erreur fréquente
Attention
Beaucoup pensent que supprimer un secret d'un fichier l'efface. C'est faux : les anciennes versions restent dans l'historique, dans chaque copie et dans chaque image déjà fabriquée. Considérez comme perdu tout secret qui a été exposé. Renouvelez-le d'abord. Nettoyez ensuite.
Un secret a sa place dans un coffre
Le programme demande le secret à son démarrage. Le gestionnaire de secrets vérifie qui demande et le remet. Rien n'est écrit dans le code ni dans l'image.
Donnez à chaque programme seulement les secrets dont il a besoin. Renouvelez-les selon un calendrier : une fuite ne sert alors à l'attaquant que peu de temps.
Les secrets ont des formes qu'un programme repère
Beaucoup de secrets se ressemblent. Une clé de cloud commence par AKIA et compte 20 lettres et chiffres. Un fichier de clé privée commence par une ligne de tirets et le mot BEGIN. Une ligne mot_de_passe = "..." porte une valeur.
Les outils de balayage cherchent ces formes dans le code et l'historique. Ils en trouvent beaucoup, pas toutes. Une trouvaille est un signal pour renouveler.
Un tout petit balayeur
lignes = [
"nom = boutique",
"cle = AKIAABCDEFGHIJKLMNOP",
"mot_de_passe = ouvre-sesame",
]
# Ajoutez une quatrième ligne qui contient une forme de secret, puis lancez le code.
numero = 0
for ligne in lignes:
numero = numero + 1
if "AKIA" in ligne or "mot_de_passe" in ligne:
print("à vérifier : ligne", numero)