Tag Archives: vincent

Cours sécurité & Système d’exploitation

1 - Pré-requis
1.1 -  Couches OSI
1.1.1 -   Intérêt
OSI (Open Systems Interconnection, « modèle de référence d’interconnexion de systèmes
ouverts »)
– offrir une base commune à la description de tout réseau informatique
– séparation des services, une couche s’appuie sur une autre
1.1.2 -   Structure théorique & concrète
Structure théorique
Logiciel         7
Application    6
Présentation
5
Session
4
Transport
OS & Drivers
Dangers
3
Réseau
2
Liaison
1
Physique
Matériel
Structure concrète
Aucune correspondance réelle des 7 couches dans la réalité :
– modèle trop difficile à implémenter
– le modèle TCP/IP s’est imposé de lui même (implémentations déjà présentes).
5-6-7
Application
HTTP, FTP, DNS, IRC…
4
Transport
TCP, UDP
3
Réseau
IP
2
Liaison
Ethernet, Token Ring…
1
Physique
Techniques de codages

1.2 -  Applications
1.2.1 -   Communication Réseau

• Driver : communique avec le matériel (carte réseau, wi-fi, usb…)

• Couches réseaux : partie intégrante du noyau, ouverture de sockets, …

• Protocole : langage spécifique au besoin de l’application (HTTP, SMTP…)
1.2.2 -   Accès au Système

• Danger d’une application client, et de son accès au système (fichiers, autres programmes)
• Quasiment rien n’est faisable sans application
• Communication entre applications (un programme peut en lancer un autre, en diriger un autre)
2 - Système d’exploitation, Programmes, Utilisateurs & Droits
2.1 -  Objectif d’un OS

Objectifs principaux :
• Gestion du / Accès au matériel : CPU, mémoire, périphériques divers
• Lancement et gestion des programmes (processus)

Différencier le noyau et les applications:
• Il existe des centaines de noyaux différents : celui de Microsoft, linux, BSD, Symbian, Apple, Hurd…
• Les applications peuvent être portables d’un OS à l’autre.
En général des applications sont installées en même temps que l’OS : on parle de distribution (debian, mandrake, red hat, … MS Windows peut être vu comme une distribution).
Pour certaines applications très proches du système, la différenciation est difficile.

2.2 -  Kernel space / User space
• Le « Kernel space » : l’espace noyau
• Critique au fonctionnement du système
• On y trouve les pilotes pour le matériel, pour les systèmes de fichier, les couches réseau…
• Le « crash » d’un programme dans le kernel space est généralement fatal (voir HURD)
• Le « User space » : l’espace utilisateur
• Logiciels divers : outils, bureau, jeux…
• Le « crash » d’un programme dans le user space n’est pas fatal – sauf exceptions (verrous, conso CPU, …)
Bien sûr il y a besoin d’une communication entre l’espace noyau et l’espace utilisateur, via des librairies
standard : pour récupérer l’image d’une webcam, produire du son, ouvrir une socket…

2.3 -  Gestion des programmes / Scheduler
Il n’y a en réalité qu’un seul processeur sur une machine, et qu’une seule plage mémoire globale.
C’est donc à l’OS de gérer le multitâche : l’exécution de plusieurs processus qui fonctionnent en
simultané, et le partage des accès à la mémoire, aux systèmes de fichiers, au matériel.
C’est le rôle du « Scheduler » (ordonnanceur), qui exécute en réalité toutes les processus les un après
les autres, plusieurs fois par secondes.

2.3.1 - Processus
Un processus est un programme exécuté. Il a son environnement propre (variables, utilisateur, verrous,
zone mémoire bien à lui,…).

Il peut avoir une priorité : souvent on attribue une priorité plus importante aux tâches interactives pour
donner une meilleure impression pour le temps de réponse.

Démons et services
Certains processus sont destinés à être exécuté sans aucune interaction de utilisateur, on les appelle en
général « services » (sous Windows) ou « démons » (sous linux). On parle aussi de tâches qui
fonctionnent « en arrière plan ».
On retrouve dans cette catégorie la plupart des serveurs connus : apache (serveur web), samba (serveur
de partage de fichier), …
Ces démons sont généralement contrôlés indirectement par :
• des fichiers de configuration (nécéssite un redémarrage)
• des appels par des signaux

Initialisation du système
Lorsque l’OS démarre, il faut bien lancer toutes les tâches vitales au fonctionnement. Sous linux, il
s’appelle « init ». Il va lancer tous les démons / services utiles, en fonction d’une configuration définie.

