__ _ _ _______________ ________ ________ __PyroFreak Magazine #9 |29-UNIX, hack et compagnie (1ère partie) |( ) Phreak (X) Hack ( ) Autres '.__________Par Tekrebel ________ ______ tekrebel@vl.videotron.ca ___ Préface Pratiquement toute l'information dans cet article a déjà été publiée à quelque part d'autre auparavant, soit dans un livre, dans un manuel, dans un autre e-zine (riiiiippp;), text file sur Internet, etc. Ceci dit, cet article ne vise pas à recracher toute cette masse d'information, mais plutôt d'en faire un résumé complet et pratique afin d'instruire les débutants et les moins débutants. Je vise dans cet article à en apprendre même à ceux qui savent comment fonctionne UNIX et qui ont Linux, Solaris ou FreeBSD à la maison depuis 3 ou 4 ans. La complexité des informations ira en grandissant afin de maintenir une cohérence dans l'article alors pour ceux qui connaisse déjà la base de UNIX, vous pouvez sauter quelques paragraphes en avant. Introduction UNIX est un système d'exploitation (OS) développé par AT&T Labs dans les années 60. Depuis, plusieurs compagnies ont développé leur propre variante de UNIX telles Solaris (Sun), AIX (IBM), IRIX (SGI), HP-UX (HP), Xenix (SCO), BSD (Berkley Software Design), FreeBSD, Linux et quelques autres moins connues. Dans le cas de FreeBSD et Linux, ce ne sont pas des compagnies qui assurent le développement mais une immense communauté de développeurs qui donnent de leur temps pour coder différentes parties du système d'exploitation (noyau). On parle ici de développement open-source, c'est-à-dire, que l'on peut se procurer le code source du système d'exploitation gratuitement et le modifier. Je ne vais pas m'étendre sur Linux et FreeBSD, vous pouvez aller chercher vous même de l'information sur ces deux excellents systèmes d'exploitation sur Internet (www.freebsd.org, www.linux.org/com). Pour en revenir à UNIX en général, il possède les caractéristiques suivantes: 1) Il est multi-tâche 2) Il est multi-usagers 3) Il est multi-platforme (n'importe quelle architecture possède son UNIX) 4) Il n'est pas limité à un système de fichier 5) Il a des capacités de réseau intégrés Au tout début, UNIX était conçu pour rouler sur des grosses machines très puissantes (et très chères) servant à effectuer une quantité énorme de tâches à la fois (traitement des impôts des contribuables, département de la défense, etc.) mais au cours de la dernière décennie, UNIX a été adapté pour les micro- ordinateurs (ce que vous avez à la maison). C'est pourquoi on retrouve des variantes telle Linux, FreeBSD et Solaris qui roule sur l'architecure x86 et même RISC de Macintosh. UNIX est aussi le principal système d'exploitation utilisé par les serveurs sur Internet (créé en 1969 par le Département de la Défense américaine et non par America Online il y a 5 - 6 ans). Bon, d'accord, NT est est montée mais UNIX est encore réputé comme plus stable et plus puissant dans le domaine. Kernel et shell C'est deux mots peuvent vous sembler nouveaux et propres à UNIX mais vous les utilisez dans Windows ou DOS à chaque jour. Commençons par le kernel. Le kernel est le noyau du système d'exploitation. C'est lui qui fait l'interface entre le processeur, la mémoire, les périphériques, les fonctions de réseaux de bas-niveau, etc. En gros, il s'occupe de pas mal tout ce qui est essentiel. Les utilisateurs de DOS et de Windows ignorent la plupart du temps l'existence du kernel, celui se nomme msdos.sys sous DOS et kernel32.dll dans Windows 9x. Évidemment, s'il fallait interragir directement avec le kernel à chaque fois qu'on voulait effectuer une opération, ça serait extrêmement compliqué. C'est pour cela qu'on utilise un shell, qui est l'interface entre l'utilisateur et le kernel. Bref, Le shell est un programme qui s'occupe de rendre la tâche plus facile à l'utilisateur. Aussi connu sous nom d'interpréteur de commandes, c'est le programme qui rend les commandes telle cd / possibles. La principale différence avec DOS et Windows est que dans UNIX on a le choix entre plusieurs shell, tous ayant des forces et faiblesses. Sous DOS, celui utilisé 99% du temps est COMMAND.COM (il existe d'autres shell pour DOS mais ils sont extrêmement rares). Dans l'environnement UNIX, les deux les plus connus sont sans doute sh et bash. Personnellement, j'utilise le bash shell, il est une version rehaussée de sh et contient des commandes très pratiques. C'est également un des shells les plus simple. Comme autres shells, on retrouve ksh, zsh, csh et une multitude d'autres. On peut simplifier le modèle kernel/shell de la façon suivante: Utilisateur /-------------\ | Shell | | /---------\ | | | | | | | KERNEL | | | | | | | \---------/ | \-------------/ On voit ainsi que le shell entoure le kernel et oblige l'utilisateur à passer par celui-ci pour effectuer des opérations. La méthore du kernel avec le noyau fait donc du sens quand on y pense. Petite parenthèse, quand on parle de Linux, on parle du noyau/kernel, tous les programmes eux font partie de ce qu'on appelle une distribution Linux. Linux est un kernel, non un gros package de programmes tel Redhad ou Debian. Principales commande de UNIX Comme dans le bon vieux DOS, les opérations s'effectuent à l'aide d'un interface "command line" ou "écran noir avec c:\" pour ceux qui savent pas c'est quoi. En passant, si vous avez jamais utilisé DOS, vous aller trouver la partie qui suit assez rushante. Bon, évidemment, les commandes sont pas les mêmes que dans DOS mais c'est assez semblable. Premièrement, il est TRÈS important de retenir que tout dans UNIX est "case sensitive", ce qui veut dire que le système d'exploitation fait la différence entre les lettres minuscules et majuscules dans les commandes. Alors cd =! CD =! cD =! Dc. La syntaxe des commandes est généralement la suivante: commande [paramètres]. Voici une liste des principales commandes avec leur équivalent en DOS: ls: Affiche le contenu d'un répertoire, même chose que dir en DOS rm: Efface un fichier ou un répertoire (avec l'option -r), équivalent à del mv: Déplace un répertoire ou un fichier, move dans DOS cp: Copie un répertoire ou un fichier, copy dans DOS cat: Affiche le contenu d'un fichier à l'écran, équivalent à type dans DOS * cat peut aussi servir à d'autre chose qu'afficher à l'écran un fichier Quelques exemples: Pour copier warez.xxx dans /home/tekrebel : cp warez.xxx /home/tekrebel cp WAREZ.XXX /home/tekrebel ne fonctionne pas! Case sensitive oubliez pas. Afficher le contenu du fichier codesecret : cat codesecret Ou encore, pour l'effacer : rm codesecret Et dépendemment du shell qu'on utilise, on peux utiliser certains opérateurs qui donnent droits à des fonctions supplémentaires. Je m'explique par un exemple, supposons que je veux exécuter un programme en arrière-plan (en background), je tape ma commande suivie de &. Ceci a pour effet d'exécuter ma commande en arrière-plan et de me fournir le PID (process ID, plus d'explications la dessus plus loin). À l'aide des commandes fg et bg, on peux amener en avant-plan ou en arrière plan un programme en spécifiant le PID. Voici une liste des principaus opérateurs et leurs utilité: commande & Fait rouler le programme en arrière-plan commande > fichier Enregistre la sortie du programme dans un fichier commande >> fichier Même chose sauf que le fichier n'est pas écrasé, le contenu est tout simplement rajouté à la fin (append) commande 1 | commande 2 La sortie de la commande 1 sert d'entrée à la commande 2 commande 1 | commande 2 Exécute une commande à la suite d'une autre L'utilité de ces commandes vous appraîtra plus évidente plus tard, pour l'instant contentez vous de savoir qu'elles existent. Quand vous voulez plus d'aide sur un programme ou une commande, essayez commande --help, ça fonctionne dans 90% des cas. Sinon, essaye -h ou -?. Pour de l'aide plus détaillée, faites man commande, cela vous apportera une aide quelque peu chargée d'information plus ou moins inutile mais c'est la manière d'avoir la description la plus complète de tous les paramètres d'une commande. Par exemple, man rm vous apportera la liste complète de tous les paramètres que l'on peut passer à la commande rm (remove file/directory). L'aide est parfois compliquée mais à la longue on s'habitue. L'organisation des fichiers dans UNIX peut en surprendre quelques-uns. En effet, il n'y aucun disque a:, d:, etc. Tout est transparent et unifié dans une seule arborescence. Quand on veut accéder à une disquette par exemple, on doit "mounter" (accrocher ou fixer en français?) la disquette. Ceci a pour effet d'intégrer l'arborescence du disque à la structure de disque principale. Comme une image (ASCII dans ce cas-ci) vaut mille-mot, voici un petit exemple: Structure principale: /---+ | +--/etc | +--/mnt---+ | | | +--/floppy | +--/bin | ... et plein d'autres Structure de la disquette /---+ | +--/porn | +--/warez | +--/3l33te On veut mounter la disquette sur la structure principale. Habituellement, les disques mountés sont mis dans le répertoire /mnt. On mount la disquette avec la commande suivante: mount -t ext2 /dev/fd0 /mnt/floppy. On a ensuite comme résultat ce qui suit: /---+ | +--/etc | +--/mnt---+ | | | +--/mnt/floppy---+ | | | +--/mnt/floppy/porn | | | +--/mnt/floppy/warez | | | +--/mnt/floppy/3l33te | +--/bin | ... et plein d'autres Vous voyez un peu comment ça fonctionne? Le /dev/fd0 comme argument avec la commande mount fait référence au fichier de périphérique (device file) qui point vers la lecteur de disquette. Dans le répertoire /dev, on retrouve des centaines de ces fichiers. J'expliquerai l'utilité de ces fichiers dans un prochain chapitre. PIDs et TTYs Voici quelques concepts importants à saisir en ce qui concerne l'environnement UNIX. Premièrement, il faut savoir que chaque programme qui roule sur le système d'exploitation se voit attribuer un PID, c'est-à-dire, un process ID (identificateur de processus). Ce PID sert principalement au kernel (noyau du système d'exploitation) mais on s'en sert parfois comme par exemple quand un programme gèle et qu'on veut l'éliminer. (kill -s 9 [#pid]) en UNIX. Pour les amateurs de Windows, ça ressemble étrangement à notre cher CTRL-ALT- DELETE. C'est pratiquement la même chose sauf que dans Windows, on ne voit pas les PIDs. Pour voir la liste des programmes sous notre contrôle et leurs PIDs, on utilise la commande ps. Elle nous retourne quelque chose semblable à ceci: PID TTY STAT TIME COMMAND 124 tty1 R 3:45 cc 5565 tty1 R 0:00 ps On peut voir qu'il y a deux programmes actifs, le premier (cc est le compilateur C) possède le PID 124, utilise le TTY 1, est en exécution (R pour running) et il s'exécute depuis 3 minutes 45 secondes. Même si la commande ps n'a été en exécution que quelques microsecondes, elle apparait quand même dans la liste puisque que ps donne les programmes qui s'exécutent au moment de son exécution. Autre concept important, celui des TTYs. TTY veut dire Teletype Writer et a été utilisé au début par Bell pour assister les personnes sourdes qui veulent communiquer. Mais qu'est-ce que les sourds ont comme rapport avec UNIX?! Tout simplement qu'un TTY dans UNIX est une sorte d'écran. Je dis "une sorte" parce qu'un TTY est en fait un fichier spécial dans le répertoire /dev qui pointe vers l'écran, un autre terminal ou un autre périphétique tel un clavier, souris, etc. On retrouve dans UNIX plusieurs de ces fichiers, /dev/tty1, /dev/tty2, etc. Tous pointe vers un terminal "virtuel" différent. On peut changer de terminal en appuyant habituellement sur ALT+F[Numéro terminal]. Si je peux comparer avec Windows, c'est comme avoir plusieurs fenêtres DOS ouvertes et changer entre celles-ci. Utilisateurs et sécurité Ah, ça commence à devenir un peu plus intéressant ici, on va parler de la sécurité sur UNIX. Évidemment, quand on parle de système multi-usagers, il faut mettre en place un système de sécurité puisque les systèmes où les usagers sont tous honnêtes et ne commettent pas d'erreur n'existent pas. Quand on pense sécurité, on pense d'abord aux hackers et aux personnes qui tentent d'avoir accès illégalement à vos fichiers et données. Mais la sécurité d'un système vise aussi à empêcher un utilisateur distrait d'effacer les fichiers importants sur le serveur. Imaginez, vous travaillez sur un gros projet important depuis 3 mois et quelqu'un supprime le mauvais répertoire (qui s'avère être le votre) sur le serveur. Bon, pas besoin de vous faire un dessin là-dessus je crois. La sécurité sur UNIX est basée principalement autour du fichier /etc/passwd. Celui contient le nom des usagers, leur identificateur (UID, user id), leur numéro de groupe (GID, group id) et quelques autres informations. Ah oui, j'oubliais, ce fichier contient quelque fois le mot de passe des usagers sont forme encryptée. Je vais éclaircir ce point tout de suite. Sur les vieux systèmes UNIX et encore aujourd'hui quelques fois, les mots de passe encryptées sont contenus dans /etc/passwd, qui en passant est accessible en lecture à tous les utilisateurs. De nos jours, la plus part du temps, le champ qui contient le mot de passe est remplaçé par un jeton (* normalement). Les mots de passe sont donc dans un autre fichier, d'habitude /etc/shadow, celui-ci ne pouvant être lu que par l'administrateur (root). Cette mesure met donc un frein ou bon vieux "grab the /etc/passwd and crack it". On appelle cette procédure le password shadowing. Voici à quoi ressemble un fichier /etc/passwd "non shadowé": root:sdfHgd68:0:0::/root:/bin/bash tekrebel:Hdf36557Gdg:100:100:Tekrebel:/home/tekrebel:/bin/bash tilamer::101:101:3l33t3:/home/lamer:/bin/bash Bon, qu'est-ce qu'on voit ici? Chaque ligne correspond à un usager. Chaque ligne est divisée en plusieurs champs divisés par des double-points ":". Le premier champ contient le nom d'usager, le deuxième le mot de passe encrypté ou bien * si le password shadowing est activé ou alors dans le cas de certains usagers spéciaux qui ne servent qu'au système d'exploitation. Le troisième et quatrième champ contiennent le UID et GID respectivement. Le cinquième champ sert à entrer des informations diverses comme le vrai nom de l'utilisateur ou bien son adresse, numéro de téléphone etc. Le 6e contient le répertoire personnel de l'usager et le dernier champ, son shell par défaut. Concernant le GID, UNIX utilisent des groupes d'usagers pour faciliter la restriction de l'accès aux fichiers. Ces groupes et leurs membres sont définis dans /etc/group. Pour ceux qui ont travaillé avec Novell Netware avant, ça doit vous donner une idée. Revenons à mon exemple, dans la première ligne on voit qu'il s'agit de l'utilisateur root (l'administrateur), que son mot de passe est encrypté, que son répertoire personnel est /root et que son shell est le bash. Devinez le reste. Maintenant qu'on connait la base du modèle de sécurité, je vais aborder le système de fichier et ses droits. Contrairement à Novell, il n'y a que trois attributs principaux sur les fichiers, écrire (W), lire(R) et exécuter(X). Les attributs sont affectés aux fichiers ainsi qu'aux répertoires. Comme un exemple vaut mille mots ou presque, voici le contenu d'un répertoire quelconque: tekrebel:/home/tekrebel# ls -l (ls -l donne la liste détaillée des fichiers) total 3 -rwxrwxrwx 1 tekrebel root 4096 Dec 22 12:18 quake -r--r----- 1 root root 1024 Dec 11 7:00 smurflist srwxrwxr-x 1 root root 10002521 Sep 22 17:05 sendmail drwx------ 1 tekrebel tekrebel 1024 Dec 22 12:25 hackutils/ tekrebel:/home/tekrebel# Ce contenu de répertoire est totalement fictif et ne sert qu'à des fins d'exemples. Tout d'abord, la première partie à gauche nous indique les droits sur le fichier ou répertoire. Cette partie est divisée en quatres sections distinctes. Le masque de droits est sous la forme suivante: x111222333. Le x est le "droit" spécial, il indique s'il s'agit d'un répertoire, d'un fichier spécial ou d'un programme SUID 0. Ce dernier terme (SUID 0) veut dire que le programme est exécuté en ayant les droits d'un autre utilisateur. Plusieurs programmes essentiels au fonctionnement de UNIX ont besoin d'être exécutés avec les privilèges de l'administrateur. Alors, en ayant ce droit, les programmes sont exécutés en tant que root. Attention, il faut s'assurer que ces programmes sont sécuritaires sinon il y a possibilité de faille de sécurité puisque n'importe quel usager exécute le programme en tant que root. Il faut donc limiter le plus possible le nombre de programmes qui s'exécutent SUID et s'assurer de leur intégrité. Le reste des droits 1,2 et 3 fait référence au propriétaire du fichier, à son groupe propriétaire et au reste des usagers. Chaque section possède également trois droits: lire, écrire et exécuter. Pour le premier fichier, on voit que le propriétaire possède tous les droits (rwx), le groupe et les autres utilisateurs également (rwx). Par autres utilisateurs, on fait référence à tous ceux qui ne sont pas le propriétaire ou qui ne font pas partie du groupe propriétaire. Voici un autre petit graphique: d|-wx|r-x|rwx | | | | | | | `- Autres utilisateurs | | | | | `----- Groupe propriétaire | | | `--------- Usager propriétaire | `------------ Droit spécial, dans ce cas-ci il s'agit d'un répertoire Évidemment, si le propriétaire s'enlève par mégarde tous les droits sur un de ses fichiers, il peut se les restaurer, empêchant ainsi de se "locker" en dehors de ses propres fichiers. Le troisìeme champ indique le nombre de "hard-links" associés aux fichiers. Vous n'avez pas vraiment besoin de savoir ceci. Le quatrième et cinquième champ indique l'usager et le groupe propriétaire respectivement. Vous avez sans doute deviné le sixième, il s'agit de la taille du fichier. Le reste des informations indiquent la date et l'heure à laquelle le fichier a été créé et son nom de fichier. Maintenant il serait utile de savoir comme changer les attributs d'un fichier. Cette opération est effectuée avec trois programmes: chmod, chgrp et chown. chmod change les droits du fichier, chgrp change les groupe propriétaire et chown change l'usager propriétaire. Avec chmod la syntaxe est relativement simple, chmod g+wx quake ajoutera au fichier quake les droits d'écriture et de lecture au groupe propriétaire de même que chmod og-rwx enlevera tous les droits au groupe et aux autres utilisateurs. On peut également racourcir la commande en utilisant la syntaxe octale pour les droits comme chmod 700 qui donne tous les droits au propriétaire et qui enlève les droits au reste. Utilisez "man chmod" pour la syntaxe complète de la commande. L'utilisation de chgrp et chown est très simple aussi. ** Fin de la première partie de l'article ** Suite dans le #10 de PyroFreak ____ __ _ _ _______________ ________ ________ __PyroFreak Magazine #9 |30-LA BLUE BOX |(X) Phreak ( ) Hack ( ) Autres '.__________Par Toonstuck ________ ______ Toonstuck@aol.com ____ ___ 1) Disclaimer: Je pense que tous bon Newbie a déjà entendu parler de la fameuse "Blue Box", inventée au U.S.A par des étudiants du MIT en 60. J'ai décidé de faire un petit article dessus, malgré son fonctionnement peu fréquent en france, mais intéressent et très instructif. Comme je l'ai dit plus haut, cette box à été inventée par des étudiants dans les année 60, et à été dévelopée par le fameux "Capitaine CRUNCH". Le surnom de "Capitaine CRUNCH", a été tirer d'une boite de céréales. Explications. Immaginez: Capitaine CRUCH mangait ces céréales, lorsque au fond du paquet, il apererçut un petit sifflet cadeau. ... A mon avis, il n'a pas du tout de suite comprendre que ce sifflet pourrai lui servir à quelque chose, mais en l'étudiant... En éffet... Ce sifflet, émmetait une frequence de 2600 hz. Cette frequence en arrivait à brouiller une ligne téléphonique, ou plutôt, de lui faire croire que l'on avaient raccrocher, alors que nous étions toujours en ligne ... Ce qui voulait dire que si Capitaine CRUNCH sifflait dans son peitit instru- ment lors d'une comunication téléphonique banale, il parvenait à contourner les factures téléphoniques, ou bien, téléphoner gratuitement. Pas male le sifflet du Capitaine CRUNCH un ??? Evidement, ce petit objet n'est guère resté longtemp, il a été remplacé par un montage électronique qui émmetait le même signal. 2) 2600. Je vous laisse immaginer qu'une comunication téléphonique ne ce déroule pas par un simple claquement de doigts, et que ce n'est pas des opérateurs qui s'occupent de facturer le temps de comunication, mais en toute logique, des machines. <-- (A mon avis, il n'y aurai largement pas assez d'operateurs pour gérer le nombre d'appels en l'éspace de 30 secondes.) Ceci étant, ce sont des commutateurs et non des opérateurs qui gèrent nos appèls téléphoniques. Ces comutateurs sont placés dans des centrâle de communications, et sont reliés à d'autres même centrâle basées partout dans le monde. Lorsque l'on émmet un appèl téléphonique, nous passons par des comutateurs (minimum 2). Ces derniers, s'échangent des données, ou plutôt des informa- tions concernant le prix à la minute, ... A chaque fin de communications, les deux commutateur ce font: "STOP !". Et oui... C'est à ce moment la que le 2600 Hz intervient. A partir du moment ou vous émettez un appèl vers une ligne éxterieure, les commutateur s'échangeront des signaux: 2600 Hz = Les personnes étant en ligne ont raccrochées. ???? Hz = La ligne du correspondant est occupée. ???? Hz = Le correspondant X a décroché. Temps facturé: XX FF la minute dont XX FF facturé dut au décrochement du correspondant. C'est à peu de choses pret comme celà que ce comunique les comutateurs lors d'un appel téléphonique. Etand donné qu'en France le blue boxing est presque impraticable, le mieux est de ce servir de la blue box vers une ligne téléphonique international et gratuite (0 80099). Cette derniere étant gratuite, elle ne sera pas controlée comme un appel vers une ligne externe payante, donc moins dangereuse. <-- Ex: En france, FT ne s'occupe pas des Numeros verts. Ne connaissant guerre mieu que vous le montage d'une blue box, je vais plutôt me mettre à l'étudier serieusement afin de vous mettre on-line un petit montage fait maison. Hé hé .... By Toonstuck====M.C.9 H.P.C ... ---->