Nettoyage des VM Linux créées à partir d’une OMI partagée

Cette page liste les actions que vous pouvez effectuer pour réduire les risques d’utilisation d’une machine virtuelle (VM) Linux créée à partir d’une OMI partagée par un autre utilisateur.

Une OMI créée à partir d’une VM ou d’un snapshot partage les mêmes caractéristiques que cette VM ou la VM depuis laquelle le snapshot a été créé. Par conséquent, l’OMI peut contenir des logiciels malveillants ou des configurations vulnérables. Toute VM créée à partir d’une OMI partagée contient donc les mêmes risques que cette OMI.

Vue d’ensemble

Cette page fournit des exemples de commandes pour des VM Linux CentOs 7, mais la liste des éléments est la même pour les autres VM Linux.

Vous pouvez exécuter ces commandes depuis n’importe quel endroit de la VM et dans n’importe quel ordre.

Il est fortement recommandé de créer la VM à partir de l’OMI partagée dans un réseau séparé et fermé, c’est-à-dire avec des security groups en SSH uniquement et en-dehors de tout Net. Ceci empêche la VM d’attaquer les ressources vulnérables de votre réseau.

Les sections ci-dessous rassemblent les actions que vous pouvez effectuer pour nettoyer une VM créée à partir d’une OMI partagée :

Accès à distance

SSH

Vérifiez que le SSH est activé uniquement avec les clés SSH :

$ cat /etc/ssh/sshd_config \| grep -e '^PermitRootLogin' -e '^StrictModes' -e '^RSAAuthentication' -e '^PubkeyAuthentication' -e '^PermitEmptyPasswords' -e '^AuthorizedKeysFile'

Résultat attendu :

PermitRootLogin without-password
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
PermitEmptyPasswords no
AuthorizedKeysFile .ssh/authorized_keys

Si l’OMI n’est pas configurée pour être accessible en root, l’élément PermitRootLogin est paramétré sur no. Cette action permet d’imposer l’authentification par clé SSH et de refuser les mots de passe, considérés comme une méthode d’authentification faible.

Clés SSH supplémentaires

Vérifiez qu’aucune clé SSH supplémentaire n’est incluse :

$ diff -q -b <(curl -s http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key)  <(cat $HOME/.ssh/authorized_keys) > /dev/null ; echo $?

Résultat attendu :

  • 0, si le fichier ~/.ssh/authorized_keys contient la clé fournie par le serveur de metadata uniquement

  • 1, s’il y a une différence

Cette action compare le contenu du fichier ~/.ssh/authorized_keys avec la liste des clés publiques autorisées sur la VM.

Vous devez effectuer cette action pour chaque utilisateur amené à se connecter à la VM.

Utilisateurs supplémentaires

Vérifiez qu’aucun utilisateur supplémentaire n’est inclus :

$ cat /etc/passwd \| grep -vF -e "/bin/false" -e "/bin/nologin" -e "/usr/sbin/nologin"

Résultat attendu :

  • Une liste de tous les utilisateurs capables de se connecter à la VM.

Cette commande compare les résultats avec ce qui est prévu sur l’OMI.

Lancement de services supplémentaires

Services supplémentaires

Vérifiez qu’aucun comportement indésirable n’est configuré :

$ ls /etc/init.d/

Résultat attendu :

  • Une liste de tous les services.

Assurez-vous d’utiliser le type de distribution approprié. Vous pouvez également utiliser le répertoire /etc/rc.d/.

Commandes indésirables

Vérifiez qu’aucune commande indésirable n’est exécutée :

$ cat $HOME/.bashrc

Résultat attendu :

  • Une liste de commandes automatiquement exécutées lorsqu’un shell est démarré.

Vous devez effectuer cette action pour chaque utilisateur capable de se connecter à la VM.

Contrôles avancés pour les besoins de haute sécurité

Processes en cours

Vérifiez les processes en cours :

$ ps aux

Résultat attendu :

  • Une liste de tous les processes en cours.

Ports ouverts

Vérifiez les ports ouverts :

$ netstat -nalp

Résultat attendu :

  • Une liste de tous les ports ouverts, avec le chemin d’accès du programme.

Crons

Vérifiez les crons :

$ for user in $(cut -f1 -d: /etc/passwd); do crontab -u $user -l 2>/dev/null \| grep -v '^#'; done
$ ls /etc/cron.*/
$ cat /etc/crontab
$ cat /etc/rsyslog.conf /etc/rsyslog.d/*

Résultat attendu :

  • Des listes de scripts cron.

Pour vérifier ce que font ces crons, vous devez lire les fichiers et vérifier la légitimité de chacun d’eux.

Scans anti-virus

Vérifiez qu’aucun virus latent n’est inclus :

$ yum install clamav clamav-update
$ sed -i ‘/^Example/d’ /etc/freshclam.conf
$ freshclam
$ clamscan -r /

Résultat attendu :

  • Un résumé du scan.

Ces commandes utilisent Clamav, un scanner anti-virus open source disponible à l’adresse suivante : https://www.clamav.net/downloads.

Pages connexes