Portfolio de Souhir ahmed

CV Souhir Ahmed

CV_Souhir Ahmed.pdf

CV_Souhir Ahmed.pdf

Souhir Ahmed

> Ingénieur Réseaux Informatiques et Télécommunication

> Ingénieur Test et Validation Sagem Software & Technology

> 1ère année Master Electronique et réseaux de communication Polytechnique de Tunis

CV_Souhir Ahmed.pdf (134.4 ko)

TP sécurité de système de fichier linux

Dans cette section, j'introduit quelques notions de sécurité à travers des Travaux pratiques.

Objectif 1 : Localisation des fichiers et répertoires vulnérables

Cette section nous aide à déterminer les fichiers qui peuvent constituer une vulnérabilité et une faille qu'une personne malveillante peut utiliser et exploiter.

1.Le droit "sticky bit" :

Ce droit spécial a surtout un rôle important sur les répertoires. Exemple le répertoire /tmp

Il réglemente le droit w sur le répertoire, en interdisant à un utilisateur quelconque de supprimer un fichier dont il n'est pas le propriétaire

Ce droit noté symboliquement t occupe par convention la place du droit x sur la catégorie other de ce répertoire, mais bien entendu il ne supprime pas le droit d'accès x (s'il est accordé).

Justement, si ce droit x n'est pas accordé à la catégorie other, à la place de t c'est la lettre T qui apparaîtra. Sa valeur octale associée vaut 1000.

Pour positionner ce droit :

chmod +t rep

--> d ... ... ..t rep si le répertoire a le droit x pour tous

--> d ... ... ..T rep sinon

exemple concrêt:

créer un répertoire tp_linux1 avec les droits 777 en plus du sticky bit pour garantir que tous les utilisateurs peuvent y accéder.

mkdir tp_linux1

chmod 777 tp_linux1

chmod +t tp_linux1

A l’intérieur de ce répertoire, créer un fichier essai1 (dont les droits d’accès sont 777)

Maintenant se connecter sous un autre utilisateur et essayer de supprimer le fichier essai1 sur lequel notre nouvel utilisateur à tous les droits rwx.

Interprétations :

L’utilisateur user1 ne peut pas supprimer le fichier essai1 malgré qu’il dispose de toutes les permissions et ceci à cause du sticky bit qui a été placé sur le répertoire parent tp_linux1. Ceci représente une forme de sécurité très intéressante puisque user1 peut accéder à ce fichier sans le pouvoir de le supprimer.

2.Le droit d’endossement « SUID » :

Sa présence permet à un fichier exécutable de s'exécuter sous l'identité et donc les droits de son propriétaire, à la place des droits de l'utilisateur actuel qui l'exécute.

Il s'agit d'un dispositif de sécurité essentiel qui autorise un utilisateur quelconque (par rapport à la commande) à bénéficier de droits plus étendus que les siens (souvent ceux de root), pour exécuter la commande agir sur d'autres fichiers indispensables, juste le temps et sous le contrôle de l'exécution de la commande, SANS qu'il soit nécessaire d'attribuer ces droits en permanence sur les fichiers.

Ce droit est noté symboliquement s et se positionne à la place du x du propriétaire u (mais sans écraser le droit x).

Sa valeur octale est 4000

Exemple:

Nous allons nous intéresser aux droits du fichier exécutable /usr/bin/passwd, qui permet de (re)définir un mot de passe et le comparer à ceux du fichier /etc/shadow qui contient les mots de passe cryptés.

Comme le droit x est accordé à tous, chacun peut donc exécuter la commande passwd, mais personne ne possède lui-même le droit d'écriture dans le fichier /etc/shadow qui doit le stocker.

Le positionnement du SUID permet d'agir en tant que root lors de la demande d'accès au fichier et comme root a tous les droits, il est alors possible de mettre à jour ce fichier des mots de passe ce qui peut être dangereux en terme de sécurité.

3. Le droit d’endossement SGID :

Pour un fichier exécutable, il fonctionne de la même façon que le SUID, mais transposé aux membres du groupe.

Positionné sur un répertoire, ce droit modifie le groupe propriétaire d'un fichier créé dans ce répertoire.

Un fichier créé dans un tel répertoire, verra son groupe propriétaire modifié :

