SIP (Session Initiation Protocol)

Reading time: 18 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) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

Informations de base

SIP (Session Initiation Protocol) est un protocole de signalisation et de contrÎle d'appel largement utilisé pour établir, modifier et terminer des sessions multimédia, y compris la voix, la vidéo et la messagerie instantanée, sur les réseaux IP. Développé par l'Internet Engineering Task Force (IETF), SIP est défini dans RFC 3261 et est devenu le standard de facto pour la VoIP et les communications unifiées.

Parmi les principales caractéristiques de SIP :

  1. Protocole textuel : SIP est un protocole textuel, ce qui le rend lisible par l'humain et plus facile Ă  dĂ©boguer. Il est basĂ© sur un modĂšle requĂȘte-rĂ©ponse, similaire Ă  HTTP, et utilise des mĂ©thodes comme INVITE, ACK, BYE et CANCEL pour contrĂŽler les sessions d'appel.
  2. ÉvolutivitĂ© et flexibilitĂ© : SIP est hautement Ă©volutif et peut ĂȘtre utilisĂ© dans des dĂ©ploiements de petite taille ainsi que dans des environnements d'entreprise et de niveau opĂ©rateur. Il peut ĂȘtre facilement Ă©tendu avec de nouvelles fonctionnalitĂ©s, le rendant adaptable Ă  divers cas d'utilisation et exigences.
  3. Interopérabilité : L'adoption généralisée et la normalisation de SIP assurent une meilleure interopérabilité entre différents appareils, applications et fournisseurs de services, favorisant une communication sans couture entre différentes plateformes.
  4. Conception modulaire : SIP fonctionne avec d'autres protocoles comme RTP (Real-time Transport Protocol) pour la transmission des médias et SDP (Session Description Protocol) pour décrire les sessions multimédia. Cette conception modulaire permet une plus grande flexibilité et compatibilité avec différents types de médias et codecs.
  5. Serveurs proxy et de redirection : SIP peut utiliser des serveurs proxy et de redirection pour faciliter le routage des appels et fournir des fonctionnalités avancées comme le renvoi d'appel, le transfert d'appel et la messagerie vocale.
  6. Présence et messagerie instantanée : SIP ne se limite pas à la communication voix et vidéo. Il prend également en charge la présence et la messagerie instantanée, permettant une large gamme d'applications de communication unifiée.

MalgrĂ© ses nombreux avantages, SIP peut ĂȘtre complexe Ă  configurer et Ă  gĂ©rer, en particulier lorsqu'il s'agit de la traversal NAT et des problĂšmes de pare-feu. Cependant, sa polyvalence, son Ă©volutivitĂ© et son large support industriel en font un choix populaire pour la VoIP et la communication multimĂ©dia.

Méthodes SIP

Les méthodes SIP de base définies dans RFC 3261 incluent :

  1. INVITE : Utilisé pour initier une nouvelle session (appel) ou modifier une session existante. La méthode INVITE transporte la description de session (généralement en utilisant SDP) pour informer le destinataire des détails de la session proposée, comme les types de médias, les codecs et les protocoles de transport.
  2. ACK : EnvoyĂ© pour confirmer la rĂ©ception d'une rĂ©ponse finale Ă  une requĂȘte INVITE. La mĂ©thode ACK assure la fiabilitĂ© des transactions INVITE en fournissant une reconnaissance de bout en bout.
  3. BYE : Utilisé pour terminer une session établie (appel). La méthode BYE est envoyée par l'une ou l'autre des parties de la session pour indiquer qu'elles souhaitent mettre fin à la communication.
  4. CANCEL : Envoyé pour annuler un INVITE en attente avant l'établissement de la session. La méthode CANCEL permet à l'expéditeur d'abandonner une transaction INVITE s'il change d'avis ou si le destinataire ne répond pas.
  5. OPTIONS : UtilisĂ© pour interroger les capacitĂ©s d'un serveur SIP ou d'un user agent. La mĂ©thode OPTIONS peut ĂȘtre envoyĂ©e pour demander des informations sur les mĂ©thodes prises en charge, les types de mĂ©dias ou d'autres extensions sans Ă©tablir de session.
  6. REGISTER : Utilisé par un user agent pour enregistrer sa localisation actuelle auprÚs d'un serveur registrar SIP. La méthode REGISTER aide à maintenir une correspondance à jour entre l'URI SIP d'un utilisateur et son adresse IP actuelle, permettant le routage et la délivrance des appels.

