Persistance sous Linux

Dans ce post, nous allons décrire les différentes méthodes permettant de maintenir l’accès sur une machine Linux après exploitation.

Reverse shell

La méthode du reverse shell n’est pas discrète ni élégante, mais elle a le mérite de fournir rapidement un point d’entrée sur le système, sur lequel on pourra revenir ultérieurement.

De plus, cette méthode ne nécessite pas que la machine compromise soit visible sur internet, ce qui peut être utile dans le cas de machines NATées ou derrière un pare-feu.

Sur la machine compromise nous allons lancer une connexion sur notre serveur d’attaque:

Avec ce one-liner, la machine compromise va tenter une connexion toutes les 10 secondes sur notre serveur vps.hacker.com sur le port 8080. Si la connexion réussit, on lance un shell sur la machine compromise, en redirigeant toutes les entrées et sorties sur le réseau, ce qui nous permettra d’administrer la machine directement depuis notre serveur d’attaque.

Sur notre machine d’attaque, on lance un service en écoute pour capturer la connection:

Après quelques secondes, le shell est exécuté:

Pour lancer le shell à chaque démarrage, on peut ajouter la commande dans le fichier rc.local.

Si l’on n’a pas les droits root, on peut ajouter cette ligne au fichier .bashrc ou .xinitrc de l’utilisateur.

Backdoor SSH

Si le serveur dispose d’un service SSH, une solution plus simple est d’ajouter notre clé publique SSH au serveur compromis. On pourra ainsi directement se connecter en SSH sur le serveur.

On commence par générer une bi-clé sur notre serveur d’attaque:

On copie ensuite la clé publique sur le serveur compromis:

On peut se connecter à tout moment avec la commande:

Ajouter un utilisateur

Une autre solution encore est d’ajouter un utilisateur sur la machine. On pourra ensuite l’utiliser pour se connecter via SSH, FTP et autres services utilisant les comptes système.

Ici, on ajoute l’utilisateur “admin” qui a le mot de passe “lemmein”. Cette méthode est efficace mais moins discrète que la backdoor SSH. De plus, elle nécessite les droits root sur la machine compromise.

Chiffrer une clé USB sous Linux

Les clés USB stockent souvent des informations confidentielles mais sont paradoxalement très faciles à perdre. Chiffrer une clé USB protège les données qui y sont stockées par un mot de passe, une fois le mot de passe saisi, l’accès au fichier se fait comme si de rien n’était.

Voici comment chiffrer une clé USB sous Linux:

D’abord, installez le paquet cryptsetup:

Assurez vous que votre clé n’est pas montée (remplacer /dev/sdb1 par la partition de la clé):

D’abord, on va créer un système de fichier chiffré sur la clé, choisissez un mot de passe robuste.

Ensuite, on va monter le système de fichiers, et le formater en FAT:

Enfin, on démonte la clé:

La prochaine fois qu’on insérera la clé, un mot de passe sera demandé.

4 méthodes de persistance sous Windows

Pendant un pentest, il peut arriver qu’on ait un accès temporaire à une machine, mais sans cale sous la porte l’accès peut être perdu en un instant (redémarrage de la machine, fermeture de la session de l’utilisateur, crash…).

Voici quelques méthodes de persistance sous Windows:

Clé registre

Cette méthode consiste à ajouter une valeur dans la clé registre Run qui définit une liste de programmes qui se lancent au démarrage.

Il y a deux instances de cette clé:

  • HKCU\Software\Microsoft\Windows\CurrentVersion\Run: Les programmes listés ici se lanceront quand l’utilisateur actuel se connectera. L’avantage est que seul un privilège utilisateur est requis pour modifier cette clé.
  • HKCU\Software\Microsoft\Windows\CurrentVersion\Run: Les programmes listés ici se lanceront au démarrage du système, même si aucun utilisateur n’est connecté. Il vaut des droits administrateur pour modifier cette clé.

Exemple: lançons le programme C:\Windows\agent.exe à chaque ouverture de session:

Service

Lance un programme au démarrage de la machine.

Tâches planifiées

Permet de lancer un exécutable au boot avec des privilèges SYSTEM.

Ajouter un utilisateur

Ajouter un utilisateur est une solution simple et efficace à défaut d’être discrète pour pouvoir se reconnecter par la suite.

Ici, on ajoute l’utilisateur “admin” ayant pour mot de passe “s3crEt”

Ajout d’un administrateur local

Le groupe local « Administrateurs » peut changer de nom selon la langue du système (e.g « Administrators » en anglais).

Ajout d’un administrateur du domaine

Bloquer les boutons facebook, twitter, linkedin… sans aucun logiciel

Les réseaux sociaux deviennent de plus en plus incontournables sur Internet. Même lorsque vous n’êtes pas connecté, les sites que vous visitez et qui contiennent des widgets Facebook ou Twitter envoient automatiquement des informations (adresse IP, navigateur, OS…) aux réseau sociaux. Si vous êtes connecté, votre nom est directement associé à votre navigation.

Pour éviter ce phénomène, une solution très simple est d’éditer le fichier hosts, qui contient des associations nom de domaine / adresse IP.

Sous Windows, c’est le fichier C:\Windows\System32\drivers\etc\hosts, sous Linux, /etc/hosts et sous Mac: /private/etc/hosts.

Il suffit de rajouter l’entrée 127.0.0.1 facebook.com à la fin de ce fichier et de sauvegarder (vous devez ouvrir le fichier avec un éditeur de texte lancé en mode administrateur).

Maintenant, vous devrier voir les boutons Facebook disparaitre comme par magie des pages que vous visitez !

Répétez cette opération pour tous les sites que vous voulez bloquer (Twitter, LinkedIn…).

Ajouter une clé SSH à son serveur

Plutôt que de mémoriser un long mot de passe de 46 caractères aléatoires, il est possible de se connecter de manière complètement sécurisée, et ce sans mot de passe !

Il faut simplement générer une paire de clés RSA.

La clé publique sera placée sur le serveur et la clé privée devra être présente sur toutes les machines depuis lequelles vous voulez vous connecter.

Copions la clé publique sur le serveur:

Il suffit maintenant de nous connecter avec un ssh user@votredomaine.fr

Hello_W0rld!

Bienvenue sur chapeaugris.fr !

Ici, vous trouverez des mini tutos et mémos que je rédige comme pense-bête pour moi, mais aussi pour tous ceux que ça pourrait aussi intéresser !