rapport projet asterisk

 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