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