Guide de la sécurité des systèmes



Introduction






La sécurite



Il y a 3 (+1) éléments fondamentaux :



En anglais, on parle de CIA (Confidentiuality, Integrity, Avalaibility).


Les principes de base d'Eric Cole




  1. connaissez votre système : c'est la base !! (Quid d'une machine avec les ports 80, 443, 22 ouverts ?)
  2. principe de moindre privilège : fournir le minimum de privilèges pour exécuter une tâche
  3. défense en profondeur : plusieurs niveaux de défense basés sur des principes différents
  4. prévention importante mais détection (rapide) aussi importante




Les menaces






La notion de risque







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 :




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






Les types d'agressions



Il en existe plusieurs types :




Les techniques d'agressions






Les intrusions



Modes de contrôle d’un système :




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 :




Vulnérabilités



Les vulnérabilités peuvent provenir de plusieurs causes :



Voici quelques exemples pour Unix





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 :DHCP distribuant des baux uniquement aux adresses MAC répertoriées (facile sous Unix).


L'infrastructure



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 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.

La stratégie de la virtualisation



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 :


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 :


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 :




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).


La sécurité interne



Généralités : un processus Unix dispose d'un utilisateur (UID) et d'un groupe (GID), son accès aux objets système est tributaire de ces propriétés : un utilisateur “normal” ne pourra pas accéder à un répertoire s'il ne dispose pas des droits adaptés.
Mettre en place une stratégie de sécurité consiste à jouer sur les droits d'accès aux fichiers (RWX)


Les droits associés aux processus





Les programmes Set-UID et Set-GID



De nombreuses tentatives d’intrusions proviennent de processus lancés à partir de programmes Set-UID.
Un fichier dont le bit Set-UID est positionné dispose des droits du possesseur du fichier et non de ses droits de simple utilisateur (/bin/passwd est possédé par root et est Set-UID par exemple)
Ces fichiers sont des parfaits candidats pour les pirates . La plus grande partie des intrusions provient des programmes SetUID.

Il suffit qu’un programme Set-UID récele un bug ou qu’on essaie de l’attaquer avec un débordement de buffer pour pouvoir lancer un processus avec les droits de root !!!
Recherche des fichiers Set-UID :

Code BASH :
find / -user root -perm -4000 -ls .


Il conviendra d'établir la liste des fichiers Set-UID du système et de détecter chaque jour les changements.
Une des sources de problèmes sont les utilisateurs et groupes dont les UID et GID ne sont pas dans /etc/passwd et /etc/group : il peuvent provenir d’archives tar externes au système.
Pour enlever les attributs SUID et SGID :

Code BASH :
chmod ug-s fichier


Pour info : valeur octale : 4000 (Set-UID) et 2000 (Set-GID).

Le Sticky Bit