warning

Notez que pour appeler quelqu'un il n'est pas nécessaire d'utiliser REGISTER pour quoi que ce soit.
Cependant, il est possible que, pour effectuer un INVITE, l'appelant doive d'abord s'authentifier ou qu'il reçoive une réponse 401 Unauthorized.

En plus de ces méthodes de base, il existe plusieurs méthodes d'extension SIP définies dans d'autres RFC, telles que :

  1. SUBSCRIBE : Définie dans RFC 6665, la méthode SUBSCRIBE est utilisée pour demander des notifications sur l'état d'une ressource spécifique, comme la présence d'un utilisateur ou l'état d'un appel.
  2. NOTIFY : Également dĂ©finie dans RFC 6665, la mĂ©thode NOTIFY est envoyĂ©e par un serveur pour informer un user agent abonnĂ© des changements d'Ă©tat d'une ressource surveillĂ©e.
  3. REFER : Définie dans RFC 3515, la méthode REFER est utilisée pour demander au destinataire d'effectuer un transfert ou de référer à un tiers. Elle est typiquement utilisée pour des scénarios de transfert d'appel.
  4. MESSAGE : Définie dans RFC 3428, la méthode MESSAGE est utilisée pour envoyer des messages instantanés entre user agents SIP, permettant la communication textuelle au sein du framework SIP.
  5. UPDATE : Définie dans RFC 3311, la méthode UPDATE permet de modifier une session sans affecter l'état du dialog existant. Cela est utile pour mettre à jour des paramÚtres de session, comme les codecs ou les types de médias, pendant un appel en cours.
  6. PUBLISH : Définie dans RFC 3903, la méthode PUBLISH est utilisée par un user agent pour publier des informations d'état d'événement sur un serveur, les rendant disponibles à d'autres parties intéressées.

Codes de réponse SIP

  • 1xx (RĂ©ponses provisoires) : Ces rĂ©ponses indiquent que la requĂȘte a Ă©tĂ© reçue et que le serveur continue de la traiter.
  • 100 Trying : La requĂȘte a Ă©tĂ© reçue et le serveur est en train de la traiter.
  • 180 Ringing : Le correspondant est en train d'ĂȘtre alertĂ© et va prendre l'appel.
  • 183 Session Progress : Fournit des informations sur la progression de l'appel.
  • 2xx (RĂ©ponses rĂ©ussies) : Ces rĂ©ponses indiquent que la requĂȘte a Ă©tĂ© reçue, comprise et acceptĂ©e avec succĂšs.
  • 200 OK : La requĂȘte a rĂ©ussi et le serveur l'a exĂ©cutĂ©e.
  • 202 Accepted : La requĂȘte a Ă©tĂ© acceptĂ©e pour traitement, mais elle n'est pas encore terminĂ©e.
  • 3xx (RĂ©ponses de redirection) : Ces rĂ©ponses indiquent qu'une action supplĂ©mentaire est requise pour satisfaire la requĂȘte, typiquement en contactant une ressource alternative.
  • 300 Multiple Choices : Il existe plusieurs options disponibles et l'utilisateur ou le client doit en choisir une.
  • 301 Moved Permanently : La ressource demandĂ©e s'est vue attribuer une nouvelle URI permanente.
  • 302 Moved Temporarily : La ressource demandĂ©e est temporairement disponible Ă  une URI diffĂ©rente.
  • 305 Use Proxy : La requĂȘte doit ĂȘtre envoyĂ©e Ă  un proxy spĂ©cifiĂ©.
  • 4xx (Erreurs client) : Ces rĂ©ponses indiquent que la requĂȘte contient une mauvaise syntaxe ou ne peut pas ĂȘtre satisfaite par le serveur.
  • 400 Bad Request : La requĂȘte Ă©tait mal formĂ©e ou invalide.
  • 401 Unauthorized : La requĂȘte nĂ©cessite une authentification de l'utilisateur.
  • 403 Forbidden : Le serveur a compris la requĂȘte mais refuse de l'exĂ©cuter.
  • 404 Not Found : La ressource demandĂ©e n'a pas Ă©tĂ© trouvĂ©e sur le serveur.
  • 408 Request Timeout : Le serveur n'a pas reçu une requĂȘte complĂšte dans le dĂ©lai qu'il Ă©tait prĂȘt Ă  attendre.
  • 486 Busy Here : Le correspondant est actuellement occupĂ© et ne peut pas prendre l'appel.
  • 5xx (Erreurs serveur) : Ces rĂ©ponses indiquent que le serveur n'a pas pu satisfaire une requĂȘte valide.
  • 500 Internal Server Error : Le serveur a rencontrĂ© une erreur lors du traitement de la requĂȘte.
  • 501 Not Implemented : Le serveur ne prend pas en charge la fonctionnalitĂ© requise pour exĂ©cuter la requĂȘte.
  • 503 Service Unavailable : Le serveur est actuellement incapable de traiter la requĂȘte en raison de maintenance ou de surcharge.
  • 6xx (Échecs globaux) : Ces rĂ©ponses indiquent que la requĂȘte ne peut ĂȘtre satisfaite par aucun serveur.
  • 600 Busy Everywhere : Toutes les destinations possibles pour l'appel sont occupĂ©es.
  • 603 Decline : Le correspondant ne souhaite pas participer Ă  l'appel.
  • 604 Does Not Exist Anywhere : La ressource demandĂ©e n'est disponible nulle part dans le rĂ©seau.

Exemples

Exemple SIP INVITE

INVITE sip:jdoe@example.com SIP/2.0
Via: SIP/2.0/UDP pc33.example.com;branch=z9hG4bK776asdhds
Max-Forwards: 70
To: John Doe <sip:jdoe@example.com>
From: Jane Smith <sip:jsmith@example.org>;tag=1928301774
Call-ID: a84b4c76e66710
CSeq: 314159 INVITE
Contact: <sip:jsmith@pc33.example.com>
User-Agent: ExampleSIPClient/1.0
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO
Content-Type: application/sdp
Content-Length: 142

