Hydrotech - Vengeance d'un employé

M.Aharouni, C.Belloni, J.Blassiau, A.Corcione, S.Perrier, M.Trouiller

← Hydrotech - Vengeance d'un employé · Identification de l'attaquant / Analyse du PC Admin / Elévation de privilèges / Pompes défectueuses

Elévation de privilèges

Nous savons maintenant que l'attaquant a eu accès au PC d'un administrateur. Nous pensons qu'il a pu compromettre un de nos serveurs.

Votre mission est de repérer dans des logs pare-feu et dans le dump simplifié d'un de nos serveurs ce que l'attaquant a pu faire.

## Objectif de la mission:

- Identifier le moyen utilisé par l'attaquant pour effectuer des téléchargements depuis un serveur interne

- Repérer les URL/ressources téléchargées

- Déterminer la nature de la tentative d'exploitation et ses conséquences: CVE visée, binaire compromis, fonction exploitée et moment où l'attaquant a obtenu des privilèges élevés

## Documents mis à votre disposition:

- Logs pare-feu montrant le trafic initié depuis le serveur de supervision

- Dump simplifié du serveur contenant les fichiers système et les journaux

- Schéma réseau de l'infrastructure

## Votre rôle:

Croiser les éléments temporels et techniques pour retracer au mieux les mouvements de l'attaquant !

Cote 47 pts

Faire son rapport

1. Moyen utilisé pour effectuer des téléchargements sur le serveur

Dans un premier temps il suffit d'analyser les logs du pare-feu.
Etant donné que le but de cette question est de comprendre comment le serveur de supervision télécharge des fichiers,
on peut se focaliser sur les connexions sortantes du serveur de supervision.
On peut voir que beaucoup de logs sont sur le port 53, donc des logs DNS. Ce qui nous intéresse pas.

On peut donc filtrer pour retirer ces logs.

Maintenant en regardant les logs on observe ceci:

filter log

On peut comprendre que 10.0.1.1 en passant par le port 8080 demande quelque chose à 10.0.2.101.

En reprenant le schéma de l'architecture, on se rend compte qu'un serveur fait une requête à un PC admin.
De plus en reprenant le contexte, l'attaquant a accès au PC admin et au serveur.

Plus loin on observe qu'une requête a été faite entre le PC admin et une autre adresse IP mais sur le port 80. On peut donc déduire que l'attaquant passe par un proxy sur le pc admin, pour faire des téléchargements sur le serveur.

2. Numéro de CVE tentée par l'attaquant

En prenant le dump simplifié du système, on se rend dans home/usr1.
On peut observer 3 paquets installer.
En prenant le paquet sudo, on le décompile.
En regardant le fichier ChangeLog, on observe que nous sommes sur la version sudo-1.9.16p2.
sudo img

Il suffit de chercher sur internet les CVE sur cette version de sudo.
Et on trouve la CVE:

cve sudo

3. SHA256 du binaire vulnérable

Pour ce faire il faut aller regarder les logs dans /var/log.

On y retrouve 2 fichiers de logs.
Quand on ouvre les logs de journalctl on peut y retrouver qu'un binaire a segmentation fault plusieurs fois.

seg fault2

Ensuite on peut voir dans les logs de audit que le fichier a été appelé plusieurs fois au même moment.
backup tool

On y retrouve donc le binaire path vers ce binaire, il suffit juste de prendre le sha256 de ce binaire.

4. Faille tentée sur le binaire vulnérable provoquant un segfault

Lorsqu'on analyse sur le binaire, on peut tomber sur la fonction process_config_line.

str cp

On peut voir ici un strcpy sur un buffer de 64.
De plus dans les logs, on peut voir ceci que backup_tool segmentation fault à l'adresse 6 161 616 151.

seg fault

On peut donc déduire que l'attaquant a essayé d'exploiter un buffer overflow avec un fichier contenant plein de a.

5. Fonction exploitée dans le binaire

Pour ce faire nous devons le reverse.
En prenant Ghidra par exemple on peut traverser le code.
Lorsqu'on observe la fonction vulnérable commençant par copy.

On peut observer un appel vers la fonction system.
Juste au-dessus il y a la chaîne de caractères vulnérable.

reverse binary

Comme on le voit. Il suffit de créer une chaîne de caractères ressemblant à ceci :
cp -f ; /bin/bash # .

Ce qui va faire échouer le cp, et ensuite exécuter le bash.

Pour créer cette chaîne de caractères, on remonte dans la fonction main.
line function

Ici on peut voir qu'un fichier est lu ligne par ligne, et ensuite donné à la fonction vulnérable.

En remontant dans la fonction main, on comprend que ce fichier-là correspond à l'argument. Et donc il suffit de mettre dans notre fichier, la ligne montrée plus haut.

6. Heure du passage en root de l'attaquant

En explorant les logs de audit, on peut observer ceci:

become root

En analysant, on peut voir que le binaire backup_tool a été lancé avec des arguments, que un cp a été fait mais sans argument supplémentaire.
Puis un bash a été ouvert avec le userid à 0 et le groupuid à 0 aussi, puis la commande id a été faite.
Il suffit donc de prendre le timestamp associé à l'id et on obtient l'heure à laquelle il est passé root.