Tâches Cron et tâches planifiées

LinuxBeginner
Pratiquer maintenant

Introduction

Dans les systèmes Linux, les administrateurs utilisent fréquemment des planificateurs de tâches automatisés pour effectuer la maintenance de routine, les sauvegardes et les mises à jour système. L'utilitaire le plus courant à cette fin est Cron. Bien que Cron soit extrêmement utile, les tâches planifiées mal configurées peuvent introduire de graves vulnérabilités de sécurité.

Les tâches planifiées deviennent dangereuses lorsque la confiance accordée et les droits d'accès en écriture ne sont pas alignés. Si une tâche privilégiée exécute un élément que des utilisateurs moins privilégiés peuvent modifier, le calendrier devient un mécanisme d'élévation de privilèges différé.

Dans ce laboratoire, vous explorerez un scénario où un administrateur système a créé un script de maintenance qui s'exécute automatiquement en tant qu'utilisateur root. Cependant, l'administrateur a accidentellement laissé les permissions du fichier trop permissives. Vous apprendrez à identifier cette mauvaise configuration, à comprendre ses implications et à l'exploiter en injectant votre propre charge utile de commande pour élever vos privilèges d'un utilisateur standard à root.

Énumérer les tâches Cron

Dans cette étape, vous apprendrez à énumérer les tâches Cron à l'échelle du système. Cron est un planificateur de tâches basé sur le temps dans les systèmes d'exploitation de type Unix. Les administrateurs système l'utilisent pour planifier des tâches (commandes ou scripts shell) afin qu'elles s'exécutent périodiquement à des heures, des dates ou des intervalles fixes.

Les tâches cron système sont souvent définies dans le fichier /etc/crontab ou dans le répertoire /etc/cron.d/. Ces fichiers de configuration spécifient le calendrier, le compte utilisateur sous lequel la commande doit s'exécuter, et la commande elle-même.

Cela signifie que les entrées cron révèlent trois faits critiques simultanément : quand le code sera exécuté, sous quelle identité il sera exécuté, et quel fichier ou quelle commande sera lancé.

Inspectons le répertoire /etc/cron.d/ pour voir s'il existe des tâches planifiées personnalisées. Utilisez la commande cat pour lire le contenu du fichier de tâche cron de maintenance.

cat /etc/cron.d/maintenance

Sortie :

* * * * * root /usr/local/bin/maintenance.sh

La sortie montre une tâche cron planifiée pour s'exécuter chaque minute, indiquée par les cinq astérisques (* * * * *). Elle est configurée pour s'exécuter en tant qu'utilisateur root et exécute le script bash situé dans /usr/local/bin/maintenance.sh.

Identifier les scripts modifiables

Dans cette étape, vous allez examiner le script exécuté par la tâche cron pour identifier les vulnérabilités de sécurité potentielles. Lorsqu'un script est exécuté par un utilisateur hautement privilégié comme root, toutes les commandes contenues dans ce script s'exécuteront également avec les privilèges root.

C'est pourquoi les chemins de scripts modifiables constituent un signal majeur pour une élévation de privilèges. Le contrôle du contenu du script devient un contrôle indirect de la tâche planifiée privilégiée.

Si des utilisateurs standard peuvent modifier ce script, ils peuvent injecter leurs propres commandes, que le système exécutera ensuite en tant que root. Il s'agit d'un vecteur d'élévation de privilèges courant.

Vérifions les permissions du fichier du script de maintenance à l'aide de la commande ls avec l'option -l pour obtenir une liste détaillée.

ls -l /usr/local/bin/maintenance.sh

Sortie :

-rwxrwxrwx 1 root root 78 Oct 10 10:00 /usr/local/bin/maintenance.sh

Notez les permissions rwxrwxrwx au début de la ligne de sortie. Cela signifie que le fichier est lisible, modifiable et exécutable par le propriétaire, le groupe et tous les autres utilisateurs du système. Comme il est modifiable par tout le monde, votre utilisateur standard actuel peut en modifier le contenu.

Injecter une charge utile de commande root

Dans cette étape, vous allez exploiter les permissions de fichier faibles en injectant votre propre commande dans le script de maintenance.

Puisque le script s'exécute en tant que root chaque minute, toute commande que vous y ajoutez s'exécutera également en tant que root. Pour une preuve simple et fiable, nous allons ajouter une commande qui écrit la sortie de id dans un fichier de votre répertoire de projet.

Nous utiliserons la commande echo pour ajouter cette charge utile au script. L'opérateur >> garantit que nous ajoutons notre charge utile à la fin du fichier sans supprimer son contenu original.

echo "id > /home/labex/project/cron_pwned.txt" >> /usr/local/bin/maintenance.sh

Vous pouvez vérifier que votre charge utile a été ajoutée avec succès en lisant la fin du fichier à l'aide de la commande tail.

tail -n 2 /usr/local/bin/maintenance.sh

Sortie :

echo "Maintenance run at $(date)" >> /var/log/maintenance.log
id > /home/labex/project/cron_pwned.txt

Attendre l'exécution de la tâche appartenant à root

Dans cette étape, vous allez attendre que la tâche cron exécute votre charge utile injectée.

La tâche cron s'exécute une fois par minute. Lorsqu'elle s'exécutera, elle lancera la commande id en tant que root et enregistrera la sortie dans ~/project/cron_pwned.txt.

Attendez jusqu'à 60 secondes, puis lisez le fichier de preuve :

cat /home/labex/project/cron_pwned.txt

Si l'exploitation a fonctionné correctement, vous verrez une sortie similaire à celle-ci :

uid=0(root) gid=0(root) groups=0(root)

Félicitations. Vous avez réussi à détourner une tâche cron pour exécuter des commandes en tant que root.

Résumé

Dans ce laboratoire, vous avez appris à identifier et à exploiter des tâches de maintenance système mal sécurisées pour élever vos privilèges dans un environnement Linux. Vous avez commencé par énumérer les tâches cron à l'échelle du système pour trouver celles s'exécutant en tant qu'utilisateur root. Ensuite, vous avez examiné le script cible et découvert qu'il présentait des permissions de fichier faibles, permettant à n'importe quel utilisateur de le modifier. En injectant une charge utile dans le script modifiable, vous avez réussi à détourner le processus automatisé et à obtenir un shell root. Cet exercice souligne l'importance cruciale d'une gestion appropriée des permissions de fichiers, en particulier pour les scripts exécutés par des processus automatisés privilégiés.