Attributs
Un processus a toujours un identifiant unique: le PID (process identifier). C’est un numéro unique,
incrémental.
Il a aussi toujours un parent, son ppid (parent process identifier). C’est en fait le PID du processus qui
l’a éxécuté. Si le parent est arrivé en fin d’éxécution, alors c’est le processus init, qui a toujours le PID 1,
qui devient son parent par défaut. C’est le cas général des démons.

Signaux
On peux généralement communiquer de façon basique avec un processus par des signaux.
Les signaux les plus connus sont TERM et KILL, qui demandent au processus de se terminer.

Verrous
Lorsque plusieurs processus veulent accéder à une même ressource (ex: fichier, disque), il est
nécessaire d’avoir des verrous (locks).
2.4 -  Notion d’utilisateur
Définition

Un utilisateur sur un système d’exploitation peut correspondre à une personne, mais pas forcément.
Notamment, sous les environnements *nix, il existe des dizaines d’utilisateurs ne correspondant pas à
une personne physique.
Un utilisateur est avant tout un login (identifiant unique), et un password (mot de passe). En général lui est associé un UID (identifiant utilisateur), qui est numérique.
On a aussi, souvent la notion de groupe, avec un nom, et un GID (identifiant groupe), numérique lui
aussi. Un utilisateur peut appartenir à un ou plusieurs groupes, pour faciliter la gestion.

Utilité

• Propriété : sur un système, les fichiers et les processus appartiennent forcément à un utilisateur.

• Droits : on peut donner des droits / restrictions à un utilisateur ou à un groupe

• Logging : sur un système surveillé, on peut savoir quel utilisateur se connecte, lance tel ou tel processus…

 

2.5 -  Système de fichier

Un support de stockage n’est ni plus ni moins qu’une suite d’octets, linéraire. Un système de fichier est un schéma d’organisation permettant de gérer des fichiers et arborescences sur cet espace.
Il en existe là aussi plusieurs : FAT, EXT, NTFS, XFS, REISERFS, le futur WINFS, … Chacun a ses propriétés : +/- grande gestion des droits sur chaque fichier, intégrité des données,
rapidité, fragmentation…

2.6 -  Authentification et Domaines

Un utilisateur existe sur un système. Cependant, il est assez courant aujourd’hui d’avoir l’existence d’un
utilisateur virtuellement sur tout un réseau. Dans ce cas, on parle généralement de domaine, avec un
contrôleur de domaine qui va:
• contenir la base de donnée des utilisateurs
• gérer son authentification (par mot de passe ou autre)
• gérer son profile (informations supplémentaires, droits).
C’est l’objectif des technologies LDAP, Active Directory, Radius… En conséquence, un système ne peut
être séparé du réseau, et au lieu d’effectuer lui même l’authentification, il va en faire la demande au
contrôleur.
Malgré tout, pour la plupart des postes indépendants,  la base de donnée est locale.
2.7 -  Démons courants

Il existe des démons que l’on trouve sur quasiment tous les systèmes, ne seraient-ce que les
gestionnaires de mémoire.
Sous linux, il y a la présence quasi systématique d’un serveur de mail, pour des raisons historiques. Les
plus courants sont Sendmail, Postfix, Exim.
Dès qu’il s’agit d’un système à vocation de serveur, on retrouve souvent ces différents programmes :
apache
serveur HTTP
postfix
serveur SMTP
sendmail
exim
courier
serveur IMAP, POP
cyrus
mysqld
serveur de base de donnée
postmaster
proftpd
serveur FTP
pureftpd
2.8 -  Chroot / Jail
Le fait qu’un processus appartienne à un utilisateur, et donc qu’il soit lancé sous son nom, permet de le
limiter aux droits de cet utilisateur. Ainsi si ce programme devient un risque pour le système, il ne pourra pas faire plus de mal que ce même utilisateur.
D’où l’intérêt d’exécuter le minimum de programmes en tant que « super utilisateur » (administrateur 
sous windows, root sous *nix).

Cependant pour plus de sécurité, il existe une solution qui s’appelle « chroot ». Elle change virtuellement et pour un processus sa vision de la racine du système de fichier ( / ). Bien sûr cela nécessite d’avoir une arborescence système en double, spécifique à ce processus. Mais cela donne
l’assurance que le processus n’aura pas accès à d’autres parties du disque.