Récupérer les fichiers Dockerfile et sls.c.
Créer la machine avec
docker build . -t challenge
On a à présent à notre disposition une image nommée challenge, pour faire le challenge.
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
challenge latest 3e8e6eb66c4e 7 seconds ago 307MB
On crée ensuite un conteneur qui va lancer un shell avec l'utilisateur level01 (voir les 2 dernières lignes non commentées du Dockerfile)
docker run -t -i --rm challenge
level01@3009210a28f9:~$
On peut alors faire le challenge ... il faut lire le contenu du fichier .password (un indice regarder les droits sur les fichiers et ce qu'ils font...)
Pour être dans ce mode on va changer un peu l'image pour qu'un serveur ssh soit lancé, et permettre à l'utilisateur level01 de se connecter avec le mot de passe mdpLevel01.
Pour cela on modifie la fin du fichier Dockerfile en commentant le lancement d'un shell en tant qu'utilisateur level01 et on décommente le lancement du serveur ssh en tant qu'administrateur (en commentant USER level01
on reste USER root
)
...
# Démarre le container en level01 avec un shell (à décommenter)
# A lancer avec
# docker run -t -i --rm challenge
#USER level01
#CMD /bin/bash
# Version avec un serveur ssh, lancer le container avec docker run -d -p 22222:22 --rm challenge
COPY startssh.sh /usr/bin/startssh.sh
RUN chmod +x /usr/bin/startssh.sh
EXPOSE 22
CMD /usr/bin/startssh.sh
Créer la machine avec
docker build . -t challengessh
On a à présent à notre disposition une image nommée challengessh, pour faire le challenge.
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
challengessh latest 8e3b6626d8de 7 seconds ago 307MB
challenge latest 3e8e6eb66c4e 7 hours ago 307MB
On démarre le conteneur en mode "démon" (-d) pour qu'il ne s'arrête pas, et on redirige le port local 22222 vers 22
docker run -d -p 22222:22 --name conteneurChallengeSSH challengessh
Un conteneur est démarré
#docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9fc2b87554f2 challengessh "/usr/sbin/sshd -D" 4 minutes ago Up 4 minutes 0.0.0.0:22222->22/tcp conteneurChallengeSSH
On peut alors se connecter sur le conteneur via ssh et faire le challenge
ssh -p 22222 level01@localhost
level01@localhost's password:
Linux 9fc2b87554f2 4.9.49-moby #1 SMP Wed Sep 27 23:17:17 UTC 2017 x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
level01@9fc2b87554f2:~$
Il ne reste plus qu'à faire le challenge.
Attention Le conteneur reste démarré jusqu'à ce qu'on lui demande de s'arrêter
docker stop conteneurChallengeSSH
et à le supprimer
docker rm conteneurChallengeSSH
En utilisant trivy, il est possible de "scanner" l'image générée pour identifier les éventuels problèmes.
docker run -v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy image challengessh
La distribution alpine est une distribution légère et orientée sécurité pour la construction de containers...
- Modifier le Dockerfile pour utiliser alpine plutôt que debian (la configuration est déjà présente)
- Construire l'image avec l'option
--no-cache
pour éviter de trainer les failles passées :docker build --no-cache . -t challengesshtrivy
- scanner de nouveau l'image avec trivy