Découverte du security.txt

kezako ?

Aujourd’hui, si vous détectez un problème de sécurité sur un site web ou un serveur que vous visitez, plusieurs freins peuvent vous empêcher de remonter convenablement la vulnérabilité.

En effet, retrouver le contact de l’administrateur du système peut parfois s’avérer laborieux et lorsque nous le trouvons, d’autres questions se posent :

  • Est-ce la meilleure manière de lui remonter l’information ?
  • A-t-il un canal de communication chiffré ?
  • Comment va-t-il le prendre ?
  • Est-ce qu’il peut se retourner contre nous ?

C’est entre autre à ces questions que tente de répondre le fichier security.txt. Son objectif est de centraliser ces informations en fournissant un cadre permettant la remontée d’information de sécurité.

Comment ça marche ?

Sa mise en oeuvre est relativement simple et est décrite en détails dans le draft de la RFC situé ici. Pour faire simple, il s’agit d’un simple fichier texte que l’administrateur du système doit placer à la racine de son serveur ou dans le dossier /.well-known/ de son site web. D’ailleurs, si vous ne connaissez pas ce dossier, je vous encourage à lire la RFC8615 qui décrit son rôle.

Plusieurs champs peuvent être définis dans ce fichier :

  • Acknowledgements : Indique la page où sont remerciés les chercheurs ayant détectés une vulnérabilité
  • Canonical : Indique l’adresse canonique où se situe le fichier security.txt
  • Contact : Indique l’adresse de contact
  • Encryption : Indique la clé permettant de chiffrer les communications
  • Expires : Indique une date d’expiration après laquelle le contenu du fichier est considéré comme obsolète
  • Hiring : Indique un lien vers les offres d’emplois de la société liées à la sécurité
  • Policy : Indique un lien vers la politique de la société concernant la remontée de vulnérabilité
  • Preferred-Languages : Indique quels langages sont à privilégier pour les échanges

Presque tous ces champs sont facultatifs et seul le champ Contact est obligatoire. Celui-ci doit contenir une URI vers l’adresse de contact, il s’agit souvent d’une adresse email, mais cela peut être un numéro de téléphone ou un formulaire de contact, l’important étant de respecter le format RFC3986.

Voici par exemple le fichier security.txt pour ce site :

Canonical: https://y0no.fr/.well-known/security.txt
Contact: mailto:security@y0no.fr
Encryption: https://y0no.fr/key.gpg
Preferred-Languages: en, fr

Afin de tenter de garantir l’intégrité de ce fichier, il est aussi possible de signer numériquement ce fichier à l’aide d’OpenPGP avec la commande gpg --clearsign /tmp/security.txt :

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Canonical: https://y0no.fr/.well-known/security.txt
Contact: mailto:security@y0no.fr
Encryption: https://y0no.fr/key.gpg
Preferred-Languages: en, fr
-----BEGIN PGP SIGNATURE-----
<...>

Conclusion

Bien que ce fichier soit simple, il reste efficace et offre une souplesse permettant de s’adapter à chaque cas d’utilisation. Avec le nombre grandissant de chercheur en sécurité, ce type d’initiative est la bienvenue et permet de définir des règles simples et compréhensives de tous.

En plus, si la recherche de bugs vous botte bien, YesWeHack fournit une extension navigateur nommée YesWeHack VDP Finder qui permet de détecter la présence ou non d’un fichier security.txt

Si jamais vous trouvez une vulnérabilité sur un système qui ne semble pas utiliser le fichier security.txt, il est toujours possible de remonter les éléments par des intermediaire de confiance tels que Zerodisclo. Non ce n’est pas encore de la pub à YesWeHack, c’est juste qu’ils font les choses bien ;)

Installation de Kippo sous debian

Présentation

Kippo est un honeypot à interaction moyenne, son but est d’émuler un service SSH afin d’archiver les tentatives de brute force des attaquants, mais aussi les interactions qu’ils effectuent une fois connectés.

En effet, il est possible grâce à kippo de définir un mot de passe faible afin de laisser l’attaquant avoir un shell sur la machine. Cet environnement est bien sûr protégé, mais permet à notre système de journaliser les commandes qui ont été entrées ainsi que les fichiers téléchargés.

De plus lorsque l’attaquant pense quitter le shell SSH pour revenir sur son shell local, Kippo l’amène dans un deuxième environnement protégé afin de loguer les commandes qu’il aurait pu entrer sur sa machine pour déclencher l’attaque.

Installation

Installation des dépendances

Pour fonctionner Kippo a juste besoin de Python. Néanmoins pour une installation propre, nous allons installer ses dépendances dans un environnement virtuel avec l’aide de PIP et VirtualEnv. Enfin nous allons installer la librairie MySQL clients au cas où nous voudrions nous interfacer avec une base de données MySQL.

$ sudo apt-get install build-essential python-dev libmysqlclient-dev python-virtualenv python-pip

Il s’agit de la seule commande que l’on doit exécuter en root durant l’installation.

Créer l’environnement virtuel

Il est maintenant nécessaire de créer l’environnement virtuel python que nous appellerons “kippo”. Pour celà, il faut entrer la commande suivante:

$ virtualenv kippo_venv

Puis il faut l’activer afin d’entrer dans cet environnement:

$ source kippo_venv/bin/activate

Après cette commande le shell change afin de ressembler à celui-ci:

(kippo_venv)$

Installer les dépendances Python

Maintenant que l’environnement virtuel est fonctionnel, il est possible d’installer les dépendances python du projet:

(kippo_venv)$ pip install twisted==15 pyasn1 pycrypto

Installation de Kippo

Après avoir installé les dépendances de kippo, il suffit maintenant de le télécharger grâce à git :

(kippo_venv)$ git clone https://github.com/desaster/kippo.git

Configuration de Kippo

La configuration de kippo se situe dans kippo.cfg, Par défaut ce fichier n’existe pas, mais un template est fourni avec une configuration basique, il suffit donc simplement de la copier sous un autre nom:

(kippo_venv)$ cd kippo
(kippo_venv)$ cp kippo.cfg.dist kippo.cfg

Il est aussi possible de créer différents utilisateur dans le fichier data/userdb.txt.

Enfin, il est déconseillé de lancer kippo sur le port 22. En effet sous GNU/Linux tous les ports en dessous de 1024 sont des ports réservés nécessitant des droits privilégiés. Il est donc conseillé de laisser le port 2222 par défaut et d’effectuer du NAT afin de rediriger le port 22 vers le port 2222 de la machine. Si kippo est exécuté sous Windows, il est tout à fait possible de mettre le port 22 qui est habituellement libre.

Rediriger le port 22 vers le port 2222

La configuration du port forwarding se fait via une simple règle IPTables:

$ sudo iptables -t nat -A PREROUTING -p tcp --dport 22 -j REDIRECT --to-port 2222

Utilisation

Kippo peut se lancer de deux manières, soit en arrière-plan, soit au premier plan.

Lancement de Kippo au premier plan

Tout d’abord, pour lancer kippo

(kippo)$ twistd -n -y kippo.tac

Lancement de Kippo au arrière-plan

Contrairement au lancement précédent, celui-ci ne nécessite pas que l’utilisateur soit connecté à l’environnement virtuel. Le script de lancement prend tout simplement le nom de l’environnement en argument:

$ ./start.sh kippo_venv

L’arrêt du logiciel se fera via l’exécution du script stop.sh.