Contexte

Alt text

Nous apprenons dans l’énoncé de ce chall que des logs suspicieux ont étés trouvés récemment, mais que ceux-ci ont disparus la minute après leur découverte.

Investigations

Alt text

Le dossier /var/log ne contient rien d’intéressant, la récupération de données potentiellement supprimées est inutile dans ce chall.

Nous cherchons à retrouver les derniers éléments système de la machine, pour cela nous utilisons strace, un outil de débogage et de diagnostic qui trace les appels systèmes.

Alt text

Le nom strace est dérivé de system call trace system call trace, ce qui signifie qu’il permet de tracer et d’analyser les appels système effectués par un programme.

En utilisant strace avec la commande ls, nous pouvons voir les appels système spécifiques utilisés par ls pour accéder aux fichiers.
Le résultat de l’exécution de strace ls affiche la liste détaillée des appels système effectués par ls ainsi que les arguments et les valeurs de retour correspondantes pour chaque appel système.

En analysant les appels systèmes, nous repérons un nom suspicieux:

Alt text

listxattr est une fonction qui permet de lister les extended attributes associés à un fichier.
Dans notre cas, le chemin du fichier sur lequel l’appel système listxattr est effecuté est /var/log/hide_access_log.log, et l’extented attribut user.EVIL_ATTACKER_ATTR.

J’ai essayé en vain de récupérer le fichier de log avec getxattr, qui récupère la valeur de l’attribut étendu identifié par le nom et associé au chemin donné dans le système de fichiers.

En essayant d’afficher le droit du fichier, nous nous rendons compte d’une incompréhension:

Alt text

Le fichier de log est bel et bien présent sur le système, mais n’est pas affichable.
Lorsque l’on essayons d’afficher les détails du fichier, nous avons comme réponse ses droits, ainsi qu’un message répondant que celui-ci n’existe pas.
En guise de comparaison, le fichier pwnii n’existe pas sur le système, nous n’avons donc aucune information sur celui-ci.

Nous tentons d’afficher le fichier de log avec d’autre binaires que cat, avec par exemple less, tac, head, tail.. Aucun d’entre eus ne l’affiche, sauf more.

Alt text

Flag: Hero{y0u_just_f1nd_4_r00tk1t_!!}

PoC | Rootkit super stylé

Le PoC fournit dans le fichier de log nous permet de comprendre ce qu’il s’est passé.
Ce rootkit modifie LD_PRELOAD, une variable d’environnement permettant de spécifier une bibliothèque partagée qui sera chargée au démarrage d’un programme. Pour faire cela, il utilise les extended attributes (xattr) qui sont des fonctionnalités permettant d’ajouter des informations supplémentaires à des fichiers ou des répertoires. Ils ne modifient pas la structure ou les attributs de base du fichier.

Afin de comprendre en détail cet incroyable rootkit, je vous recommande de lire de code source de celui-ci.

Nous affichons le contenu du fichier avec more car celui-ci utilise ioctl, un system call uilisé pour effectuer des opérations de contrôle sur des périphériques et des descripteurs de fichiers.
Cf: https://github.com/util-linux/util-linux/blob/master/text-utils/more.c

En analysant le rootkit, nous nous rendons compte que ioctl n’est pas hook, voilà pourquoi nous pouvons l’appeler ;)

Alt text

Merci à @Worty pour ce chall.