Pentesting VoIP
Informations de base sur la VoIP
Pour commencer à apprendre comment fonctionne la VoIP, consultez :
Basic VoIP ProtocolsÉnumération VoIP
Numéros de téléphone
Une des premières étapes qu'une équipe rouge pourrait faire est de rechercher les numéros de téléphone disponibles pour contacter l'entreprise en utilisant des outils OSINT, des recherches Google ou en grattant les pages web.
Une fois que vous avez les numéros de téléphone, vous pouvez utiliser des services en ligne pour identifier l'opérateur :
Savoir si l'opérateur fournit des services VoIP vous permettrait d'identifier si l'entreprise utilise la VoIP... De plus, il est possible que l'entreprise n'ait pas souscrit à des services VoIP mais utilise des cartes PSTN pour connecter son propre PBX VoIP au réseau téléphonique traditionnel.
Des éléments tels que des réponses automatisées ou de la musique indiquent généralement que la VoIP est utilisée.
Google Dorks
Informations OSINT
Toute autre enumeration OSINT qui aide à identifier le logiciel VoIP utilisé sera utile pour une Équipe Rouge.
Énumération du réseau
nmap
est capable de scanner les services UDP, mais en raison du nombre de services UDP scannés, il est très lent et peut ne pas être très précis avec ce type de services.svmap
de SIPVicious (sudo apt install sipvicious
) : localisera les services SIP dans le réseau indiqué.svmap
est facile à bloquer car il utilise l'User-Agentfriendly-scanner
, mais vous pourriez modifier le code depuis/usr/share/sipvicious/sipvicious
et le changer.
sipscan.py
de sippts** :** Sipscan est un scanner très rapide pour les services SIP sur UDP, TCP ou TLS. Il utilise le multithreading et peut balayer de larges plages de réseaux. Il permet d'indiquer facilement une plage de ports, de balayer à la fois le TCP et l'UDP, d'utiliser une autre méthode (par défaut, il utilisera OPTIONS) et de spécifier un User-Agent différent (et plus encore).
metasploit:
Enumeration de Réseau Supplémentaire
Le PBX pourrait également exposer d'autres services réseau tels que :
69/UDP (TFTP) : Mises à jour du firmware
80 (HTTP) / 443 (HTTPS) : Pour gérer le périphérique depuis le web
389 (LDAP) : Alternative pour stocker les informations des utilisateurs
3306 (MySQL) : Base de données MySQL
5038 (Manager) : Permet d'utiliser Asterisk depuis d'autres plateformes
5222 (XMPP) : Messages utilisant Jabber
5432 (PostgreSQL) : Base de données PostgreSQL
Et d'autres...
Enumeration des Méthodes
Il est possible de trouver quelles méthodes sont disponibles à utiliser dans le PBX en utilisant sipenumerate.py
de sippts
Énumération des extensions
Les extensions dans un système PBX (Private Branch Exchange) font référence aux identifiants internes uniques attribués à des lignes téléphoniques, des appareils ou des utilisateurs individuels au sein d'une organisation ou d'une entreprise. Les extensions permettent de router les appels au sein de l'organisation de manière efficace, sans avoir besoin de numéros de téléphone externes individuels pour chaque utilisateur ou appareil.
svwar
de SIPVicious (sudo apt install sipvicious
) :svwar
est un scanner de lignes d'extension SIP PBX gratuit. En concept, il fonctionne de manière similaire aux wardialers traditionnels en devinant une plage d'extensions ou une liste donnée d'extensions.
sipextend.py
de sippts: Sipexten identifie les extensions sur un serveur SIP. Sipexten peut vérifier de larges plages de réseau et de ports.
metasploit: Vous pouvez également énumérer les extensions/noms d'utilisateur avec metasploit :
enumiax
(apt install enumiax
): enumIAX est un outil de recherche de noms d'utilisateur par force brute pour le protocole Inter Asterisk Exchange. enumIAX peut fonctionner selon deux modes distincts : Deviner les noms d'utilisateur séquentiellement ou Attaque par dictionnaire.
Attaques VoIP
Brute-Force de mot de passe
Ayant découvert le PBX et certains extensions/noms d'utilisateur, une équipe rouge pourrait tenter de s'authentifier via la méthode REGISTER
sur une extension en utilisant un dictionnaire de mots de passe courants pour effectuer une attaque par force brute.
Notez qu'un nom d'utilisateur peut être identique à l'extension, mais cette pratique peut varier en fonction du système PBX, de sa configuration et des préférences de l'organisation...
Si le nom d'utilisateur n'est pas le même que l'extension, vous devrez déterminer le nom d'utilisateur pour effectuer une attaque par force brute.
svcrack
de SIPVicious (sudo apt install sipvicious
): SVCrack vous permet de cracker le mot de passe pour un nom d'utilisateur/extension spécifique sur un PBX.
sipcrack.py
de sippts** :** SIP Digest Crack est un outil pour cracker les authentifications digest dans le protocole SIP.
Metasploit:
Sniffing VoIP
Si vous trouvez un équipement VoIP dans un réseau Wifi ouvert, vous pourriez capturer toutes les informations. De plus, si vous êtes dans un réseau plus fermé (connecté via Ethernet ou Wifi protégé), vous pourriez effectuer des attaques MitM telles que ARPspoofing entre le PBX et la passerelle pour capturer les informations.
Parmi les informations réseau, vous pourriez trouver des identifiants web pour gérer l'équipement, des extensions d'utilisateur, des noms d'utilisateur, des adresses IP, même des mots de passe hachés et des paquets RTP que vous pourriez reproduire pour écouter la conversation, et plus encore.
Pour obtenir ces informations, vous pourriez utiliser des outils tels que Wireshark, tcpdump... mais un outil spécialement créé pour capturer des conversations VoIP est ucsniff.
Notez que si TLS est utilisé dans la communication SIP, vous ne pourrez pas voir la communication SIP en clair. Il en va de même si SRTP et ZRTP sont utilisés, les paquets RTP ne seront pas en clair.
Identifiants SIP
Consultez cet exemple pour mieux comprendre une communication SIP REGISTER pour apprendre comment les identifiants sont envoyés.
sipdump
&sipcrack
, faisant partie de sipcrack (apt-get install sipcrack
): Ces outils peuvent extraire des authentifications digest dans le protocole SIP à partir d'un pcap et les forcer avec une attaque par force brute.
siptshar.py
,sipdump.py
,sipcrack.py
de sippts:SipTshark extrait les données du protocole SIP à partir d'un fichier PCAP.
SipDump extrait les authentifications SIP Digest d'un fichier PCAP.
SIP Digest Crack est un outil pour cracker les authentifications digest dans le protocole SIP.
Codes DTMF
Non seulement les identifiants SIP peuvent être trouvés dans le trafic réseau, il est également possible de trouver des codes DTMF qui sont utilisés par exemple pour accéder à la messagerie vocale. Il est possible d'envoyer ces codes dans des messages SIP INFO, en audio ou à l'intérieur de paquets RTP. Si les codes se trouvent dans les paquets RTP, vous pourriez découper cette partie de la conversation et utiliser l'outil multimo pour les extraire:
Appels gratuits / Mauvaises configurations de connexions Asterisks
Dans Asterisk, il est possible d'autoriser une connexion à partir d'une adresse IP spécifique ou de n'importe quelle adresse IP:
Si une adresse IP est spécifiée, l'hôte n'aura pas besoin d'envoyer des requêtes REGISTER de temps en temps (dans le paquet REGISTER est envoyé le temps de vie, généralement 30 minutes, ce qui signifie que dans un autre scénario, le téléphone devra s'enregistrer toutes les 30 minutes). Cependant, il devra avoir des ports ouverts permettant les connexions du serveur VoIP pour recevoir des appels.
Pour définir les utilisateurs, ils peuvent être définis comme suit :
type=user
: L'utilisateur peut uniquement recevoir des appels en tant qu'utilisateur.type=friend
: Il est possible d'effectuer des appels en tant que pair et de les recevoir en tant qu'utilisateur (utilisé avec des extensions).type=peer
: Il est possible d'envoyer et de recevoir des appels en tant que pair (trunks SIP).
Il est également possible d'établir une confiance avec la variable non sécurisée :
insecure=port
: Autorise les connexions de pair validées par IP.insecure=invite
: Ne nécessite pas d'authentification pour les messages INVITE.insecure=port,invite
: Les deux.
Lorsque type=friend
est utilisé, la valeur de la variable host ne sera pas utilisée, donc si un administrateur configure incorrectement un SIP-trunk en utilisant cette valeur, n'importe qui pourra s'y connecter.
Par exemple, cette configuration serait vulnérable :
host=10.10.10.10
insecure=port,invite
type=friend
Appels gratuits / Mauvaises configurations de contexte Asterisk
Dans Asterisk, un contexte est un conteneur ou une section nommé(e) dans le plan de numérotation qui regroupe les extensions, actions et règles connexes. Le plan de numérotation est le composant central d'un système Asterisk, car il définit comment les appels entrants et sortants sont gérés et routés. Les contextes sont utilisés pour organiser le plan de numérotation, gérer le contrôle d'accès et fournir une séparation entre les différentes parties du système.
Chaque contexte est défini dans le fichier de configuration, généralement dans le fichier extensions.conf
. Les contextes sont indiqués par des crochets, avec le nom du contexte inclus entre eux. Par exemple :
À l'intérieur du contexte, vous définissez des extensions (modèles de numéros composés) et les associez à une série d'actions ou d'applications. Ces actions déterminent comment l'appel est traité. Par exemple :
Cet exemple montre un contexte simple appelé "mon_contexte" avec une extension "100". Lorsque quelqu'un compose le 100, l'appel sera répondu, un message de bienvenue sera lu, puis l'appel sera terminé.
Il s'agit d'un autre contexte qui permet d'appeler tout autre numéro:
Si l'administrateur définit le contexte par défaut comme suit :
N'importe qui pourra utiliser le serveur pour appeler n'importe quel autre numéro (et l'administrateur du serveur paiera l'appel).
De plus, par défaut, le fichier sip.conf
contient allowguest=true
, donc n'importe quel attaquant sans authentification pourra appeler n'importe quel autre numéro.
sipinvite.py
de sippts: Sipinvite vérifie si un serveur PBX nous permet de passer des appels sans authentification. Si le serveur SIP a une configuration incorrecte, il nous permettra de passer des appels vers des numéros externes. Il peut également nous permettre de transférer l'appel vers un deuxième numéro externe.
Par exemple, si votre serveur Asterisk a une mauvaise configuration de contexte, vous pouvez accepter une demande INVITE sans autorisation. Dans ce cas, un attaquant peut passer des appels sans connaître d'utilisateur/mot de passe.
Appels gratuits / IVRS mal configurés
IVRS signifie Système de Réponse Vocale Interactive, une technologie téléphonique qui permet aux utilisateurs d'interagir avec un système informatisé via la voix ou des touches. L'IVRS est utilisé pour construire des systèmes de gestion d'appels automatisés qui offrent une gamme de fonctionnalités, telles que la fourniture d'informations, la redirection des appels et la capture des entrées des utilisateurs.
L'IVRS dans les systèmes VoIP se compose généralement de :
Messages vocaux: Messages audio préenregistrés qui guident les utilisateurs à travers les options de menu IVR et les instructions.
Signalisation DTMF (Dual-Tone Multi-Frequency) : Entrées de touches générées en appuyant sur des touches sur le téléphone, qui sont utilisées pour naviguer à travers les menus IVR et fournir des entrées.
Routage des appels: Diriger les appels vers la destination appropriée, tels que des départements spécifiques, des agents ou des extensions en fonction de l'entrée de l'utilisateur.
Capture des entrées des utilisateurs: Collecte d'informations auprès des appelants, telles que des numéros de compte, des identifiants de cas, ou d'autres données pertinentes.
Intégration avec des systèmes externes: Connecter le système IVR à des bases de données ou d'autres systèmes logiciels pour accéder ou mettre à jour des informations, effectuer des actions ou déclencher des événements.
Dans un système VoIP Asterisk, vous pouvez créer un IVR en utilisant le plan de numérotation (fichier extensions.conf
) et diverses applications telles que Background()
, Playback()
, Read()
, et plus encore. Ces applications vous aident à lire des messages vocaux, capturer les entrées des utilisateurs et contrôler le flux d'appels.
Exemple de configuration vulnérable
Le précédent est un exemple où l'utilisateur est invité à appuyer sur 1 pour appeler un service, 2 pour appeler un autre, ou saisir l'extension complète s'il la connaît. La vulnérabilité réside dans le fait que la longueur de l'extension indiquée n'est pas vérifiée, donc un utilisateur pourrait saisir un numéro complet pendant le délai de 5 secondes et il sera appelé.
Injection d'extension
En utilisant une extension telle que :
Lorsque ${EXTEN}
est l'extension qui sera appelée, lorsque l'ext 101 est introduit voici ce qui se passerait :
Cependant, si ${EXTEN}
permet d'introduire plus que des chiffres (comme dans les anciennes versions d'Asterisk), un attaquant pourrait introduire 101&SIP123123123
pour appeler le numéro de téléphone 123123123. Et voici ce que cela donnerait :
Par conséquent, un appel à l'extension 101
et 123123123
sera envoyé et seul le premier à recevoir l'appel sera établi... mais si un attaquant utilise une extension qui contourne toute correspondance en cours mais qui n'existe pas, il pourrait injecter un appel uniquement vers le numéro désiré.
Fuite de Digest SIP
La fuite de Digest SIP est une vulnérabilité qui affecte un grand nombre de téléphones SIP, y compris les téléphones IP matériels et logiciels ainsi que les adaptateurs téléphoniques (VoIP vers analogique). La vulnérabilité permet la fuite de la réponse d'authentification Digest, qui est calculée à partir du mot de passe. Une attaque de mot de passe hors ligne est alors possible et peut récupérer la plupart des mots de passe basés sur la réponse au défi.
**Scénario de vulnérabilité à partir d'ici**:
Un téléphone IP (victime) écoute sur le port 5060, acceptant les appels téléphoniques
L'attaquant envoie un INVITE au téléphone IP
Le téléphone de la victime commence à sonner et quelqu'un décroche et raccroche (car personne ne répond au téléphone à l'autre bout)
Lorsque le téléphone est raccroché, le téléphone de la victime envoie un BYE à l'attaquant
L'attaquant émet une réponse 407 qui demande une authentification et émet un défi d'authentification
Le téléphone de la victime fournit une réponse au défi d'authentification dans un second BYE
L'attaquant peut alors lancer une attaque par force brute sur la réponse au défi sur sa machine locale (ou réseau distribué, etc.) et deviner le mot de passe
sipdigestleak.py de sippts: SipDigestLeak exploite cette vulnérabilité.
Click2Call
Click2Call permet à un utilisateur web (qui par exemple pourrait être intéressé par un produit) d'introduire son numéro de téléphone pour être rappelé. Ensuite, un appel commercial sera effectué, et lorsque l'utilisateur décroche le téléphone, il sera appelé et connecté à l'agent.
Un profil Asterisk courant pour cela est :
Le profil précédent permet à N'IMPORTE QUELLE adresse IP de se connecter (si le mot de passe est connu).
Pour organiser un appel, comme spécifié précédemment, aucune permission de lecture n'est nécessaire et seulement originate en écriture est requis.
Avec ces autorisations, n'importe quelle adresse IP connaissant le mot de passe pourrait se connecter et extraire trop d'informations, comme :
Plus d'informations ou d'actions pourraient être demandées.
Écoute clandestine
Dans Asterisk, il est possible d'utiliser la commande ChanSpy
en indiquant les extensions à surveiller (ou toutes) pour écouter les conversations en cours. Cette commande doit être attribuée à une extension.
Par exemple, exten => 333,1,ChanSpy('all',qb)
indique que si vous appelez l'extension 333, elle va surveiller toutes
les extensions, commencer à écouter dès qu'une nouvelle conversation démarre (b
) en mode silencieux (q
) car nous ne voulons pas interagir. Vous pouvez passer d'une conversation à une autre en appuyant sur *
, ou en marquant le numéro de l'extension.
Il est également possible d'utiliser ExtenSpy
pour surveiller une seule extension.
Au lieu d'écouter les conversations, il est possible de les enregistrer dans des fichiers en utilisant une extension telle que :
Les appels seront enregistrés dans /tmp
.
Vous pourriez même faire en sorte qu'Asterisk exécute un script qui divulguera l'appel lorsqu'il est fermé.
RTCPBleed
RTCPBleed est un problème de sécurité majeur affectant les serveurs VoIP basés sur Asterisk (publié en 2017). La vulnérabilité permet au trafic RTP (Real Time Protocol), qui transporte les conversations VoIP, d'être intercepté et redirigé par n'importe qui sur Internet. Cela se produit car le trafic RTP contourne l'authentification lorsqu'il traverse les pare-feu NAT (Network Address Translation).
Les proxies RTP tentent de résoudre les limitations du NAT affectant les systèmes RTC en faisant transiter les flux RTP entre deux parties ou plus. Lorsque le NAT est en place, le logiciel de proxy RTP ne peut souvent pas se fier aux informations d'IP et de port RTP récupérées via la signalisation (par exemple SIP). Par conséquent, un certain nombre de proxies RTP ont mis en œuvre un mécanisme où ce couple IP et port est appris automatiquement. Cela se fait souvent en inspectant le trafic RTP entrant et en marquant l'IP et le port source pour tout trafic RTP entrant comme celui auquel il faut répondre. Ce mécanisme, qui peut être appelé "mode d'apprentissage", n'utilise aucune forme d'authentification. Par conséquent, les attaquants peuvent envoyer du trafic RTP au proxy RTP et recevoir le trafic RTP relayé destiné à l'appelant ou au destinataire d'un flux RTP en cours. Nous appelons cette vulnérabilité RTP Bleed car elle permet aux attaquants de recevoir des flux média RTP destinés à être envoyés à des utilisateurs légitimes.
Un autre comportement intéressant des proxies RTP et des piles RTP est que parfois, même s'ils ne sont pas vulnérables au RTP Bleed, ils vont accepter, transmettre et/ou traiter des paquets RTP de n'importe quelle source. Par conséquent, les attaquants peuvent envoyer des paquets RTP qui peuvent leur permettre d'injecter leurs médias au lieu de ceux légitimes. Nous appelons cette attaque injection RTP car elle permet l'injection de paquets RTP illégitimes dans des flux RTP existants. Cette vulnérabilité peut être trouvée à la fois dans les proxies RTP et les points d'extrémité.
Asterisk et FreePBX ont traditionnellement utilisé le paramètre NAT=yes
, qui permet au trafic RTP de contourner l'authentification, entraînant potentiellement l'absence de son ou un son unidirectionnel lors des appels.
Pour plus d'informations, consultez https://www.rtpbleed.com/
rtpbleed.py
de sippts: Il détecte la vulnérabilité RTP Bleed en envoyant des flux RTP.
rtcpbleed.py
de sippts** :** Il détecte la vulnérabilité RTP Bleed en envoyant des flux RTP.
rtpbleedflood.py
de sippts** :** Exploitez la vulnérabilité RTP Bleed en envoyant des flux RTP
rtpbleedinject.py
de sippts** :** Exploiter la vulnérabilité RTP Bleed en envoyant des flux RTP (à partir d'un fichier audio)
RCE
Dans Asterisk, si vous parvenez d'une manière ou d'une autre à ajouter des règles d'extension et à les recharger (par exemple en compromettant un serveur de gestion web vulnérable), il est possible d'obtenir une RCE en utilisant la commande System
.
Il existe une commande appelée Shell
qui pourrait être utilisée au lieu de System
pour exécuter des commandes système si nécessaire.
Si le serveur interdit l'utilisation de certains caractères dans la commande System
(comme dans Elastix), vérifiez si le serveur web permet de créer des fichiers d'une manière ou d'une autre dans le système (comme dans Elastix ou trixbox), et utilisez-le pour créer un script de porte dérobée que vous pourrez ensuite utiliser avec la commande System
pour exécuter ce script.
Fichiers locaux intéressants et autorisations
sip.conf
-> Contient le mot de passe des utilisateurs SIP.Si le serveur Asterisk fonctionne en tant que root, vous pourriez compromettre le root.
L'utilisateur root de mysql pourrait ne pas avoir de mot de passe.
Cela pourrait être utilisé pour créer un nouvel utilisateur mysql comme porte dérobée.
FreePBX
amportal.conf
-> Contient le mot de passe de l'administrateur du panneau web (FreePBX).FreePBX.conf
-> Contient le mot de passe de l'utilisateur FreePBXuser utilisé pour accéder à la base de données.Cela pourrait être utilisé pour créer un nouvel utilisateur mysql comme porte dérobée.
Elastix
Elastix.conf
-> Contient plusieurs mots de passe en clair comme le mot de passe root mysql, le mot de passe IMAPd, le mot de passe de l'administrateur web.Plusieurs dossiers appartiendront à l'utilisateur Asterisk compromis (s'il ne fonctionne pas en tant que root). Cet utilisateur peut lire les fichiers précédents et contrôle également la configuration, il pourrait donc faire en sorte qu'Asterisk charge d'autres binaires avec des portes dérobées lors de l'exécution.
Injection RTP
Il est possible d'insérer un fichier .wav
dans des conversations en utilisant des outils tels que rtpinsertsound
(sudo apt install rtpinsertsound
) et rtpmixsound
(sudo apt install rtpmixsound
).
Ou vous pourriez utiliser les scripts disponibles sur http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/ pour analyser les conversations (rtpscan.pl
), envoyer un fichier .wav
à une conversation (rtpsend.pl
) et insérer du bruit dans une conversation (rtpflood.pl
).
DoS
Il existe plusieurs façons de tenter de réaliser une attaque par déni de service (DoS) sur des serveurs VoIP.
sipflood.py
de sippts: _SipFlood_ envoie des messages illimités à la cible.python3 sipflood.py -i 10.10.0.10 -r 5080 -m invite -v
IAXFlooder: DoS sur le protocole IAX utilisé par Asterisk.
inviteflood: Un outil pour effectuer une inondation de messages SIP/SDP INVITE via UDP/IP.
rtpflood: Envoie plusieurs paquets RTP bien formés. Il est nécessaire de connaître les ports RTP utilisés (sniffer d'abord).
SIPp: Permet d'analyser et de générer du trafic SIP, donc il peut également être utilisé pour une attaque DoS.
SIPsak: Couteau suisse SIP. Peut également être utilisé pour des attaques SIP.
Fuzzers : protos-sip, voiper.
sipsend.py
de sippts: SIPSend nous permet d'envoyer un message SIP personnalisé et d'analyser la réponse.wssend.py
de sippts: WsSend nous permet d'envoyer un message SIP personnalisé via WebSockets et d'analyser la réponse.
Vulnérabilités du système d'exploitation
La manière la plus simple d'installer un logiciel tel qu'Asterisk est de télécharger une distribution OS qui l'a déjà installé, comme : FreePBX, Elastix, Trixbox... Le problème avec ceux-ci est qu'une fois qu'ils fonctionnent, les administrateurs système pourraient ne plus les mettre à jour et des vulnérabilités pourraient être découvertes avec le temps.
Références
Last updated