table

introduction

c'est quoi, Unix?

les Unix d'aujourd'hui

la console

accéder à la console

la ligne de commande

à la découverte du système de fichier

les attributs des fichiers

à propos du noyau

les processus

shell et ligne de commande

les variables d'environnement

les "pipes"

redirections et descripteurs de fichiers

un exemple

allons plus loin

un exemple

modifié le 02/09/2007 00:29:09

le système de fichiers: rappels

il y a un répertoire important et intéressant : /var/log, qui contient les fichiers log parmi lesquels se trouve le fichier auth.log

auth.log contient tout ce qui concerne les connexions réussies ou non avec suffisament de détails pour qui comprend un minimum d'anglais, en voici un exemple:

Jun 25 16:05:29 localhost sshd[14342]: (pam_unix) session opened for user narberd by (uid=0)
Jun 25 16:09:01 localhost CRON[14456]: (pam_unix) session opened for user root by (uid=0)
Jun 25 16:09:01 localhost CRON[14457]: (pam_unix) session opened for user root by (uid=0)
Jun 25 16:09:02 localhost CRON[14456]: (pam_unix) session closed for user root
Jun 25 16:09:02 localhost CRON[14457]: (pam_unix) session closed for user root
Jun 25 16:09:28 localhost sshd[14342]: (pam_unix) session closed for user narberd
Jun 25 16:11:24 localhost sshd[14589]: Accepted password for narberd from 192.168.1.65 port 2268 ssh2
Jun 25 16:11:24 localhost sshd[14593]: (pam_unix) session opened for user narberd by (uid=0)
Jun 25 16:17:01 localhost CRON[14751]: (pam_unix) session opened for user root by (uid=0)
Jun 25 16:17:14 localhost CRON[14751]: (pam_unix) session closed for user root

nous y voyons, dans l'ordre, la date, le nom de la machine, le nom du démon (service) suivi de son PID entre crochet et enfin le message proprement dit

lorsque des individus louches et mal intentionnés veulent pénétrer le système, nous obtenons quelque chose comme ceci :

Jun 25 15:59:37 dedibox sshd[25356]: (pam_unix) authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=205.147.255.161  user=root
Jun 25 15:59:39 dedibox sshd[25356]: Failed password for root from 205.147.255.161 port 58997 ssh2
Jun 25 15:59:44 dedibox sshd[25367]: (pam_unix) authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=205.147.255.161  user=root
Jun 25 15:59:46 dedibox sshd[25367]: Failed password for root from 205.147.255.161 port 59049 ssh2
Jun 25 15:59:47 dedibox sshd[25374]: (pam_unix) authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=205.147.255.161  user=root
Jun 25 15:59:49 dedibox sshd[25374]: Failed password for root from 205.147.255.161 port 59181 ssh2

et ceci répété parfois plusieurs milliers de fois

comment obtenir la liste des voyous?

nous allons utiliser plusieurs outils qui sont à notre disposition

tout d'abord, la commande grep nous permet de retrouver une chaîne de caractère dans un fichier, comme ici :

grep "Failed password for root from" /var/log/auth.log

pour être certains qui la tentative 'accès s'est faite avec ssh, nous allons enchaîner avec un nouveau grep car toutes les tentatives de connexion ne se font pas forcément par ssh:

grep "Failed password for root from" /var/log/auth.log | \
    grep sshd

ce qui nous intéresse, c'est l'adresse IP de l'attaquant, pour cela, nous utilisons la commande cut qui découpe les lignes d'un fichier en colonnes et renvoie uniquement celles qui sont sélectionnées

cut à besoin de connaître le caractère séparateur de colonne et les colonnes sélectionnées, ici le caractère est l'espace et la colonne, est la onzième :

grep "Failed password for root from" /var/log/auth.log | \
    grep sshd | \
    cut -d ' ' -f 11

mais ce n'est pas suffisant, il reste beaucoup de lignes identiques et en plus dans le désordre, pour y remédier, nous allons trier, (to sort en anglais, et demander que les lignes soient uniques

vous en rêviez, Unix l'a fait : sort trie les lignes du fichier, uniq supprime les doublons:

grep "Failed password for root from" /var/log/auth.log | \
    grep sshd | \
    cut -d ' ' -f 11 | \
    sort | \
    uniq

ce 'est pas parfait, le tri se fait dans l'ordre alphabétique, mais un man sort nous informe de l'option -n qui force le tri numérique et nous avons le résultat :

grep "Failed password for root from" /var/log/auth.log | \
    grep sshd | \
    cut -d ' ' -f 11 | \
    sort | \
    uniq