Le bit collant permet de gérer les droits d'écriture d'un fichier (modification et suppression)
Sur un répertoire : interdit la suppression des fichiers qu'il contient à tout utilisateur autre que le propriétaire.
Sur un fichier : indique que le fichier doit rester en mémoire après son exécution (utilisé pou sh et vi à l'époque).
Flag : T sur les droits UNIX , valeur octale : 1000

L'attribut immuable



On peut également rendre immuables certains fichiers système importantes (ls, ps, cp , …;) : on ne pourra alors plus les changer, les renommer ni faire de liens sur eux avec la commande :
Code BASH :
chattr +i fichier

Seul root peut positionner ou enlever cet attribut.

Sécurité Interne





Les outils



Bastille Linux : application permettant de “durcir “ un système Linux (RedHat, Debian) - Très formateur car sa configuration se fait à l’aide d’un script qui pose des questions très pertinentes.
lynis : application permettant de faire un audit de sécurité d'un système Linux et de faire des suggestions utiles quant à la sécurité.
Msec (Mandriva) : définit plusieurs niveaux de 1 (securité faible) à 5 (paranoiaque).

Unix : chroot





Unix : les démons et utilisateurs



De plus en plus les démons (serveurs et autres) sont conçus (si possible) pour fonctionner avec des utilisateurs spécifiques (apache, named, etc.) et non en tant que root ce qui limite les conséquences en cas de compromission du démon: l’utilisateur "normal" ne dispose que peu de droits de nuire.
Ainsi un seul démon Apache est lancé en tant que root, ce processus lance les processus Apache chargés de répondre aux requêtes Web avec un utilisateur "normal" appelés www-data ou httpd ou encore apache.

Les intrusions



La plus grande partie des intrusions dans les système Unix provient des programmes SetUID. On provoque un débordement de buffer (buffer overflow) avec des données calculées spécialement pour infecter la pile et obtenir une élévation de privilèges.
On remplace alors l’adresse de retour qui se trouve dans la pile par l’adresse d’un processus shell (/bin/sh) ou une copie SUID de /bin/sh cachée sur le système. Le shell est inséré dans le buffer. L’attaquant dispose alors d’un shell avec les droits root !!!

Scénario d'une attaque avec prise de contrôle



  1. Scan des ports pour déterminer les ports ouverts (avec nmap)
  2. Ouverture de session pour identifier les serveurs et leur N° de version
  3. Recherche de l'exploit adapté à l'application, la version et à l'OS détecté
  4. Lancement d'un exploit avec débordement de buffer pour obtenir des privilèges administrateur
  5. Depuis cette session, mise en place d'un rootkit permettant mettre en place une backdoor.


--- Les débordements de buffers ---

Principe : mise en œuvre avec des données spécialement formatées pour écraser la pile (souvent dans les chaînes de format C : « %s %2d »)
Ces débordements de buffers sont fréquents dans les applications de type RPC (Portmapper, NFS, NIS, ...) ainsi que dans le serveur Ftp Wu-ftpd
Une attaque de type débordement de buffer est spécifique :


Une attaque pourra être efficace sur un processeur Intel mais pas sur un processeur PowerPC.
Pour protéger une infrastructure sensible, certains utilisent les solutions suivantes :


Il existe maintenant des mécanismes mise en œuvre dans le noyau Linux interdisant d'exécuter des données dans la pile (PAX).
Les processeurs modernes disposent d'un bit non exécutable (NX bit => paramétrage BIOS)

Il existe maintant des outils comme Metasploit pour forger (pour tests!) des outils d'exploit.
C'est un véritable environnement de développement permettant des forger des shellcodes adaptés à des cibles données. (Disponible dans Kali Linux)

Exemple :
Code BASH :
# win32_bind_dllinject - EXITFUNC=seh LPORT=4444 Size=312 Encoder=PexFnstenvSub http://metasploit.com
my $shellcode =
"\x2b\xc9\x83\xe9\xb8\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\xa9".
"\xd4\x7e\x28\x83\xeb\xfc\xe2\xf4\x41\x82\x7e\x28\xa9\x87\x2b\x7e".
"\xfe\x5f\x12\x0c\xb1\x5f\x3b\x14\x22\x80\x7b\x50\xa8\x3e\xf5\x62".
"\xb1\x5f\x24\x08\xa8\x3f\x9d\x1a\xe0\x5f\x4a\xa3\xa8\x3a\x4f\xd7".
"\x55\xe5\xbe\x84\x91\x34\x0a\x2f\x68\x1b\x73\x29\x6e\x3f\x8c\x13".



Les Rootkits



Après avoir compromis un système, un intrus va essayer de garder une porte ouverte lui permettant de continuer à utiliser le système (backdoor)
Il installe des outils lui permettant de garder cette porte ouverte et de camoufler son intrusion. Le rootkit contient des versions spéciales des commandes de base (ls, ps, netstat, find, sshd, telnet, kill, killall, last, …;) modifiées pour ne pas faire apparaître la trace des données modifiées.
Par exemple, la commande netstat ne fera pas apparaitre une connexion distante avec la machine de l’attaquant !! Le démon sshd acceptera une session sans mot de passe avec un nom d’utilisateur particulier ou sur un port spécifique...


Les module Kernel (Loadable Kernel Modules)



Le kernel permet de charger dynamiquement des modules (insmod) permettant d’effectuer diverses actions des modules infectés peuvent avoir le même effet qu’un rootkit.


Les chevaux de Troie (Trojan)



Un cheval de Troie est un programme permettant d’obtenir le mot de passe administrateur. On le réalise facilement en shell Unix.
Ne jamais utiliser un PATH faisant appel à un chemin relatif ou faisant référence au répertoire courant :
PATH=.:/bin/:/usr/bin
Faire plusieurs fois <Entree> ou Ctrl-D avant une ouverture de session
Un cheval de Troie peut également déclencher des connexions réseaux sortantes qui ne seront par forcément détectée par les pare-feu.


Les Spyware (Windows principalement)



Ce sont des logiciels malicieux qui, profitant de faiblesses dans un navigateur, s'installent sur une machine et déclenchent des actions dangereuses (connexions sortantes) inventaires, et peuvent prendre la main sur une machine.
Ils sont de plus en plus répandus sur les machines Windows
On pourra utiliser des outils comme SpyBot ou Ad-Aware.

Les Pots à Miel (HoneyPots)



C’est un serveur installé dans la DMZ pour servir de leurre pour les intrus. Il permet à l’administrateur d’étudier les modes d’attaque.
Il peut contenir volontairement des failles de sécurités.

Les Pare-Feu Linux



Les pare-feu



Depuis le noyau 2.4 : Iptables : filtrage de paquets stateful : tient compte de la connexion TCP pour prendre des décisions plus pertinentes.
Attention : il est également recommandé d'effectuer du filtrage sortant permettant de bloquer les éventuels chevaux de Troie !
Code TEXT :
chaîne INPUT
chaîne FORWARD
chaîne OUTPUT
* Activer l’anti-spoofing (usurpation d’adresses)


Exemple : accepte les connexions entrantes sur les ports www et ssh pour la destination 192.168.1.100
Code BASH :
iptables -P INPUT DROP
iptables -A INPUT -s 0/0 -d 192.168.1.100 -p tcp -destination-port www -j ACCEPT
iptables -A INPUT -s 0/0 -d 192.168.1.100 -p tcp -destination-port ssh -j ACCEPT
iptables -P INPUT DROP
iptables -P INPUT LOG


De nombreux outils existent qui permettent de simplifier la conceptions de fichiers de configuration de pare-feu qui peut être assez pénible :



Les tests



Il est impératif de tester la configuration d’un pare-feu dans les conditions réelles.

nmap (Network Mapper) est le plus connu des scanners de ports. Il permet de :


Il existe d’autres outils du même genre comme SendIp.
Un outil de test de firewall : Firewall Tester (Open Source)
Outil le plus réputé : nessus (nessus.org) permet de faire des tests de détection d'intrusion (détecte plus de 5600 faiblesses)


Les serveurs FTP Linux



Le protocole FTP est fréquement utilisé en raison de son efficacité et de sa simplicité.En revanche, il n’est absolument pas sécurisé (le mot de passe circule en clair)
FTP non-anonyme : fortement déconseillé . Utiliser le couple ssh/scp beaucoup plus sûr, ou SFTP.
FTP anonyme : utilisé pour le téléchargement.

Les solutions :



Les serveurs de messagerie



Les différents serveurs SMTP :


Il est fortement recommandé d'installer un relais de messagerie dans la DMZ et de laisser le serveur principal dans le réseau interne.

Une couche sécurisée est maintenant fortement conseillée (SSL/TLS) pour le SMTP ainsi que pour les
serveurs POP (pop3s) et IMAP (imaps). Cette couche s'installe sans difficulté sur la quasi totalité des serveurs SMTP et POP/IMAP. Le serveur de messagerie doit de plus en plus intégrer des outils d'analyse anti-virus et anti-spam.


Serveur SSH



Service stratégique sur une machine Unix !!
Suelques points concernant le fichier sshd_config :


Il est également possible de désactiver l'authentification par mot de passe et de n'utiliser que les clés publiques (avec ssh-keygen) ! Il est recommandé d'utiliser une passphrase avec les clés publiques (avec ssh-agent et ssh-add).

Des utilitaires comme denyhosts ou fail2ban permettent le blocage d'adresses IP à l'origine d'attaques SSH répétées.
Contrôler régulièrement le fichier /var/log/auth.log (peut changer de nom).
Utiliser la commande suivante pour vérifier les connexions sur la machine :
Code BASH :
last | more



Les proxy



Attention aux ACL pour éviter que le proxy soit utilisé pour commettre des actes délictueux : Accès réservé au réseau local...). Mettre en place de l'authentification ci-nécessaire et utiliser des outils d'analyse de logs (calamaris, prostat, webalizer) pour obtenir des statistiques.


Les outils de l'administrateur






Après une intrusion





Voilà c'est terminé ! Ouf ! :magic: