\graphicspath{{imgs/vm1/}}

\chapter{Première machine virtuelle}

\section{Synthèse}

Le test d’intrusion de type « boîte noire » visant la première machine virtuelle a permis de mettre en évidence vingt-et-une vulnérabilités dont la criticité varie de mineure à critique. Les critères de disponibilité, d’intégrité et de confidentialité sont concernés par ces vulnérabilités. {\color{red}Le niveau de sécurité de la machine virtuelle considéré comme \underline{\textit{\textbf{très faible}}} au regard du niveau de criticité et de l’impact des vulnérabilités découvertes.}

{\color{okgreen}L’application des recommandations pour les vulnérabilités majeures et critiques permettrait de rapidement atteindre un niveau de sécurité considéré comme \underline{\textit{\textbf{correct}}}.} La machine semble très ancienne et obsolète, aussi certaines recommandations impliquent des actions conséquentes voire complexes, et nous estimons qu'il serait préférable de migrer le service web sur une machine plus récente afin de partir d'une base saine, plutôt que de tenter de consolider la machine actuelle.

L’exploitation des vulnérabilités majeures et critiques mettent fortement en péril la sécurité de la machine. En exploitant ces vulnérabilités, un attaquant pourrait notamment parvenir à :
\begin{itemize}
    \item rendre indisponible l’application ;
    \item télécharger la totalité des fichiers de la machine, comprenant le code source des applications les fichiers de configuration contenant des informations critiques ;
    \item prendre le contrôle total du système d’exploitation.
\end{itemize}

{\color{red}Il est cependant important de préciser que la réussite de ces attaques repose sur l'exploitation d’un faible nombre de vulnérabilités et que de nombreuses ont été omises au vu de la vétusté du système actuel.}

\newpage

\subsection{Vulnérabilités observées}
\begin{table}[!htbp]
\begin{tabularx}{\textwidth}{@{}|c|c|X|@{}}
\hline
\rotatebox{90}{Identifiant} &
\rotatebox{90}{Criticité} &
Description de la vulnérabilité \\ 
\hline

V00 &
Important &
Service d'accès à distance accessible \\

V01 &
Majeur &
Faille permettant de vérifier si un utilisateur local existe \\

V02 &
Mineur &
\textit{Directory listing} activé \\

V03 &
Critique &
Système hôte obsolète \\

V04 &
Critique &
Interception de flux par attaque \textit{man-in-the-middle} \\

V05 &
Mineur &
Méthode HTTP \textit{TRACE} activée \\

V06 &
Important &
Certificat de sécurité auto-signé \\

V07 &
Majeur &
Certificat de sécurité expiré \\

V08 &
Majeur &
Algorithmes cryptographiques obsolètes et dépréciés \\

V09 &
Important &
Autorités de certification non sûres  \\

V10 &
Important &
Trafic web en clair \\

V11 &
Important &
Vulnérabilité sur fuite de cookies \\

V12 &
Important &
Faible sécurité cryptographique des certificats \\

V13 &
Mineur &
Serveur de base de données exposé \\

V14 &
Majeur &
Faille de type injection SQL \\

V15 &
Majeur &
Exécution de commandes depuis l'interface d'administration \\

V16 &
Important &
Pas de pare-feu sur la machine \\

V17 &
Majeur &
Possibilité de découverte réseau autour de la machine \\

V18 &
Mineur &
Positionner l'en-tête X-Frame-Option dans toutes les réponses \\

V19 &
Mineur &
Vulnérabilité de type « Protection XSS du navigateur non activée » \\

V20 &
Mineur &
Vulnérabilité de type « Protection XSS du navigateur non activée » \\

\hline
\end{tabularx}
\caption{Récapitulatif des vulnérabilités}
\end{table}

\newpage

\subsection{Recommandations proposées}

\begin{table}[!htbp]
\begin{tabularx}{\textwidth}{@{}|c|p{1.4cm}|X|c|c|@{}}
\hline
\rotatebox{90}{Identifiant} &
\rotatebox{90}{Vulnérabilités} \rotatebox{90}{couvertes} & 
Description de la recommandation &
\rotatebox{90}{Priorité de} \rotatebox{90}{traitement} &
\rotatebox{90}{Difficulté de} \rotatebox{90}{mise en œuvre} \\
\hline

R00 &
V01 &
Mettre à jour le service d'accès à distance &
Élevée &
Facile \\

R01 &
V02 V05 V10 &
Durcir la configuration du serveur web &
Faible &
Faible \\

R02 &
V03 &
Mettre à jour le système d'exploitation &
Élevée &
Difficile \\

R03 &
V04 V08 V11 &
Mise à jour de la bibliothèque cryptographique et du service web &
Élevée &
Moyenne \\

R04 &
V06 V07 V09 V12 &
Génération de nouveau certificat de sécurité et signature par un organisme reconnu &
Élevée &
Moyenne \\

R05 &
V13 &
Modification de la configuration du service SQL pour utiliser des \textit{sockets} locales &
Moyenne &
Facile \\

R06 &
V14 V15 &
Ajout de fonctions d'aseptisation sur les entrées utilisateurs de l'application web &
Élevée &
Facile \\

R07 &
V00 V16 V13 &
Installer et configurer un pare-feu &
Élevée &
Moyenne \\

R08 &
V17 &
Supprimer la fonctionnalité non-nécessaire ou configurer un pare-feu &
Moyenne &
Moyenne \\

R09 &
V18 &
Positionner l'en-tête X-Frame-Option dans toutes les réponses &
Faible &
Facile \\

R10 &
V19 &
Positionner l'en-tête X-XSS-Protection dans toutes les réponses &
Faible &
Facile \\

R11 &
V20 &
Positionner l'en-tête X-Content-Type-Options dans toutes les réponses &
Faible &
Facile \\

\hline
\end{tabularx}
\caption{Récapitulatif des recommandations}
\end{table}

Les vulnérabilités ainsi que les recommandations seront détaillées dans la suite du rapport, mais chacun ne l'est qu'une fois. un recommandation peut ainsi s'appliquer à plusieurs vulnérabilités, aussi il est préférable de se référer au tableau précédent pour savoir quelle recommandation appliquer face à chaque vulnérabilité.

\newpage

\section{Tests d'intrusion}
\subsection{Reconnaissance passive}
La cible étant une machine virtuelle isolée, la seule méthode de reconnaissance passive était l'interrogation de l'hyperviseur pour savoir si la machine virtuelle avait bien obtenue une IP dynamique sur le réseau interne, ce qui fut le cas.

La machine était opérationnelle et prête à être analysée.

\subsection{Reconnaissance active}
\subsubsection{Identification du système d'exploitation}
\begin{figure}[!htbp]
  \centering
  \includegraphics[width=15cm]{nmap_1}
  \caption{Identification de système d'exploitation et scan de ports ouverts sur le système cible}
\end{figure}
Afin de mieux cibler et connaître le système cible, la première étape incontournable est d'essayer d'identifier le système d'exploitation sur la machine cible. Grâce à l'outil \texttt{nmap} analysant le comportement de la pile réseau, cela peut se faire aisément. Il se peut cependant que certains systèmes soient volontairement muets face à ce type de scan, mais ce n'est pas le cas ici, et nous avons une sortie qui nous indique que le système est à base de Linux, en version entre la 2.6.9 et la 2.6.30.

Les informations sur le type d'utilisation du système, comme récepteur satellite s'avèrent fausses, mais donnent une information correcte, le Linux en question est bien en version 2.6.9 comme on le verra par la suite.

La version 2.6.9 du noyau est périmée depuis plus de treize ans, ce qui est un gigantesque problème de sécurité puisque de nombreuses failles ont été révélées depuis lors sur les versions obsolètes de Linux. Ces résultats sont une fuite d'information, qui conjuguées à une vulnérabilité éventuelle sur un des services tournant sur la machine, peuvent offrir à un attaquant une porte pour obtenir le contrôle complet à travers une vulnérabilité du noyau.

{\color{red} La sécurité du système n'est de ce fait pas assurée.}

\begin{table}[!htbp]
\centering
\begin{tabularx}{\textwidth}{|c|C|c|}
  \hline
  \textbf{Vulnérabilité 3} & \textbf{Système hôte obsolète} & \textbf{CVSS \color{red}10/10} \\
  \hline
  \multicolumn{3}{|p{0.95\textwidth}|}{La machine fonctionne sous un vieux noyau Linux âgé de plus de treize ans, de nombreuses failles faciles à mettre en œuvre sont éprouvées pour obtenir les accès super-utilisateur.} \\
  \hline
  \textbf{Nature} & \textbf{Facilité d'exploitation} & \textbf{Impact} \\
  \hline
  Technique & Moyenne & Critique \\
  \hline
\end{tabularx}
\end{table}

\begin{table}[!htbp]
\centering
\begin{tabularx}{\textwidth}{|c|C|}
  \hline
  \textbf{Recommandation 2} & \textbf{Mettre à jour le système} \\
  \hline
  \multicolumn{2}{|p{0.95\textwidth}|}{Mettre à jour le système et \textit{de facto} les services sur la machine (risque de cassage de configuration), ou bien transférer le site web vers un hôte plus à jour.} \\
  \hline
  \textbf{Priorité de traitement} & \textbf{Difficulté de mise en œuvre} \\
  \hline
  Haute & Difficile \\
  \hline
\end{tabularx}
\end{table}

\subsubsection{Identification des services}
Le premier scan nous donne des informations sur les ports ouverts et sur les ports fermés. On peut en déduire que {\color{red}la machine ne possède pas de pare-feu}, ce qui est en soi une vulnérabilité.

\begin{table}[!htbp]
\centering
\begin{tabularx}{\textwidth}{|c|C|c|}
  \hline
  \textbf{Vulnérabilité 16} & \textbf{Aucun pare-feu installé} & \textbf{CVSS \color{red}6.5/10} \\
  \hline
  \multicolumn{3}{|p{0.95\textwidth}|}{Pas de pare-feu installé sur la machine, ce qui laisse de la marge de manœuvre à un attaquant pour utiliser les flux qu'il souhaite. En outre, cela laisse la porte ouverte à des services qui auraient pu être masqués de l'extérieur.} \\
  \hline
  \textbf{Nature} & \textbf{Facilité d'exploitation} & \textbf{Impact} \\
  \hline
  Technique & Difficile & Important \\
  \hline
\end{tabularx}
\end{table}

\begin{table}[!htbp]
\centering
\begin{tabularx}{\textwidth}{|c|C|}
  \hline
  \textbf{Recommandation 7} & \textbf{Installer et configurer un pare-feu} \\
  \hline
  \multicolumn{2}{|p{0.95\textwidth}|}{Installer et configurer un pare-feu tel que \texttt{iptables} pour bloquer tous les flux non nécessaires au fonctionnement de l'application et pour bloquer l'accès depuis l'extérieur à certains services.} \\
  \hline
  \textbf{Priorité de traitement} & \textbf{Difficulté de mise en œuvre} \\
  \hline
  Haute & Moyenne \\
  \hline
\end{tabularx}
\end{table}

\begin{wrapfigure}[4]{r}{8cm}
  \vspace{-\intextsep}
  \includegraphics[width=8cm]{nmap_2}
  \caption{Identification des versions des services hébergés sur la machine}
\end{wrapfigure}

On observe six services fonctionnant sur la cible, dont SSH, un service d'administration à distance (chiffré, et avec authentification). {\color{red}Laisser un tel service accessible publiquement est un manquement à la sécurité du système.}

\vspace{2cm}

\begin{table}[!htbp]
\centering
\begin{tabularx}{\textwidth}{|c|C|c|}
  \hline
  \textbf{Vulnérabilité 0} & \textbf{Service d'accès à distance accessible} & \textbf{CVSS \color{red}4.5/10} \\
  \hline
  \multicolumn{3}{|p{0.95\textwidth}|}{Le service d'administration à distance, même s'il présente une authentification, doit être filtré et protégé d'un accès public immédiat.} \\
  \hline
  \textbf{Nature} & \textbf{Facilité d'exploitation} & \textbf{Impact} \\
  \hline
  Technique & Difficile & Important \\
  \hline
\end{tabularx}
\end{table}

De même, un service de base de données SQL est accessible depuis l'extérieur, alors qu'il est usuel et plus sage de l'isoler du réseau. {\color{red}Les bonnes pratiques de sécurité ne sont pas respectées.}

\begin{table}[!htbp]
\centering
\begin{tabularx}{\textwidth}{|c|C|c|}
  \hline
  \textbf{Vulnérabilité 13} & \textbf{Service de base données SQL accessible} & \textbf{CVSS \color{red}4.5/10} \\
  \hline
  \multicolumn{3}{|p{0.95\textwidth}|}{Outre le service web, les autres services doivent être filtrés pour empêcher les attaquants de directement communiquer avec eux et d'exploiter des failles éventuelles.} \\
  \hline
  \textbf{Nature} & \textbf{Facilité d'exploitation} & \textbf{Impact} \\
  \hline
  Technique & Difficile & Important \\
  \hline
\end{tabularx}
\end{table}

\begin{table}[!htbp]
\centering
\begin{tabularx}{\textwidth}{|c|C|}
  \hline
  \textbf{Recommandation 5} & \textbf{Modification de la configuration du service} \\
  \hline
  \multicolumn{2}{|p{0.95\textwidth}|}{Modifier la configuration du service afin qu'il écoute uniquement sur l'interface de bouclage, ou via des \textit{sockets} Unix. Dans le cas d'un serveur non-dédié à l'hébergement d'une base de données, les services ayant besoin d'accéder à SQL tournent sur la machine locale et peuvent y accéder par le biais de mécanismes locaux, inutile de l'ouvrir à l'extérieur en TCP.} \\
  \hline
  \textbf{Priorité de traitement} & \textbf{Difficulté de mise en œuvre} \\
  \hline
  Moyenne & Facile \\
  \hline
\end{tabularx}
\end{table}


\subsection{Analyse cryptographique}
Nous avons remarqué dans un premier temps que le serveur offrait le site en HTTP, c'est-à-dire que tout le trafic entre le serveur et l'utilisateur n'est pas chiffré. Un attaquant passif peut donc, s'il écoute le réseau entre l'utilisateur et le serveur, capturer toutes les données émises par chacun d'eux. {\color{red} Proposer du HTTP en parallèle du HTTPS, sans redirection obligatoire pour un site contenant une partie sécurisée, ne respecte pas les critères de sécurité.}

\begin{table}[!htbp]
\centering
\begin{tabularx}{\textwidth}{|c|C|c|}
  \hline
  \textbf{Vulnérabilité 10} & \textbf{Trafic web en clair, absence de chiffrement} & \textbf{CVSS \color{red}6/10} \\
  \hline
  \multicolumn{3}{|p{0.95\textwidth}|}{Le site est disponible via deux biais, HTTP et HTTPS. HTTP n'est pas un protocole sécurisé ; il faut forcer l'utilisation de HTTPS.} \\
  \hline
  \textbf{Nature} & \textbf{Facilité d'exploitation} & \textbf{Impact} \\
  \hline
  Technique & Difficile & Important \\
  \hline
\end{tabularx}
\end{table}

\begin{table}[!htbp]
\centering
\begin{tabularx}{\textwidth}{|c|C|}
  \hline
  \textbf{Recommandation 1} & \textbf{Durcir la configuration du serveur web} \\
  \hline
  \multicolumn{2}{|p{0.95\textwidth}|}{Bien configuré, le serveur permet de réduire la surface d'attaque. Force l'utilisation seule du HTTPS, désactiver la méthode TRACE et désactiver l'affichage des répertoires (\textit{directory listing}) sont des bonnes pratiques pour durcir un site web.} \\
  \hline
  \textbf{Priorité de traitement} & \textbf{Difficulté de mise en œuvre} \\
  \hline
  Moyenne & Facile \\
  \hline
\end{tabularx}
\end{table}

En analysant les informations cryptographiques offertes par le serveur web en mode sécurisé, nous avons découvert plusieurs vulnérabilités, notamment l'utilisation de suites cryptographiques et algorithmes obsolètes et dépréciés, {\color{red}ce qui permet à un attaquant de casser le chiffrement entre un utilisateur et le serveur. De fait, le critère de sécurité n'est pas respecté.}

\begin{table}[!htbp]
\centering
\begin{tabularx}{\textwidth}{|c|C|c|}
  \hline
  \textbf{Vulnérabilité 8} & \textbf{Algorithmes cryptographiques obsolètes et dépréciés} & \textbf{CVSS \color{red}5/10} \\
  \hline
  \multicolumn{3}{|p{0.95\textwidth}|}{Des vulnérabilités connues sont présentes sur les algorithmes cryptographiques utilisés par le serveur web.} \\
  \hline
  \textbf{Nature} & \textbf{Facilité d'exploitation} & \textbf{Impact} \\
  \hline
  Technique & Difficile & Important \\
  \hline
\end{tabularx}
\end{table}

\begin{table}[!htbp]
\centering
\begin{tabularx}{\textwidth}{|c|C|}
  \hline
  \textbf{Recommandation 3} & \textbf{Mise à jour des bibliothèques cryptographiques et du serveur web} \\
  \hline
  \multicolumn{2}{|p{0.95\textwidth}|}{Les bibliothèques cryptographiques contiennent les algorithmes de chiffrement. Mises à jour, cela permet le retrait et la correction d'algorithmes vulnérables. Pour être compatible, le serveur web ainsi que sa configuration doivent être mis à jour pour forcer l'utilisation d'algorithmes plus récents.} \\
  \hline
  \textbf{Priorité de traitement} & \textbf{Difficulté de mise en œuvre} \\
  \hline
  Élevée & Moyenne \\
  \hline
\end{tabularx}
\end{table}

L'analyse du certificat émis par le serveur pour la connexion sécurisée a elle aussi révélé des failles. Notamment au niveau des algorithmes utilisés pour sa confection. Le certificat a de plus été signé par une autorité de certification inconnue, ce qui ne permet pas d'assurer son authenticité par l'utilisateur. De plus le certificat est périmé.

{\color{red}La connexion sécurisée entre le serveur et le client est donc très facile à compromettre.}

\begin{table}[!htbp]
\centering
\begin{tabularx}{\textwidth}{|c|C|c|}
  \hline
  \textbf{Vulnérabilité 6} & \textbf{Certificat de sécurité auto-signé} & \textbf{CVSS \color{red}5/10} \\
  \hline
  \multicolumn{3}{|p{0.95\textwidth}|}{L'utilisateur ne peut pas s'assurer de l'identité du site web.} \\
  \hline
  \textbf{Nature} & \textbf{Facilité d'exploitation} & \textbf{Impact} \\
  \hline
  Technique & Difficile & Important \\
  \hline
\end{tabularx}
\end{table}

\begin{table}[!htbp]
\centering
\begin{tabularx}{\textwidth}{|c|C|}
  \hline
  \textbf{Recommandation 4} & \textbf{Renouvellement du certificat de sécurité du serveur web} \\
  \hline
  \multicolumn{2}{|p{0.95\textwidth}|}{Le certificat permet d'assurer que le site visité par l'utilisateur est le bon et ainsi établir une connexion sûre. Lorsque le certificat est expiré ou signé par une autorité inconnue, il devient possible d'usurper l'identité du site. Générer un nouveau certificat correctement signé permet une sécurité accrue pour les utilisateurs.} \\
  \hline
  \textbf{Priorité de traitement} & \textbf{Difficulté de mise en œuvre} \\
  \hline
  Élevée & Facile \\
  \hline
\end{tabularx}
\end{table}

\begin{table}[!htbp]
\centering
\begin{tabularx}{\textwidth}{|c|C|c|}
  \hline
  \textbf{Vulnérabilité 7} & \textbf{Certificat de sécurité expiré} & \textbf{CVSS \color{red}5/10} \\
  \hline
  \multicolumn{3}{|p{0.95\textwidth}|}{L'utilisateur peut se retrouver sur un site compromis par mégarde, lequel aurait usurpé l'identité du site web originel.} \\
  \hline
  \textbf{Nature} & \textbf{Facilité d'exploitation} & \textbf{Impact} \\
  \hline
  Technique & Difficile & Important \\
  \hline
\end{tabularx}
\end{table}

\begin{table}[!htbp]
\centering
\begin{tabularx}{\textwidth}{|c|C|c|}
  \hline
  \textbf{Vulnérabilité 9} & \textbf{Autorité de certification inconnue} & \textbf{CVSS \color{red}5/10} \\
  \hline
  \multicolumn{3}{|p{0.95\textwidth}|}{L'utilisateur ne peut pas s'assurer de l'identité du site web et peut être soumis à la malfaçon.} \\
  \hline
  \textbf{Nature} & \textbf{Facilité d'exploitation} & \textbf{Impact} \\
  \hline
  Technique & Difficile & Important \\
  \hline
\end{tabularx}
\end{table}

\subsection{Scan de vulnérabilités}
\subsubsection{Scan de vulnérabilités système}
\begin{wrapfigure}{r}{8cm}
  \vspace{-\intextsep}
  \includegraphics[width=8cm]{openvas}
  \caption{Rapport de vulnérabilités par OpenVas}
\end{wrapfigure}
Afin d'identifier les vulnérabilités touchant la cible ainsi que ses services, le scanneur de vulnérabilités OpenVas a été utilisé.

OpenVas remonte quatre nouvelles vulnérabilités, deux touchant le serveur web et sa configuration et deux sur la sécurité des connexions sécurisées. {\color{red}La configuration du serveur web actuelle peut causer des fuites d'information, telles que les sessions des utilisateurs. Le certificat de sécurité peut aussi être compromis, et des attaques de détournement de flux sécurisés pour déchiffrement sont possibles. Il est recommandé de durcir le système.}

\vspace{0.8cm}

\begin{table}[!htbp]
\centering
\begin{tabularx}{\textwidth}{|c|C|c|}
  \hline
  \textbf{Vulnérabilité 4} & \textbf{Interception de flux par attaque \textit{man-in-the-middle}} & \textbf{CVSS \color{red}6.8/10} \\
  \hline
  \multicolumn{3}{|p{0.95\textwidth}|}{Des vulnérabilités sont présentes dans les bibliothèques cryptographiques utilisées par le serveur web pour les connexions sécurisées qui permettent aux attaquants de déchiffrer le trafic dans certains cas.} \\
  \hline
  \textbf{Nature} & \textbf{Facilité d'exploitation} & \textbf{Impact} \\
  \hline
  Technique & Moyenne & Majeur \\
  \hline
\end{tabularx}
\end{table}

\begin{table}[!htbp]
\centering
\begin{tabularx}{\textwidth}{|c|C|c|}
  \hline
  \textbf{Vulnérabilité 11} & \textbf{Fuite de cookie} & \textbf{CVSS \color{red}4.3/10} \\
  \hline
  \multicolumn{3}{|p{0.95\textwidth}|}{La configuration du serveur web ne met pas en place une sécurité sur la divulgation de cookie, ce qui rend les failles de type « XSS » possibles et risque de répandre des informations utilisateurs.} \\
  \hline
  \textbf{Nature} & \textbf{Facilité d'exploitation} & \textbf{Impact} \\
  \hline
  Technique & Moyenne & Mineur \\
  \hline
\end{tabularx}
\end{table}

\begin{table}[!htbp]
\centering
\begin{tabularx}{\textwidth}{|c|C|c|}
  \hline
  \textbf{Vulnérabilité 12} & \textbf{Faible sécurité cryptographique du certificat de sécurité} & \textbf{CVSS \color{red}5/10} \\
  \hline
  \multicolumn{3}{|p{0.95\textwidth}|}{L'utilisateur peut être soumis à la malfaçon par redirection vers un site malicieux qu'il pense sûr.} \\
  \hline
  \textbf{Nature} & \textbf{Facilité d'exploitation} & \textbf{Impact} \\
  \hline
  Technique & Difficile & Important \\
  \hline
\end{tabularx}
\end{table}

\begin{table}[!htbp]
\centering
\begin{tabularx}{\textwidth}{|c|C|c|}
  \hline
  \textbf{Vulnérabilité 5} & \textbf{Méthode HTTP \textit{TRACE} activée} & \textbf{CVSS \color{red}3.7/10} \\
  \hline
  \multicolumn{3}{|p{0.95\textwidth}|}{Cette méthode HTTP est généralement utilisée pour le débogage d'applications et peut être utilisée malicieusement par un tiers pour voler les cookies de session d'un utilisateur.} \\
  \hline
  \textbf{Nature} & \textbf{Facilité d'exploitation} & \textbf{Impact} \\
  \hline
  Technique & Difficile & Mineur \\
  \hline
\end{tabularx}
\end{table}

\begin{table}[!htbp]
\centering
\begin{tabularx}{\textwidth}{|c|C|c|}
  \hline
  \textbf{Vulnérabilité 1} & \textbf{Faille permettant de vérifier si un utilisateur local existe} & \textbf{CVSS \color{red}5.9/10} \\
  \hline
  \multicolumn{3}{|p{0.95\textwidth}|}{Faille dans le service d'accès à distance qui permet à un attaquant de vérifier avec brutalité si un utilisateur existe sur la machine.} \\
  \hline
  \textbf{Nature} & \textbf{Facilité d'exploitation} & \textbf{Impact} \\
  \hline
  Technique & Facile & Important \\
  \hline
\end{tabularx}
\end{table}

\begin{table}[!htbp]
\centering
\begin{tabularx}{\textwidth}{|c|C|}
  \hline
  \textbf{Recommandation 0} & \textbf{Mettre à jour le service d'accès à distance} \\
  \hline
  \multicolumn{2}{|p{0.95\textwidth}|}{Installer une version plus récente du serveur SSH qui corrige la faille.} \\
  \hline
  \textbf{Priorité de traitement} & \textbf{Difficulté de mise en œuvre} \\
  \hline
  Haute & Facile \\
  \hline
\end{tabularx}
\end{table}

\subsubsection{Scan de vulnérabilités applicatives}
Les scanneurs tels qu'OpenVas sont destinés à scanner un système dans son ensemble pour trouver des vulnérabilités, mais les services hébergés sur celui-ci nécessitent un scan plus spécifique par des applications dédiées. Ici \texttt{nikto} a été utilisé afin de scanner le site web à la recherche de vulnérabilités communes.

\begin{figure}[!htbp]
  \centering
  \includegraphics[width=17cm]{nikto}
  \caption{Rapport de vulnérabilités web par nikto}
\end{figure}

La scanneur révèle notamment que le \textit{directory listing} est activé pour plusieurs dossiers sur le serveur. Dans le cas d'un oublie de la part du programmeur d'un fichier d'index, ceci peut conduire à la compromission de certains éléments du site.

\begin{table}[!htbp]
\centering
\begin{tabularx}{\textwidth}{|c|C|c|}
  \hline
  \textbf{Vulnérabilité 2} & \textbf{Directory listing activé} & \textbf{CVSS \color{red}3.7/10} \\
  \hline
  \multicolumn{3}{|p{0.95\textwidth}|}{Un utilisateur peut télécharger des fichiers cachés sur le serveur lorsqu'il tente d'accéder à un dossier et non une page. Cette vulnérabilité n'est en l'occurrence présente que sur des dossier d'impact minime.} \\
  \hline
  \textbf{Nature} & \textbf{Facilité d'exploitation} & \textbf{Impact} \\
  \hline
  Technique & Difficile & Mineur \\
  \hline
\end{tabularx}
\end{table}

Le scanneur révèle plusieurs vulnérabilités avérées, néanmoins mineures. À elles seules ces vulnérabilités ne constituent pas une grande menace quant à l'intégrité du site web, mais conjuguées à d'autres éventuelles elles peuvent mener à la compromission d'informations utilisateur. {\color{red}Il est donc nécessaire de procéder à la correction de ces vulnérabilités.}

\begin{table}[!htbp]
\centering
\begin{tabularx}{\textwidth}{|c|C|c|}
  \hline
  \textbf{Vulnérabilité 18} & \textbf{Vulnérabilité de type « X-Frame-Option header not set »} & \textbf{CVSS \color{red}2.6/10} \\
  \hline
  \multicolumn{3}{|p{0.95\textwidth}|}{Si l'application est compromise, un attaquant pourrait modifier une page de l'application en y ajoutant des éléments invisibles à l'oeil nu. En cliquant dessus, un utilisateur pourrait voir sa session usurpée ou encore avoir ses entrées clavier enregistrées.} \\
  \hline
  \textbf{Nature} & \textbf{Facilité d'exploitation} & \textbf{Impact} \\
  \hline
  Technique & Élevée & Mineur \\
  \hline
\end{tabularx}
\end{table}

\begin{table}[!htbp]
\centering
\begin{tabularx}{\textwidth}{|c|C|}
  \hline
  \textbf{Recommandation 9} & \textbf{Positionner l'en-tête X-Frame-Option dans toutes les réponses} \\
  \hline
  \multicolumn{2}{|p{0.95\textwidth}|}{L'ensemble des réponses HTTP doivent contenir l'en-tête X-Frame-Option avec comme valeur SAMEORIGIN ou DENY selon le contexte.} \\
  \hline
  \textbf{Priorité de traitement} & \textbf{Difficulté de mise en œuvre} \\
  \hline
  Faible & Facile \\
  \hline
\end{tabularx}
\end{table}

\begin{table}[!htbp]
\centering
\begin{tabularx}{\textwidth}{|c|C|c|}
  \hline
  \textbf{Vulnérabilité 19} & \textbf{Vulnérabilité de type « Protection XSS du navigateur non activée »} & \textbf{CVSS \color{red}2.6/10} \\
  \hline
  \multicolumn{3}{|p{0.95\textwidth}|}{Cet en-tête autorise le navigateur à déclencher ses propres mécanismes de détection et de prévention XSS. Il contribue donc à la sécurisation de l'application mais son absence ne permet pas à un attaquant de directement réaliser une attaque de type XSS.} \\
  \hline
  \textbf{Nature} & \textbf{Facilité d'exploitation} & \textbf{Impact} \\
  \hline
  Technique & Élevée & Mineur \\
  \hline
\end{tabularx}
\end{table}

\begin{table}[!htbp]
\centering
\begin{tabularx}{\textwidth}{|c|C|}
  \hline
  \textbf{Recommandation 10} & \textbf{Positionner l'en-tête X-XSS-Protection dans toutes les réponses} \\
  \hline
  \multicolumn{2}{|p{0.95\textwidth}|}{L'ensemble des réponses HTTP doivent contenir l'en-tête X-XSS-Protection avec comme valeur 1.} \\
  \hline
  \textbf{Priorité de traitement} & \textbf{Difficulté de mise en œuvre} \\
  \hline
  Faible & Facile \\
  \hline
\end{tabularx}
\end{table}

\begin{table}[!htbp]
\centering
\begin{tabularx}{\textwidth}{|c|C|c|}
  \hline
  \textbf{Vulnérabilité 20} & \textbf{Vulnérabilité de type « Protection XSS du navigateur non activée »} & \textbf{CVSS \color{red}2.6/10} \\
  \hline
  \multicolumn{3}{|p{0.95\textwidth}|}{L'en-tête X-Content-Type-Options contre le \textit{sniffing} MIME n'est pas renseigné à « nosniff ». Ceci permet à de vielles versions d'Internet Explorer et de Chrome de pratiquer le sniffing MIME sur le corps de réponse, conduisant potentiellement à l'interprétation et l'affichage du contenu dans un autre type que celui déclaré.} \\
  \hline
  \textbf{Nature} & \textbf{Facilité d'exploitation} & \textbf{Impact} \\
  \hline
  Technique & Élevée & Mineur \\
  \hline
\end{tabularx}
\end{table}

\begin{table}[!htbp]
\centering
\begin{tabularx}{\textwidth}{|c|C|}
  \hline
  \textbf{Recommandation 11} & \textbf{Positionner l'en-tête X-Content-Type-Options dans toutes les réponses} \\
  \hline
  \multicolumn{2}{|p{0.95\textwidth}|}{L'ensemble des réponses HTTP doivent contenir l'en-tête X-Content-Type-Options avec comme valeur « nosniff ».} \\
  \hline
  \textbf{Priorité de traitement} & \textbf{Difficulté de mise en œuvre} \\
  \hline
  Faible & Facile \\
  \hline
\end{tabularx}
\end{table}

Le scan applicatif nous a donc permis de trouver des vulnérabilités mineures touchant la confidentialité des données utilisateur. Ces vulnérabilités concernaient surtout les mécanismes de protection du navigateur utilisateur. L'application des recommandations permettra de garantir qu'ils sont en place et limitera les risques de vols de données.

\subsection{Exploitation}
Une fois les vulnérabilités repérées, nous avons tenté une intrusion dans le système en simulant les méthodes d'un attaquant. Nous avons trouvé et exploité au cours de celles-ci des nouvelles vulnérabilités qui seront mentionnées tout du long.

Nous avons commencé par accéder au service web pour commencer la pénétration au sein du système. On arrive immédiatement sur une page de connexion, et puisque nous avons vu précédemment qu'un service MySQL était lancé, le première étape était de tester des injections SQL. L'injection la plus trivialle fonctionne, en rentrant comme couple d'identifiants « root » et « ' OR 1=1 \# », après avoir essayé avec le nom d'utilisateur « admin ». {\color{red}L'injection SQL est très basique avec un nom d'utilisateur commun, ce qui rend son exploitation très facile pour un attaquant et lui donne accès à la « console d'administration » du site. Les critères de sécurité ne sont pas respectés.}

\begin{table}[!htbp]
\centering
\begin{tabularx}{\textwidth}{|c|C|c|}
  \hline
  \textbf{Vulnérabilité 14} & \textbf{Faille de type injection SQL} & \textbf{CVSS \color{red}8.2/10} \\
  \hline
  \multicolumn{3}{|p{0.95\textwidth}|}{L'utilisateur peut se connecter sans mot de passe à l'interface d'administration du site web notamment, mais peut aussi exécuter des commandes SQL arbitraires mettant en péril la disponibilité et l'intégrité des données.} \\
  \hline
  \textbf{Nature} & \textbf{Facilité d'exploitation} & \textbf{Impact} \\
  \hline
  Technique & Facile & Important \\
  \hline
\end{tabularx}
\end{table}

\begin{table}[!htbp]
\centering
\begin{tabularx}{\textwidth}{|c|C|}
  \hline
  \textbf{Recommandation 6} & \textbf{Ajout de fonctions d'aseptisation sur les entrées utilisateurs de l'application web} \\
  \hline
  \multicolumn{2}{|p{0.95\textwidth}|}{Les entrées utilisateur dans les champs de connexion et de l'interface d'administration ne sont pas protégés, il est nécessaire d'appliquer sur ces données des fonctions d'échappement de caractères spéciaux avant de les traiter.} \\
  \hline
  \textbf{Priorité de traitement} & \textbf{Difficulté de mise en œuvre} \\
  \hline
  Élevée & Facile \\
  \hline
\end{tabularx}
\end{table}

L'interface d'administration nous donne la possibilité de lancer un \textit{ping} sur une machine quelconque. {\color{red}Cette fonctionnalité présente un risque puisqu'elle permet à un utilisateur distant de cartographier à distance le réseau interne sur lequel la machine est connectée.}

\begin{figure}[!htbp]
  \centering
  \includegraphics[width=10cm]{exp_1}
  \caption{Interface d'administration du site web}
\end{figure}

\begin{table}[!htbp]
\centering
\begin{tabularx}{\textwidth}{|c|C|c|}
  \hline
  \textbf{Vulnérabilité 17} & \textbf{Possibilité de découverte réseau autour de la machine} & \textbf{CVSS \color{red}6.6/10} \\
  \hline
  \multicolumn{3}{|p{0.95\textwidth}|}{L'interface d'administration permet grâce au ping de cartographier le réseau local de la machine hôte. Au vu des failles précédentes, l'accès à l'interface d'administration est aisé, ce qui permet aux attaquants d'avoir une meilleure connaissance de l'environnement de la machine et de risque de le compromettre.} \\
  \hline
  \textbf{Nature} & \textbf{Facilité d'exploitation} & \textbf{Impact} \\
  \hline
  Technique & Facile & Important \\
  \hline
\end{tabularx}
\end{table}

\begin{table}[!htbp]
\centering
\begin{tabularx}{\textwidth}{|c|C|}
  \hline
  \textbf{Recommandation 8} & \textbf{Supprimer la fonctionnalité non-nécessaire ou configurer un pare-feu} \\
  \hline
  \multicolumn{2}{|p{0.95\textwidth}|}{Cette fonctionnalité ne devrait pas être présente dans une interface d'administration. Si sa présence est nécessaire, il est préférable de fournir une liste prédéfinie d'hôtes sur lesquels exécuter le ping, ou bien mettre en place un pare-feu qui filtre le ping vers les IP internes.} \\
  \hline
  \textbf{Priorité de traitement} & \textbf{Difficulté de mise en œuvre} \\
  \hline
  Moyenne & Moyenne \\
  \hline
\end{tabularx}
\end{table}

On remarque lorsqu'on lance un ping vers une adresse quelconque que c'est la commande \texttt{/usr/bin/ping} qui est exécutée. Nous nous sommes donc demandés s'il était possible d'injecter des commandes arbitraires. {\color{red}L'injection de commande est possible en injectant la commande voulue précédée d'un point-virgule. Les commandes sont exécutées avec l'utilisateur \texttt{apache}, utilisateur de moindre privilège, mais avec un noyau obsolète tournant sur la machine, cette vulnérabilité est grave.}

\begin{figure}[!htbp]
  \centering
  \includegraphics[width=10cm]{exp_2}
  \caption{Injection de la commande \texttt{id} depuis l'interface d'administration}
\end{figure}

\begin{table}[!htbp]
\centering
\begin{tabularx}{\textwidth}{|c|C|c|}
  \hline
  \textbf{Vulnérabilité 15} & \textbf{Exécution de commandes depuis l'interface d'administration} & \textbf{CVSS \color{red}8.3/10} \\
  \hline
  \multicolumn{3}{|p{0.95\textwidth}|}{Le champ de ping de l'interface d'administration est vulnérable et permet l'exécution de commandes arbitraires sur le système hôte.} \\
  \hline
  \textbf{Nature} & \textbf{Facilité d'exploitation} & \textbf{Impact} \\
  \hline
  Technique & Facile & Important \\
  \hline
\end{tabularx}
\end{table}

Nous souhaitions obtenir un \textit{invite de commandes inverse} afin de pouvoir tenter au mieux l'exploitation locale de la machine. Pour cela, grâce à l'exécution de \texttt{whereis}, nous avons pu déterminer que \texttt{netcat} était installé sur la machine. C'est une vulnérabilité en soi, mais nous imaginons que sa présence était purement pédagogique pour fournir une aide afin d'exploiter la première machine virtuelle, aussi nous ne le reporterons pas comme une vulnérabilité, bien que c'en soit une.

\begin{figure}[!htbp]
  \centering
  \includegraphics[width=15cm]{exp_3}
  \caption{Utilisation de l'injection de commande pour obtenir un invite de commandes inverse}
\end{figure}

La capture d'écran ci-dessus montre que nous avons obtenu un accès distant sur la machine en connectant un invite de commande distant sur notre machine d'exploitation.

L'étape suivante consiste à exploiter une vulnérabilité du noyau afin d'obtenir les privilèges super-utilisateur sur la machine. Après avoir exécuté \texttt{uname} sur la machine et constaté que la version du noyau était bien la 2.6.9, nous avons recherchés quels étaient les meilleurs \textit{exploits}. La machine était invulnérable au premier que nous avons essayé, mais au second essai, nous avons réussi grâce à \url{https://www.exploit-db.com/exploits/9542}. Il nous a suffi d'envoyer le fichier source sur la machine et de le compiler localement. Là encore, la présence du compilateur C gcc ne nous a as surprise en vertu de la pédagogie de l'exercice.

\begin{figure}[!htbp]
  \centering
  \includegraphics[width=15cm]{exp_4}
  \caption{Envoi de la \textit{prouesse} vers la machine vulnérable et exploitation de la vulnérabilité}
\end{figure}

{\color{red}Au vu de l'exploitation de la vulnérabilité et de l'obtention du l'accès super-utilisateur, la machine est fortement vulnérable.}

Le code d'exploitation de la vulnérabilité permet de changer le mot de passe root ; nous sommes donc par la suite à même de nous connecter via l'outil d'administration à distance SSH.

\begin{figure}[!htbp]
  \centering
  \includegraphics[width=10cm]{exp_5}
  \caption{Accès super-utilisateur via SSH sur la machine}
\end{figure}

\section{Obtention du drapeau}
\begin{wrapfigure}{r}{8cm}
  \vspace{-\intextsep}
  \includegraphics[width=8cm]{flag_1}
  \caption{Texte obscur qui prononcé tel quel permettrait selon la légende d'inviter Nyralathotep à venir manger une pizza}
\end{wrapfigure}
Une fois l'accès \textit{root} obtenu, le jeu consistait à trouver le drapeau sur la machine. Localisé rapidement sous \texttt{/root/flag.txt}, son contenu mystérieux restait à éclaircir.

Un coup d'œil aguerri saurait reconnaître du chiffrement de César, ce qui a pu se vérifier en écrivant un simple script Python testant tous les décalages possibles. Le César en place était relativement basique puisque le décalage tenait uniquement compte de l'indice des lettres (majuscules et minuscules confondues), et non du code ASCII des caractères. Nous avons cependant été déroutés par le fait que chaque ligne utilise une clef de décalage différente. Une fois le script Python modifié, nous étions à même de récupérer le drapeau.

Après résolution de l'énigme, le premier drapeau est donc : \textbf{AZERTYUIOPQSDFGHJKLMWXCVBN}.

\begin{figure}[!htbp]
  \centering
  \includegraphics[width=8cm]{flag_2}
  \caption{Fichier \textit{flag.txt} déchiffré}
\end{figure}
