. . /|\ LES FIREWALLS PAR TROM /|\ / | \ / | \ \ | / Kortex agency 1998 \ | / Cette documentation est à but purement éducatif , je ne pourrais pas être tenu responsable de son utilisation . De plus si vous avez des remarques à me faire , elles seront les biens venues ! J'invite tous les experts de sécurité à me contacter . En effet j'aurais quelques questions à poser , quelques théories à vérifier et quelques files à demander . Sur ceux je vous laisse à mon aide en espérant qu'elle étanchera un peu votre soif de savoir ! -------------------- I Présentation . . | -------------------- 1/Objectf du firewall . ----------------------- Les firewalls ont obtenu une grande renommée en matière de sécurité sur Internet . Ils ont deux objectifs : Þ Protéger le réseau interne contre les tentatives d'intrusion provenant de l'extérieur . Þ Limiter et vérifier les connexions provenant du réseau interne vers extérieur . 2/Fonctionnement du Firewall . ------------------------------ Le principe du firewall est relativement simple . A l'origine un firewall est un système comportant deux interfaces réseau . (Je vous passe l'explication bidon du mot qui en fait nous vient de l'automobile) _________________________ | | | | ____________________ | | _________________ |reseau interne | | | | | |que l'on souhaite | | Internet |-----| Firewall |-------|proteger contre | | | |_______________| |les mechants | | | |__________________| |_______________________| Remarque : Il se peut que l'isolement de la totalité du réseau ne soit pas nécessaire . A ce moment le réseau à sécurisé est relie au sous réseau par un FW et le sous réseau est relié à Internet par un routeur . Dans ce cas la topologie ressemblerait plus à ça : _________________ _____________ ____________________ | | |reseau ou | |reseau interne | | | _________ |il ya les | |que l'on souhaite | | | | | |ordis des | __________ |proteger contre | | Internet |--|routeur|--|secretaires| | |-|les mechants | | | |_______| |___________|--|firewall| |__________________| | | |________| |_______________| Pour la suite on prendra le premier cas , celui ou l'on souhaite protéger tout le réseau local . On a en fait une interface interne reliée au réseau local et une interface externe reliée à Internet . L'ordinateur firewall peut atteindre à la fois le réseau protégé et Internet . Le réseau protège ne peut atteindre Internet et Internet ne peut toucher le réseau protège . 3/Principale différence entre un FW et un routeur IP . ------------------------------------------------------ Le routeur prend en charge les paquets jusqu'à la couche IP. Le routeur transmet chaque paquet en fonction de l'adresse de destination du paquet et de la route vers la destination précisée dans la table de routage . Par contre le firewall ne transmet pas les paquets . Le pare feu accepte les paquets et les prend en charge jusqu'à la couche application . -------------------------- II Les différents types .| -------------------------- 1/Filtres de paquet . --------------------- Un firewall de ce type inspecte tous les paquets qu'il recoie et regarde s'ils correspondent aux règles préalablement établis. S'il respecte les règles il est accepté sinon il est rejeté . Les critères des règles peuvent être par exemple l'adresse IP , les ports sources et destination contenu dans les paquets . 2/ Les Proxy . -------------- Lorsqu'un firewall de type proxy est utilisé sur un réseau , il n'y a aucune connexion directe entre les systèmes du réseau local et le réseau Internet . Les machines internes se connectent en fait au firewall pour lui demander un service . Après le FW se charge de relayer la requête au serveur Internet puis de renvoyer la réponse au client interne 3/Les hybrides . ---------------- La je peux pas dire grand chose dessus . ----------------------- III Filtre de paquet .| ----------------------- ÞLa technologie de filtre de paquets est incluse dans le noyau de Linux . Le filtre doit agir dans la pile IP du système . Pour utiliser cette technique vous allez devoir une fois de plus recompiler le noyau (Youpi vous allez bien vous marrez ) et répondre YES aux questions suivantes : IP : forwarding/gatewaying (CONFIG_IP_FORWARD) YES IP : firewalling (CONFIG_IP_FIREWALL) YES IP : firewall packet logging (CONFIG_IP_FIREWALL_VERBOSE) YES Le noyau compilé , installé , redémarré vous allez être en mesure de configuré le FW. ÞPour cela on va utilisé ipfadm . La syntaxe générale est : ipfwadm -A commande paramètres [options] ipfwadm -I commande paramètres [options] ipfwadm -O commande paramètres [options] ipfwadm -F commande paramètres [options] ipfwadm -M [-l ou -s] [options] Comme vous venez de le voir il y a cinq catégories : -A configuration de l'accounting (compatibité des paquets atteignant le système) . -I règles à appliquer aux paquets TCP/IP en entrée . -O règles à appliquer aux paquets TCP/IP en sortie . -F règles à appliquer aux paquets TCP/IP à router d'une interface à une autre . -M administration de l'IP Masquerading . Perso je pourrais vous parler que des categories I , O , F , M. ipfwadm possède de très nombreuses options que je vais pas décrire ici par ce j'ai pas envie ! Lisez la doc Linux . ÞAvant de créer toute règles de filtre IP , vas falloir définir des règles de sécurité . Par exemple pour ma machine on va dire : n Toute connexion du réseau internet vers une machine interne est interdite . n De extérieur , on doit avoir accès au serveur de messagerie et au service DNS du firewall . On va dire qu'on a un réseau interne de type 193.1.1.0/24 et qu'on est relié à un sous réseau de type 193.1.2.0/24 (entre le FW et le routeur) . Le FW ayant pour adresse 193.1.1.254 en interne (eth0) et 193.1.2.1 en externe (eth1) . Je vais maintenant dire quelques uns des filtres que j'applique -ipfwadm -O -p accept La règle par défaut des paquets en sortie est accept (-p représente l'action par défaut) - ipfwadm -I -p deny La règle par défaut des paquets en entrée est deny . -ipfwadm -F -p deny La règle par défaut des paquets à router en entrée est deny . -ipfwadm -F -a accept -S 193.1.1.0/24 -D0/0 -P tcp Autorisation pour router tous les paquets TCP provenant de l'extérieur . -ipfwadm -I -a deny -S 193.1.1.0/24 -D0/0 -W eth1 Cette commande sert à lutter contre le SPOOFING (changer son adresse IP) en effet cette règle dit que tous les paquets qui rentrent dans le sous réseau sécurisé et qui ont une adresse source correspondant à une adresse du sous réseau (ce qui n'est pas logique) doivent être rejeté ! -ipfawadm -I -a accept -P udp -S0/0 -D 193.2.1.1 53 -ipfawadm -I -a accept -P tcp -S0/0 -D 193.2.1.1 53 Ces mesures disent que les accès au serveur DNS (port 53) sont accessible de n'importe où . -ipfawadm -I -a accept -P udp -S0/0 -D 193.2.1.1 25 Accès au serveur SMTP du firewall de n'importe où . Malheureusement on retrouve là le plus grand inconvenient des FW . En effet dans l'état actuelle système on ne pourra pas faire fonctionner un client FTP du réseau interne avec un serveur situé à l 'extérieur . Le protocole FTP prévoit l'établissement d'une connexion du serveur FTP vers le client (du port 20 -> port > 1024) Mais il y a des solutions . - Utiliser le client FTP en mode passif (A ce moment le client établit une connexion vers le serveur ftp) - Utiliser un proxy(voir section suivante) installé sur le FW qui relaiera les requêtes de l'intérieur vers extérieur . - Utiliser l'IP masquerading . - Ou alors rajouter cette règle ipfwadm -F -a accept -P tcp -S0/0 20 -D 193.1.1.0/24 1024-65535 Remarque intéressante : Si vous tombez sur un système avec une règle de ce type , vous pouvez en profitez , en effet cette règle expose les services du réseau interne qui écoutent sur un port >1024 . A partir de la vous avez plus qu'a fait partir un paquet du port 20 de votre machine vers un service . Beaucoup de services tournent sur ce port . Par exemple pour sur les ports 6000vous avez les services X-Windows . S'ils n'ont pas ete protege correctement vous pouvez matter ce que fait le mec ! Vous pouvez memes voir les toubhes frappees , les programmes lancees . Si vous faites telnet dessus vous aurez je pense l'effet d'un denial of service ; l'ecran va se geler , le sys va ralentir ... Mais il y a plus rigolo ! SI vous vous y connaissez un peu en programmation utilisez la fonction XOpenDisplay() , si la fonction retourne NULL alors c'est securise sinon ... char *hostname; if (XOpenDisplay(hostname) == NULL) { printf("Loupe : %s\n", hostname); } else { printf("Ca marche : %s\n", hostname); } Il y a a autre chose auquel il faut penser . Normalement la route qu'emprunte un paquet de se source a sa destination est determinee par les routeurs qui se trouvent entre eux . En fonction de l'adresse de destination et de leur table les routeurs se chargent de dirigier les paquets . Mais dans une trame TCP/IP , il y a une option qui porte le nom de " source routing " qui est peu utilisee . En fait on l'utilise dans le debuggage des reseaux pour trouver les problèmes . Le truc c'est que si vous envoyez un paquet en faisant croire qu'il vient de l'interieur , normalement les routeurs ne devrait pas l'ammener au FW mais le probleme la c'est qu'ils le font avec cette option . En plus c'est pas hyper du a faire ! Mais normalement il y a des options pour desactiver le "source routing " . Note : n'oubliez pas de configurer les clients de telle façon que le routeur par défaut soit le FW . --------------------- IV IP MASQUERADING .| --------------------- ÞC'est une technique de plus en plus utilisée . Elle consiste à masquer totalement l'adressage IP du réseau interne ( On peut donc utiliser des adresses IP privées ) . Ainsi chaque paquet qui traverse le firewall est modifié pour faire croire qu'il n'y a qu'un seul système connecté . Tout le réseau interne partage ainsi l'adresse IP (externe) du FW . ÞInstallation : Bon beh va falloir recompiler le noyau (c'est la fête !) et répondre YES aux questions : IP : forwarding/gatewaying (CONFIG_IP_FORWARD) IP : firewalling (CONFIG_IP_FIREWALL) IP : firewall packet logging (CONFIG_IP_FIREWALL_VERBOSE) IP : masquerading (CONFIG_IP_MASQUERADE) IP : ICMP masquerading (CONFIG_IP_MASQUERADE_ICMP) (Répondez oui que si le FW doit router les paquets ICMP) ÞMaintenant vous allez être en mesure d'utiliser une autre des 5 options d'ipfwadm : l'option -M . Pour cela utiliser l'option -l qui liste les connexions qui utilisent l'IP masquerading et -s qui fixe le timeout . Pour autoriser le masquerading il faudra les règles suivantes - ipfwadm -F -p deny - ipfwadm -F -a masquerade -S 192.10.10.0/24 -D0/0 V PROXY . ÞD'après ce que j'ai lu et ce qu'on m'a dit la meilleure solution pour utiliser une machine Linux en proxy consiste à utiliser l'ensemble d'outils qu'offre TIS . Ils fournissent un package connu sous le nom de FW toolkit . Vous pouvez le telecharger sur le site Web de TIS http ://www.tis.com/docs/products/fwtk/index.html ÞInstallation Bon comme vous allez être un Proxy , il va falloir forcement désactiver la fonction de routeur de Linux . Pour cela on recompile le noyau en répondant NO au forwarding/gatewaying (CONFIG_IP_FORWARDING) . Vous êtes pas obligé de mettre cette option mais si vous ne le faites pas les machines du réseau interne seraient directement accessibles de l'extérieur à travers les possibilités du FW . Si l'IP forwarding est laisse , alors la il y a une faille mais la je connais pas du tout ,en fait la solution serait de downer le firewall , ainsi le FW ne marcherait plus mais le noyau lui continuerait a router les paquets sans suivre les règles ! Pour ça , il y a des solutions diverses et pas très gentilles comme le SYN flooding et autres attaques barbares . Bon vous compilez les outils TIS en suivant les instructions . ÞConfiguration La table netperm réside dans le fichier /usr/local/etc/netprem-table . Cette table décrit la configuration principale de tous les composants du Trusted Firewall Toolkit . Quand une des applications est lancée elle va chercher sa config dans cette table ÞDescription : -Netacl : Cette application permet de donner l'accès aux différents services TCP . Ce programme se démarre depuis le super-démon inetd . Si par exemple on ajoute au fichier /etc/inetd.conf telnet stream tcp nowait root /usr/local/etc/netacl telnetd Avec ca quand une requête atteint le port ftp du système netacl se démarre avec comme paramètre telnetd . Mais avant que le démon soit lance le logiciel vérifie que la requête est valide selon la table . Par exemple si je veux autorise aux personnes de mon réseau interne de se connecter au telnet du FW faudra ajouter : netacl-telnetd : permit-hosts 193.1.1.* -exec /usr/sbin/in.telnetd (note 193.1.1.* équivaut à 193.1.1.0/24) Après on a aussi tous les logiciels qui implementent un relais pour les services . En fait le client fait d'abord une requête au service du FW puis de la fait une requête pour se connecter au site extérieur . Selon les règles du proxy cette connexion sera refusée ou acceptée . -tn-gw : relais pour le service telnet . -ftp-gw : relais pour le service ftp . -rlogin-gw : relais pour le proxy rlogin . -http-gw : relais pour client HTTP et gopher .( pratique pour empêcher certaines applications JAVA ) .... Il y en a d'autres mais je les connais pas tous donc pour plus de renseignement allez voir vous même ! exemple de config de /usr/local/etc/netperm-table : tn-gw : deny-hosts * -dest 193.1.1.* Interdiction a ces machines d'accéder au service telnet . tn-gw : permit-hosts 193.1.1.25 autorise la machine 193.1.1.25 a accéder au service telnet . Pas compliqué et je vous jure que c'est incroyable tout ce que l'on peut faire et les espèces de trou dans la sécurité que ca peut faire ! ---------------------------------------------- VI Assainissement et protection du Firewall .| ---------------------------------------------- Bon vous avez compris , quand on veut attaquer un système qui possède un FW il y a pas 36 choix il faut attaquer le FW . Alors reste plus qu'à trouver les points faibles et donc il faut vérifier la protection de cette machine . On va maintenant voir comment on assainie un Firewall . Premièrement, regardez le fichier /etc/inet.conf. Ce fichier est ce qu'on appelle un "super-serveur". Il lance un tas de démons serveurs sur demande . Il contient la liste des services offerts . Il faut enlever tous les services qui ne sont pas parfaitement obligatoire comme NIS, NFS, rsh, rcp, netstat,systat,tftp,bootp et finger... NOTE qui peut faire gagner du temps : Il n'est pas nécessaire de tout désactiver. Pour désactiver un service, placez simplement un # devant. Ensuite envoyez un signal SIG-HUP au processus inetd, selon la syntaxe suivante : kill -HUP , ou pid est le numéro du processus inetd. (Pour avoir le PID si vraiment vous êtes débutant sous Linux , faites ps -uax |grep inetd ) . Cela force inetd a relire son fichier de configuration (inetd.conf) et a se relancer . Petite astuce : Si TFTP est ouvert tenté le coup , ce protocole permet de transférer des fichiers comme ftp mais s'appuie sur le protocole UDP. Il est donc moins sur et ne peut servir que pour les fichiers de petite taille . Mais surtout il ne demande pas de MOT DE PASSE ET DE COMPTE UTILISATEUR ! Donc tout utilisateur qui a accès au port 69a accès à tous les fichiers lisibles par le démon correspondant . Il y a peut être de bonnes infos à prendre . tentez ca : evil % tftp tftp> connect victim.com tftp> get /etc/passwd /tmp/passwd.victim tftp> quit Pour la sécurité Il faut aussi bien évidemment supprimer tous les comptes utilisateurs inutiles . Il faut aussi supprimer tous les package installés qui n'ont rien à faire sur un firewall comme X window , les services NFS et Samba , les jeux (OK c'est discutable pour le dernier ) ..... Exemple type de machine ou on installe un firewall : Je vais prendre mon PC , un 166MMX , 32 Mo de Ram et une partition de 800 Meg pour Linux avec une connexion PPP a un fournisseur Internet (ça je l'ai pas encore L ) par un modem 36,6 kbps. Pour en faire un firewall , On ajoute un carte ethernet compatible NE2000. Il est alors connecte a trois autres PC . Et voilà un firewall typique . ÞPour protéger le firewall (en effet c'est lui qui va se prendre dans la gueule toutes les attaques) il faut utiliser un filtre de paquet . Pour faire ca on recompile le noyau avec ces options : IP : forwarding/gatewaying (CONFIG_IP_FORWARD) NO IP : firewalling (CONFIG_IP_FIREWALL) YES IP : firewall packet logging (CONFIG_IP_FIREWALL_VERBOSE) YES On s'inspira des règles sur le filtrage des paquets exposé dans le III notamment celle contre le spoofing ! tromh@yahoo.com www.altern.org/trom Greetings : C-A, R3Z0 , Kortex agency , i-e , tous les gars sur #hack.fr (undernet)