Ce ne sera plus le groupe primaire du propriétaire qui l'a créé (règle habituelle), mais à la place, le groupe propriétaire du répertoire lui-même.

Autrement dit, ce droit s posé sur un répertoire, met en place un mécanisme d'héritage de groupe, de répertoire conteneur à fichiers contenus.

Notation symbolique s, mise à la place du x du groupe, valeur octale 2000

4.Recherche des fichiers vulérables :

4.1. Localiser les fichiers SUID et les mettre dans /root/fichiers_endossables :

[root@localhost souhir]# find / -type f -perm +4000 > /root/fichiers_endossables

4.2. Localiser les fichiers SGID et les mettre dans /root/fichiers_endossables

[root@localhost souhir]# find / -type f -perm +2000 > > /root/fichiers_endossables

4.3. Localiser les fichiers dans lesquels tout le monde peut écrire et enregistrer leur nom dans /root/word.writable.files

[root@localhost souhir]# find / -type f -perm -222 > /root/word.writable.files

Objectif 2 : Vérification de l’intégrité d’applications :

1.vérification de l’intégrité des RPM déjà installés sur votre machine

La forme générale d'une commande de vérification d'une signature rpm est :

rpm --checksig +

Ceci vérifie la signature PGP du paquetage pour s'assurer de son intégrité et de son origine. Les informations de configurations de PGP sont lues à partir des fichiers de configuration:

[root@localhost root]# rpm --checksig telnet-client-krb5-1.3-6mdk

2.utilitaire gpg :

Principe du chiffrement asymétrique :

Pour chiffrer des données vous allez vous aider d'une clé, pour pouvoir déchiffrer ces données, le destinataire devra disposer de la même clé, en conséquence l'émetteur devra par un moyen ou un autre donner sa clé au destinataire, le problème est que si quelqu'un obtient cette clé, adieu la confidentialité, n'importe qui obtient la clé peut alors déchiffrer les données.

L'utilisation des clés publiques et privées résout ce problème. La clé publique comme son nom l'indique est publique et peut être largement diffusée sur le net, l'autre clé est privée, elle ne doit en aucun cas être communiquée à quelqu'un et doit rester secrète, elle est uniquement disponible pour son propriétaire et seulement. Maintenant l'émetteur va chiffrer son message au moyen de la clé publique qui appartient au destinataire, ce dernier déchiffrera son message avec sa clé privée.

Le risque maintenant du système est que la clé publique du destinataire que vous détenez ne soit pas la bonne mais appartienne à quelqu'un d'autre, ou que quelqu'un se soit fait passer pour votre destinataire (ce qui revient au même) et ait donné sa clé publique. Pour parer à cela, il faut ABSOLUMENT être sûr sans la moindre ambiguïté que la clé publique que vous receviez soit bien celle de votre destinataire, pour cela vous devez certifier la clé publique, vous ne devez en aucun cas certifiez une clé publique si vous avez des doutes sur son origine.

GPG signifie : GNU Privacy Guard. C'est un outil qui permet deux choses, à priori, distinctes :

----> signer un message/document et permettre de vérifier que la signature provient de la personne qui l'affirme

----> crypter un message/document de façon que seul le destinataire puisse le décrypter

Il fonctionne suivant le principe suivant, chaque personne utilisant GPG dispose de deux clés :

une clé privée connue d'elle seule (cette clé sert à signer et à décrypter)

une clé publique connue de tout le monde, cette clé doit correspondre à la clé secrète (cette clé sert à vérifier les signatures et à crypter)

Scénario:

Personne A -------- message ---------> Personne B

A souhaite envoyer un crypté B reçoit le message et le

message crypté à B. A décrypte grâce à sa clé

doit disposer de la clé privé correspondante à la

publique de B pour chiffrer clé publique

le message

Exemple d’utilisation de GPG:

a.Génération des clés :

---> Initialisation de gpg :

[root@localhost souhir]# gpg --list-key

---> Génération de la paire de clés (publique+privée) :

[root@localhost souhir]# gpg --gen-key

Au cours de cette étape on doit spécifier:

> type de clé

(1) DSA et ElGamal (par défaut)

(2) DSA (signature seule)

(3) RSA (signature seule)

