Sécurisation du service VoIp - CardinPatson/SysAdmin GitHub Wiki

L'utilisation d'outils connectés à Internet augmente les risques potentiels pour la sécurité quelque soit le service et la dépendance des entreprises aux réseaux informatiques les rend de plus en plus vulnérables aux cybermenaces. En ce qui concerne la VoiP, le risque de sécurité est lié à la probabilité de perte ou d'exposition à une cyberattaque ou à une violation des données.

Identification des risques

DDoS (Distributed Denial of Service)

Le but d'une attaque de type DDos est de rendre indisponible un service en submergeant toute la bande passante afin d'empêcher les utilisateurs de l'utiliser. Dans ce cadre-ci, un réseau de botnets inonde les services VoiP de demandes de données ou de connexion, les rendant inopérants.

Attaques Man-in-the-middle

L'attaquant intercepte le trafic des messages SIP de signalisation d'appel et se fait passer pour l'appelant. Il peut, dès lors, détourner des appels via un serveur de redirection.

Call Tracking

Cette attaque traque les terminaux. Elle récupère les messages INVITE et BYE en écoutant le réseau et peut ainsi récolter des informations comme l'heure, le temps de la conversation et les protagonistes.

SPIT (SPam over Internet Telephony)

Similaire aux tentatives de Phishing et autres spams dans les emails. Ces appels SPAM sont des attaques qui effectuent des appels automatiques et lancent un enregistrement lorsque le service concerné décroche.

Vishing (hameçonnage vocal)

L'usurpation d'identité basé sur la VoiP est un processus par lequel un pirate vous appelle en se faisant passer pour une source de confiance afin de soutirer des informations sensibles (mots de passe,, numéros de cartes de crédit...)

Logiciels malveillants et virus

Tout comme n'importe quel application Internet, la VoiP est vulnérable aux vers, virus et autres malwares. Bon nombre de ces programmes malveillants peuvent créer des portes dérobées dans le système ce qui permet à leurs auteurs d'écouter les appels et de voler des informations importantes.

Écoutes clandestines (eavesdropping)

Un attaquant avec un accès au réseau VoiP peut sniffer le trafic et décoder la conversation vocale à l'aide par exemple d'un logiciel appelé VOMIT (Voice Over Misconfigured Internet Telephones) qui convertit une conversation téléphonique en un fichier wave. L'attaquant peut dès lors avoir accès à des informations sensibles (mots de passe, numéro de comptes...) ou d'autres informations utiles qu'il réutilisera à l'envi.

Injection de paquets

Les pirates tentent de perturber les appels en cours, soit en injectant des paquets de bruit ce qui rend la qualité instable, soit en retardant la livraison des paquets ce qui rend la communication inégale et instaure de longues périodes de silence.

Phreaking

Les pirates pénètrent dans le système VoiP afin de passer des appels interurbains, de modifier les forfaits d'appels, d'ajouter plus de crédits de compte et de passer les appels téléphoniques supplémentaires qu'ils souhaitent, au frais de l'utilisateur.

Contre-mesures contrant les risques identifiés

Quelques contre-mesures générales peuvent être mises en place afin de garantir la sécurité du système VoiP.

  • Cryptage des données
  • Des mots de passe forts et variés
  • Tests réguliers du réseau pour les vulnérabilités de sécurité
  • Mises à jour régulières des outils utilisés
  • Formation des employés sur l'attitude à tenir en cas de phishing

DDos

Quelques mesures à mettre en place :

  • Connexion internet distincte et dédiée uniquement à la VoiP

Attaques Man-in-the-Middle

En plus des contre-mesures décrites ci-dessus, il faut :

  • Eviter les réseaux Wifi publics et non sécurisés
  • Installer un cryptage WAP/WEP fort sur les points d'accès

Call Tracking

SPIT

En plus des contre-mesures décrites ci-dessus, il faut envisager l'implémentation d'un pare-feu.

Vishing

  • Eviter de fournir des informations par téléphone à toute personne prétendant appartenir à un organisme sensible (Banque, Mutuelle, Sécurité Sociale...)
  • Rejoindre le registre des numéros de téléphone exclus
  • Ne pas répondre aux invites vocales via des réponses vocales ou des tonalités

Logiciels malveillants et virus :

En plus des contre-mesures décrites ci-dessus, il ne faut pas négliger l'installation d'un antivirus complet de nouvelle génération.

