Guide de la sécurité des systèmes
Table des matières
Il y a 3 (+1) éléments fondamentaux :
En anglais, on parle de CIA (Confidentiuality, Integrity, Avalaibility).
La quête de la sécurité dans une installation présente de nombreuses analogies avec la conduite de la guerre et la stratégie. Les curieux pourront lire :
Les techniques mises en œuvre sont de plus en plus sophistiquées et mettent en œuvre des techniques de plus en plus complexes (cryptographie, virus polymorphiques). On assiste à une forte recrudescence des attaques de vers (Blaster, …, des spywares et du phishing. Les attaques sur DNS sont de plus en plus nombreuses car elles peuvent rapporter beaucoup au plan financier.
Il y a peu, on estimait que la durée de vie d’un poste de travail Windows XP SP1 non patché et connecté directement à l’internet était d’une vingtaine de minutes environ, durée supérieure à la durée du téléchargement d’un patch …
Les réseaux de machines zombies ou botnet peuvent comporter plusieurs centaines de milliers de machines à disposition d'une personne pour envoyer du spam ou commettre une attaque en déni de service. Des pirates iraniens ont réussi il y a peu de temps à créer de faux certificats google pour espionner les comptes de messagerie.
Il en existe plusieurs types :
Modes de contrôle d’un système :
On les appelle encore attaques par saturation. Elles consistent à surcharger le système pour le rendre incapable de fonctionner ou trop lent, à remplir les journaux (rendre la recherche plus complexe) ou une partition système, ou encore multiplier le nombre de connexions (x10, x100 ou plus )
Ces attaques; peuvent être émises depuis une seule source ou mutualisée avec amplification (facteur 1:1000) très difficile à contrer (DDOS)? Elles peuvent être de source falsifiée ou utiliser des intermédiaires (rebonds) : http://www.certa.ssi.gouv.fr/site/CERTA-2002-INF-002/index.html
Voici quelques exemples :
Les vulnérabilités peuvent provenir de plusieurs causes :
Voici quelques exemples pour Unix
Un principe de base : n'autoriser que ce qui est strictement indispensable et n'exposer que ce qui est strictement nécessaire.
Il faut définir strictement les différents périmètres ou zones (partie publique, partie privée, … avec les règles adaptées. La topologie est importante : la partie publique devra être limitée au maximum.
Un serveur DNS ne doit renseigner que le minimum utile. Il faut penser à la mise en place d’ACL pour les requêtes et le transfert de zones.
Un DNS maître externe : dangereux ! On peut éventuellement mettre deux DNS : un serveur DNS interne et un DNS externe
Attention aux empoisonnements du cache DNS !
Le DHCP : service très sensible et facile à rendre inopérant: un script très simple permet d'épuiser tous les baux disponibles. Il devient alors très simple de mettre en place son propre serveur DHCP.
On peut alors riposter de la sorte HCP distribuant des baux uniquement aux adresses MAC répertoriées (facile sous Unix).
Attention à la couche liaison : elle est peu sécurisée et facile à mettre en défaut !
L'usurpation d'adresse MAC (ARP Spoofing) est facile à mettre en œuvre. Un switch (commutateur) se comporte comme un simple HUB (concentrateur) si on épuise sa table d'adresses MAC au moyen d'une ARP storm (outils arp-sk, arpspoof, … ) .
L'utilisation de VLAN par ports pour séparer les réseaux. En effet, les VLAN par adresse MAC ou par adresse IP sont faciles à mettre en défaut.
Les routeurs sont également sensibles.
Il faut faire attention aux mots de passe, ainsi qu' aux protocoles utilisés: RIP V1 ne dispose d'aucun élément de sécurité par exemple.
Désactiver les protocoles d'accès non sécurisés tels que telnet au profit de SSH.
La défense en profondeur. Il s'agit de mettre en oeuvre plusieurs lignes de défense adaptées opérant de façon différente (OS (MacOs, OpenBSD)/processeur différents) en séparant les tâches.
Que se passe-t-il si la première ligne (de défense) tombe ?
Il faut tenir compte de l’architecture OSI : un pare-feu est opérationnel aux niveaux 3 et 4 mais pas au niveau applicatif. Voir alors les proxys inverses ou de solutions pouvant remonter jusqu'au niveau 7.
Une machine exposée ne doit assurer qu’une seule fonction pour limiter les dégâts en cas de compromission.
Disposer d'une architecture ad-hoc : DMZ ,filtrage à plusieurs niveaux (plusieurs pare-feu)/
Plusieurs sous-réseaux (séparation niveaux OSI 3/4) avec filtrage et ACL sur les routeurs.
Un petit point sur la virtualisation : Elle est amenée à jouer un rôle de plus en plus important pour des raisons évidentes. En revanche, les hôtes hébergeant les machines virtuelles doivent être considérés avec un soin tout particulier sous peine de voir compromises l’ensemble des machines virtuelles de l'hôte.
Un bastion est une machine exposée dans la DMZ. Elle doit donc être configurée en conséquence :
Sous Linux, possibilité d’installer une distribution minimale et sécurisée (Trustix, Debian ou Gentoo…
Attention aux paramètres de démarrage de la machine. Elle doit démarrer sur le premier disque uniquement et non pas sur CD, USB ou disquette : sinon il suffit d’un Live-CD Linux (Knoppix, System Rescue CD … pour démarrer une machine Linux ou même Windows et d’accéder aux partitions (NTFS, Linux….
Le BIOS doit être protégé par mot de passe pour la raison précédente.
Sur une machine Linux, le démarrage doit imposer un mot de passe pour passer des paramètres au noyau (configurer lilo ou grub en conséquence)
A noter que sois Linux : linux init single permet de démarrer en run-level 1 donc de se connecter en root sans saisie de mot de passe depuis le chargeur d'amorçage.
Ce type de matériel implique des modes opératoires spécifiques : en cas de vol, le disque dur est lisible par tout le monde.
Il est donc nécessaire de mettre en place des systèmes de fichiers cryptés :
Cette stratégie est également valable pour les clés USB.
Les paranoïaques peuvent également mettre en place des partitions de swap cryptées.
Il peut poser de sérieux problèmes de sécurité s'il est mal configuré.
Quelques pistes :
Il peut être utile de s’abonner aux listes de diffusion de l’éditeur et des organismes de sécurité (CERT) et de lire (!!!) les mises en gardes diffusées
Utiliser urpmi pour Mandriva, yum pour Redhat, apt-get/aptitude pour Debian/Ubuntu, emerge pour Gentoo
S’assurer de la fiabilité de la source d'un logiciel ou autre paquet.
Vérifier la signature des pièces téléchargées.
Vérifier la somme de contrôle MD5 (avec md5sum sous Linux ou les signatures de packages)
Récupérer les patches et mises à jour pour les systèmes Windows (Windows Update ou WSUS; Services packs et Correctifs)
Limiter le nombre de comptes privilégiés (root, administrateur)
Règle importante : on ne devrait donner un accès administrateur qu’aux personnes capables de réparer les dégâts qu’elles auront causé en mode administrateur !!!
N’accorder que les droits minimaux pour effectuer une tâche donnée (sudo sous Linux permet de donner l’autorisation d’effectuer certaines taches à des utilisateurs “ordinaires” : relancer Apache, …
Utiliser les shadow passwords beaucoup plus sécurisés que les mots de passe classiques.
Écrire une note concernant la création de mots de passe
Éviter le mots (craquage par dictionnaire)
Longueur efficace minimale : 8
Utiliser un alphabet varié avec caractère de ponctuation et chiffres, minuscule/majuscule.
Définir une stratégie de vieillissement de mots de passe avec PAM ou stratégie de mot de passe Windows.
Utiliser les outils de crackage (Crack, “John the Ripper”, L0Pht (Windows) ) pour évaluer la résistance des mots de passe.
Le principe de base en sécurité : ne lancer que les services réellement utilisés. La plupart des distrib. Linux lancent au démarrage plus d’une vingtaine de services !!!!
Sous Linux :chkconfig, systemctl, update-rc.d ou rc-update.
Sous Windows : Gestionnaire de services.
La totalité des applications peut envoyer des informations dans les fichiers de log.
Attention à adapter une stratégie pour ne pas générer des volumes trop importants.
Nécessité de disposer d’outils pour exploiter ces logs : grep, script bash ou perl...
Le filtrage de paquets, mais attention au volume : le filtrage de paquets peut générer des volumes très importants : il est fortement recommandé que le répertoire /var soit stocké dans sa propre partition pour ne pas remplir la partition racine.
S’assurer par ailleurs du paramétrage de logrotate qui permet de faire “tourner” et compresser les fichiers de log. Les conserver 52 semaines comme le demande la loi.
Il est également recommandé d’envoyer les logs sur une machine dédiée pour les centraliser et éventuellement les graver sur DVD pour les archiver.
On pourra utiliser rsyslog syslog-ng
Attention à l’intégrité des logs : une des premières tâches d’un intrus qui aura réussi à pénétrer un système consistera à masquer ou effacer les traces de ses méfaits en effaçant ou épurant les logs.
On peut positionner l’attribut Append avec la commande chattr pour autoriser seulement l’ajout en fin de fichier
On peut générer des sommes de contrôle pour les fichiers sensibles (avec md5sum ou des outils comme tripwire).
- Introduction
- La sécurite
- Les principes de base d'Eric Cole
- Les menaces
- La notion de risque
- Pour élargir
- Des agressions de plus en plus élaborées
- Les programmes malveillants
- Les types d'agressions
- Les techniques d'agressions
- Les intrusions
- Les mises hors de service ou déni de service (DOS)
- Vulnérabilités
- Stratégie
- L'infrastructure - 2
- La sécurité interne
Introduction
- La sécurité n’est pas un état, c’est une démarche permanente ⇒ définition d'une politique de sécurité
- La sécurité ne se limite pas à l'utilisation d'un outil (pare-feu, anti-virus, … )
- La sécurité à 100 % n’est pas possible : il n’y a pas de solution magique, juste un ensemble de pratiques à perfectionner.
- La sécurité n'est possible sans maîtrise des fondamentaux du réseau et de l'informatique
La sécurite
Il y a 3 (+1) éléments fondamentaux :
- Disponibilité : garantie que ces éléments considérés sont accessibles au moment voulu par les personnes autorisées.
- Intégrité : garantie que les éléments considérés sont exacts et complets.
- Confidentialité : garantie que seules les personnes autorisées ont accès aux éléments considérés.
- Traçabilité (ou « Preuve ») : garantie que les accès et tentatives d'accès aux éléments considérés sont tracés et que ces traces sont conservées et exploitables.
En anglais, on parle de CIA (Confidentiuality, Integrity, Avalaibility).
Les principes de base d'Eric Cole
- connaissez votre système : c'est la base !! (Quid d'une machine avec les ports 80, 443, 22 ouverts ?)
- principe de moindre privilège : fournir le minimum de privilèges pour exécuter une tâche
- défense en profondeur : plusieurs niveaux de défense basés sur des principes différents
- prévention importante mais détection (rapide) aussi importante
Les menaces
- Les utilisateurs du système
- Des personnes malveillantes
- Un programme malveillant
- Un sinistre
La notion de risque
- humains : maladresse, inconscience, malveillance, ingénierie sociale, espionnage
- techniques : liés au matériel, au logiciel, à l'environnement
Pour élargir
La quête de la sécurité dans une installation présente de nombreuses analogies avec la conduite de la guerre et la stratégie. Les curieux pourront lire :
- L'art de la guerre – Sun-Tzu
- De la guerre – Karl von Clausewitz
- Le Prince - Nicholas Machiavel
Des agressions de plus en plus élaborées
Les techniques mises en œuvre sont de plus en plus sophistiquées et mettent en œuvre des techniques de plus en plus complexes (cryptographie, virus polymorphiques). On assiste à une forte recrudescence des attaques de vers (Blaster, …, des spywares et du phishing. Les attaques sur DNS sont de plus en plus nombreuses car elles peuvent rapporter beaucoup au plan financier.
Il y a peu, on estimait que la durée de vie d’un poste de travail Windows XP SP1 non patché et connecté directement à l’internet était d’une vingtaine de minutes environ, durée supérieure à la durée du téléchargement d’un patch …
Les réseaux de machines zombies ou botnet peuvent comporter plusieurs centaines de milliers de machines à disposition d'une personne pour envoyer du spam ou commettre une attaque en déni de service. Des pirates iraniens ont réussi il y a peu de temps à créer de faux certificats google pour espionner les comptes de messagerie.
Les programmes malveillants
- le virus : programme qui se duplique sur d'autres machines
- le ver : programme qui se duplique lui-même par le réseau
- le cheval de Troie (Trojan) : logiciel nuisible déguisé en programme légitime
- la porte dérobée (Backdoor) : accès frauduleux caché
- le logiciel espion (spyware) : collecte illégale d'informations
- l'enregistreur de frappe (keylogger)
- l'exploit : permet d'exploiter une faille de sécurité pour obtenir une élévation des privilèges
- le rootkit : permet de mettre en place une porte dérobée
Les types d'agressions
Il en existe plusieurs types :
- agression opportuniste (scripts-kiddies) : outils standards et technicité limitée
- agression ciblée : discrète et efficace. Recherche d'information ciblée sur des maillons faibles. Elle peut être interne ou externe.
Les techniques d'agressions
- Blocage des entrées (surcharge par des DOS)
- SPAM (utilisation du relais de messagerie)
- Intrusion dans un système (récupération de mots de passe, application ancienne ou mal configurée, …
- Ecoute du réseau avec des renifleurs (Ethereal, Wireshark)
- Attaques par rebond en prenant d’abord la main sur le routeur/pare-feu d’entrée pour ensuite attaquer le réseau intérieur (attaque par rebond)
- podsurfing avec une clé USB (autorun et U3)
- recherches des trous de sécurité
- utilisation de scanners permettant de détecter les adresses IP et les ports utilisés (NMAP) -
- certains permettent de détecter l’OS grâce aux numéros de séquence TCP
- connexion aux serveurs applicatifs pour récupérer le numéro de version et les vulnérabilités connues (sendmail, bind, apache…
- mise en place d'un rootkit
- Et enfin attaque par débordement de buffer avec un “exploit” spécifique pour obtenir des privilèges root
Les intrusions
Modes de contrôle d’un système :
- ingénierie sociale (pratique relationnelle)
- mot de passe récupéré (crackage ou reniflage) ou prêté
- Installation avec paramètres par défaut non adaptés
- application mal installée ou configurée
- application trop ancienne
Les mises hors de service ou déni de service (DOS)
On les appelle encore attaques par saturation. Elles consistent à surcharger le système pour le rendre incapable de fonctionner ou trop lent, à remplir les journaux (rendre la recherche plus complexe) ou une partition système, ou encore multiplier le nombre de connexions (x10, x100 ou plus )
Ces attaques; peuvent être émises depuis une seule source ou mutualisée avec amplification (facteur 1:1000) très difficile à contrer (DDOS)? Elles peuvent être de source falsifiée ou utiliser des intermédiaires (rebonds) : http://www.certa.ssi.gouv.fr/site/CERTA-2002-INF-002/index.html
Voici quelques exemples :
- (win)nuke, ping of death, land, teardrop, jolt, pepsi, bo(i)nk, nestea(2), naptha (et dérivés), 3wahas, stream, fraggle, ou une combinaison de plusieurs « techniques » (targa/rape)
- fork bomb
- en TCP : SYN Flood
- avec ICMP : echo et echo reply
- avec UDP : fausses connexions TCP (SYN sans ACK) → saturation des buffers → explosion de la pile
Vulnérabilités
Les vulnérabilités peuvent provenir de plusieurs causes :
- installation des OS et des applicatifs avec les paramètres par défaut
- Comptes utilisateurs sans mot de passe ou avec mots de passe trop faibles
- Sauvegardes inexistantes ou incomplètes
- Nombre trop élevé de port ouverts
- Aucun filtrage de paquets
- Journalisation des évenements inexistante ou incomplète
- Programmes CGI vulnérables
Voici quelques exemples pour Unix
- Débordements de buffers dans les RPC (Remote Procedure Call)
- Vulnérabilités dans Sendmail
- faiblesses BIND
- Commandes R (Rexec, rsh, rlogin …
- LPD (démon d’impression)
- démon de montage
- Chaines SNMP par défaut
Stratégie
L'infrastructure
Un principe de base : n'autoriser que ce qui est strictement indispensable et n'exposer que ce qui est strictement nécessaire.
Il faut définir strictement les différents périmètres ou zones (partie publique, partie privée, … avec les règles adaptées. La topologie est importante : la partie publique devra être limitée au maximum.
L'infrastructure DNS
Un serveur DNS ne doit renseigner que le minimum utile. Il faut penser à la mise en place d’ACL pour les requêtes et le transfert de zones.
Un DNS maître externe : dangereux ! On peut éventuellement mettre deux DNS : un serveur DNS interne et un DNS externe
Attention aux empoisonnements du cache DNS !
L'infrastructure DHCP
Le DHCP : service très sensible et facile à rendre inopérant: un script très simple permet d'épuiser tous les baux disponibles. Il devient alors très simple de mettre en place son propre serveur DHCP.
On peut alors riposter de la sorte HCP distribuant des baux uniquement aux adresses MAC répertoriées (facile sous Unix).
L'infrastructure - 2
Attention à la couche liaison : elle est peu sécurisée et facile à mettre en défaut !
L'usurpation d'adresse MAC (ARP Spoofing) est facile à mettre en œuvre. Un switch (commutateur) se comporte comme un simple HUB (concentrateur) si on épuise sa table d'adresses MAC au moyen d'une ARP storm (outils arp-sk, arpspoof, … ) .
L'utilisation de VLAN par ports pour séparer les réseaux. En effet, les VLAN par adresse MAC ou par adresse IP sont faciles à mettre en défaut.
L'infrastructure - 3
Les routeurs sont également sensibles.
Il faut faire attention aux mots de passe, ainsi qu' aux protocoles utilisés: RIP V1 ne dispose d'aucun élément de sécurité par exemple.
Désactiver les protocoles d'accès non sécurisés tels que telnet au profit de SSH.
La stratégie de protection
La défense en profondeur. Il s'agit de mettre en oeuvre plusieurs lignes de défense adaptées opérant de façon différente (OS (MacOs, OpenBSD)/processeur différents) en séparant les tâches.
Que se passe-t-il si la première ligne (de défense) tombe ?
Il faut tenir compte de l’architecture OSI : un pare-feu est opérationnel aux niveaux 3 et 4 mais pas au niveau applicatif. Voir alors les proxys inverses ou de solutions pouvant remonter jusqu'au niveau 7.
Une machine exposée ne doit assurer qu’une seule fonction pour limiter les dégâts en cas de compromission.
Disposer d'une architecture ad-hoc : DMZ ,filtrage à plusieurs niveaux (plusieurs pare-feu)/
Plusieurs sous-réseaux (séparation niveaux OSI 3/4) avec filtrage et ACL sur les routeurs.
Un petit point sur la virtualisation : Elle est amenée à jouer un rôle de plus en plus important pour des raisons évidentes. En revanche, les hôtes hébergeant les machines virtuelles doivent être considérés avec un soin tout particulier sous peine de voir compromises l’ensemble des machines virtuelles de l'hôte.
La stratégie des hôtes bastions
Un bastion est une machine exposée dans la DMZ. Elle doit donc être configurée en conséquence :
- Machine dégraissée : uniquement les applicatifs et services nécessaires
- noyau minimal recompilé sans modules (Linux)
- pas de compilateur installé : il permet de créer un rootkit
Sous Linux, possibilité d’installer une distribution minimale et sécurisée (Trustix, Debian ou Gentoo…
Accès Physique
Attention aux paramètres de démarrage de la machine. Elle doit démarrer sur le premier disque uniquement et non pas sur CD, USB ou disquette : sinon il suffit d’un Live-CD Linux (Knoppix, System Rescue CD … pour démarrer une machine Linux ou même Windows et d’accéder aux partitions (NTFS, Linux….
Le BIOS doit être protégé par mot de passe pour la raison précédente.
Sur une machine Linux, le démarrage doit imposer un mot de passe pour passer des paramètres au noyau (configurer lilo ou grub en conséquence)
A noter que sois Linux : linux init single permet de démarrer en run-level 1 donc de se connecter en root sans saisie de mot de passe depuis le chargeur d'amorçage.
Les PC portables
Ce type de matériel implique des modes opératoires spécifiques : en cas de vol, le disque dur est lisible par tout le monde.
Il est donc nécessaire de mettre en place des systèmes de fichiers cryptés :
- Windows : utiliser EFS ou TrueCrypt (sur Linux aussi)
- Linux/Unix : utiliser crypto-loop ou dmcrypt avec des algorithmes de cryptage sûrs (BlowFish, …
Cette stratégie est également valable pour les clés USB.
Les paranoïaques peuvent également mettre en place des partitions de swap cryptées.
Le réseau sans fil
Il peut poser de sérieux problèmes de sécurité s'il est mal configuré.
Quelques pistes :
- Ne pas diffuser les SSID
- Changer les noms de SSID par défaut (linksys, …
- Mettre en place le cryptage ( WEP résiste 10 mn à un outil comme aircrack (airsnort, …, privilégier le WPA2, plus robuste avec des clés longues)
- Utiliser la norme 802.1x avec un serveur WPA/Radius ce qui permet de bloquer un port physique dans de bonnes conditions de sécurité
- Utiliser un contrôleur sans fil gérant plusieurs SSID et les VLAN : solutions d'authentification différenciées ( Une faible pour les visiteurs, Une forte 802.1x et WPA pour les utilisateurs de l'entreprise)
Stratégie de mise à jour
Il peut être utile de s’abonner aux listes de diffusion de l’éditeur et des organismes de sécurité (CERT) et de lire (!!!) les mises en gardes diffusées
Utiliser urpmi pour Mandriva, yum pour Redhat, apt-get/aptitude pour Debian/Ubuntu, emerge pour Gentoo
S’assurer de la fiabilité de la source d'un logiciel ou autre paquet.
Vérifier la signature des pièces téléchargées.
Vérifier la somme de contrôle MD5 (avec md5sum sous Linux ou les signatures de packages)
Récupérer les patches et mises à jour pour les systèmes Windows (Windows Update ou WSUS; Services packs et Correctifs)
Stratégies de mots de passe
Limiter le nombre de comptes privilégiés (root, administrateur)
Règle importante : on ne devrait donner un accès administrateur qu’aux personnes capables de réparer les dégâts qu’elles auront causé en mode administrateur !!!
N’accorder que les droits minimaux pour effectuer une tâche donnée (sudo sous Linux permet de donner l’autorisation d’effectuer certaines taches à des utilisateurs “ordinaires” : relancer Apache, …
Utiliser les shadow passwords beaucoup plus sécurisés que les mots de passe classiques.
Écrire une note concernant la création de mots de passe
Éviter le mots (craquage par dictionnaire)
Longueur efficace minimale : 8
Utiliser un alphabet varié avec caractère de ponctuation et chiffres, minuscule/majuscule.
Définir une stratégie de vieillissement de mots de passe avec PAM ou stratégie de mot de passe Windows.
Utiliser les outils de crackage (Crack, “John the Ripper”, L0Pht (Windows) ) pour évaluer la résistance des mots de passe.
Désactiver les services non utilisés
Le principe de base en sécurité : ne lancer que les services réellement utilisés. La plupart des distrib. Linux lancent au démarrage plus d’une vingtaine de services !!!!
Sous Linux :chkconfig, systemctl, update-rc.d ou rc-update.
Sous Windows : Gestionnaire de services.
Audit (loging)
La totalité des applications peut envoyer des informations dans les fichiers de log.
Attention à adapter une stratégie pour ne pas générer des volumes trop importants.
Nécessité de disposer d’outils pour exploiter ces logs : grep, script bash ou perl...
Le filtrage de paquets, mais attention au volume : le filtrage de paquets peut générer des volumes très importants : il est fortement recommandé que le répertoire /var soit stocké dans sa propre partition pour ne pas remplir la partition racine.
S’assurer par ailleurs du paramétrage de logrotate qui permet de faire “tourner” et compresser les fichiers de log. Les conserver 52 semaines comme le demande la loi.
Il est également recommandé d’envoyer les logs sur une machine dédiée pour les centraliser et éventuellement les graver sur DVD pour les archiver.
On pourra utiliser rsyslog syslog-ng
Attention à l’intégrité des logs : une des premières tâches d’un intrus qui aura réussi à pénétrer un système consistera à masquer ou effacer les traces de ses méfaits en effaçant ou épurant les logs.
On peut positionner l’attribut Append avec la commande chattr pour autoriser seulement l’ajout en fin de fichier
Code BASH :
chattr +a /var/log/messages
On peut générer des sommes de contrôle pour les fichiers sensibles (avec md5sum ou des outils comme tripwire).