> taille de clé 1024 ou 2048

> Délai d’expiration de clé en jours, mois ou années

> Introduire un nom d'utilisateur pour identifier votre clé; le programme le construit à partir du nom réel, d'un commentaire et d'une adresse e-mail.

> Entrer un mot de passe pour protéger votre clé secrète.

b. Exportation de la clé

L’utilisateur doit exporter sa clé publique s’il veut recevoir des messages cryptés ou s’il veut que les autres puissent l’authentifier (signature).

Pour cela on utilise la commande suivante

Ensuite la mettre dans un serveur de clé publique par exemple sur Internet http://www.keyserver.net/en pour que tout le monde puisse l’avoir.

[root@localhost souhir]# gpg --export --armor insat2005 > ~/insat2005.asc

c.Importer la clé :

Vous pouvez de votre part avoir la possibilité de transférer des messages crypté pour cela on va suivre la même étape et on va importer cette fois ci la clé publique du destinataire.

[root@localhost souhir]# gpg --import /home/user1/clé2.asc

d. Signer un message (pour des raisons d’authentification) :

Il existe plusieurs méthodes :

-----> Signature simple, binaire : soit un fichier essai.txt à signer

[user@localhost user]#gpg --default -key insat2005 --detach-sign essai.txt

On peut l’envoyer avec le message par exemple en pièce jointe.

------> Signature simple, ascii:

Pour effectuer la signature il faut avoir le mot de passe de la clé privée.

Pour vérifier la signature :

- Si le message arrive avec une signature séparée (message.txt + message.txt.sig ou message.txt.asc),

alors, il suffit de faire :

[user@localhost user]$ gpg --verify message.txt.asc message.txt

- Si le message vous arrive la signature (un seul fichier : message.txt.asc) :

[user@localhost user]$ gpg --verify message.txt.asc

e. chiffrer un message :

[user@localhost user]#gpg --default -key insat2005 --cleansign essai.txt

[user@localhost user]#gpg --recepient insat2005 --encrypt essai.txt

f. déchiffrer un message :

Lorsqu’on reçoit le message chiffré : message.txt.gpg

[user@localhost user]$ gpg --decrypt message.txt.gpg

i. éditer les clés

Permet en outre d'ajouter une nouvelle identité pour la même clé:

[user@localhost user]$ gpg --edit-key user2

k.vérification de la validité des clés :

[user@localhost user]$ gpg --fingerprint user

3. utilitaire md5sum :

Les sommes md5 sont le résultat d'un calcul puissant effectué sur n'importe quel fichier de n'importe quel format et qui identifie de manière unique un fichier et son contenu

De la même manière que pour les clefs publiques, la somme md5 permet d'authentifier les fichiers issus d'une source de téléchargement.

L'utilitaire md5sum permet de générer la somme md5 qui est unique de n'importe quel fichier

Vérifier une somme md5 :

Sur certains sites, il existe un fichier md5 qui permet de vérifier que le fichier téléchargé est la copie exacte de l'original.

C'est très utile lorsque l'on a téléchargé une image iso que l'on souhaite graver.

La commande correspondante:

[user@localhost user]$ vi testmd5

[user@localhost user]$ md5 testmd5

Ce fichier md5 contient un code unique correspondant au fichier original. Ce code, checksum, est calculé. Lancer la commande suivante pour vérifier que le fichier téléchargé n'a pas subit de dommage :

[user@localhost user]$ md5sum -c fichier.md5

Objectif 3 : Utilisation de tripwire pour le suivi de l’intégrité du système de fichier

Pour ce faire, il faut que l'administrateur invoque tripwire une première fois pour créer une base de données contenant, pour chaque fichier ou répertoire à surveiller, son empreinte digitale (fingerprint, hash value ou message digest en anglais). Il s'agit d'un nombre qu'on calcule à partir du contenu du fichier de telle manière qu'il est pratiquement impossible de trouver une autre suite de caractères ayant la même empreinte digitale.

