42
Sécurisation d’un serveur de téléphonie Asterisk 2 Sécurisation d’un serveur Asterisk. Rapport de Stage Cheminade julien

ébauche rapport de stage - … · Rapport de Stage Cheminade julien ! ! ! Sécurisation d’un serveur de téléphonie Asterisk 3!! Sommaire ... Fail2ban : analyseur de fichier log!

Embed Size (px)

Citation preview

     

Sécurisation d’un serveur de téléphonie Asterisk

 2  

Sécurisation d’un serveur Asterisk. Rapport de Stage

Cheminade julien

     

Sécurisation d’un serveur de téléphonie Asterisk

 3  

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

 4  

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

 5  

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

 6  

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

 7  

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

 8  

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

 9  

Organigramme de l’entreprise

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.

Bonnet  Pierre-­‐Olivier  Gérant  

Bourret  Carine  Secrétaire  comptable  

Peghaire  Benoit  Responsable  technique  Besse  Hugo  

Technitcien  Beaudon  Bruno  Technicien  

Bellut  Maxime  Technicien  

Cheminade  Julien  Stagiaire  

Davy  Labrosse  Stagiaire  

De  Bouchard  Amandine  Consultante  

éducaGon  /  graphiste  

     

Sécurisation d’un serveur de téléphonie Asterisk

 10  

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

 11  

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

 12  

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

 13  

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

 14  

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

 15  

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

 16  

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

 17  

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

 18  

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

 19  

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

 20  

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

 21  

• 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

 22  

• 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

 23  

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

 24  

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

 25  

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

 26  

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

 27  

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

 28  

[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

 29  

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

 30  

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

mê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 pare-

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

 31  

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

 32  

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

 33  

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

 34  

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

 35  

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

 36  

• 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

 37  

• 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

 38  

• 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

 39  

• 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

 40  

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

 41  

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

 42  

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

 43  

     

VI Annexes Scripte d’implémentation de la base de données :