Commandes GNU/Linux pour détecter une intrusion

Publié par Mickael Rigonnaux le 

Bonjour à tous ! Après un petit moment d’absence nous allons voir aujourd’hui comment essayer de détecter une intrusion sur un système GNU/Linux.

Introduction

Aujourd’hui nous sommes beaucoup à rencontrer des tentatives d’intrusion sur nos SI, et ça peu importe le cœur de métier. Les intérêts peuvent être nombreux pour les attaquants, par exemple le vol de données, récupérer de la puissance de calcul, etc.

Il est important d’avoir une procédure pour décrire comment détecter et vérifier si la machine est intègre, au moins au niveau du système et des actions des utilisateurs.

De mon côté, j’ai pu utiliser les commandes suivantes, la liste n’est pas exhaustive et les différentes commandes sont sûrement améliorables avec des paramètres d’ailleurs.

Les commandes et actions

Sauf indication contraire les commandes sont lancées avec un utilisateur ayant des droits super utilisateur.

w & who

Les commandes w et who vont permettre dans un premier temps de voir si quelqu’un est connecté à la machine. Selon la commande lancée les informations sont différentes :

Ici les IPs ne remontent pas car je suis en local sur ma machine.

last & lastb

Les systèmes GNU/Linux gardent également des traces des connexions. Cela peut aller de l’utilisateur, l’IP et même la durée de la connexion.

Vous pouvez récupérer ces informations avec la commande last :

Comme pour w & who les IPs ne remontent pas car je suis en local sur ma machine, mais en cas de connexion distante l’IP est affichée.

La commande lastb affiche de son côté les tentatives de connexion erronées avec les mêmes informations. Pour que cela soit plus exhaustif j’ai lancé la commande lastb sur le VPS hébergeant l’instance Mattermost de Net-Security :

Les utilisateurs et shells

history

Si un attaquant arrive à prendre la main sur un utilisateur de votre machine il a de grande chance qu’il laisse des traces.

Vous pouvez vérifier les commandes lancées par un utilisateur en utilisant la commande history depuis l’utilisateur en question.

Exemple avec mon utilisateur :

Pour le faire pour un utilisateur différent il suffit de se connecter en son nom et de lancer la même commande :

su user1

history

L’ensemble des commandes sont tracées dans un fichier qui se nomme .bash_history et qui se trouve à la race du dossier de l’utilisateur. Vous pouvez également le consulter de la façon suivante :

cat /home/user/.bash_history

/etc/passwd & /etc/shells

Si un attaquant dispose de droit élevé il sera en capacité de créer son propre utilisateur. Nous allons donc vérifier les utilisateurs du système avec les commandes suivantes :

less /etc/passwd

cat /etc/passwd

Vous pouvez également filtrer seulement le nom des utilisateurs avec la commande suivante :

awk -F':' '{ print $1}' /etc/passwd

Ou bien afficher seulement les utilisateurs pouvant utiliser un shell :

cat /etc/passwd | grep /bin/bash (ou zsh, sh, etc.)

Vous pouvez récupérer la liste des shells disponibles sur votre machine de la façon suivante :

cat /etc/shells

Les processus

Lorsqu’un attaquant prend la main sur votre machine son but va être de la garder ou bien d’installer un programme malveillant comme un mineur, un botnet, etc.

Pour vérifier cela vous pouvez utiliser les commandes permettant de lister les processus.

Comme la commande ps (process status) qui va permettre de lister l’ensemble des processus de la machine :

ps

ps aux

Vous pouvez également utiliser la commande top qui grâce à son interface permettre également de surveiller les consommations de la machine et d’afficher les processus les plus gourmands en ressources.

top

Pour finir vous pouvez également lancer la commande lsof. Cette dernière permet grâce à ses options de retrouver des informations sur les processus.

Afficher les connexions ouvertes par un processus :

lsof -i

lsof -i -p <pid-proc>

Afficher les fichiers ouverts par un processus :

lsof -l

lsof -p <pid-proc>

ss & netstat

L’utilitaire netstat est présent sur presque toutes les distributions mais il est aujourd’hui déprécié. Il va permettre de vérifier des informations comme les ports exposés, les routes, etc.

Un attaquant pour garder accès à votre machine est capable d’exposer un port TCP ou UDP afin d’avoir un autre moyen de se connecter à la machine.

netstat -lntup (liste les ports TCP/UDP exposés avec les services)

netstat -r (liste les routes)

netstat -s (affiche les stats des cartes)

L’utilitaire ss de son côté reste très proche de netstat au niveau des fonctionnalités. Il est présent nativement sur les dernières distributions et est le remplaçant de netstat.

Il reste possible de récupérer les ports exposés avec cet outil :

ss -lntup

ss -s (affiche les stats de la carte)