Par la suite, périodiquement (quotidiennement semble être une fréquence adéquate) ou chaque fois qu'il faut vérifier l'intégrité des commandes et des différents fichiers de configuration de la machine (par exemple en cas d'intrusion), son administrateur utilisera tripwire afin de calculer à nouveau ces empreintes digitales et en comparer les valeurs avec celles stockées dans la base de données initiales.

Chaque empreinte digitale ayant changé indiquera que le fichier correspondant a été modifié.

Installation et utilisation de tripwire

tripwire.pdf
tripwire.pdf (121.7 ko)

Introduction a Iptables firewalling

1/ Présentation d'iptables:

Iptables est un firewall complet et très puissant fonctionnant sous Linux (noyaux 2.4), il remplace

Ipchains qui fonctionnait sur les noyaux 2.2.

Iptables permet de faire du firewalling stateful (à états), de la translation de port et d'adresse et aussi du filtrage au niveau de la couche 2 (adresse MAC)

2/ Installation :

télécharger la dernière version d'iptables du site http://www.netfilter.org/projects/iptables/index.html

ou par le lien svn https://svn.netfilter.org/netfilter/trunk/iptables/

Iptables doit être installé dans /sbin/iptables

ensuite exécuter les commandes:

tar jxvf iptables-x.y.z.tar.bz2

# cd iptables-x.y.z

# make KERNEL_DIR=<>

# make install KERNEL_DIR=<>

3/ chargement des modules

Dans le cas ou les options iptables du kernel ont étés compilées en modules, il est nécessaire de charger ces modules avant de pouvoir utiliser iptables :

# modprobe ip_tables

selon les besoins, on peut éventuellement charger les modules suivants :

# modprobe ip_nat_ftp

# modprobe ip_nat_irc

# modprobe iptable_filter

# modprobe iptable_mangle

# modprobe iptable_nat

Si on a besoin de pouvoir forwarder les paquets IP (dans la plupart des cas), il sera nécessaire d'exécuter cette commande :

# echo 1 > /proc/sys/net/ipv4/ip_forward

4/ vérification de l'installation

Iptables doit être installé dans /sbin/iptables, il suffit donc de taper simplement iptables en root.

# iptables -L

Le message affiché doit être comme ceci

Chain INPUT (policy ACCEPT)

target prot opt source destination

Chain FORWARD (policy ACCEPT)

target prot opt source destination

Chain OUTPUT (policy ACCEPT)

target prot opt source destination

Dans le cas contraire on aura :

can't initialize iptables table `filter': ...

Perhaps iptables or your kernel needs to be upgraded.

5/ Les tables dans iptables:

Une table est constituée d'une infinité de chaînes. Une chaîne est une suite de règles constituées d'un modif (pattern) qui reconnaît des paquets selon des critères (matches),et d'une décision appelée cible (target) qui agit lors de la reconnaissance du paquet décrit précédemment dans la règle. Dès qu'une règle matche un paquet, elle est déclenchée et la suite de la chaîne est ignorée.

trois type de table existante :

> table Nat: pour la translation d'adresse ou de port

2 types de chaines : PREROUTING qui permet de spécifier paquets entrants sur le firewall et la chaîne POSTROUTING qui permet de spécifier paquets sortants du firewall.

3 targets : MASQUERADE, SNAT et DNAT

* MASQUERADE: La passerelle (la machine où est installée Iptables) transforme les paquets sortants pour donner l'illusion qu'ils sortent de celle-ci par un port alloué dynamiquement ; lorsque la passerelle reçoit une

réponse (d'Internet par exemple) sur ce port, elle utilise une table de correspondance entre le port et

les machines du réseau local qu'elle gère pour lui faire suivre le paquet.

* SNAT: Permet de modifier l'adresse source du paquet.

* DNAT: Permet de modifier l'adresse de destination du paquet.

> Table FILTER : C'est la table par défaut

Cette table contient toutes les règles de filtrage, il existe 3 types de chaînes : FORWARD pour les paquets passant par le firewall, INPUT pour les paquets entrant et OUTPUT pour les paquets sortants. Les cibles disponibles sont : ACCEPT, DENY, DROP, REJECT

* ACCEPT: Permet d'accepter un paquet si la règle est vérifiée.

* DENY: Permet de rejeter le paquet sans retour d'erreur à l'expéditeur si la règle est vérifiée.

* DROP: Permet de rejeter le paquet avec un retour d'erreur à l'expéditeur si la règle est vérifiée

* REJECT: