Identification des indicateurs de logiciels malveillants sous Linux

CompTIABeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire, vous apprendrez les techniques fondamentales pour identifier les indicateurs potentiels de logiciels malveillants sur un système Linux. À travers une série d'exercices pratiques, vous utiliserez des utilitaires de ligne de commande standard pour enquêter sur les signes courants d'une compromission, acquérant ainsi des compétences pratiques en surveillance système et en analyse forensique de base.

Vous commencerez par observer l'activité suspecte des processus, en apprenant à repérer les pics inhabituels de CPU et de mémoire qui peuvent signaler un processus malveillant. Ensuite, vous vous concentrerez sur le système de fichiers pour détecter les créations et modifications de fichiers inattendues, un indicateur clé d'activité non autorisée. Enfin, vous vous entraînerez à analyser les journaux système pour trouver des entrées anormales qui pourraient indiquer une violation de sécurité.

Observer l'activité suspecte des processus pour les pics de CPU et de mémoire

Dans cette étape, vous apprendrez à utiliser les utilitaires Linux standard pour surveiller les processus système à la recherche de pics inhabituels d'utilisation du CPU et de la mémoire. Une consommation soudaine et élevée de ressources est un indicateur courant de logiciels malveillants (malware), d'un processus compromis ou d'une application défectueuse. Nous utiliserons la commande top pour la surveillance en temps réel et l'outil stress pour simuler en toute sécurité un scénario de forte charge. Toutes les commandes seront exécutées depuis votre répertoire ~/project.

Tout d'abord, vous devez installer l'utilitaire stress, car il n'est pas inclus dans le système de base. Nous utiliserons le gestionnaire de paquets apt-get. La première commande met à jour votre liste de paquets, et la seconde installe stress.

sudo apt-get update
sudo apt-get install stress -y

Une fois l'installation terminée, établissons une référence en visualisant les processus actuels sur le système. La commande top fournit une vue dynamique en temps réel du système en cours d'exécution.

top

Vous verrez une interface plein écran qui se met à jour en continu. Portez une attention particulière aux colonnes %CPU (utilisation du CPU) et %MEM (utilisation de la mémoire). Dans des conditions normales, ces valeurs devraient être relativement faibles pour la plupart des processus. Appuyez sur la touche q pour quitter top et revenir à votre invite de commande.

top - 16:20:42 up 10 min,  1 user,  load average: 0.00, 0.01, 0.00
Tasks: 100 total,   1 running,  99 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.1 us,  0.1 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   1987.2 total,    845.5 free,    450.1 used,    691.6 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.   1355.2 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
      1 root      20   0  169404  13120   8484 S   0.0   0.6   0:01.55 systemd
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.00 kthreadd
...

Maintenant, simulons un processus suspect qui consomme une grande quantité de CPU. Nous utiliserons stress pour démarrer un worker qui effectuera des calculs intensifs en CPU pendant 60 secondes. Le & à la fin exécute la commande en arrière-plan, vous permettant de continuer à utiliser le terminal.

stress --cpu 1 --timeout 60 &

Vous verrez un identifiant de processus (PID) pour la tâche en arrière-plan. Maintenant, exécutez rapidement top à nouveau pour observer l'effet.

top

Cette fois, vous devriez voir le processus stress en haut de la liste ou près du sommet, avec sa valeur %CPU proche de 100.0. C'est exactement ce que vous rechercheriez pour trouver un processus qui monopolise le CPU. Après 60 secondes, le processus stress se terminera automatiquement. Appuyez sur q pour quitter top.

Ensuite, simulons un processus qui consomme une grande quantité de mémoire. Cette commande démarrera un worker qui allouera 256 Mo de mémoire et la conservera pendant 60 secondes.

stress --vm 1 --vm-bytes 256M --timeout 60 &

Encore une fois, exécutez top immédiatement pour voir l'impact.

top

Dans la sortie de top, trouvez le processus stress. Cette fois, son %CPU sera faible, mais sa valeur %MEM sera significativement plus élevée que celle des autres processus, démontrant une fuite de mémoire ou une attaque gourmande en mémoire. Cette technique vous aide à identifier une consommation de ressources anormale qui mérite une enquête plus approfondie. Appuyez sur q pour quitter.

Détecter les créations et modifications de fichiers inattendues

