SIP (Session Initiation Protocol)
Tip
AWSãããã³ã°ãåŠã³ãå®è·µããïŒ
HackTricks Training AWS Red Team Expert (ARTE)
GCPãããã³ã°ãåŠã³ãå®è·µããïŒHackTricks Training GCP Red Team Expert (GRTE)
Azureãããã³ã°ãåŠã³ãå®è·µããïŒ
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksããµããŒããã
- ãµãã¹ã¯ãªãã·ã§ã³ãã©ã³ã確èªããŠãã ããïŒ
- **ð¬ Discordã°ã«ãŒããŸãã¯ãã¬ã°ã©ã ã°ã«ãŒãã«åå ããããTwitter ðŠ @hacktricks_liveããã©ããŒããŠãã ããã
- HackTricksããã³HackTricks Cloudã®GitHubãªããžããªã«PRãæåºããŠãããã³ã°ããªãã¯ãå ±æããŠãã ããã
åºæ¬æ å ±
SIP (Session Initiation Protocol) ã¯ãIPãããã¯ãŒã¯äžã§é³å£°ããããªãã€ã³ã¹ã¿ã³ãã¡ãã»ãŒãžãå«ããã«ãã¡ãã£ã¢ã»ãã·ã§ã³ã®ç¢ºç«ã倿Žãçµäºã«åºã䜿ãããã·ã°ããªã³ã°ããã³é話å¶åŸ¡ãããã³ã«ã§ããInternet Engineering Task Force (IETF) ã«ãã£ãŠéçºãããRFC 3261 ã§å®çŸ©ãããŠãããVoIPããã³çµ±åã³ãã¥ãã±ãŒã·ã§ã³ã®äºå®äžã®æšæºãšãªã£ãŠããŸãã
SIPã®äž»ãªç¹åŸŽã¯æ¬¡ã®ãšããã§ã:
- ããã¹ãããŒã¹ã®ãããã³ã«: SIPã¯ããã¹ãããŒã¹ã®ãããã³ã«ã§ããã人éã«èªã¿ããããããã°ãããããã§ããHTTPã«äŒŒããªã¯ãšã¹ã-ã¬ã¹ãã³ã¹ã¢ãã«ã«åºã¥ããŠãããINVITEãACKãBYEãCANCELãªã©ã®ã¡ãœããã䜿çšããŠé話ã»ãã·ã§ã³ãå¶åŸ¡ããŸãã
- ã¹ã±ãŒã©ããªãã£ãšæè»æ§: SIPã¯é«ãã¹ã±ãŒã©ããªãã£ãæã¡ãå°èŠæš¡ãªå°å ¥ããå€§èŠæš¡ãªãšã³ã¿ãŒãã©ã€ãºããã£ãªã¢ã°ã¬ãŒãã®ç°å¢ãŸã§å©çšã§ããŸããæ°æ©èœã§ç°¡åã«æ¡åŒµã§ãããããããŸããŸãªãŠãŒã¹ã±ãŒã¹ãèŠä»¶ã«é©å¿å¯èœã§ãã
- çžäºéçšæ§: SIPã®åºç¯ãªæ¡çšãšæšæºåã«ãããç°ãªãããã€ã¹ãã¢ããªã±ãŒã·ã§ã³ããµãŒãã¹ãããã€ãéã§ã®çžäºéçšæ§ãåäžããããŸããŸãªãã©ãããã©ãŒã éã§ã®ã·ãŒã ã¬ã¹ãªéä¿¡ãä¿é²ããŸãã
- ã¢ãžã¥ãŒã«èšèš: SIPã¯ã¡ãã£ã¢äŒéã«RTP (Real-time Transport Protocol)ããã«ãã¡ãã£ã¢ã»ãã·ã§ã³ã®èšè¿°ã«SDP (Session Description Protocol) ãªã©ã®ä»ãããã³ã«ãšé£æºããŸãããã®ã¢ãžã¥ãŒã«èšèšã«ãããããŸããŸãªã¡ãã£ã¢ã¿ã€ããã³ãŒããã¯ãšã®æè»æ§ãšäºææ§ãåäžããŸãã
- ãããã·ããã³ãªãã€ã¬ã¯ããµãŒã: SIPã¯ãããã·ããªãã€ã¬ã¯ããµãŒãã䜿çšããŠé話ã«ãŒãã£ã³ã°ãæ¯æŽãã転éã転éå 倿Žããã€ã¹ã¡ãŒã«ãªã©ã®é«åºŠãªæ©èœãæäŸã§ããŸãã
- ãã¬ãŒã³ã¹ãšã€ã³ã¹ã¿ã³ãã¡ãã»ãŒãž: SIPã¯é³å£°ããããªã«éå®ãããããã¬ãŒã³ã¹ãã€ã³ã¹ã¿ã³ãã¡ãã»ãŒãžããµããŒãããŠãããå¹ åºãçµ±åã³ãã¥ãã±ãŒã·ã§ã³ã¢ããªã±ãŒã·ã§ã³ãå¯èœã«ããŸãã
å€ãã®å©ç¹ãããäžæ¹ã§ãNATè¶ãããã¡ã€ã¢ãŠã©ãŒã«ã®åé¡ãæ±ãéã«ã¯èšå®ã管çãè€éã«ãªãããšããããŸããããã§ãããã®æ±çšæ§ãã¹ã±ãŒã©ããªãã£ãããã³æ¥çã§ã®åºç¯ãªãµããŒãã«ãããVoIPããã«ãã¡ãã£ã¢éä¿¡ã§åºãæ¡çšãããŠããŸãã
SIP ã¡ãœãã
RFC 3261 ã§å®çŸ©ãããã³ã¢ãªSIPã¡ãœããã«ã¯ä»¥äžãå«ãŸããŸã:
- INVITE: æ°ããã»ãã·ã§ã³ïŒé話ïŒãéå§ããããæ¢åã®ã»ãã·ã§ã³ã倿Žããããã«äœ¿çšãããŸããINVITEã¡ãœããã¯ã»ãã·ã§ã³èšè¿°ïŒéåžžã¯SDPã䜿çšïŒãéã³ãææ¡ãããã»ãã·ã§ã³ã®ã¡ãã£ã¢ã¿ã€ããã³ãŒããã¯ããã©ã³ã¹ããŒããããã³ã«ãªã©ã®è©³çްãåä¿¡è ã«éç¥ããŸãã
- ACK: INVITEãªã¯ãšã¹ãã«å¯Ÿããæçµå¿çã®åä¿¡ã確èªããããã«éä¿¡ãããŸããACKã¡ãœããã¯INVITEãã©ã³ã¶ã¯ã·ã§ã³ã®ä¿¡é Œæ§ã確ä¿ããããã«ãšã³ãããŒãšã³ãã®ç¢ºèªãæäŸããŸãã
- BYE: 確ç«ãããã»ãã·ã§ã³ïŒé話ïŒãçµäºããããã«äœ¿çšãããŸããBYEã¡ãœããã¯ã»ãã·ã§ã³ã®ããããã®åå è ãéä¿¡ãçµäºãããããšã瀺ãããã«éä¿¡ããŸãã
- CANCEL: ã»ãã·ã§ã³ã確ç«ãããåã«ä¿çäžã®INVITEããã£ã³ã»ã«ããããã«éä¿¡ãããŸããCANCELã¡ãœããã«ãããéä¿¡è ã¯å¿å€ããããå Žåãåä¿¡è ããè¿ä¿¡ããªãå Žåã«INVITEãã©ã³ã¶ã¯ã·ã§ã³ãäžæ¢ã§ããŸãã
- OPTIONS: SIPãµãŒãããŠãŒã¶ãšãŒãžã§ã³ãã®æ©èœãç §äŒããããã«äœ¿çšãããŸããOPTIONSã¡ãœããã¯ãã»ãã·ã§ã³ãå®éã«ç¢ºç«ããããšãªãããµããŒããããŠããã¡ãœãããã¡ãã£ã¢ã¿ã€ãããŸãã¯ãã®ä»ã®æ¡åŒµã«ã€ããŠã®æ å ±ãèŠæ±ã§ããŸãã
- REGISTER: ãŠãŒã¶ãšãŒãžã§ã³ããçŸåšã®æåšå°ãSIPã¬ãžã¹ãã©ãµãŒãã«ç»é²ããããã«äœ¿çšããŸããREGISTERã¡ãœããã¯ããŠãŒã¶ã®SIP URIãšçŸåšã®IPã¢ãã¬ã¹ãšã®éã®ææ°ã®ãããã³ã°ãç¶æããé話ã®ã«ãŒãã£ã³ã°ãšé ä¿¡ãå¯èœã«ããŸãã
Warning
誰ãã«çºä¿¡ããã®ã« REGISTER ãå¿ ã䜿ãå¿ èŠã¯ãªã ããšã«æ³šæããŠãã ããã
ãã ããINVITEãè¡ãããã«çºä¿¡è ãå ã«èªèšŒïŒauthenticateïŒããå¿ èŠãããããããªããã°401 Unauthorizedã®å¿çãåãåãå¯èœæ§ããããŸãã
ãããã®ã³ã¢ã¡ãœããã«å ããŠãä»ã®RFCã§å®çŸ©ãããããã€ãã®SIPæ¡åŒµã¡ãœããããããŸããããšãã°:
- SUBSCRIBE: RFC 6665ã§å®çŸ©ãããç¹å®ã®ãªãœãŒã¹ïŒãŠãŒã¶ã®ãã¬ãŒã³ã¹ãéè©±ç¶æ ãªã©ïŒã®ç¶æ ã«é¢ããéç¥ãèŠæ±ããããã«äœ¿çšãããŸãã
- NOTIFY: åããRFC 6665ã§å®çŸ©ããããµãŒãã賌èªããŠãããŠãŒã¶ãšãŒãžã§ã³ãã«ç£èŠå¯Ÿè±¡ãªãœãŒã¹ã®ç¶æ å€åãéç¥ããããã«éä¿¡ããŸãã
- REFER: RFC 3515ã§å®çŸ©ãããåä¿¡è ã«å¯ŸããŠè»¢éãå®è¡ããã第äžè ãåç §ããããšãèŠæ±ããããã«äœ¿çšãããŸããããã¯éåžžãé話転éã®ã·ããªãªã§äœ¿ãããŸãã
- MESSAGE: RFC 3428ã§å®çŸ©ãããSIPãŠãŒã¶ãšãŒãžã§ã³ãéã§ã€ã³ã¹ã¿ã³ãã¡ãã»ãŒãžãéä¿¡ããããã«äœ¿çšãããSIPãã¬ãŒã ã¯ãŒã¯å ã§ã®ããã¹ãããŒã¹éä¿¡ãå¯èœã«ããŸãã
- UPDATE: RFC 3311ã§å®çŸ©ãããæ¢åã®ãã€ã¢ãã°ã®ç¶æ ã«åœ±é¿ãäžããããšãªãã»ãã·ã§ã³ã倿Žããããšãå¯èœã«ããŸããé話äžã«ã³ãŒããã¯ãã¡ãã£ã¢ãã©ã¡ãŒã¿ãæŽæ°ããéã«æçšã§ãã
- PUBLISH: RFC 3903ã§å®çŸ©ããããŠãŒã¶ãšãŒãžã§ã³ãããµãŒãã«ã€ãã³ãç¶æ æ å ±ãå ¬éããä»ã®é¢ä¿è ãå©çšã§ããããã«ããŸãã
SIP å¿çã³ãŒã
- 1xx (Provisional Responses): ãããã®å¿çã¯ãªã¯ãšã¹ããåä¿¡ããããµãŒããåŠçãç¶ç¶ããŠããããšã瀺ããŸãã
- 100 Trying: ãªã¯ãšã¹ããåä¿¡ããããµãŒããåŠçäžã§ããããšã瀺ããŸãã
- 180 Ringing: 被åŒè ã«çä¿¡ãéç¥ãããå¿çïŒé話ã®åãå ¥ãïŒãåŸ ã£ãŠããç¶æ ã§ãã
- 183 Session Progress: é話ã®é²è¡ç¶æ³ã«é¢ããæ å ±ãæäŸããŸãã
- 2xx (Successful Responses): ãããã®å¿çã¯ãªã¯ãšã¹ããæ£åžžã«åä¿¡ãçè§£ãå諟ãããããšã瀺ããŸãã
- 200 OK: ãªã¯ãšã¹ãã¯æåãããµãŒãããããå±¥è¡ããããšã瀺ããŸãã
- 202 Accepted: ãªã¯ãšã¹ãã¯åŠçã®ããã«åãå ¥ããããŸãããããŸã å®äºããŠããŸããã
- 3xx (Redirection Responses): ãããã®å¿çã¯ãªã¯ãšã¹ããå®äºããããã«ããã«å¥ã®ã¢ã¯ã·ã§ã³ãå¿ èŠã§ããããšã瀺ããéåžžã¯å¥ã®ãªãœãŒã¹ã«é£çµ¡ããããšãæå³ããŸãã
- 300 Multiple Choices: è€æ°ã®éžæè¢ãããããŠãŒã¶ãŸãã¯ã¯ã©ã€ã¢ã³ãããã®äžããéžæããå¿ èŠããããŸãã
- 301 Moved Permanently: èŠæ±ããããªãœãŒã¹ã«æ°ããæä¹ çãªURIãå²ãåœãŠãããŸããã
- 302 Moved Temporarily: èŠæ±ããããªãœãŒã¹ã¯äžæçã«å¥ã®URIã§å©çšå¯èœã§ãã
- 305 Use Proxy: ãªã¯ãšã¹ãã¯æå®ããããããã·ãžéä¿¡ããå¿ èŠããããŸãã
- 4xx (Client Error Responses): ãããã®å¿çã¯ãªã¯ãšã¹ãã«ææ³äžã®èª€ãããããããµãŒãããããå±¥è¡ã§ããªãããšã瀺ããŸãã
- 400 Bad Request: ãªã¯ãšã¹ããäžæ£ãŸãã¯ç¡å¹ã§ããããšã瀺ããŸãã
- 401 Unauthorized: ãªã¯ãšã¹ãã«ã¯ãŠãŒã¶èªèšŒãå¿ èŠã§ããããšã瀺ããŸãã
- 403 Forbidden: ãµãŒãã¯ãªã¯ãšã¹ããçè§£ããããå±¥è¡ãæåŠããŸããã
- 404 Not Found: èŠæ±ããããªãœãŒã¹ããµãŒãäžã«èŠã€ãããŸããã
- 408 Request Timeout: ãµãŒããåŸ æ©ã§ããæéå ã«å®å šãªãªã¯ãšã¹ããåä¿¡ããŸããã§ããã
- 486 Busy Here: 被åŒè ã¯çŸåšé話äžã§ãé話ãåããããšãã§ããŸããã
- 5xx (Server Error Responses): ãããã®å¿çã¯ãµãŒããæå¹ãªãªã¯ãšã¹ããå±¥è¡ããã®ã«å€±æããããšã瀺ããŸãã
- 500 Internal Server Error: ãµãŒãããªã¯ãšã¹ãåŠçäžã«ãšã©ãŒãæ€åºããããšã瀺ããŸãã
- 501 Not Implemented: ãµãŒãããªã¯ãšã¹ããå±¥è¡ããããã«å¿ èŠãªæ©èœããµããŒãããŠããŸããã
- 503 Service Unavailable: ãµãŒãã¯ä¿å®äžãŸãã¯éè² è·ã®ãããçŸåšãªã¯ãšã¹ããåŠçã§ããŸããã
- 6xx (Global Failure Responses): ãããã®å¿çã¯ãããã¯ãŒã¯äžã®ãããªããµãŒãã§ããªã¯ãšã¹ããå±¥è¡ã§ããªãããšã瀺ããŸãã
- 600 Busy Everywhere: é話ã®å¯èœãªãã¹ãŠã®å®å ãããžãŒç¶æ ã§ãã
- 603 Decline: 被åŒè ã¯é話ã«åå ããããªãããšã瀺ããŸãã
- 604 Does Not Exist Anywhere: èŠæ±ããããªãœãŒã¹ã¯ãããã¯ãŒã¯äžã©ãã«ãååšããŸããã
äŸ
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
åãã©ã¡ãŒã¿ã®èª¬æ
- Request-Line:
INVITE sip:jdoe@example.com SIP/2.0- ãã®è¡ã¯ã¡ãœãã (INVITE)ããªã¯ãšã¹ãURI (sip:jdoe@example.com)ãããã³ SIP ããŒãžã§ã³ (SIP/2.0) ã瀺ããŸãã - Via:
Via: SIP/2.0/UDP pc33.example.com;branch=z9hG4bK776asdhds- Via ãããã¯ãã©ã³ã¹ããŒããããã³ã« (UDP) ãšã¯ã©ã€ã¢ã³ãã®ã¢ãã¬ã¹ (pc33.example.com) ãæå®ããŸããbranchãã©ã¡ãŒã¿ã¯ã«ãŒãæ€åºãšãã©ã³ã¶ã¯ã·ã§ã³ã®ç §åã«äœ¿çšãããŸãã - Max-Forwards:
Max-Forwards: 70- ãã®ããããã£ãŒã«ãã¯ããããã·ã«ãã£ãŠãªã¯ãšã¹ãã転éãããåæ°ã®äžéãå¶éããç¡éã«ãŒããé²ããŸãã - To:
To: John Doe <sip:jdoe@example.com>- To ãããã¯é話ã®åä¿¡è ãæå®ãã衚瀺å (John Doe) ãš SIP URI (sip:jdoe@example.com) ãå«ã¿ãŸãã - From:
From: Jane Smith <sip:jsmith@example.org>;tag=1928301774- From ãããã¯é話ã®éä¿¡è ãæå®ãã衚瀺å (Jane Smith) ãš SIP URI (sip:jsmith@example.org) ãå«ã¿ãŸããtagãã©ã¡ãŒã¿ã¯ãã€ã¢ãã°å ã§éä¿¡è ã®åœ¹å²ãäžæã«èå¥ããããã«äœ¿çšãããŸãã - Call-ID:
Call-ID: a84b4c76e66710- Call-ID ãããã¯äºã€ã® user agent éã®é話ã»ãã·ã§ã³ãäžæã«èå¥ããŸãã - CSeq:
CSeq: 314159 INVITE- CSeq ãããã¯ã·ãŒã±ã³ã¹çªå·ãšãªã¯ãšã¹ãã§äœ¿çšãããã¡ãœãããå«ã¿ãŸããã¬ã¹ãã³ã¹ãšãªã¯ãšã¹ãã®ç §åããã¡ãã»ãŒãžã®é åºå€æ€åºã«çšããããŸãã - Contact:
Contact: <sip:jsmith@pc33.example.com>- Contact ãããã¯éä¿¡è ãžã®çŽæ¥ã«ãŒããæäŸãã以éã®ãªã¯ãšã¹ããã¬ã¹ãã³ã¹ã«äœ¿çšã§ããŸãã - User-Agent:
User-Agent: ExampleSIPClient/1.0- User-Agent ãããã¯éä¿¡è ã®ãœãããŠã§ã¢ãããŒããŠã§ã¢ã«é¢ããæ å ±ïŒåç§°ãšããŒãžã§ã³ïŒãæäŸããŸãã - Allow:
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO- Allow ãããã¯éä¿¡è ããµããŒããã SIP ã¡ãœãããåæããŸããããã«ããåä¿¡è ã¯éä¿¡äžã«äœ¿çšå¯èœãªã¡ãœãããææ¡ã§ããŸãã - Content-Type:
Content-Type: application/sdp- Content-Type ãããã¯ã¡ãã»ãŒãžããã£ã®ã¡ãã£ã¢ã¿ã€ããæå®ããŸãããã®å Žå㯠SDP (Session Description Protocol) ã§ãã - Content-Length:
Content-Length: 142- Content-Length ãããã¯ã¡ãã»ãŒãžããã£ã®ãã€ãæ°ã瀺ããŸãã - Message Body: ã¡ãã»ãŒãžããã£ã«ã¯ SDP ã»ãã·ã§ã³èšè¿°ãå«ãŸããŠãããææ¡ãããã»ãã·ã§ã³ã®ã¡ãã£ã¢ã¿ã€ããã³ãŒããã¯ããã©ã³ã¹ããŒããããã³ã«ã«é¢ããæ å ±ãèšèŒãããŸãã
v=0- ãããã³ã«ããŒãžã§ã³ (SDP ã®å Žå㯠0)o=jsmith 2890844526 2890842807 IN IP4 pc33.example.com- çºä¿¡è ãšã»ãã·ã§ã³èå¥ås=-- ã»ãã·ã§ã³åïŒãã€ãã³1æåã¯ã»ãã·ã§ã³åããªãããšã瀺ããŸãïŒc=IN IP4 pc33.example.com- æ¥ç¶æ å ±ïŒãããã¯ãŒã¯ã¿ã€ããã¢ãã¬ã¹ã¿ã€ããã¢ãã¬ã¹ïŒt=0 0- ã¿ã€ãã³ã°æ å ±ïŒéå§ã»çµäºæå»ã0 0 ã¯ã»ãã·ã§ã³ã«æéå¶éããªãããšã瀺ããŸãïŒm=audio 49170 RTP/AVP 0- ã¡ãã£ã¢èšè¿°ïŒã¡ãã£ã¢ã¿ã€ããããŒãçªå·ããã©ã³ã¹ããŒããããã³ã«ããã©ãŒããããªã¹ãïŒããã®äŸã§ã¯ RTP/AVPïŒReal-time Transport Protocol / Audio Video ProfileïŒãçšãããªãŒãã£ãªã¹ããªãŒã ã§ããã©ãŒããã 0ïŒPCMU/8000ïŒãæå®ããŠããŸããa=rtpmap:0 PCMU/8000- ãã©ãŒããã (0) ãã³ãŒãã㯠(PCMU) ãšãã®ã¯ããã¯ã¬ãŒã (8000 Hz) ã«ãããã³ã°ãã屿§ã
SIP REGISTER ã®äŸ
REGISTER ã¡ãœãã㯠Session Initiation Protocol (SIP) ã«ãããŠãVoIP phone ã softphone ã®ãã㪠user agent (UA) ã SIP registrar server ã«èªåã®äœçœ®ãç»é²ããããã«äœ¿çšãããŸãããã®åŠçã«ãããµãŒã㯠ç»é²ããããŠãŒã¶å®ã®çä¿¡ SIP ãªã¯ãšã¹ããã©ãã«ã«ãŒãã£ã³ã°ããã ãææ¡ã§ããŸããregistrar server ã¯éåžž SIP proxy server ã®äžéšããå°çšã® registration server ã§ãã
以äžã¯ REGISTER èªèšŒããã»ã¹ã§ããåãããã SIP ã¡ãã»ãŒãžã®è©³çްãªäŸã§ã:
- Initial REGISTER request from UA to the registrar server:
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
ãã®æåã® REGISTER ã¡ãã»ãŒãžã¯ UA (Alice) ã«ãã£ãŠ registrar ãµãŒããŒã«éä¿¡ãããŸããã¡ãã»ãŒãžã«ã¯ãåžæããç»é²æé (Expires)ããŠãŒã¶ãŒã® SIP URI (sip:alice@example.com)ãããã³ãŠãŒã¶ãŒã®é£çµ¡å ã¢ãã¬ã¹ (sip:alice@192.168.1.100:5060) ãªã©ã®éèŠãªæ å ±ãå«ãŸããŸãã
- registrar ãµãŒããŒããã® 401 Unauthorized ã¬ã¹ãã³ã¹:
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
ã¬ãžã¹ãã©ãµãŒã㯠â401 Unauthorizedâ ã¡ãã»ãŒãžã§å¿çããâWWW-Authenticateâ ããããå«ã¿ãŸãããã®ãããã«ã¯ãUAãèªèº«ãèªèšŒããããã«å¿ èŠãªæ å ±ãäŸãã° authentication realmãnonceãalgorithm ãå«ãŸããŸãã
- REGISTER ãªã¯ãšã¹ã èªèšŒè³æ Œæ å ±ãå«ã:
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
UA ã¯å¥ã® REGISTER ãªã¯ãšã¹ããéä¿¡ããŸããä»åã¯ãâAuthorizationâ header with the necessary credentials, such as the username, realm, nonce, and a response valueïŒäžããããæ å ±ãšãŠãŒã¶ãŒã®ãã¹ã¯ãŒãã䜿çšããŠèšç®ãããïŒãå«ããŠããŸãã
ãã㯠Authorization response ãã©ã®ããã«èšç®ããããã§ãïŒ
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}")
- ç»é²æå ã¬ãžã¹ãã©ãµãŒããŒããã®ã¬ã¹ãã³ã¹:
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
èªèšŒãæ€èšŒããããšãã¬ãžã¹ãã©ãµãŒã㯠â200 OKâ ãè¿ããŠç»é²ãæåããããšã瀺ããŸããã¬ã¹ãã³ã¹ã«ã¯ç»é²ãããã³ã³ã¿ã¯ãæ å ±ãšç»é²ã®æå¹æéãå«ãŸããŸãããã®æç¹ã§ãŠãŒã¶ãŒãšãŒãžã§ã³ã (Alice) 㯠SIP ã¬ãžã¹ãã©ãµãŒãã«æ£åžžã«ç»é²ãããAlice å®ã®çä¿¡ SIP ãªã¯ãšã¹ãã¯é©åãªã³ã³ã¿ã¯ãã¢ãã¬ã¹ãžã«ãŒãã£ã³ã°ã§ããŸãã
Call Example
.png)
Tip
è§ŠããããŠããŸããããUser B ã¯çä¿¡ãåãåãåã« REGISTER message to Proxy 2 ãéä¿¡ããŠããå¿ èŠããããŸãã
SIP Security and Pentesting Notes
ãã®ã»ã¯ã·ã§ã³ã§ã¯ãããåºç¯ãª VoIP ã¬ã€ãã³ã¹ãšéè€ããªãå®è·µçãªãããã³ã«åºæã®ãã³ãã远å ããŸãããšã³ãããŒãšã³ãã® VoIP æ»æææ³ãããŒã«ãã·ããªãªã«ã€ããŠã¯ã以äžãåç §ããŠãã ãã:
ãã£ã³ã¬ãŒããªã³ãã£ã³ã°ãšæ€åº
- OPTIONS ãªã¯ãšã¹ããéä¿¡ãã
AllowãSupportedãServerãUser-Agentãããã確èªããŠããã€ã¹ãã¹ã¿ãã¯ããã£ã³ã¬ãŒããªã³ãããŸã:
# 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
ãŠãŒã¶ãŒå/å ç·åæã®æå
- åæã¯éåžž
REGISTER/INVITEã«å¯Ÿãã401/407ãš404/403ã®éããæªçšããŸãããµãŒãã®å¿çãåäžåããŠããŒããã³ã°ããŠãã ããã - Asterisk chan_sip:
alwaysauthreject=yesãèšå®ããŠæå¹ãªãŠãŒã¶ã®å ¬éãé¿ããŸããæ°ãã Asterisk (PJSIP) ã§ã¯ãanonymousendpoint ãå®çŸ©ãããŠããªãéã guest calling ã¯ç¡å¹åãããåæ§ã® âalways auth rejectâ æåãããã©ã«ãã§ãããå¢çã§ãããã¯ãŒã¯ ACL ãš fail2ban ãé©çšããŠãã ããã
SIP Digest Authentication: algorithms and cracking
- SIP ã¯äžè¬çã« HTTP-Digest ã¹ã¿ã€ã«ã®èªèšŒã䜿çšããŸããéå»ã«ã¯ MD5ïŒããã³ MD5-sessïŒãåºã䜿ãããŠããŸããããæ°ããã¹ã¿ãã¯ã¯ RFC 8760 ã«æ²¿ã£ã SHA-256 ã SHA-512/256 ããµããŒãããŸããã¢ãã³ãªé åã§ã¯ãããã®åŒ·ãã¢ã«ãŽãªãºã ãåªå ããå¯èœã§ããã° MD5 ãç¡å¹ã«ããŠãã ããã
- pcap ããã®ãªãã©ã€ã³ã¯ã©ããã³ã°ã¯ MD5 ãã€ãžã§ã¹ãã§ã¯å®¹æã§ããchallenge/response ãæœåºããåŸãhashcat ã®ã¢ãŒã 11400 (SIP digest, MD5) ã䜿çšã§ããŸã:
# 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 㯠HTTP DigestïŒSIP ã§ã䜿çšãããïŒã«å¯Ÿã㊠SHA-256 ãš SHA-512/256 ãå®çŸ©ããŠããŸããæ¡çšç¶æ³ã¯ãŸã¡ãŸã¡ãªã®ã§ãã¢ãã³ãª PBX ã察象ã«ããéã¯ããŒã«ããããã«å¯Ÿå¿ããŠããããšã確èªããŠãã ããã
SIP over TLS (SIPS) and over WebSockets
- ã·ã°ããªã³ã°ã®æå·å:
sips:URI ãš TCP/TLS ã¯éåžžããŒã 5061 ã䜿çšããŸãããšã³ããã€ã³ãã§ã®èšŒææžæ€èšŒã確èªããŠãã ãããå€ã㯠self-signed ã wildcard certs ãåãå ¥ããããã匱ãé åã§ã¯ MitM ãèš±ããŠããŸãå ŽåããããŸãã- WebRTC softphone 㯠RFC 7118 ã«åŸã SIP over WebSocket (
ws://ãŸãã¯wss://) ã䜿ãããšãå€ãã§ããPBX ã WSS ãå ¬éããŠããå Žåã¯èªèšŒãš CORS ããã¹ãããHTTP ããã³ããšã³ãåŽã§ãã¬ãŒãå¶éãé©çšãããŠããããšã確èªããŠãã ããã
DoS quick checks (protocol level)
- INVITEãREGISTERããŸãã¯äžæ£ãªã¡ãã»ãŒãžã®ãã©ããã£ã³ã°ã¯ãã©ã³ã¶ã¯ã·ã§ã³åŠçãæ¯æžãããå¯èœæ§ããããŸãã
- UDP/5060 ã«å¯Ÿããç°¡åãªã¬ãŒãå¶éã®äŸïŒLinux iptables hashlimitïŒ:
# 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
泚æãã¹ãæè¿ã®é¢é£ SIP ã¹ã¿ã㯠CVE (Asterisk PJSIP)
- CVE-2024-35190 (published May 17, 2024): ç¹å®ã® Asterisk ãªãªãŒã¹ã«ãããŠã
res_pjsip_endpoint_identifier_ipãäžæ£ãª SIP ãªã¯ãšã¹ããããŒã«ã«ãšã³ããã€ã³ããšèª€èå¥ããå¯èœæ§ããããäžæ£ãªæäœãæ å ±é²åºãåŒãèµ·ããå¯èœæ§ããããŸããã18.23.1ã20.8.1ã21.3.1 ã§ä¿®æ£ãããŠããŸãããã¹ãæã¯ PBX ã®ããŒãžã§ã³ã確èªãã責任ããå ±åãè¡ã£ãŠãã ããã
ããŒããã³ã°ãã§ãã¯ãªã¹ãïŒSIP åºæïŒ
- ã·ã°ããªã³ã°ã«ã¯ TLSãã¡ãã£ã¢ã«ã¯ SRTP/DTLS-SRTP ãåªå ããå¯èœãªéãå¹³æãç¡å¹ã«ããŠãã ããã
- 匷åãªãã¹ã¯ãŒããšãã€ãžã§ã¹ãã¢ã«ãŽãªãºã ïŒå¯Ÿå¿ãããã° SHA-256/512-256 ã䜿çšããMD5 ã¯é¿ããïŒã匷å¶ããŠãã ããã
- Asterisk åã:
- chan_sip:
alwaysauthreject=yesãallowguest=noããšã³ããã€ã³ãããšã®permit/denyCIDR ACL ãèšå®ã - PJSIP: å¿
èŠã§ãªãéã
anonymousendpoint ãäœæããªãããšãendpoint ã®acl/media_aclã匷å¶ããfail2ban ãªã©ãæå¹ã«ããã
- chan_sip:
- SIP ãããã·ã§ã®ããããžãŒãã€ãã£ã³ã°ïŒäŸ: outbound proxy/edge SBCïŒã«ããæ å ±æŒæŽ©ãæžããã
OPTIONSã®å³æ ŒãªåŠçãšã¬ãŒãå¶éïŒäžèŠãªã¡ãœããïŒäŸ:MESSAGE,PUBLISHïŒã¯äžèŠãªãç¡å¹ã«ããã
References
- RFC 8760 â Using SHA-256 and SHA-512/256 for HTTP Digest (applies to SIP Digest too): 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
AWSãããã³ã°ãåŠã³ãå®è·µããïŒ
HackTricks Training AWS Red Team Expert (ARTE)
GCPãããã³ã°ãåŠã³ãå®è·µããïŒHackTricks Training GCP Red Team Expert (GRTE)
Azureãããã³ã°ãåŠã³ãå®è·µããïŒ
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksããµããŒããã
- ãµãã¹ã¯ãªãã·ã§ã³ãã©ã³ã確èªããŠãã ããïŒ
- **ð¬ Discordã°ã«ãŒããŸãã¯ãã¬ã°ã©ã ã°ã«ãŒãã«åå ããããTwitter ðŠ @hacktricks_liveããã©ããŒããŠãã ããã
- HackTricksããã³HackTricks Cloudã®GitHubãªããžããªã«PRãæåºããŠãããã³ã°ããªãã¯ãå ±æããŠãã ããã


