Sécurisation d’un serveur Asterisk. Rapport de Stage Cheminade julien Sécurisation d’un serveur de téléphonie Asterisk 2 Sommaire I Introduction ......................................................................................................................................... 4 Remerciement ............................................................................................................................................................. 4 Présentation du stage ................................................................................................................................................. 4 Présentation des objectifs de mon stage .................................................................................................................. 5 Problématique et objectifs du rapport ...................................................................................................................... 5 Diagramme de Gantt ................................................................................................................................................. 5 Annonce de plan ........................................................................................................................................................ 5 II Présentation de l’entreprise ............................................................................................................. 6 Activité de PobRun ................................................................................................................................................... 8 Organigramme de l’entreprise .................................................................................................................................. 9 III Sécurisation d’un serveur Asterisk ............................................................................................ 10 Mission et objectifs du projet .................................................................................................................................. 10 Asterisk autocommutateur téléphonique priver .................................................................................................... 11 Définition de l’utilisation d’Asterisk. ............................................................................................... 11 Installation d’Asterisk ........................................................................................................................ 12 Configuration d’Asterisk ................................................................................................................... 12 Sip.conf .............................................................................................................................................. 13 User.conf ............................................................................................................................................ 13 Extention.conf .................................................................................................................................... 14 Logger.conf ........................................................................................................................................ 17 Utilisation d’Asterisk dans le projet ................................................................................................ 18 Fail2ban : analyseur de fichier log ......................................................................................................................... 18 Définition de l’utilisation de Fail2ban ............................................................................................ 18 Installation de Fail2ban .................................................................................................................... 19 Fail2ban : Les prisons « JAIL ». ........................................................................................................ 20 Fail2ban : les fichiers d’action. ........................................................................................................ 23 Fail2ban : Les Filtres. ........................................................................................................................ 27 Définition des Filtres pour les log d’Asterisk. ................................................................................. 27 Utilisation de Fail2ban dans le projet ............................................................................................. 29 Iptables, Pare-feu système de Linux ....................................................................................................................... 29 Définition du fonctionnement d’Iptables ........................................................................................ 29 Utilisation d’Iptables dans le projet. ................................................................................................ 31 MySQL : Le système de gestion de base de donnée relationnelle libre ............................................................. 32 Définition de l’utilisation de MySQL ............................................................................................... 32 Utilisation de MySQL dans le projet ............................................................................................... 32 Installation de MySQL ....................................................................................................................... 33 Interface d’administration phpMyAdmin ....................................................................................... 33 Schéma base de données ................................................................................................................. 34 Implémentation de la base de données ................................................................................................................. 35 Script d’implémentation de la base de données. ........................................................................... 35 Utilisation du script dans le projet ................................................................................................... 39 IV Conclusion ....................................................................................................................................... 40 V Test ..................................................................................................................................................... 41 VI Annexes ............................................................................................................................................ 43 Sécurisation d’un serveur de téléphonie Asterisk 3 I Introduction Remerciement Avant tout développement sur l’expérience professionnelle que ce stage a pu m’apporter je souhaite commencer ce rapport par des remerciements, à l’ensemble des employés de l’entreprise PobRun pour leurs conseils et tout ce qu’ils ont pu m’apprendre lors de ma période de stage. Aussi, je remercie Mr Pierre Olivier Bonnet, mon maître de stage qui m’a formé et accompagné tout au long de cette expérience professionnelle avec beaucoup de patience et de pédagogie. Présentation du stage J’ai effectué mon stage du 5 janvier 2015 au 13 février 2015 dans l’entreprise PobRun située à Brioude (43). Plus largement, ce stage a été pour moi d’appréhender la sécurité sur un serveur de téléphonie Asterisk grâce à l’utilisation des fichiers de log (historique d’évènement) puis à l’implémentation d’une base de données MySQL grâce à l’utilisation de ces derniers. Au-delà d’enrichir mes connaissances sur la sécurité et les bases de données, ce stage m’a permis de comprendre que les solutions informatiques enseignées en cas d’école ce comportent bien différemment lorsqu’elles ce retrouvent placé dans un environnement de production. Sécurisation d’un serveur de téléphonie Asterisk 4 Présentation des objectifs de mon stage Mon stage dans l’entreprise POBRUN a consisté essentiellement à la mise en place de procédures de sécurité afin de renforcer cette dernière sur les serveurs de téléphonie que l’entreprise propose à ses clients professionnels. Problématique et objectifs du rapport L’élaboration de ce rapport a pour principale source les différents enseignements tirés de la pratique journalière des tâches auxquelles j’étais affecté. Enfin, les nombreux entretiens que j’ai pu avoir avec les employés des différents services de la société m’ont permis de donner une cohérence à ce rapport. Diagramme de Gantt Annonce de plan En vue de rendre compte de manière fidèle et analytique des 6 semaines passées au sein de l’entreprise PobRun, il apparaît logique de présenter à titre préalable l’entreprise qui m‘a accueillie lors de mon stage puis je présenterais les missions et tâches que j’ai pu effectuer au sein de la société, ainsi que les nombreux apports que j’ai pu en tirer dans une conclusion. Sécurisation d’un serveur de téléphonie Asterisk 5 II Présentation de l’entreprise Le cabinet d’ingénieries PobRun est spécialisé dans les solutions de collaboration pour les entreprises et pour les équipements de salle de classe dans l’éducation. Le bureau d’étude travaille pour proposer aux professionnels les solutions les plus performantes en rapport à leur corps de métier, et l’équipe technique et de formation accompagne ces professionnels dans l’intégration de ces technologies. PobRun a été créée en 2007 à Brioude (Haute-Loire) par Pierre-Olivier Bonnet. Cette société propose aux entreprises un éventail de prestation en informatique, téléphonie, réseaux, développement et statistique afin que celle-ci améliore leurs performances. L’entreprise élabore des produits pour deux types de clientèle. Tout d’abord à l’échelon local pour les PME; avec par exemple la création d’un système de gestion électronique de documents, la mise en place d’infrastructure réseau ou de serveurs de téléphonie, puis à l’échelon régional pour l’éducation nationale (primaire, secondaire et supérieur), avec par exemple la conception d’un serveur d’usage des écoles primaires, un laboratoire de langue et en 2010 le lancement de PobEdu, une filiale de l’entreprise propre au projet lié au monde de l’éducation. Sécurisation d’un serveur de téléphonie Asterisk 6 En décembre 2010, PobRun a obtenu l‘accréditation gold du constructeur de tableaux interactifs SMART (47% du marché mondial). Seules 6 entreprises en France ont cette distinction. Seule entreprise en Auvergne ayant cette accréditation, PobRun pose des tableaux interactifs SMART Board 885ix. En 2010, les dirigeants de PobRun décident de créer une nouvelle entreprise : Voganet. Voganet est un Fournisseur d’Accès à Internet au même titre qu’Orange, SFR … Voganet est inscrit au registre de l’ARCEP (Autorité de Régulation des Communications Électroniques et des Postes). Voganet permet de rassembler toutes les activités liées à la fourniture d’accès à internet, les lignes téléphoniques (via internet ou le réseau Sécurisation d’un serveur de téléphonie Asterisk 7 téléphonique commuté), mais aussi toutes les prestations de câblage ou de pose d’antennes. Activité de PobRun Pobrun propose un large choix de solution pour les collectivités, les entreprises ou l’éducation, entre autres : • Fourniture d’accès à internet et téléphonie sur IP grâce à Voganet • Déploiement de réseau filaire / sans-fil • Téléphonie numérique, analogie ou sur IP • Vidéo surveillance • Développement de site web et d’application à la demande • Sauvegarde de données, cryptage • Maintenance de parc informatique • Montage et configuration de PC à la demande • Installation de serveur professionnel • Installation de tableau blanc interactif et vidéo projecteur interactif • Serveur dédié à l’éducation (filtrage internet, mail interne, partage de fichier) Sécurisation d’un serveur de téléphonie Asterisk 8 Organigramme de l’entreprise Bourret Carine Secrétaire comptable Besse Hugo Technitcien Bonnet Pierre-‐Olivier Gérant Peghaire Benoit Responsable technique De Bouchard Amandine Consultante éducaGon / graphiste Beaudon Bruno Technicien Bellut Maxime Technicien Davy Labrosse Stagiaire Cheminade Julien Stagiaire L’entreprise est composée de : Ø Pierre-Olivier BONNET : fondateur-dirigeant de PobRun et chef de projet. Ø Carine BOURET : secrétaire comptable. Ø Amandine DE BOUCHARD : graphiste et animatrice du site jolicours (http://www.jolicours.com/) Ø Benoit PEGHAIRE : responsable technique. Ø Hugo BESSE : technicien intégrateur. Ø Bruno BEAUDON : responsable de l’agence de Vic sur Cère Ø Maxime BELLUT : technicien à l’agence de Vic sur Cère J’ai été accueilli au sein de l’agence de Brioude par Monsieur Pierre-Olivier BONNET. Sécurisation d’un serveur de téléphonie Asterisk 9 III Sécurisation d’un serveur Asterisk Mission et objectifs du projet La mission qui m’à été confié est la sécurisation d’un serveur de téléphonie open source nommé Asterisk grâce à l’analyse des fichiers log. Cette Mission a pour but d’augmenter la sécurité sur les infrastructures liées à la téléphonie sur IP (VoIP). Pour proposer une solution, j’ai procédé à l’utilisation des technologies suivantes : • Asterisk : Serveur de téléphonie open source. • Fail2ban : Analyseur de logs open source. • Iptables : fire-wall système de Linux étroitement lié à l’utilisation de Fail2ban. • Mysql : Système de gestion de base de données, utilisé ici pour sauvegarder toute trace des actions de Fail2ban. Le problème principal est que des utilisateurs étrangers au service tentent d’utiliser le serveur de téléphonie mis en place chez un client grâce à l’utilisation de dictionnaire virtuel (Brut force) afin d’usurper l’identité d’un utilisateur et ainsi passer des communications téléphoniques de n’importe où vers n’importe quelle destination. Vu le coût des télécommunications à l’étranger ces attaques représentent un réel danger pour les entreprises qui peuvent se voir facturer des communications très onéreuses dont ils ne sont pas les auteurs. Sécurisation d’un serveur de téléphonie Asterisk 10 Afin de mener à bien ce projet, il a fallu que je prenne en mains de nombreux programmes qui m’étaient inconnus, je détaillerais pour chacun d’eux leur fonctionnement, leur configuration et l’utilité qu’ils ont au sein de la solution apportée. Asterisk autocommutateur téléphonique priver Définition de l’utilisation d’Asterisk. Asterisk est une plateforme de téléphonie open source conçu principalement pour fonctionner sous Linux. Asterisk combine plus de 100 ans de connaissances en téléphonie dans une suite robuste d’application de télécommunication étroitement intégrée. Sa puissance réside dans sa nature personnalisable complétée par une conformité aux normes inégalées. Aucun autre PABX (autocommutateur téléphonique priver) ne peut être déployé de tant de façon créative. Asterisk est la base de ce projet, étant le serveur de téléphonie que PobRun installe chez ses clients c’est ce dernier qui doit être sécurisé afin de pouvoir proposer un service plus sécurisé. Tous les programmes présentés ici sont installés sur une machine Linux fonctionnant sous Debian sans interface graphique. Sécurisation d’un serveur de téléphonie Asterisk 11 Installation d’Asterisk L’installation d’Asterisk se fait en quelques lignes de commandes, premièrement il faut télécharger le paquet depuis les répertoires de Debian grâce à la ligne de commande suivante. Une fois cette commande exécutée aptitude va chercher sur internet le paquet stable d’Asterisk, ces dépendances et va procédé à son installation. Une fois le téléchargement et l’installation effectués par aptitude, il faut démarrer le serveur Asterisk avec la ligne suivante : Configuration d’Asterisk Après cette commande le serveur Asterisk est démarré La configuration d’Asterisk repose sur les fichiers de configuration suivants : • /etc/asterisk/sip.conf : Configuration globale d’Asterisk • /etc/asterisk/user.conf : Configuration des utilisateurs • /etc/asterisk/extention.conf : Configuration du Dial plan • /etc/asterisk/logger.conf Sécurisation d’un serveur de téléphonie Asterisk 12 Sip.conf Sip.conf : Le fichier sip.conf commence avec une section [général], qui contient les paramètres du canal SIP et les options par défaut pour tous les utilisateurs (user) et pairs (peers) définis dans sip.conf Chaque connexion est définie comme un utilisateur, un peer ou un ami. Un type utilisateur (user) est utilisé pour authentifier les appels entrants, un type pair (peer) est utilisé pour les appels sortants et un type ami (friend) est utilisé pour les deux. Sur la capture suivante, mon fichier sip.conf permet d’utiliser 2 téléphones SIP afin de pouvoir tester les fonctionnalités d’Asterisk : User.conf User.conf : le fichier user.conf permet de créer des utilisateurs et de définir pour eux des options de configurations qui leur sont propres. Afin d’utiliser certaines fonctionnalités j’ai donc créé des utilisateurs. Voici la configuration de l’un d’eux Sécurisation d’un serveur de téléphonie Asterisk 13 Chaque compte SIP défini plus haut sont rattachés à des contextes qui permettent de définir une portion d’appel qui est ainsi cloisonné, ce qui se passe dans une portion est indépendant des autres portions. Il est important de noté que : • Les espaces sont à proscrire dans le nommage des contextes. • Le nom d’un contexte peut contenir des lettres minuscules ou majuscules, des chiffres, le tiret, et l’underscore ‘’_’’. • Lors de l’installation du serveur Asterisk, un fichier extension.conf est automatiquement créé mais il vaut mieux repartir d’un fichier vierge afin de bien comprendre le plan. Extention.conf Extention.conf : Le fichier extention.conf représente le plan de numérotation qui est le cœur du système Asterisk, il définit comment Asterisk gère les appels entrants et sortants. En un mot, il consiste en une liste d’instructions ou d’étapes qu’Asterisk va suivre. Contrairement aux autres PABX, le plan de numérotation (Dial plan) d’Asterisk est entièrement paramétrable. Sécurisation d’un serveur de téléphonie Asterisk 14 Voici sur la capture suivant un plan de numérotation très basique que j’ai fait afin d’utiliser les fonctions d’Asterisk pour mes tests. L’on peut voir que lorsqu’un utilisateur joint le serveur de téléphonie il est contraint à suivre une suite d’actions définie dans le plan de numérotation. Il existe des extensions spéciales : • L’extension ‘’start s’’ : cette extension est utilisée quand un appel inconnu arrive dans un contexte ; c’est le cas d’un appel entrant en provenance de l’extérieur. • L’extension « invalid I » : Contrairement à ce que nous pouvons penser, cette extension n’est pas utilisée dans un cas de réponse invalide (cas où un appel ne trouve aucune correspondance dans un contexte) mais lors de la mise en place d’IVR (Interactif Voice Respond). Elle est utilisée lorsqu’un utilisateur doit taper un chiffre sur le clavier du téléphone (tapez 1 pour le service client, 2 pour le service marketing, ) Sécurisation d’un serveur de téléphonie Asterisk 15 Le Dial plan est composé de nombreuses applications, ou fonctions : • Answer() : Réponds à un canal qui sonne. On l’utilise très souvent comme première application pour une extension. exten => 1001, 1, Answer() • Playback() : Joue un fichier sonore à destination de l’interlocuteur. Attention à ne pas donner d’extension au fichier son. L’application Background() est similaire. exten => 1001, 2, Playback (fichier_son). • Hangup() : Permets de raccrocher le canal en cours. Cela permet de libérer un canal proprement. Exten => 1001,3 Hangup() • Echo() : Permets d’émettre un écho à l’interlocuteur. L’appelant sort de ce mode en appuyant sur #. • Goto() : Application qui permet d’aller à une extension, une priorité ou à un contexte, fourni en paramètre. • Dial() : Application fondamentale qui fait sonner l’extension passée en paramètre. exten => 1001, 1, Dial(SIP/1001) • Voicemail() : Permets d’appeler la boite vocale de l’appelé. L’appelant peut alors laisser un message Sécurisation d’un serveur de téléphonie Asterisk 16 Logger.conf Logger.conf : Un autre fichier de configuration est très important pour la suite du projet, situé dans /etc/asterisk/logger.conf, ce fichier permet de paramétrer quelles informations le serveur Asterisk écrit dans les logs. Depuis ce fichier il est possible de choisir quelles informations vont être contenu dans un fichier de log précis Sur la capture ci-dessus l’on peut voir un extrait du fichier logger.conf de mon serveur Asterisk. Dans l’encadré [general] : est définit le format de la date que les logs afficheront, ce paramètre est très important dans la suite car un bon formatage des logs facilitera le travail de Fail2ban. Dans la parti [Logfiles] sont définit les paramètres des fichiers log produit par Asterisk, ainsi la ligne « console => notice,warning,error,debug » nous informe que les informations affichées dans la console du serveur Asterisk seront les messages concernant les informations suivantes. Sécurisation d’un serveur de téléphonie Asterisk 17 Full => notice,warning,error,debug,verbose : Représente le fichier log produit par Asterisk ou toutes les informations seront écrite, c’est sur ce dernier que Fail2ban (que nous verrons plus tard) travail. Utilisation d’Asterisk dans le projet Le But du projet étant la sécurisation d’un serveur Asterisk grâce à ces fichiers logs, l’installation de ce dernier est essentielle afin de pouvoir mettre en place une solution et de la tester. Pour moi ce fut une belle découverte, n’ayant aucune compétence dans le monde de la téléphonie, cette partie du projet m’a permis d’appréhender et de comprendre le fonctionnement de la VoIP et les principaux éléments de configuration d’un central de téléphonie aussi complet que peu l’être Asterisk. Fail2ban : analyseur de fichier log Définition de l’utilisation de Fail2ban Fail2ban est un logiciel libre qui lit les logs de divers services (SSH, Apache, FTP, ...) à la recherche d’erreur d’authentification répétée où autres, et effectue des actions telles que l’ajout de règles pour bannir l’adresse IP de la source ou l’envoie de mail afin d’informer d’un mauvais fonctionnement du service. Sécurisation d’un serveur de téléphonie Asterisk 18 Le but de Fail2ban est d’empêcher une attaque qui, par force brute, trouve un identifiant/mot de passe permettant l’accès à un service. Les postes serveur ne dorment jamais, ils sont la cible des attaques automatique en provenance de partout. Et sans un tel outil, qui sanctionne les tentatives, plus un serveur est rapide à répondre, plus il est menacé. Installation de Fail2ban L’installation de Fail2ban se fait grâce à la commande suivante : Une fois cette ligne de commande exécutée, aptitude va procéder au téléchargement du paquet et à son installation. La configuration de Fail2ban est séparée entre plusieurs fichiers de configuration : • /etc/fail2ban/fail2ban.conf • /etc/fail2ban/jail.conf • /etc/fai2ban/action.d/(fichier.conf). • /etc/fail2ban/filter.d/(fichier.conf). Fail2ban.conf : Ce fichier représente la configuration générale de Fail2ban, c’est ici que l’on va choisir le niveau d’information fournie par Fail2ban dans ces fichiers logs ainsi que l’endroit où ils sont stockés. Sécurisation d’un serveur de téléphonie Asterisk 19 Fail2ban : Les prisons « JAIL ». Jail.conf : Ce fichier de configuration représente tout l’intérêt de Fail2ban, c’est ici que sont définis des « jail » ou prison. Une prison correspond à un service qui est surveillé par Fail2ban. Dans l’extrait du fichier Jail.conf l’on peut voir que des paramètres de configuration sont définit par défaut sous l’encadré [DEFAULT]. Voici une petite description de ces paramètres : • Ignorip = : ce paramètre permet de spécifier si il y a des adresses IP de machine ou de réseaux auquel Fail2ban fait une exception concernant ces actions, si ces adresses ce retrouvent dans un fichier analyser par Fail2ban elles seront donc ignorées. • Bantime = : ce paramètre-ci permet de définir pour combien de temps une adresse IP sera bannie par défaut, ici 600 représente 10 minutes, car le temps est exprimé en seconde. Sécurisation d’un serveur de téléphonie Asterisk 20 • Marxerty = : ce paramètre définit le nombre de fois par défaut qu’une adresse IP est autorisé à produire une erreur avant d’être bannis par Fail2ban. • Destmail = : représente l’adresse à laquelle par défaut seront envoyé des mails pour la notification des bannissements de Fail2ban. • Mta = : cette option permet de définir quel service de mail sera utilisé si aucun autre n’est spécifié pour l’envoi des notifications. • Action = : ce paramètre permet de définir des actions par défaut que Fail2ban exécute lors du bannissement d’une adresse IP, elles sont définies dans le répertoire /etc/fail2ban/action.d que nous verrons plus loin. Une fois ces paramètres sélectionnés l’on ce retrouve devant la partie la plus importante du fichier de configuration ou sont défini les prisons [JAIL]. C’est ici que j’ai donc créé la prison pour le serveur Asterisk, je vais donc détailler sa configuration : Sécurisation d’un serveur de téléphonie Asterisk 21 • Enable = true : Cette option permet de dire à Fail2ban si la prison est activée, ici true permet de lui dire qu’elle doit l’être. • Filter = Asterisk : les filtres sont très important pour Fail2ban, ils permettent, grâce à des expressions rationnelles d’informer Fail2ban sur quelle ligne de logs l’on veut qu’il effectue son action, ils sont dans le répertoire « /etc/fail2ban/filter.d ». Je reviendrai sur la configuration des filtres dans la suite du rapport, car c’est une partie essentielle de la configuration de Fail2ban qui nécessite bons nombre d’explications. • Action = : Cette ligne est la aussi une partie très importante de la configuration de Fail2ban, car c’est ici que l’on va définir quelles actions va effectué Fail2ban lors du bannissement d’une IP. Ces fichiers se trouvent dans le répertoire « /etc/fail2ban/action.d/ ».Ayant besoin là aussi de beaucoup de précision sur ces actions j’y reviendrai plus tard dans le rapport. • Logpath : C’est ici que l’on informe Fail2ban sur quel fichier de log il doit effectuer ces analyses, ici est spécifié le fichier « /var/log/asterisk/full » que l’on a défini plutôt dans la configuration d’Asterisk. • Maxretray : Ce paramètre a le même rôle que dans la configuration générale des prisons, sauf que ce paramètre est propre a la prison dans le qu’elle il est défini. • Bantime : A lui aussi le même rôle que dans la configuration générale de la prison, sauf qu’il est lui aussi propre à la prison d’Asterisk. Sécurisation d’un serveur de téléphonie Asterisk 22 Fail2ban : les fichiers d’action. Action.d/ : Ici sont défini les fichiers d’action, ces fichiers représentent toutes les actions effectuées lors d’un événement notifier par Fail2ban, ces événements ce définissent en 4 parties : • ActionStart : Ici sont définies les actions effectuées lors du démarrage de la prison. • ActionStop : Ici, est défini quelles seront les actions effectuées par Fail2ban lors de l’arrêt de la prison. • Actioncheck : Action effectuée lors de n’importe quelle action par Fail2ban, cette dernière permet de vérifier le contenu de la table Iptables associée à la prison. • ActionBan : Dans la partie ActionBan, est défini une suite d’actions effectuées lors que fail2ban bannis une adresse IP. • ActionUnban : Ici sont définies les actions que fail2ban exécutent lorsque le « bantime » d’une IP arrive à échéance. Le Fonctionnement de Fail2ban est étroitement lié au firewall system de Linux Iptables, la plus par des actions d’un ficher action.d sont en réalité, des lignes de commandes passées à Iptables afin de gérer le blocage/déblocage d’une adresse pour un service donné. La liste des fichiers d’action.d est longue et permet de couvrir les actions sur bon nombre de secteurs, par exemple rajouter des règles propres à un protocole ou sur tous, ou bien sur un certain port ou bien tous. Les possibilités des fichiers d’action sont presque infinies, car l’on peut même y exécuter des scripts BASH, PHP, PYTON, PERL, … Sécurisation d’un serveur de téléphonie Asterisk 23 Si dessous voici un extrait d’un des fichiers d’action que j’ai appliqué à la prison d’Asterisk : Je vais apporter quelques précisions sur le comportement des actions qui sont effectuées depuis ce fichier, mais je reviendrai avec plus de précision sur Iptables et son fonctionnement dans la suite de ce rapport : ActionStart : • Iptables –N fail2ban-<name> : crée dans iptables une nouvelle chaine pour la prison fail2ban-asterisk. • Iptables –A fail2ban-<name> -j RETURN : joins une règle de retours de paquets sur la chaine iptables créée précédemment. • Iptables –I <chain> -p <protocol> -j fail2ban-<name> : Ajoute une règle à la table spécifier, en précisant sur quel protocole est appliqué cette règle. Sécurisation d’un serveur de téléphonie Asterisk 24 ActionStop : • iptables -D <chain> -p <protocol> -j fail2ban-<name> : efface la chaine fail2ban-<name> des chaines de filtrage d’iptable. • Iptables –F fail2ban-<name>: cette commande est équivalente au fait de supprimer toutes les règles une à une dans la chaine donnée. • Iptables –X fail2ban-<name> : cette option efface la chaine définie par l’utilisateur. ActionCheck : • Iptables –L –vn Fail2ban-<name> | grep –q fail2ban-<name> cette commande vérifie si les règles de la chaine crée par ActionStart dans iptables sont toujours actives. Sécurisation d’un serveur de téléphonie Asterisk 25 ActionBan : • Iptables –I fail2ban-<name> 1 –s <IP> -J DROP : cette commande permet d’ajouter une règle de bannissement d’IP dans la chaine d’iptables en précisant la source avec le raccourci <IP> et le comportement des paquets envoyés depuis cette source, ici DROP précise que tous les paquets provenant de cette adresse sont rejetés. • /etc/fail2ban/action.d/test2_1.sh : ici cette ligne vient exécuter le scripte test2_1.sh lors du bannissement d’une adresse IP, étant l’auteur de ce script je reviendrai sur son utilité plus loin dans le rapport. ActionUnban : • Iptable –D fail2ban-<name> -s <ip> -j DROP : commande qui permet de retirer une adresse IP de la chaine d’Iptables, donc de la dé-bannir Sécurisation d’un serveur de téléphonie Asterisk 26 Fail2ban : Les Filtres. Filter.d/ : ici sont définis les filtres que Fail2ban va utiliser afin de trouver des correspondances entre les erreurs de l’application surveillée et les filtres qui lui sont définis. Il y a autant de filtres que d’application à surveiller, par défaut de nombreux sont déjà présent afin de surveiller les services tels que SSH, FTP, Apache. Définition des Filtres pour les log d’Asterisk. Asterisk n’est pas compris dans les applications supportées par défaut j’ai donc du créer un fichier de filtre propre à Asterisk et sur le formatage de ces logs. Les filtres utilisent des expressions régulières afin de maximiser les correspondances avec les fichiers de log. Veuillez trouver si dessous le fichier de filtre que j’ai appliqué à Asterisk, je détaillerai les lignes de configuration et présenterai quelques exemples pour imager la correspondance entre les expressions régulières et les lignes présentent dans les logs. Sécurisation d’un serveur de téléphonie Asterisk 27 [INCLUDES] : C’est une partie du fichier de filtre qui permet de spécifier si l’on veut faire charger d’autre fichier de filtre avant ou après celui-ci définit par les mots clés <before> et <after>. Ici je fais charger un fichier commun à tous les filtres en amont afin d’utiliser certaines fonctions comme : • La définition du daemon ici Astreisk • Le log_prefix qui permet de définir pour tous les filtres un préfix commun à tous les logs. Quelques exemples de filtres. Chacun des filtres commence par le préfix puis est formaté de la sorte : ^(%(__prefix_line)s|\[\]\s*)%(log_prefix)s Call from '[^']*' \(<HOST>:\d+\) to extension '\d+' rejected because extension not found in context 'incoming'\.$ Je ne vais pas faire d’explication sur l’usage de caractères spéciaux utiliser dans les expressions régulières, mais sachez que leur but et de prévoir le plus de cas possibles pour les correspondances avec des lignes de logs de ce format-ci : Sécurisation d’un serveur de téléphonie Asterisk 28 NOTICE[2487]: chan_sip.c:22753 handle_request_invite: Call from '' (69.30.230.2:5083) to extension '009725592704059' rejected because extention not found in context 'incoming' C’est grâce à ce genre d’expression que Fail2ban fait la correspondance avec les lignes de logs et les filtres. Pour chacune des erreurs que l’on veut filtrer il faut définir une expression propre à la syntaxe de l’erreur à filtrer. Utilisation de Fail2ban dans le projet Ici Fail2ban est une part très importante du projet, car c’est lui, au travers d’expressions régulières qui va analyser les erreurs du serveur Asterisk et effectuer une action à chaque fois qu’une correspondance à était trouvée. Iptables, Pare-feu système de Linux Définition du fonctionnement d’Iptables Iptables est une solution complète de pare-feu pour le système GNU/Linux depuis le noyau 2.4, il remplace l’ancien ipchains pare-feu du noyau 2.2. Iptables permet de faire du « firewalling » à états (stateful), de la translation de port et d’adresse, du filtrage de niveau 2 et beaucoup d’autres choses. Iptables est fiable et dispose de très nombreuses options qui permettent de faire du filtrage très fin. Précisons dès maintenant que le module qui fournit au noyau Linux les fonctions de pare-feu, de partage de connexion internet et d’historisation du Sécurisation d’un serveur de téléphonie Asterisk 29 trafic réseau s’appelle Netfilter. Iptables est en fait juste l’outil qui permet à un administrateur de configurer Netfilter en mode utilisateur. Iptables est installé en standard sur de nombreuses distributions GNU/Linux récentes (kernel 2.4.x. ou supérieur). Iptables/Netfilter est composé de 3 tables principales qui sont ellesmêmes découpées en plusieurs types de chaines de filtrages : • Table NAT : Cette table est utilisée pour la translation d’adresse et de port. Elle se compose de 2 types de chaînes : PREROUTING qui permet de spécifier « à l’arrivée du pare-feu » et la chaîne POSTROUTING qui permet de spécifier « à la sortie du parefeu ». Les règles suivantes « cibles » peuvent être appliquées sur ces chaines : DNAT, SNAT et MASQUERADE. • Table FILTER : C’est la table par défaut lorsque l’on n’en spécifie pas. Cette table contient toutes les règles de filtrages, il existe 3 types de chaînes : FORWARD pour les paquets passant par le pare-feu, INPUT pour les paquets entrant et OUTPUT pour les paquets sortant. Les règles suivantes « cibles » peuvent être appliquées sur ces chaines : ACCEPT, DENY, DROP, REJECT. • Table Mangle : Le rôle principal de cette table est de modifier des paquets. En d’autres termes, elle est utilisée pour changer les champs de TOS, TTL, MARK,… sur les trames qui circulent par cette table. Il faut gardé en tête que les règles sont évaluées dans l’ordre, par défaut la table FILTER est vide et doit accepter tout. Aucune règle de translation n’est présente par défaut non plus. Sécurisation d’un serveur de téléphonie Asterisk 30 Quelques définitions concernant les termes abordés dans la présentation d’Iptables : • Chaîne : Une chaine est une suite de règles, qui sont prises dans l’ordre ; dés qu’une règle s’applique à un paquet, elle est déclenchée, et la suite de la chaîne est ignorée. • SNAT : permets de modifier l’adresse source du paquet • DNAT : Permets de modifier l’adresse de destination du paquet. • MASQUERADE : Une passerelle (gateway) transforme les paquets sortants passant par elle pour donner l’illusion qu’ils sortent de la passerelle elle-même par un port alloué dynamiquement ; lorsque la passerelle reçoit une réponse sur ce port, elle utilise une table de correspondance entre le port et les machines du réseau privé qu’elle gère pour lui faire suivre le paquet • Policy ACCEPT : permets d’accepter un paquet grâce à la règle vérifiée • Policy DROP : rejet d’un paquet sans message d’erreur si la règle est vérifiée. • Policy REJECT : rejet avec un retour de paquet d’erreurs à l’expéditeur si la règle est vérifiée. Utilisation d’Iptables dans le projet. Iptables est essentiellement utilisé par Fail2ban, c’est lui qui permet de bloquer l’accès des adresses IP bloqué par Fail2ban à notre serveur Asterisk au travers des fichiers contenus dans le répertoire Action.d. Sécurisation d’un serveur de téléphonie Asterisk 31 L’utilisation d’Iptables fut très ,instructive car elle m’a permis de comprendre comment agit le firewall système d’un environnement Linux. Son paramétrage peut s’avérer aussi précis que la portée des actions qu’il peut effectuer. MySQL : Le système de gestion de base de donnée relationnelle libre Définition de l’utilisation de MySQL MySQL est un système de gestion de base de données relationnelle. Il est distribué sous une double licence GPL et Propriétaire. Il fait partie des logiciels de gestion de bases de données les plus utilisées au monde, autant par le grand publique (application web principalement) que par les professionnels, en concurrence avec Oracle, Informix et Microsoft SQL serveur. MySQL supporte deux langages informatiques, le langage de requête SQL et le SQL/PSM (persistant Stored Modules). MySQL fait partie du quatuor LAMP (Linux, Apache, MySQL, PHP). Il appartient aussi à des variantes WAMP (windows) et MAMP (Mac OS). Le couple PHP/MySQL est très utilisé par les sites web et proposé par la majorité des hébergeurs web. Plus de la moitié des sites web fonctionnent sous Apache, qui est le plus souvent utilisé conjointement avec PHP et MySQL. Utilisation de MySQL dans le projet Ici MySQL est utilisée afin de stocker toutes les informations récupérées par Fail2ban lors du bannissement d’une adresse IP, il stocke l’adresse IP qui a était banni, le log pour lequel cette IP a été bannie ainsi que la date à laquelle cette dernière a été bannie. Sécurisation d’un serveur de téléphonie Asterisk 32 Installation de MySQL L’installation du serveur MySQL se fait grâce à la commande suivante. Une fois le paquet téléchargé apt procède à son installation, et vous demande par la suite de définir un mot de passe pour le compte utilisateur Root. Une fois cette option configurée MySQL semble être opérationnelle, mais j’ai choisi d’installer un serveur Apache afin de pouvoir utiliser Phpmyadmin pour faciliter les tâches d’administration de la base de données. Une fois le paquet téléchargé Aptitude s’occupe de son installation, une fois terminé il faut stopper et démarrer le service apache2. Interface d’administration phpMyAdmin Sécurisation d’un serveur de téléphonie Asterisk 33 Une fois le service apache2 redémarré vous pouvez vous connecter à l’interface phpmyadmin depuis votre navigateur en vous connectant à l’adresse xxx.xxx.xxx.xxx/phpmyadmin (ou xxx.xxx.xxx.xxx représente l’adresse IP de votre serveur) vous devez arriver sur cet écran si tout c’est bien passé lors de la configuration. Je ne vais pas détailler l’utilisation de phpMyAdmin car ce dernier est très intuitif et permet d’être pris en main assez facilement. Ci-dessous voici le schéma de ma base de données, elle est composée de deux tables et d’une clé étrangère qui gère les relations entre les adresses IP qui sont enregistrées dans la table adresse et les informations qui lui sont rattachées qui sont stockés dans la table raison. Une adresse IP est stockée une seule fois dans la table adresse, mais il est possible que cette adresse ait plusieurs entrées dans la table raison. Schéma base de données Sécurisation d’un serveur de téléphonie Asterisk 34 Afin de pouvoir implémenter la base de données à chaque bannissement d’une adresse IP par Fail2ban j’ai du rédiger un script en BASH, avec des requêtes SQL afin d’interroger et d’ajouter les informations dans la base de donnée. Je vais ci-dessous le présenter en détaillant l’intégralité des lignes de codes : Implémentation de la base de données Script d’implémentation de la base de données. Ici l’on peut voir la partie qui concerne la déclaration des variables : • Ip = $1 : ici l’on récupère le paramètre passé par Fail2ban au script qui consiste à récupérer l’adresse IP à l’origine de l’erreur repérée par fail2ban. • Log = ‘’$(grep $ip /var/log/asterisk/full | awk ’END{print}’)’’ : Cette ligne de commande me permet de récupérer la dernière ligne dans les fichiers log d’Asterisk qui contient la même IP que celle notifiée par fail2ban et donc celle qui est à l’origine de l’erreur. Sécurisation d’un serveur de téléphonie Asterisk 35 • Verif_ip = ’’SELECT ip FROM adresse WHERE ip LIKE ’$ip’ ;’’ : je passe une requête SQL dans une variable afin de pouvoir par la suite m’en resservir afin d’interroger la base de données pour savoir si l’adresse IP est déjà présente ou non dans la base de données. • Toor = ‘’’’’ : Je crée cette variable vide afin de pouvoir plus tard y stocker la réponse de la requête verif_ip et m’en resservir plus tard afin d’exécuter le test de présence ou non de l’IP dans la base. • User, Pass, db : Sont trois variables auxquelles j’attribue la valeur des identifiants de connexion à savoir, le nom utilisateur, le mot de passe et la base de données sur la quel les requêtes seront exécutées. • Mysql –u $user –p$pass –D $db –e ‘’$verif_ip’’ > ip_tmp : cette Ligne permet de ce connecter à la base de données, d’y exécuter la requête verif_ip et de récupérer le résultat de cette requête dans un fichier nommé ip_tmp. Présentation de la deuxième partie du script concernant l’ajout d’information dans la base de données pour une adresse IP déjà présente : Sécurisation d’un serveur de téléphonie Asterisk 36 • If [$toor =$1] : ici l’utilisation de la boucle conditionnelle « IF » va nous permettre d’effectuer l’action d’ajout d’information dans la base de données pour une IP déjà présente si la valeur de $toor est égale à la valeur $1 qui est l’adresse notifiée par fail2ban. Sinon si ces deux valeurs ne sont pas égales, la boucle « IF » effectuera l’action située dans la troisième partie du script qui consiste à ajouter l’adresse et ces informations dans la base de données. • #printf ‘’’’ : cette ligne placée en commentaire grâce au caractère ‘’#’’ n’est utile que lors que j’ai effectué les testes de mon script et me permet de savoir à quel endroit peut-ce trouver l’erreur si le script n’est pas exécuté correctement. • Mysql –u $user –p$pass –D $db << QUERY_INPUT : l’on ce connecte à la base de données grâce aux identifiants instanciés plus haut, et l’on redirige les commandes dans le flux de sortie ‘’QUERY_INPUT ‘’ qui permettra d’exécuter une suite de requêtes SQL. • BEGIN ; : initie un bloc de transaction qui permet que toutes les instruction apparaissant après la commande BEGIN soit exécutée dans une seule transaction jusqu’à ce qu’un COMMIT explicite soit exécuté. • INSERT INTO raison (id_ip) : cette instruction SQL permet de dire à la base de données que nous voulons insérer une valeur dans la table ‘raison’ dans le champ ‘’id_ip’’, ce champ est à remplir en premier, car il y a une contrainte de clé étrangère et il est directement liée au champ ‘’id’’ de la table ‘adresse’. Sécurisation d’un serveur de téléphonie Asterisk 37 • SELECT ip FROM adresse WHERE ip = ‘’$ip’’ ; : ici l’instruction suivante vient récupérer l’ ‘’id’’ de l’adresse IP dans la table ‘adresse’ qui correspond à l’adresse IP qui est égale à la valeur de la variable ‘’$ip ‘’ l’id récupéré est insérée dans le champ ‘’id_ip ‘’ de la table raison. • UPDATE raison SET log = ’’$log’’ WHERE id = LAST_INSERT_ID() ; : la requête suivante vient mettre à jour le champ ‘’log’’ de la ligne qui contient l’id de la dernière ligne insérer dans la base de données en y insérant le contenu de la variable ‘’$log’’. • COMMIT ; : ce mot clé vient mettre fin au bloc d’instruction débuté plus haut avec BEGIN. • QUERY_INPUT : vient de mettre fin à la redirection de la sortie des commandes débutées avec ‘’<< QUERY_INPUT ‘’. Présentation de la troisième partie du script qui concerne l’ajout d’une adresse IP et de ces informations si elle n’est pas déjà présente dans la base de données : • Mysql –u $user –p$pass –D $db << QUERY_INPUT : début de la redirection de la sortie des commandes. Sécurisation d’un serveur de téléphonie Asterisk 38 • BEGIN ; début du bloc de transaction contenant les requêtes SQL. • INSERT INTO adresse (ip) VALUES (‘’$ip’’) ; requête qui ajoute dans la base de données, dans la table ‘adresse’, dans le champ ‘’ip’’ la valeur de la variable ‘’$ip’’ . • INSERT INTO raison (id-ip,log) VALUES (LAST_INSERT_ID(),’’$log’’) ; insert dans la table ‘raison’, dans les champs ‘’ip_id’’ et ‘’log’’ les valeurs du dernier id inséré dans la table ‘adresse’ pour le champ ‘’id_ip’’ et la valeur de la variable ‘’$log’’ pour le champ ‘’log ‘’. • COMMIT ; : Marque la fin du bloc de transaction SQL.. • QUERY_INPUT : fin de redirection du flux de sortie. • Fi : fin de la boucle conditionnelle ‘’IF’’. Utilisation du script dans le projet Le script est très important pour le projet, c’est grâce à ce dernier que toutes les informations recueillies par Fail2ban sont implémentées dans la base de données. Cela permet de garder toutes les traces des évènements du serveur Asterisk notifiés par Fail2ban. L’écriture de ce script fut assez difficile pour moi, car dans mon cursus j’avais déjà pratiqué la rédaction de script BASH, mais jamais je n’avais fait de requêtes SQL. Sécurisation d’un serveur de téléphonie Asterisk 39 C’est pourquoi j’ai dû apprendre la syntaxe et les mots clés de ce langage ainsi que la façon dont il fallait intégrer ces requêtes dans le script BASH pour pouvoir arriver au résultat voulu. IV Conclusion La problématique était que : des utilisateurs non identifiés sur un central de téléphonie utilisent des attaques par dictionnaire virtuel (Brute force) afin de trouver le bon couple nom d’utilisateur / mots de passe afin de pouvoir passer des télécommunications de n’importe où vers n’importe quelle destination au frai des clients. La solution proposée permet d’analyser les erreurs retournées par Asterisk, de bannir (ou pas) les adresses IP à l’origine de ces erreurs, d’en être notifié par mail et d’ajouter automatiquement dans une base de données les adresses IP ayant causer des erreurs et les informations qui leurs sont rattachées comme : la ligne à l’origine de l’erreur (log) et la date à laque cet évènement à eu lieu. L’adaptation face à des programmes inconnus fut très enrichissante pour moi et a contribué au développement de nouvelles compétences comme la conception et l’administration d’une base de données MySQL où encore la rédaction des d’expression régulière utiliser par Fail2ban. Durant ce projet j’ai effectué toutes les opérations présentes dans ce dossier sur un Debian sans interface graphique, ce qui m’a permis d’approfondir les connaissances que j’avais des environnements Linux, l’utilisation d’Iptables m’a permis de mieux comprendre le fonctionnement du pare-feu système de Linux. Sécurisation d’un serveur de téléphonie Asterisk 40 La rédaction du script d’implémentation de la base de données à la aussi était très formateur pour moi, car l’apprentissage de la syntaxe des requêtes SQL et son intégration dans un script BASH seront surement des outils que je réutiliserais. V Test Voici quelques tests afin de démontrer l’efficacité de la solution proposer : Voici la console d’administration d’Asterisk, ici son affichés toutes les informations définit dans la partie console du fichier logger.conf . J’ai utilisé un téléphone SIP afin de provoquer une erreur de contexte comme dans les lignes des attaques venant de l’extérieur : Ici l’on peut voir que les lignes de log d’Asterisk nous informent que le tele2 ayant l’adresse IP 10.190.10.76 a provoqué des erreurs au niveau de l’extension. Sécurisation d’un serveur de téléphonie Asterisk 41 L’on peut voir depuis la console se fail2ban que l’adresse IP qui a provoqué des erreurs a étais bannis dans fail2ban. L’adresse IP bannis a bien était ajoutée à la table ‘adresse’ de la base de données. Ainsi que le log correspondant à l’erreur de l’adresse IP et la date et l’heur à la quel elle a étais bannis, et celle ou a étais insérer la ligne ans la base de données. Afin d’informer l’administrateur des actions de fail2ban un mail a était envoyé sur le compte email paramétré dans les options de fail2ban. Sécurisation d’un serveur de téléphonie Asterisk 42 VI Annexes Scripte d’implémentation de la base de données : Sécurisation d’un serveur de téléphonie Asterisk 43
© Copyright 2024