Écoutes clandestines

  • Utilisation de SRTP afin que le protocole Voip soit crypté
  • Sécuriser le trafic avec TLS
  • Utiliser un VPN pour sécuriser les données en utilisant la méthode du tunneling
  • Utiliser un fournisseur VoiP qui crypte les appels avant qu'ils ne soient envoyés

Injection de paquets

  • Activer le chiffrement de bout en bout,
  • Utiliser TLS pour authentifier les paquets de données
  • Utiliser un logiciel de détection de point de terminaison.

Phreaking

Il est difficile de repérer l'intrusion d'un phreaker. Pour prévenir ces attaques, il faut garder à l'esprit les contre-mesures générales décrites plus haut ainsi que des vérifications régulières du trafic et bien sûr des factures

Choix des contre-mesures et justification.

Fail2ban :

Fail2ban est un utilitaire gratuit qui cherche les tentatives répétées de connexions dans les logs des divers services et procède à un bannissement en ajoutant une règle au pare-feu.

  1. Installation de fail2ban sudo apt install fail2ban
  2. Démarrage de fail2ban sudo systemctl start fail2ban
  3. Configuration de fail2ban : Les fichiers à configurer se trouvent dans le répertoire /etc/fail2ban.

Il s'agit des fichiers /etc/fail2ban/fichier.d/asterisk.conf et /etc/fail2ban/jail.conf.

Par défaut, fail2ban autorise 5 tentatives de connexions (maxretry=5) toutes les 10 minutes (findtime=600s) et banni l'IP pour 10 minutes (bantime=600s).

Il faut éditer le fichier /etc/fail2ban/jail.conf :

ignoreip = 127.0.0.1/8 192.168.0.0/16  #permet de ne pas bannir ces ranges d'adresse IPs
findtime = 600  #permet de renseigner la période de temps d'examination des logs
bantime = 3600  #permet de renseigner la durée de bannissement

On rajoute une section pour le serveur Asterisk :

[asterisk-iptables]                                      #le nom de la prison
enabled = true                                           #active/désactive un filtre
filter = asterisk                                        #pointe vers le fichier filtre qui sera créé ci-dessous
port = 5060                                              #spécifie le port qui sera bloqué
action = iptables-allports[name=ASTERISK, protocol=all]  #définit l'action du filtre
logpath = /var/log/asterisk/messages
maxretry = 3                                             #nombre de tentatives
findtime = 21600                                         #par défaut
bantime = 86400                                          #par défaut

On définit le filtre Asterisk, en rajoutant les lignes suivantes dans le fichier /etc/fail2ban/filter.d/asterisk.conf. Ces lignes vont permettre de préciser les expressions que le programme doit retrouver dans les logs :

[INCLUDE]
[Definition]
failregex = NOTICE.* .*: Registration from ‘.*’ failed for ‘:.*’ – Wrong password
NOTICE.* .*: Registration from ‘.*’ failed for ‘:.*’ – No matching peer found
NOTICE.* .*: Registration from ‘.*’ failed for ‘:.*’ – No matching peer found
NOTICE.* .*: Registration from ‘.*’ failed for ‘:.*’ – Username/auth name mismatch
NOTICE.* .*: Registration from ‘.*’ failed for ‘:.*’ – Device does not match ACL
NOTICE.* .*: Registration from ‘.*’ failed for ‘:.*’ – Peer is not supposed to register
NOTICE.* .*: Registration from ‘.*’ failed for ‘:.*’ – ACL error (permit/deny)
NOTICE.* .*: Registration from ‘.*’ failed for ‘:.*’ – Device does not match ACL
NOTICE.* .*: Registration from ‘\ ».*\ ».*’ failed for ‘:.*’ – No matching peer found
NOTICE.* .*: Registration from ‘\ ».*\ ».*’ failed for ‘:.*’ – Wrong password
NOTICE.* <HOST> failed to authenticate as ‘.*’$
NOTICE.* .*: No registration for peer ‘.*’ \(from \)
NOTICE.* .*: Host <HOST> failed MD5 authentication for ‘.*’ (.*)
NOTICE.* .*: Failed to authenticate user .*@.*
NOTICE.* .*: <HOST> failed to authenticate as ‘.*’
NOTICE.* .*: <HOST> tried to authenticate with nonexistent user ‘.*’
VERBOSE.*SIP/-.*Received incoming SIP connection from unknown peer
SECURITY.* SecurityEvent= »FailedACL ».*RemoteAddress= ».+?/.+?//.+? ».*
SECURITY.* SecurityEvent= »InvalidAccountID ».*RemoteAddress= ».+?/.+?//.+? ».*
SECURITY.* SecurityEvent= »ChallengeResponseFailed ».*RemoteAddress= ».+?/.+?//.+? ».*
SECURITY.* SecurityEvent= »InvalidPassword ».*RemoteAddress= ».+?/.+?//.+? ».*
  1. Créer le démarrage automatique sudo systemctl enable fail2ban
  2. Contrôler la bonne installation sudo systemctl status fail2ban

Pour sécuriser les appels, il faut chiffrer le flux SIP et le flux RTP

TLS : TLS nous permet de sécuriser le flux SIP.

  1. Installation de openssl sudo apt install openssl srtp-utils
  2. Création des clés pour le serveur Asterisk.
  • Création du dossier qui contiendra les clés mkdir /etc/asterisk/keys
  • Création des clés : le script se trouve dans le fichier cd /usr/src/asterisk/asterisk-12.0.0/contrib/scripts/
  • Exécuter le script ./ast_tls_cert -C asterisk.networklab.com -O "NetworkLab" -d /etc/asterisk/keys
  • Les fichiers suivants sont créés :
root@debian:/usr/src/asterisk/asterisk-18.12.0/contrib/scripts# ls /etc/asterisk/keys/
asterisk.crt  asterisk.csr  asterisk.key  asterisk.pem  ca.cfg  ca.crt ca.key  tmp.cfg
  1. Il faut faire de même pour les clients
./ast_tls_cert -m client -c /etc/asterisk/keys/ca.crt -k /etc/asterisk/keys/ca.key -C phone101.networklab.com -O "NetworkLab" -d /etc/asterisk/keys -o 101

Répéter l'opération pour tous les postes de l'entreprise 4. Configurer Asterisk pour autoriser l'utilisation de TLS, cela se fait dans le fichier sip.conf :

[general]
tlsenable=yes
tlsbindaddr=0.0.0.0
tlscertfile=/etc/asterisk/keys/asterisk.pem
tlscafile=/etc/asterisk/keys/ca.crt
tlscipher=ALL
tlsclientmethod=tlsv1
  1. Autoriser les postes à utiliser TLS, cela se fait dans le fichier users.conf et rajouter la ligne``transport=tls`pour les postes amenés à utiliser le service VoiP.
  2. Configurer les postes. Ils doivent avoir 2 fichiers ca.crt et client.pem. Dans l'application client, ajouter l'adresse du serveur Asterisk comme Proxy, spécifier le port 5061 et forcer le TLS. Terminer en renseignant les chemins des fichiers __client.pem__ et __ca.crt__ .

SRTP : Il s'agit de sécuriser le flux RTP ce qui permettra de chiffrer la voix.

  1. Ajouter le support SRTP à Asterisk Télécharger la librairie SRTP à installer
cd srtp 
./configure CFLAGS=-fPIC --prefix=/usr 
make 
make install
  1. Relancer Asterisk pour qu'il prenne en charge SRTP
cd /usr/src/asterisk/asterisk-18.12.0/
make clean 
./configure
make
make install
  1. Ensuite charger le module SRTP
asterisk –rv
module load res_srtp.so
  1. Forcer l'utilisation de SRTP sur les postes visés en ajoutant la ligne encryption=yes dans __users.conf__
  2. Relancer Asterisk
  3. Configurer les postes dans l'application client pour qu'ils utilisent SRTP .

Sources

https://aircall.io/fr/blog/best-practices-fr/les-bonnes-pratiques-en-matiere-de-risques-lies-a-la-securite-de-la-voip/

https://aircall.io/blog/tech/voip-security/

https://www.monpetitforfait.com/toutes-les-aides/phreaking-piratage-mobile#:~:text=Le%20phreaking%20d%C3%A9signe%20l'activit%C3%A9,piratage%20d'un%20standard%20t%C3%A9l%C3%A9phonique.

https://getvoip.com/blog/2020/05/06/voip-security/

https://www.cloudtalk.io/blog/5-common-voip-security-risks-that-might-threaten-your-business/

https://actualiteinformatique.fr/cybersecurite/definition-vishing-hameconnage-vocal-ou-voip

https://www.vskills.in/certification/tutorial/voip-attacks/

https://www.voip-info.org/asterisk-security/

https://pastel.archives-ouvertes.fr/pastel-00559130/document

https://blog.malandra.be/comment-configurer-fail2ban-pour-votre-serveur-asterisk/

https://www.networklab.fr/chiffrement-des-appels/#comments

⚠️ **GitHub.com Fallback** ⚠️