Dans cette étape, vous apprendrez à détecter une activité suspecte du système de fichiers, telle que la création ou la modification inattendue de fichiers. Les attaquants créent ou modifient souvent des fichiers pour établir la persistance, stocker des charges utiles malveillantes ou falsifier les configurations système. Nous utiliserons deux outils puissants en ligne de commande : find pour rechercher des fichiers en fonction de leurs heures de modification, et inotifywait pour effectuer une surveillance en temps réel des événements de répertoire. Toutes les opérations se dérouleront dans votre répertoire ~/project.

Tout d'abord, utilisons la commande find pour localiser les fichiers qui ont été récemment modifiés. Ceci est utile pour les audits de sécurité périodiques. Créons un fichier de configuration d'exemple à surveiller.

echo "SERVER_IP=192.168.1.1" > ~/project/app.conf

La commande find peut rechercher des fichiers en fonction de divers critères. Nous utiliserons l'option -mmin, qui signifie "modifié il y a quelques minutes". La commande suivante trouvera tous les fichiers du répertoire courant (.) qui ont été modifiés au cours des 5 dernières minutes.

find . -mmin -5

La sortie listera le fichier que vous venez de créer.

./app.conf

Maintenant, simulons un attaquant modifiant ce fichier de configuration.

echo "MALICIOUS_PAYLOAD=..." >> ~/project/app.conf

Si vous exécutez à nouveau la commande find, elle affichera à nouveau app.conf car son heure de modification a été mise à jour. C'est un moyen simple de repérer les changements récents. Maintenant, simulons un attaquant déposant un nouveau fichier, une tactique courante.

touch ~/project/hidden_script.sh

Exécutez la commande find une fois de plus.

find . -mmin -5

Elle liste maintenant à la fois le fichier modifié et celui nouvellement créé, démontrant comment vous pouvez rapidement identifier l'activité récente du système de fichiers.

./app.conf
./hidden_script.sh

Bien que find soit utile pour les audits, il ne fournit pas d'alertes en temps réel. Pour cela, nous pouvons utiliser inotify-tools. Tout d'abord, vous devez installer le paquet.

sudo apt-get update
sudo apt-get install -y inotify-tools

La commande principale est inotifywait, qui peut surveiller un fichier ou un répertoire pour des événements spécifiques. Exécutons-la en mode surveillance (-m) sur notre répertoire ~/project. Le & l'exécutera en tant que processus d'arrière-plan afin que vous puissiez continuer à utiliser votre terminal.

inotifywait -m ~/project &

La commande surveille maintenant silencieusement les changements. Effectuons quelques actions pour la déclencher. Tout d'abord, créez un fichier.

echo "new file" > ~/project/new_file.txt

Vous verrez immédiatement une sortie de inotifywait signalant l'événement CREATE.

/home/labex/project/ CREATE new_file.txt

Maintenant, modifiez le fichier.

echo "modified" >> ~/project/new_file.txt

L'outil signale un événement MODIFY.

/home/labex/project/ MODIFY new_file.txt

Enfin, supprimez le fichier.

rm ~/project/new_file.txt

Vous verrez un événement DELETE. Ce retour d'information en temps réel est inestimable pour un Centre d'Opérations de Sécurité (SOC) ou un système de détection d'intrusion automatisé.

/home/labex/project/ DELETE new_file.txt

Pour arrêter le processus de surveillance en arrière-plan, vous pouvez utiliser la commande pkill.

pkill inotifywait

Vous avez utilisé avec succès find et inotifywait pour détecter les changements du système de fichiers.

Analyser les journaux système pour les entrées anormales

Dans cette étape, vous apprendrez à analyser les journaux système pour trouver des preuves d'activité suspecte. Les journaux système sont des enregistrements des événements qui se produisent sur le système, et ils constituent une source d'information essentielle pour la surveillance de la sécurité et l'analyse forensique. Nous nous concentrerons sur les journaux d'authentification, qui suivent les connexions des utilisateurs et les escalades de privilèges, et utiliserons des outils Linux standard comme grep, tail et journalctl pour trouver les entrées anormales.

La plupart des journaux système sur un système Linux sont stockés dans le répertoire /var/log. L'un des plus importants pour la sécurité est /var/log/auth.log, qui enregistre les événements liés à l'authentification, y compris les connexions SSH et l'utilisation de la commande sudo. Commençons par visualiser les dernières lignes de ce fichier à l'aide de la commande tail. Vous avez besoin de sudo car ce fichier est protégé.

sudo tail /var/log/auth.log

Vous verrez une série d'entrées horodatées. Le format comprend généralement la date, l'heure, le nom d'hôte, le processus qui a généré le journal et le message de l'événement.

Jul 22 10:30:01 labex-vm sudo:    labex : TTY=pts/0 ; PWD=/home/labex/project ; USER=root ; COMMAND=/usr/bin/tail /var/log/auth.log
Jul 22 10:30:01 labex-vm sudo: pam_unix(sudo:session): session opened for user root(uid=0) by (uid=1000)
Jul 22 10:30:01 labex-vm sudo: pam_unix(sudo:session): session closed for user root

Maintenant, simulons un événement suspect courant : une tentative de connexion échouée. Les attaquants essaient souvent de deviner les mots de passe pour des noms d'utilisateur valides ou courants. Nous pouvons simuler cela en essayant de nous connecter en SSH à notre propre machine (localhost) avec un nom d'utilisateur qui n'existe pas, comme baduser.

ssh baduser@localhost

Le système vous demandera un mot de passe (vous pouvez utiliser labex comme mot de passe). Comme l'utilisateur n'existe pas, n'importe quel mot de passe échouera. Appuyez simplement sur Ctrl+C pour annuler la demande de mot de passe et revenir au terminal. La tentative de connexion échouera, mais elle sera enregistrée.

Maintenant, chassons les preuves. Nous pouvons utiliser la commande grep pour filtrer le fichier auth.log pour les lignes contenant le mot "Failed". Cela isole rapidement les événements infructueux.

sudo grep "Failed" /var/log/auth.log

La sortie montrera maintenant clairement l'entrée de journal de notre tentative de connexion SSH échouée, ce qui est un fort indicateur d'une tentative d'intrusion potentielle.

Jul 22 10:35:15 labex-vm sshd[12345]: Failed password for invalid user baduser from 127.0.0.1 port 54321 ssh2

Les systèmes Linux modernes utilisant systemd disposent également d'un système de journalisation centralisé géré par journald. La commande journalctl est un outil puissant pour interroger ces journaux. Utilisons-la pour trouver le même événement de connexion échouée en recherchant les messages du processus sshd. Notez que vous devez utiliser sudo pour afficher les journaux au niveau du système.

sudo journalctl | grep sshd

Faites défiler la sortie (en utilisant les touches fléchées, et appuyez sur q pour quitter) et vous trouverez la même entrée "Failed password". Pour faciliter encore plus les choses, vous pouvez filtrer par priorité du message. Demandons à journalctl de n'afficher que les entrées avec une priorité "error" (err) ou supérieure pour le service sshd.

sudo journalctl -p err | grep sshd

Cette commande vous donne une vue beaucoup plus concise des seules conditions d'erreur, ce qui la rend très efficace pour repérer les problèmes.

-- Logs begin at ... --
Jul 22 10:35:15 labex-vm sshd[12345]: Failed password for invalid user baduser from 127.0.0.1 port 54321 ssh2
-- End of logs --

Enfin, vous pouvez également injecter manuellement des messages dans les journaux à l'aide de la commande logger. Ceci est utile pour que les scripts personnalisés signalent les événements de sécurité. Créons une alerte personnalisée.

logger "SECURITY-ALERT: Unauthorized file access detected in /etc"

Maintenant, recherchez cette alerte spécifique dans les journaux système.

sudo grep "SECURITY-ALERT" /var/log/syslog

Vous verrez votre message personnalisé, démontrant comment vous pouvez intégrer votre propre surveillance à la fonction de journalisation du système.

Jul 22 10:40:00 labex-vm labex: SECURITY-ALERT: Unauthorized file access detected in /etc

Vous avez maintenant appris les bases de la navigation dans les journaux système pour trouver des preuves d'activité anormale et potentiellement malveillante.

Résumé

Dans ce laboratoire, vous avez appris des techniques essentielles pour identifier les indicateurs de logiciels malveillants sur un système Linux. Vous avez pratiqué l'observation de l'activité suspecte des processus en utilisant la commande top pour surveiller les pics anormaux de CPU et de mémoire. Pour comprendre à quoi cela ressemble dans un scénario réel, vous avez utilisé l'utilitaire stress pour simuler un processus à forte charge et comparé sa consommation de ressources par rapport à une base de référence normale du système.

Le laboratoire a également couvert comment détecter les créations et modifications de fichiers inattendues, qui sont des signes courants d'un système compromis. Enfin, vous avez appris à analyser les journaux système pour trouver des entrées anormales, une compétence cruciale pour trouver des preuves d'accès non autorisé, de mauvaises configurations ou d'autres événements liés à la sécurité.