VOIP sécurité - MaximeDanlee/admin2-projet GitHub Wiki

Risques de sécurité

  1. Attaques de type 'denial of Service (DoS)' ou SPAM. Les méthodes sont comparables à celles des attaques contre les réseaux de données, à savoir faire appel au service en très grandes quantités, de sorte que le système soit submergé. Le but ultime de l'attaque est de mettre la main sur les extensions SIP (Session Initiated Protocol), pour ainsi paralyser le serveur VoIP.

  2. Voice-service theft. Le vol de service vocal peut avoir lieu quand un utilisateur non autorisé se ménage lui-même un accès au réseau VoIP, et ce en vue d'établir des communications téléphonies internationales coûteuses.

  3. Détournement de données d'enregistrement. Il peut aussi arriver qu'un pirate annule un enregistrement SIP, il remplace alors ce dernier par sa propre adresse IP, ce qui lui permet d'intercepter les communications entrantes, pour les réorienter, les reproduire, voire les interrompre.

source ici

Contre-mesures

  1. Détournement de données d'enregistrement
    Solution : Chiffrage SIP avec TLS et RTP avec SRTP qui permet de chiffrer le flux audio et d'établir une connexion sécurisée.

  2. Voice-service theft
    solution : Appliquer une sécurité de base sur notre configuration SIP et Filtrer l'authentification SIP par adresse IP

  3. Attaques de type 'denial of Service (DoS)' ou SPAM
    solution : fail2ban, il permet de détecter les tentatives à répétition d’identification Il peut être utilisé pour protéger plusieurs services/protocoles, et le plus souvent pour ssh, apache, asterisk.

source : ici et ici

Contre-mesures mises en place

  • Filtrer l'authentification SIP par adresse IP
  • Appliquer une sécurité de base sur notre configuration SIP
  • fail2ban
  • Création d'un "jail"
  • Chiffrage SIP avec TLS
  • Chiffrement RTP avec SRTP

Aucun car le service VOIP n'a pas été mis en place.

Contre-mesures configuration

1. Filtrer l'authentification SIP par adresse IP

Dans le fichier sip.conf, il est possible de préciser l'adresse IP ou les adresses IP autorisées à s'enregistrer sur les comptes SIP de notre Asterisk.

deny=0.0.0.0/0.0.0.0
permit=33.12.13.14/255.255.255.255

La première ligne interdit toutes les adresses IP.
La second ligne autorise exclusivement l'adresse IP 33.12.13.14

2. Appliquer une sécurité de base sur notre configuration SIP

allowguest=no : bloque la possibilité de passer un appel sans être préalablement enregistré alwaysauthreject=yes : configure Asterisk pour qu'il renvoi le même message d'erreur générique lors d'une tentative de connexion erronée, que l'identifiant soit valide ou non

[general]
...
allowguest=no
alwaysauthreject=yes
...

3. Configurer fail2ban pour Asterisk

fail2ban lit un fichier de log pour y repérer les tentatives d'intrusions.

  1. Installer fail2a
    apt-get install fail2ban

  2. Editez le fichier "/etc/asterisk/logger.conf"
    ```fail2ban => notice,security````

  3. On recharge la configuration de journalisation d'Asterisk, en saisissant la commande suivante :
    Cette action permet la création d'un fichier de log spécifique se situant à l'emplacement /var/log/asterisk/fail2ban asterisk -rx 'logger reload'

  4. Création d'un "jail" pour Asterisk / création du fichier "/etc/fail2ban/jail.d/"

[asterisk-provya]
enabled  = true
ignoreip = 127.0.0.1 1.2.3.4
filter   = asterisk
action   = iptables-allports[name=asterisk, protocol=all]
logpath  = /var/log/asterisk/fail2ban
findtime  = 10m
maxretry = 3
bantime  = 360m

Explication :

[asterisk-provya] : nom de notre jail (prison)
enabled = true : permet d'activer ce jail ; c'est-à-dire cette règle
ignoreip = 127.0.0.1 1.2.3.4 : la liste des adresses IP sources qui ne doivent pas être prises en compte par fail2ban. Il s'agit généralement des adresses IP légitimes comme l'adresse IP de notre connexion Internet ou d'un serveur VPN, par exemple. Il est recommandé de toujours laisser l'adresse 127.0.0.1. Chaque adresse IP doit être séparée par un simple espace.
filter = asterisk : le nom du filtre qui contient l'expression régulière qu'utilisera fail2ban pour détecter les tentatives d'intrusion. Le filtre "asterisk" est un filtre déjà pré-existant avec fail2ban. Il est bien fait. Nous l'utilisons.
action = iptables-allports[name=asterisk, protocol=all] : l'action qui sera exécutée par fail2ban lorsque les critères de déclenchement s'activeront. Dans le cas présent, nous indiquons à fail2ban d'utiliser l'action "iptables-allports" qui est une action pré-existante qui va créer une règle iptables de filtrage. La règle de filtrage iptables comportera le mot clef "asterisk" (ce qui nous permettra de la repérer facilement) et bloquera tous les ports de notre serveur pour l'adresse IP source incriminée (protocol=all).
logpath = /var/log/asterisk/fail2ban : le nom du fichier de log que fail2ban devra lire pour détecter les tentatives d'intrusion. Il s'agit du fichier de log Asterisk que nous avons créé à l'étape précédente.
findtime = 10m : la durée sur laquelle le nombre de tentatives de connexion va être prise en compte par fail2ban. Ici, 10 minutes.
maxretry = 3 : le nombre de tentatives de connexions à partir de laquelle notre filtrage va se déclencher. Ici, 3 tentatives.
bantime = 360m : la durée de bannissement. Ici, 360 minutes, soit 6 heures. Si vous souhaitez bannir une adresse IP plus d'une journée, il vous faudra personnaliser la valeur de "dbpurgeage" du fichier fail2ban.conf

4. Chiffrage SIP avec TLS

Pour sécuriser les appels, il nous faut chiffrer deux choses :

  • Le flux SIP (la signalisation)
  • Le flux RTP (la voix)
  1. Créer un dossier qui contiendra les clés.
    mkdir /etc/asterisk/keys

  2. se déplacer dans le fichier cd /usr/src/asterisk/asterisk-12.0.0/contrib/scripts/ et lancer le script qui permet de créer les clés

a. cd /usr/src/asterisk/asterisk-12.0.0/contrib/scripts/
b. ./ast_tls_cert -C asterisk.networklab.com -O "NetworkLab" -d /etc/asterisk/keys
  1. Ensuite il faut créer les clés et les certificats 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
Voici le détail des options :

m : indique qu’il faut créer un certificat client
c : permet de spécifier le chemin vers le certificat de l’autorité de certificat
k : permet de spécifier le chemin vers la clé privée de l’autorité de certificat
C : permet de spécifier le nom d’hôte du poste du client. Il est possible de spécifier une IP.
O : permet de définir le nom de l’organisation
d : permet de spécifier le dossier de sortie
o : permet de choisir le nom de la clé à créer
  1. Ensuite, il faut configurer Asterisk pour autoriser l’utilisation de TLS 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. et pour finir il faut autoriser les clients à utiliser TLS dans le fichier "users.conf".
[101](default_template)
fullname = Alain Aldric
username = aaldric
secret=password
mailbox = 101
context=dept_1
transport=tls

5. Chiffrement RTP avec SRTP

Permet de chiffrer le flux audio.

  1. Télécharger la librairie SRTP sur le site (http://srtp.sourceforge.net/download.html)
cd /usr/src/ 
wget http://srtp.sourceforge.net/srtp-1.4.2.tgz 
tar -xvzf srtp-1.4.2.tgz 
rm srtp-1.4.2.tgz
  1. ensuite on installe
cd srtp 
./configure CFLAGS=-fPIC --prefix=/usr 
make 
make install
  1. Il faut réinstaller Asterisk pour qu'il prenne en charge SRTP
cd /usr/src/asterisk/asterisk-12.0.0/
make clean 
./configure
make
make install
  1. Ensuite, charger le module SRTP dans Asterisk
asterisk –rv
module load res_srtp.so
  1. A présent, il faut forcer l’utilisation de SRTP sur les clients voulus. Pour cela, ajouter la ligne encryption=yes chez les utilisateurs concernés dans users.conf.
[101](default_template)
fullname = Alain Aldric
username = aaldric
secret=password
mailbox = 101
context=dept_1
transport=tls
encryption=yes
  1. ensuite il faut configurer SRTP sur les postes clients.

source : ici et ici