v=0
o=jsmith 2890844526 2890842807 IN IP4 pc33.example.com
s=-
c=IN IP4 pc33.example.com
t=0 0
m=audio 49170 RTP/AVP 0
a=rtpmap:0 PCMU/8000
Chaque paramÚtre expliqué
  1. Request-Line: INVITE sip:jdoe@example.com SIP/2.0 - Cette ligne indique la mĂ©thode (INVITE), l'URI de requĂȘte (sip:jdoe@example.com) et la version SIP (SIP/2.0).
  2. Via: Via: SIP/2.0/UDP pc33.example.com;branch=z9hG4bK776asdhds - L'en-tĂȘte Via spĂ©cifie le protocole de transport (UDP) et l'adresse du client (pc33.example.com). Le paramĂštre "branch" est utilisĂ© pour la dĂ©tection de boucles et le matching des transactions.
  3. Max-Forwards: Max-Forwards: 70 - Ce champ limite le nombre de fois que la requĂȘte peut ĂȘtre transfĂ©rĂ©e par des proxies afin d'Ă©viter des boucles infinies.
  4. To: To: John Doe <sip:jdoe@example.com> - L'en-tĂȘte To prĂ©cise le destinataire de l'appel, incluant son nom affichĂ© (John Doe) et l'URI SIP (sip:jdoe@example.com).
  5. From: From: Jane Smith <sip:jsmith@example.org>;tag=1928301774 - L'en-tĂȘte From indique l'expĂ©diteur de l'appel, incluant son nom affichĂ© (Jane Smith) et l'URI SIP (sip:jsmith@example.org). Le paramĂštre "tag" sert Ă  identifier de façon unique le rĂŽle de l'expĂ©diteur dans le dialog.
  6. Call-ID: Call-ID: a84b4c76e66710 - L'en-tĂȘte Call-ID identifie de maniĂšre unique une session d'appel entre deux user agents.
  7. CSeq: CSeq: 314159 INVITE - L'en-tĂȘte CSeq contient un numĂ©ro de sĂ©quence et la mĂ©thode utilisĂ©e dans la requĂȘte. Il sert Ă  associer les rĂ©ponses aux requĂȘtes et Ă  dĂ©tecter les messages hors d'ordre.
  8. Contact: Contact: <sip:jsmith@pc33.example.com> - L'en-tĂȘte Contact fournit une route directe vers l'expĂ©diteur, utilisable pour les requĂȘtes et rĂ©ponses ultĂ©rieures.
  9. User-Agent: User-Agent: ExampleSIPClient/1.0 - L'en-tĂȘte User-Agent donne des informations sur le logiciel ou le matĂ©riel de l'expĂ©diteur, incluant son nom et sa version.
  10. Allow: Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO - L'en-tĂȘte Allow liste les mĂ©thodes SIP supportĂ©es par l'expĂ©diteur. Cela aide le destinataire Ă  comprendre quelles mĂ©thodes peuvent ĂȘtre utilisĂ©es pendant la communication.
  11. Content-Type: Content-Type: application/sdp - L'en-tĂȘte Content-Type prĂ©cise le type de mĂ©dia du corps du message, dans ce cas SDP (Session Description Protocol).
  12. Content-Length: Content-Length: 142 - L'en-tĂȘte Content-Length indique la taille du corps du message en octets.
  13. Message Body: Le corps du message contient la description de session SDP, qui inclut des informations sur les types de médias, les codecs et les protocoles de transport pour la session proposée.
  • v=0 - Version du protocole (0 pour SDP)
  • o=jsmith 2890844526 2890842807 IN IP4 pc33.example.com - Initiateur et identifiant de session
  • s=- - Nom de la session (un tiret unique indique l'absence de nom de session)
  • c=IN IP4 pc33.example.com - Informations de connexion (type de rĂ©seau, type d'adresse et adresse)
  • t=0 0 - Informations de timing (heures de dĂ©but et de fin, 0 0 signifie que la session n'est pas bornĂ©e)
  • m=audio 49170 RTP/AVP 0 - Description du mĂ©dia (type de mĂ©dia, numĂ©ro de port, protocole de transport et liste de formats). Ici, cela spĂ©cifie un flux audio utilisant RTP/AVP (Real-time Transport Protocol / Audio Video Profile) et le format 0 (PCMU/8000).
  • a=rtpmap:0 PCMU/8000 - Attribut qui mappe le format (0) au codec (PCMU) et Ă  sa frĂ©quence d'horloge (8000 Hz).

Exemple de REGISTER SIP

La mĂ©thode REGISTER est utilisĂ©e dans le Session Initiation Protocol (SIP) pour permettre Ă  un user agent (UA), tel qu'un tĂ©lĂ©phone VoIP ou un softphone, de s'enregistrer auprĂšs d'un SIP registrar server. Ce processus permet au serveur de savoir oĂč acheminer les requĂȘtes SIP entrantes destinĂ©es Ă  l'utilisateur enregistrĂ©. Le serveur registrar fait gĂ©nĂ©ralement partie d'un SIP proxy server ou d'un serveur d'enregistrement dĂ©diĂ©.

Voici un exemple détaillé des messages SIP impliqués dans un processus d'authentification REGISTER :

  1. RequĂȘte initiale REGISTER du user agent (UA) vers le serveur registrar :
yaml
REGISTER sip:example.com SIP/2.0
Via: SIP/2.0/UDP 192.168.1.100:5060;branch=z9hG4bK776asdhds
Max-Forwards: 70
From: Alice <sip:alice@example.com>;tag=565656
To: Alice <sip:alice@example.com>
Call-ID: 1234567890@192.168.1.100
CSeq: 1 REGISTER
Contact: <sip:alice@192.168.1.100:5060>;expires=3600
Expires: 3600
Content-Length: 0

Ce message initial REGISTER est envoyé par l'UA (Alice) au serveur d'enregistrement. Il contient des informations importantes telles que la durée d'enregistrement souhaitée (Expires), le SIP URI de l'utilisateur (sip:alice@example.com), et l'adresse de contact de l'utilisateur (sip:alice@192.168.1.100:5060).

  1. 401 Unauthorized réponse du serveur d'enregistrement :
SIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP 192.168.1.100:5060;branch=z9hG4bK776asdhds
From: Alice <sip:alice@example.com>;tag=565656
To: Alice <sip:alice@example.com>;tag=7878744
Call-ID: 1234567890@192.168.1.100
CSeq: 1 REGISTER
WWW-Authenticate: Digest realm="example.com", nonce="abcdefghijk", algorithm=MD5, qop="auth"
Content-Length: 0

Le serveur d'enregistrement rĂ©pond par un message "401 Unauthorized", qui inclut un en-tĂȘte "WWW-Authenticate". Cet en-tĂȘte contient les informations requises pour que l'UA s'authentifie, telles que le realm d'authentification, le nonce et l'algorithme.

  1. RequĂȘte REGISTER avec des identifiants d'authentification :
vbnet
REGISTER sip:example.com SIP/2.0
Via: SIP/2.0/UDP 192.168.1.100:5060;branch=z9hG4bK776asdhds
Max-Forwards: 70
From: Alice <sip:alice@example.com>;tag=565656
To: Alice <sip:alice@example.com>
Call-ID: 1234567890@192.168.1.100
CSeq: 2 REGISTER
Contact: <sip:alice@192.168.1.100:5060>;expires=3600
Expires: 3600
Authorization: Digest username="alice", realm="example.com", nonce="abcdefghijk", uri="sip:example.com", response="65a8e2285879283831b664bd8b7f14d4", algorithm=MD5, cnonce="lmnopqrst", qop=auth, nc=00000001
Content-Length: 0

L'UA envoie une autre requĂȘte REGISTER, cette fois en incluant l'en-tĂȘte "Authorization" avec les identifiants nĂ©cessaires, tels que le username, realm, nonce, et une valeur response calculĂ©e en utilisant les informations fournies et le mot de passe de l'utilisateur.

Voici comment la Authorization response est calculée :

python
import hashlib

def calculate_sip_md5_response(username, password, realm, method, uri, nonce, nc, cnonce, qop):
# 1. Calculate HA1 (concatenation of username, realm, and password)
ha1_input = f"{username}:{realm}:{password}"
ha1 = hashlib.md5(ha1_input.encode()).hexdigest()

# 2. Calculate HA2 (concatenation of method and uri)
ha2_input = f"{method}:{uri}"
ha2 = hashlib.md5(ha2_input.encode()).hexdigest()

# 3. Calculate the final response value (concatenation of h1, stuff and h2)
response_input = f"{ha1}:{nonce}:{nc}:{cnonce}:{qop}:{ha2}"
response = hashlib.md5(response_input.encode()).hexdigest()

return response

# Example usage
username = "alice"
password = "mysecretpassword"
realm = "example.com"
method = "REGISTER"
uri = "sip:example.com"
nonce = "abcdefghijk"
nc = "00000001"
cnonce = "lmnopqrst"
qop = "auth"

response = calculate_sip_md5_response(username, password, realm, method, uri, nonce, nc, cnonce, qop)
print(f"MD5 response value: {response}")
  1. Réponse d'enregistrement réussie du serveur d'enregistrement:
yaml
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.1.100:5060;branch=z9hG4bK776asdhds
From: Alice <sip:alice@example.com>;tag=565656
To: Alice <sip:alice@example.com>;tag=7878744
Call-ID: 1234567890@192.168.1.100
CSeq: 2 REGISTER
Contact: <sip:alice@192.168.1.100:5060>;expires=3600
Expires: 3600
Content-Length: 0

AprĂšs que le serveur registrar ait vĂ©rifiĂ© les identifiants fournis, il envoie une rĂ©ponse "200 OK" pour indiquer que l'enregistrement a rĂ©ussi. La rĂ©ponse inclut les informations de contact enregistrĂ©es et la durĂ©e d'expiration de l'enregistrement. À ce stade, l'agent utilisateur (Alice) est correctement enregistrĂ© auprĂšs du serveur registrar SIP, et les requĂȘtes SIP entrantes destinĂ©es Ă  Alice peuvent ĂȘtre acheminĂ©es vers l'adresse de contact appropriĂ©e.

Exemple d'appel

tip

Ce n'est pas mentionné, mais User B doit avoir envoyé un REGISTER message à Proxy 2 avant de pouvoir recevoir des appels.


SIP Sécurité et Pentesting Notes

Cette section apporte des conseils pratiques, spécifiques au protocole, sans dupliquer les recommandations générales VoIP. Pour la méthodologie d'attaque VoIP de bout en bout, les outils et les scénarios, voir :

Pentesting VoIP

Empreinte et découverte

  • Envoyez une requĂȘte OPTIONS et examinez les en-tĂȘtes Allow, Supported, Server et User-Agent pour profiler les appareils et les stacks :
bash
# nmap NSE (UDP 5060 by default)
sudo nmap -sU -p 5060 --script sip-methods <target>

# Minimal raw OPTIONS over UDP
printf "OPTIONS sip:<target> SIP/2.0\r\nVia: SIP/2.0/UDP attacker;branch=z9\r\nFrom: <sip:probe@attacker>;tag=1\r\nTo: <sip:probe@<target>>\r\nCall-ID: 1@attacker\r\nCSeq: 1 OPTIONS\r\nMax-Forwards: 70\r\nContact: <sip:probe@attacker>\r\nContent-Length: 0\r\n\r\n" | nc -u -w 2 <target> 5060

Comportement d'énumération des noms d'utilisateur/extensions

  • L'Ă©numĂ©ration abuse gĂ©nĂ©ralement des diffĂ©rences entre 401/407 et 404/403 sur REGISTER/INVITE. Durcissez les serveurs pour qu'ils rĂ©pondent de maniĂšre uniforme.
  • Asterisk chan_sip : dĂ©finissez alwaysauthreject=yes (gĂ©nĂ©ral) pour Ă©viter de divulguer des utilisateurs valides. Dans les versions rĂ©centes d'Asterisk (PJSIP), les appels guests sont dĂ©sactivĂ©s sauf si un endpoint anonymous est dĂ©fini et un comportement similaire de "always auth reject" est par dĂ©faut ; appliquez nĂ©anmoins des ACL rĂ©seau et fail2ban Ă  la pĂ©riphĂ©rie.

SIP Digest Authentication: algorithms and cracking

  • SIP utilise couramment un auth de type HTTP-Digest. Historiquement MD5 (et MD5-sess) sont rĂ©pandus ; les stacks plus rĂ©cents supportent SHA-256 et SHA-512/256 selon RFC 8760. PrĂ©fĂ©rez ces algorithmes plus forts dans les dĂ©ploiements modernes et dĂ©sactivez MD5 quand c'est possible.
  • Le cracking hors ligne depuis un pcap est trivial pour les digests MD5. AprĂšs avoir extrait le challenge/response, vous pouvez utiliser hashcat mode 11400 (SIP digest, MD5) :
bash
# Example hash format (single line)
# username:realm:method:uri:nonce:cnonce:nc:qop:response
echo 'alice:example.com:REGISTER:sip:example.com:abcdef:11223344:00000001:auth:65a8e2285879283831b664bd8b7f14d4' > sip.hash

# Crack with a wordlist
hashcat -a 0 -m 11400 sip.hash /path/to/wordlist.txt

note

RFC 8760 définit SHA-256 et SHA-512/256 pour HTTP Digest (utilisé par SIP). L'adoption est inégale ; assurez-vous que vos outils gÚrent ces algorithmes lorsque vous ciblez des PBX modernes.

SIP sur TLS (SIPS) et sur WebSockets

  • Chiffrement du signaling :
  • Les URI sips: et TCP/TLS sont typiquement sur le port 5061. VĂ©rifiez la validation des certificats sur les endpoints ; beaucoup acceptent des certificats auto-signĂ©s ou wildcard, permettant des MitM dans des dĂ©ploiements faibles.
  • Les softphones WebRTC utilisent souvent SIP over WebSocket selon RFC 7118 (ws:// ou wss://). Si le PBX expose WSS, testez l'authentification et le CORS, et assurez-vous que des limites de taux sont appliquĂ©es Ă©galement sur la couche HTTP frontale.

Vérifications rapides DoS (niveau protocole)

  • Le flooding d'INVITE, REGISTER ou de messages malformĂ©s peut Ă©puiser le traitement des transactions.
  • Exemple simple de limitation de dĂ©bit pour UDP/5060 (Linux iptables hashlimit) :
bash
# Limit new SIP packets from a single IP to 20/s with burst 40
iptables -A INPUT -p udp --dport 5060 -m hashlimit \
--hashlimit-name SIP --hashlimit 20/second --hashlimit-burst 40 \
--hashlimit-mode srcip -j ACCEPT
iptables -A INPUT -p udp --dport 5060 -j DROP

CVE récentes et pertinentes des stacks SIP à surveiller (Asterisk PJSIP)

  • CVE-2024-35190 (publiĂ© le 17 mai 2024) : dans certaines versions d'Asterisk, res_pjsip_endpoint_identifier_ip pouvait mal identifier des requĂȘtes SIP non autorisĂ©es comme un endpoint local, pouvant potentiellement permettre des actions non autorisĂ©es ou une exposition d'informations. CorrigĂ© dans les versions 18.23.1, 20.8.1 et 21.3.1. Validez la version de votre PBX lors des tests et signalez de maniĂšre responsable.

Checklist de durcissement (spécifique SIP)

  • PrĂ©fĂ©rez TLS pour le signaling et SRTP/DTLS-SRTP pour les mĂ©dias ; dĂ©sactivez le cleartext lorsque c'est possible.
  • Imposer des mots de passe forts et des algorithmes de digest robustes (SHA-256/512-256 lorsqu'ils sont supportĂ©s ; Ă©viter MD5).
  • Pour Asterisk :
  • chan_sip : alwaysauthreject=yes, allowguest=no, ACL CIDR permit/deny par endpoint.
  • PJSIP : ne crĂ©ez pas d'endpoint anonymous sauf si nĂ©cessaire ; appliquez acl/media_acl par endpoint ; activez fail2ban ou Ă©quivalent.
  • Masquage de la topologie sur les proxies SIP (par ex., outbound proxy/edge SBC) to reduce information leakage.
  • Traitement strict des OPTIONS et limites de taux ; dĂ©sactivez les mĂ©thodes inutilisĂ©es (par ex., MESSAGE, PUBLISH) si elles ne sont pas requises.

Références

  • RFC 8760 – Utilisation de SHA-256 et SHA-512/256 pour HTTP Digest (s'applique aussi Ă  SIP Digest) : https://www.rfc-editor.org/rfc/rfc8760
  • Asterisk GHSA advisory for CVE-2024-35190: https://github.com/asterisk/asterisk/security/advisories/GHSA-qqxj-v78h-hrf9

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) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks