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 ์ง€์›ํ•˜๊ธฐ

๊ธฐ๋ณธ ์ •๋ณด

SIP (Session Initiation Protocol)์€ IP ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ์Œ์„ฑ, ๋น„๋””์˜ค, ์ธ์Šคํ„ดํŠธ ๋ฉ”์‹œ์ง•์„ ํฌํ•จํ•œ ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด ์„ธ์…˜์„ ์„ค์ •, ์ˆ˜์ • ๋ฐ ์ข…๋ฃŒํ•˜๋Š” ๋ฐ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์‹ ํ˜ธ ๋ฐ ํ†ตํ™” ์ œ์–ด ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค. **Internet Engineering Task Force (IETF)**์—์„œ ๊ฐœ๋ฐœ๋˜์—ˆ์œผ๋ฉฐ, SIP๋Š” RFC 3261์— ์ •์˜๋˜์–ด VoIP ๋ฐ ํ†ตํ•ฉ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์˜ ์‚ฌ์‹ค์ƒ ํ‘œ์ค€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

SIP์˜ ์ฃผ์š” ํŠน์ง•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  1. ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ ํ”„๋กœํ† ์ฝœ: SIP๋Š” ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ ํ”„๋กœํ† ์ฝœ๋กœ ์‚ฌ๋žŒ์ด ์ฝ๊ธฐ ์‰ฝ๊ณ  ๋””๋ฒ„๊น…ํ•˜๊ธฐ ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค. HTTP์™€ ์œ ์‚ฌํ•œ ์š”์ฒญ-์‘๋‹ต ๋ชจ๋ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉฐ, INVITE, ACK, BYE, CANCEL ๋“ฑ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ํ†ตํ™” ์„ธ์…˜์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.
  2. ํ™•์žฅ์„ฑ๊ณผ ์œ ์—ฐ์„ฑ: SIP๋Š” ๋†’์€ ํ™•์žฅ์„ฑ์„ ๊ฐ€์ง€๋ฉฐ ์†Œ๊ทœ๋ชจ ๋ฐฐํฌ๋ถ€ํ„ฐ ๋Œ€๊ทœ๋ชจ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๋ฐ ํ†ต์‹ ์‚ฌ์—…์ž๊ธ‰ ํ™˜๊ฒฝ๊นŒ์ง€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์œผ๋กœ ์‰ฝ๊ฒŒ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์–ด ๋‹ค์–‘ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์™€ ์š”๊ตฌ์‚ฌํ•ญ์— ์ ์‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ์ƒํ˜ธ์šด์šฉ์„ฑ: SIP์˜ ๊ด‘๋ฒ”์œ„ํ•œ ์ฑ„ํƒ๊ณผ ํ‘œ์ค€ํ™”๋Š” ๋‹ค์–‘ํ•œ ์žฅ์น˜, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ์„œ๋น„์Šค ์ œ๊ณต์ž ๊ฐ„์˜ ๋” ๋‚˜์€ ์ƒํ˜ธ์šด์šฉ์„ฑ์„ ๋ณด์žฅํ•˜์—ฌ ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ ๊ฐ„์˜ ์›ํ™œํ•œ ํ†ต์‹ ์„ ์ด‰์ง„ํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ชจ๋“ˆํ˜• ์„ค๊ณ„: SIP๋Š” ๋ฏธ๋””์–ด ์ „์†ก์„ ์œ„ํ•œ RTP (Real-time Transport Protocol) ๋ฐ ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด ์„ธ์…˜์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•œ SDP (Session Description Protocol) ๋“ฑ ๋‹ค๋ฅธ ํ”„๋กœํ† ์ฝœ๊ณผ ํ•จ๊ป˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ชจ๋“ˆํ˜• ์„ค๊ณ„๋Š” ๋‹ค์–‘ํ•œ ๋ฏธ๋””์–ด ์œ ํ˜•๊ณผ ์ฝ”๋ฑ๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ๋†’์ด๊ณ  ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  5. ํ”„๋ก์‹œ ๋ฐ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์„œ๋ฒ„: SIP๋Š” ํ”„๋ก์‹œ ๋ฐ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ†ตํ™” ๋ผ์šฐํŒ…์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๋ฉฐ, ์ฐฉ์‹ ์ „ํ™˜, ํ†ตํ™” ์ „๋‹ฌ, ์Œ์„ฑ์‚ฌ์„œํ•จ๊ณผ ๊ฐ™์€ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  6. ํ”„๋ ˆ์ฆŒ์Šค ๋ฐ ์ธ์Šคํ„ดํŠธ ๋ฉ”์‹œ์ง•: SIP๋Š” ์Œ์„ฑ ๋ฐ ๋น„๋””์˜ค ํ†ต์‹ ์— ๊ตญํ•œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ”„๋ ˆ์ฆŒ์Šค ๋ฐ ์ธ์Šคํ„ดํŠธ ๋ฉ”์‹œ์ง•์„ ์ง€์›ํ•˜์—ฌ ๋‹ค์–‘ํ•œ ํ†ตํ•ฉ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

๋งŽ์€ ์žฅ์ ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , SIP๋Š” NAT ํ†ต๊ณผ ๋ฐ ๋ฐฉํ™”๋ฒฝ ๋ฌธ์ œ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ํŠนํžˆ ๊ตฌ์„ฑ ๋ฐ ๊ด€๋ฆฌ๊ฐ€ ๋ณต์žกํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ ๋ฒ”์šฉ์„ฑ, ํ™•์žฅ์„ฑ ๋ฐ ์—…๊ณ„ ์ „๋ฐ˜์˜ ๊ด‘๋ฒ”์œ„ํ•œ ์ง€์›์œผ๋กœ ์ธํ•ด VoIP ๋ฐ ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด ํ†ต์‹ ์— ์ธ๊ธฐ ์žˆ๋Š” ์„ ํƒ์ž…๋‹ˆ๋‹ค.

SIP ๋ฉ”์„œ๋“œ

RFC 3261์— ์ •์˜๋œ ํ•ต์‹ฌ SIP ๋ฉ”์„œ๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  1. INVITE: ์ƒˆ ์„ธ์…˜(ํ†ตํ™”)์„ ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ์„ธ์…˜์„ ์ˆ˜์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. INVITE ๋ฉ”์„œ๋“œ๋Š” ์ œ์•ˆ๋œ ์„ธ์…˜์˜ ์„ธ๋ถ€์‚ฌํ•ญ(์ผ๋ฐ˜์ ์œผ๋กœ SDP ์‚ฌ์šฉ)์„ ์ „๋‹ฌํ•˜์—ฌ ์ˆ˜์‹ ์ž์—๊ฒŒ ๋ฏธ๋””์–ด ์œ ํ˜•, ์ฝ”๋ฑ ๋ฐ ์ „์†ก ํ”„๋กœํ† ์ฝœ๊ณผ ๊ฐ™์€ ์ •๋ณด๋ฅผ ์•Œ๋ฆฝ๋‹ˆ๋‹ค.
  2. ACK: INVITE ์š”์ฒญ์— ๋Œ€ํ•œ ์ตœ์ข… ์‘๋‹ต์˜ ์ˆ˜์‹ ์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ „์†ก๋ฉ๋‹ˆ๋‹ค. ACK ๋ฉ”์„œ๋“œ๋Š” ์ข…๋‹จ ๊ฐ„ ํ™•์ธ์„ ์ œ๊ณตํ•˜์—ฌ INVITE ํŠธ๋žœ์žญ์…˜์˜ ์‹ ๋ขฐ์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
  3. BYE: ํ™•๋ฆฝ๋œ ์„ธ์…˜(ํ†ตํ™”)์„ ์ข…๋ฃŒํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. BYE ๋ฉ”์„œ๋“œ๋Š” ์„ธ์…˜์˜ ์–ด๋А ์ชฝ์ด๋“  ํ†ตํ™”๋ฅผ ์ข…๋ฃŒํ•˜๋ ค๋Š” ์˜์‚ฌ๋ฅผ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด ์ „์†ก๋ฉ๋‹ˆ๋‹ค.
  4. CANCEL: ์„ธ์…˜์ด ์„ฑ๋ฆฝ๋˜๊ธฐ ์ „์— ๋ณด๋ฅ˜ ์ค‘์ธ INVITE ์š”์ฒญ์„ ์ทจ์†Œํ•˜๊ธฐ ์œ„ํ•ด ์ „์†ก๋ฉ๋‹ˆ๋‹ค. CANCEL ๋ฉ”์„œ๋“œ๋Š” ๋ฐœ์‹ ์ž๊ฐ€ ๋งˆ์Œ์„ ๋ฐ”๊พธ๊ฑฐ๋‚˜ ์ˆ˜์‹ ์ž๋กœ๋ถ€ํ„ฐ ์‘๋‹ต์ด ์—†๋Š” ๊ฒฝ์šฐ INVITE ํŠธ๋žœ์žญ์…˜์„ ์ค‘๋‹จํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
  5. OPTIONS: SIP ์„œ๋ฒ„ ๋˜๋Š” ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ์˜ ๊ธฐ๋Šฅ์„ ์งˆ์˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. OPTIONS ๋ฉ”์„œ๋“œ๋Š” ์‹ค์ œ๋กœ ์„ธ์…˜์„ ์„ฑ๋ฆฝํ•˜์ง€ ์•Š๊ณ ๋„ ์ง€์›๋˜๋Š” ๋ฉ”์„œ๋“œ, ๋ฏธ๋””์–ด ์œ ํ˜• ๋˜๋Š” ๊ธฐํƒ€ ํ™•์žฅ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  6. REGISTER: ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ๊ฐ€ SIP ๋ ˆ์ง€์ŠคํŠธ๋ผ ์„œ๋ฒ„์— ํ˜„์žฌ ์œ„์น˜๋ฅผ ๋“ฑ๋กํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. REGISTER ๋ฉ”์„œ๋“œ๋Š” ์‚ฌ์šฉ์ž์˜ SIP URI์™€ ํ˜„์žฌ IP ์ฃผ์†Œ ๊ฐ„์˜ ์ตœ์‹  ๋งคํ•‘์„ ์œ ์ง€ํ•˜์—ฌ ํ†ตํ™” ๋ผ์šฐํŒ… ๋ฐ ์ „๋‹ฌ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

Warning

Note that to call someone itโ€™s not neccesary to use the REGISTER for anything.
However, itโ€™s possible that in order to perform an INVITE the caller needs to authenticate first or he will receive a 401 Unauthorized response.

์ด ํ•ต์‹ฌ ๋ฉ”์„œ๋“œ๋“ค ์™ธ์—๋„ RFC ๋“ฑ ๋‹ค๋ฅธ ๋ฌธ์„œ๋“ค์— ์ •์˜๋œ ์—ฌ๋Ÿฌ SIP ํ™•์žฅ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค:

  1. SUBSCRIBE: RFC 6665์— ์ •์˜๋œ SUBSCRIBE ๋ฉ”์„œ๋“œ๋Š” ์‚ฌ์šฉ์ž์˜ ํ”„๋ ˆ์ฆŒ์Šค๋‚˜ ํ†ตํ™” ์ƒํƒœ์™€ ๊ฐ™์€ ํŠน์ • ๋ฆฌ์†Œ์Šค์˜ ์ƒํƒœ์— ๋Œ€ํ•œ ์•Œ๋ฆผ์„ ์š”์ฒญํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  2. NOTIFY: ์—ญ์‹œ RFC 6665์— ์ •์˜๋œ NOTIFY ๋ฉ”์„œ๋“œ๋Š” ์„œ๋ฒ„๊ฐ€ ๊ตฌ๋…ํ•œ ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ์—๊ฒŒ ๋ชจ๋‹ˆํ„ฐ๋ง ์ค‘์ธ ๋ฆฌ์†Œ์Šค ์ƒํƒœ์˜ ๋ณ€๊ฒฝ์„ ํ†ต์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ „์†กํ•ฉ๋‹ˆ๋‹ค.
  3. REFER: RFC 3515์— ์ •์˜๋œ REFER ๋ฉ”์„œ๋“œ๋Š” ์ˆ˜์‹ ์ž์—๊ฒŒ ์ „๋‹ฌ์„ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜ ์ œ3์ž๋ฅผ ์ฐธ์กฐํ•˜๋„๋ก ์š”์ฒญํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ ํ†ตํ™” ์ „๋‹ฌ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  4. MESSAGE: RFC 3428์— ์ •์˜๋œ MESSAGE ๋ฉ”์„œ๋“œ๋Š” SIP ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ ๊ฐ„์— ์ธ์Šคํ„ดํŠธ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜์–ด SIP ํ”„๋ ˆ์ž„์›Œํฌ ๋‚ด์—์„œ ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
  5. UPDATE: RFC 3311์— ์ •์˜๋œ UPDATE ๋ฉ”์„œ๋“œ๋Š” ๊ธฐ์กด ๋Œ€ํ™”์˜ ์ƒํƒœ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ  ์„ธ์…˜์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ง„ํ–‰ ์ค‘์ธ ํ†ตํ™” ์ค‘์— ์ฝ”๋ฑ์ด๋‚˜ ๋ฏธ๋””์–ด ์œ ํ˜•๊ณผ ๊ฐ™์€ ์„ธ์…˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
  6. PUBLISH: RFC 3903์— ์ •์˜๋œ PUBLISH ๋ฉ”์„œ๋“œ๋Š” ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ๊ฐ€ ์„œ๋ฒ„์— ์ด๋ฒคํŠธ ์ƒํƒœ ์ •๋ณด๋ฅผ ๊ฒŒ์‹œํ•˜์—ฌ ๋‹ค๋ฅธ ๊ด€์‹ฌ ์žˆ๋Š” ๋‹น์‚ฌ์ž๋“ค์ด ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

SIP ์‘๋‹ต ์ฝ”๋“œ

  • 1xx (์ž„์‹œ ์‘๋‹ต): ์ด๋Ÿฌํ•œ ์‘๋‹ต์€ ์š”์ฒญ์ด ์ˆ˜์‹ ๋˜์—ˆ๊ณ  ์„œ๋ฒ„๊ฐ€ ๊ณ„์† ์ฒ˜๋ฆฌ ์ค‘์ž„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • 100 Trying: ์š”์ฒญ์ด ์ˆ˜์‹ ๋˜์—ˆ์œผ๋ฉฐ ์„œ๋ฒ„๊ฐ€ ์ž‘์—… ์ค‘์ž…๋‹ˆ๋‹ค.
  • 180 Ringing: ํ”ผํ˜ธ์ถœ์ž์—๊ฒŒ ์•Œ๋ฆผ์ด ๊ฐ€๊ณ  ์žˆ์œผ๋ฉฐ ํ†ตํ™”๋ฅผ ๋ฐ›์„ ์ค€๋น„๋ฅผ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • 183 Session Progress: ํ†ตํ™”์˜ ์ง„ํ–‰ ์ƒํ™ฉ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • 2xx (์„ฑ๊ณต ์‘๋‹ต): ์ด๋Ÿฌํ•œ ์‘๋‹ต์€ ์š”์ฒญ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜์‹ , ์ดํ•ด ๋ฐ ์ˆ˜๋ฝ๋˜์—ˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • 200 OK: ์š”์ฒญ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • 202 Accepted: ์š”์ฒญ์ด ์ฒ˜๋ฆฌ์šฉ์œผ๋กœ ์ˆ˜๋ฝ๋˜์—ˆ์ง€๋งŒ ์•„์ง ์™„๋ฃŒ๋˜์ง€๋Š” ์•Š์•˜์Šต๋‹ˆ๋‹ค.
  • 3xx (๋ฆฌ๋‹ค์ด๋ ‰์…˜ ์‘๋‹ต): ์ด๋Ÿฌํ•œ ์‘๋‹ต์€ ์š”์ฒญ์„ ์™„๋ฃŒํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€ ์กฐ์น˜๊ฐ€ ํ•„์š”ํ•จ์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค๋ฅธ ๋ฆฌ์†Œ์Šค์— ์—ฐ๋ฝํ•ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • 300 Multiple Choices: ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์—ฌ๋Ÿฌ ์˜ต์…˜์ด ์žˆ์œผ๋ฉฐ ์‚ฌ์šฉ์ž๋‚˜ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • 301 Moved Permanently: ์š”์ฒญ๋œ ๋ฆฌ์†Œ์Šค๊ฐ€ ์ƒˆ๋กœ์šด ์˜๊ตฌ URI๋กœ ํ• ๋‹น๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • 302 Moved Temporarily: ์š”์ฒญ๋œ ๋ฆฌ์†Œ์Šค๊ฐ€ ์ž„์‹œ๋กœ ๋‹ค๋ฅธ URI์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • 305 Use Proxy: ์š”์ฒญ์€ ์ง€์ •๋œ ํ”„๋ก์‹œ๋กœ ์ „์†ก๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • 4xx (ํด๋ผ์ด์–ธํŠธ ์˜ค๋ฅ˜ ์‘๋‹ต): ์ด๋Ÿฌํ•œ ์‘๋‹ต์€ ์š”์ฒญ์— ์ž˜๋ชป๋œ ๊ตฌ๋ฌธ์ด ํฌํ•จ๋˜์—ˆ๊ฑฐ๋‚˜ ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์ดํ–‰ํ•  ์ˆ˜ ์—†์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • 400 Bad Request: ์š”์ฒญ์ด ์ž˜๋ชป๋˜์—ˆ๊ฑฐ๋‚˜ ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • 401 Unauthorized: ์š”์ฒญ์— ์‚ฌ์šฉ์ž ์ธ์ฆ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • 403 Forbidden: ์„œ๋ฒ„๋Š” ์š”์ฒญ์„ ์ดํ•ดํ–ˆ์ง€๋งŒ ์ด๋ฅผ ์ดํ–‰ํ•˜๊ธฐ๋ฅผ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.
  • 404 Not Found: ์š”์ฒญ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ์„œ๋ฒ„์—์„œ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • 408 Request Timeout: ์„œ๋ฒ„๊ฐ€ ๊ธฐ๋‹ค๋ฆด ์ค€๋น„๊ฐ€ ๋œ ์‹œ๊ฐ„ ๋‚ด์— ์™„์ „ํ•œ ์š”์ฒญ์„ ์ˆ˜์‹ ํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.
  • 486 Busy Here: ํ”ผํ˜ธ์ถœ์ž๊ฐ€ ํ˜„์žฌ ๋ฐ”๋น ์„œ ์ „ํ™”๋ฅผ ๋ฐ›์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • 5xx (์„œ๋ฒ„ ์˜ค๋ฅ˜ ์‘๋‹ต): ์ด๋Ÿฌํ•œ ์‘๋‹ต์€ ์„œ๋ฒ„๊ฐ€ ์œ ํšจํ•œ ์š”์ฒญ์„ ์ดํ–‰ํ•˜์ง€ ๋ชปํ–ˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • 500 Internal Server Error: ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋™์•ˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
  • 501 Not Implemented: ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์ดํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • 503 Service Unavailable: ์„œ๋ฒ„๊ฐ€ ์œ ์ง€๋ณด์ˆ˜๋‚˜ ๊ณผ๋ถ€ํ•˜๋กœ ์ธํ•ด ํ˜„์žฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • 6xx (์ „์—ญ ์‹คํŒจ ์‘๋‹ต): ์ด๋Ÿฌํ•œ ์‘๋‹ต์€ ๋„คํŠธ์›Œํฌ์˜ ์–ด๋–ค ์„œ๋ฒ„๋„ ์š”์ฒญ์„ ์ดํ–‰ํ•  ์ˆ˜ ์—†์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • 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
๊ฐ ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค๋ช…
  1. Request-Line: INVITE sip:jdoe@example.com SIP/2.0 - ์ด ์ค„์€ ๋ฉ”์„œ๋“œ(INVITE), ์š”์ฒญ URI (sip:jdoe@example.com) ๋ฐ SIP ๋ฒ„์ „(SIP/2.0)์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  2. Via: Via: SIP/2.0/UDP pc33.example.com;branch=z9hG4bK776asdhds - Via ํ—ค๋”๋Š” ์ „์†ก ํ”„๋กœํ† ์ฝœ(UDP)๊ณผ ํด๋ผ์ด์–ธํŠธ ์ฃผ์†Œ(pc33.example.com)๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. โ€œbranchโ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋ฃจํ”„ ๊ฐ์ง€ ๋ฐ ํŠธ๋žœ์žญ์…˜ ๋งค์นญ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  3. Max-Forwards: Max-Forwards: 70 - ์ด ํ—ค๋” ํ•„๋“œ๋Š” ํ”„๋ก์‹œ๊ฐ€ ์š”์ฒญ์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ํšŸ์ˆ˜๋ฅผ ์ œํ•œํ•˜์—ฌ ๋ฌดํ•œ ๋ฃจํ”„๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  4. To: To: John Doe <sip:jdoe@example.com> - To ํ—ค๋”๋Š” ์ˆ˜์‹ ์ž(ํ‘œ์‹œ ์ด๋ฆ„ John Doe ๋ฐ SIP URI sip:jdoe@example.com)๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
  5. From: From: Jane Smith <sip:jsmith@example.org>;tag=1928301774 - From ํ—ค๋”๋Š” ๋ฐœ์‹ ์ž(ํ‘œ์‹œ ์ด๋ฆ„ Jane Smith ๋ฐ SIP URI sip:jsmith@example.org)๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. โ€œtagโ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋‹ค์ด์–ผ๋กœ๊ทธ์—์„œ ๋ฐœ์‹ ์ž์˜ ์—ญํ• ์„ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  6. Call-ID: Call-ID: a84b4c76e66710 - Call-ID ํ—ค๋”๋Š” ๋‘ ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ ๊ฐ„์˜ ํ†ตํ™” ์„ธ์…˜์„ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.
  7. CSeq: CSeq: 314159 INVITE - CSeq ํ—ค๋”๋Š” ์‹œํ€€์Šค ๋ฒˆํ˜ธ์™€ ์š”์ฒญ์— ์‚ฌ์šฉ๋œ ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์‘๋‹ต์„ ์š”์ฒญ์— ๋งค์นญํ•˜๊ณ  ๋ฉ”์‹œ์ง€์˜ ์ˆœ์„œ๊ฐ€ ์–ด๊ธ‹๋‚ฌ๋Š”์ง€ ๊ฐ์ง€ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  8. Contact: Contact: <sip:jsmith@pc33.example.com> - Contact ํ—ค๋”๋Š” ๋ฐœ์‹ ์ž์— ๋Œ€ํ•œ ์ง์ ‘ ๊ฒฝ๋กœ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ ์ดํ›„์˜ ์š”์ฒญ๊ณผ ์‘๋‹ต์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  9. User-Agent: User-Agent: ExampleSIPClient/1.0 - User-Agent ํ—ค๋”๋Š” ๋ฐœ์‹ ์ž์˜ ์†Œํ”„ํŠธ์›จ์–ด ๋˜๋Š” ํ•˜๋“œ์›จ์–ด์— ๋Œ€ํ•œ ์ •๋ณด(์ด๋ฆ„ ๋ฐ ๋ฒ„์ „)๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  10. Allow: Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO - Allow ํ—ค๋”๋Š” ๋ฐœ์‹ ์ž๊ฐ€ ์ง€์›ํ•˜๋Š” SIP ๋ฉ”์„œ๋“œ ๋ชฉ๋ก์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ˆ˜์‹ ์ž๊ฐ€ ํ†ต์‹  ์ค‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค๋‹ˆ๋‹ค.
  11. Content-Type: Content-Type: application/sdp - Content-Type ํ—ค๋”๋Š” ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์˜ ๋ฏธ๋””์–ด ์œ ํ˜•์„ ์ง€์ •ํ•˜๋ฉฐ, ์ด ๊ฒฝ์šฐ SDP(Session Description Protocol)์ž…๋‹ˆ๋‹ค.
  12. Content-Length: Content-Length: 142 - Content-Length ํ—ค๋”๋Š” ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์˜ ๋ฐ”์ดํŠธ ํฌ๊ธฐ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  13. Message Body: The message body contains the SDP session description, which includes information about the media types, codecs, and transport protocols for the proposed session.
  • v=0 - Protocol version (0 for SDP)
  • o=jsmith 2890844526 2890842807 IN IP4 pc33.example.com - Originator and session identifier
  • s=- - Session name (a single hyphen indicates no session name)
  • c=IN IP4 pc33.example.com - Connection information (network type, address type, and address)
  • t=0 0 - Timing information (start and stop times, 0 0 means the session is not bounded)
  • m=audio 49170 RTP/AVP 0 - Media description (media type, port number, transport protocol, and format list). In this case, it specifies an audio stream using RTP/AVP (Real-time Transport Protocol / Audio Video Profile) and format 0 (PCMU/8000).
  • a=rtpmap:0 PCMU/8000 - Attribute mapping the format (0) to the codec (PCMU) and its clock rate (8000 Hz).

SIP REGISTER ์˜ˆ์ œ

The REGISTER method is used in Session Initiation Protocol (SIP) to allow a user agent (UA), such as a VoIP phone or a softphone, to register its location with a SIP registrar server. This process lets the server know where to route incoming SIP requests destined for the registered user. The registrar server is usually part of a SIP proxy server or a dedicated registration server.

Hereโ€™s a detailed example of the SIP messages involved in a REGISTER authentication process:

  1. 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)๊ฐ€ ๋ ˆ์ง€์ŠคํŠธ๋ผ ์„œ๋ฒ„๋กœ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฉ”์‹œ์ง€์—๋Š” ์›ํ•˜๋Š” ๋“ฑ๋ก ๊ธฐ๊ฐ„ (Expires), ์‚ฌ์šฉ์ž์˜ SIP URI (sip:alice@example.com), ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉ์ž์˜ ์—ฐ๋ฝ์ฒ˜ ์ฃผ์†Œ (sip:alice@192.168.1.100:5060)์™€ ๊ฐ™์€ ์ค‘์š”ํ•œ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๋ ˆ์ง€์ŠคํŠธ๋ผ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ์˜ 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, and algorithm ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. REGISTER ์š”์ฒญ with authentication credentials:
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 ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์ด๋ฒˆ์—๋Š” ์ œ๊ณต๋œ ์ •๋ณด์™€ ์‚ฌ์šฉ์ž์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ด ๊ณ„์‚ฐ๋œ ์‚ฌ์šฉ์ž ์ด๋ฆ„(username), realm, nonce ๋ฐ ์‘๋‹ต๊ฐ’(response value)๊ณผ ๊ฐ™์€ ํ•„์š”ํ•œ ์ž๊ฒฉ ์ฆ๋ช…์„ ํฌํ•จํ•œ โ€œAuthorizationโ€ header๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ 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}")
  1. ์„ฑ๊ณต์ ์ธ ๋“ฑ๋ก ์‘๋‹ต (๋ ˆ์ง€์ŠคํŠธ๋ผ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ):
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โ€ ์‘๋‹ต์„ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. ์‘๋‹ต์—๋Š” ๋“ฑ๋ก๋œ contact ์ •๋ณด์™€ ๋“ฑ๋ก์˜ ๋งŒ๋ฃŒ ์‹œ๊ฐ„์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ด ์‹œ์ ์—์„œ user agent (Alice)๋Š” SIP registrar server์— ์„ฑ๊ณต์ ์œผ๋กœ ๋“ฑ๋ก๋˜๋ฉฐ, Alice๋กœ ํ–ฅํ•˜๋Š” ๋“ค์–ด์˜ค๋Š” SIP ์š”์ฒญ์€ ์ ์ ˆํ•œ contact ์ฃผ์†Œ๋กœ ๋ผ์šฐํŒ…๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Call Example

Tip

์–ธ๊ธ‰๋˜์ง€๋Š” ์•Š์•˜์ง€๋งŒ, User B๋Š” ์ „ํ™”๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ธฐ ์ „์— REGISTER message to Proxy 2 ๋ฅผ ๋ณด๋ƒˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


SIP Security and Pentesting Notes

์ด ์„น์…˜์€ ๋” ๊ด‘๋ฒ”์œ„ํ•œ VoIP ๊ฐ€์ด๋“œ๋ผ์ธ์„ ์ค‘๋ณตํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ์‹ค์šฉ์ ์ด๊ณ  ํ”„๋กœํ† ์ฝœ์— ํŠนํ™”๋œ ํŒ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ข…๋‹จ๊ฐ„ VoIP ๊ณต๊ฒฉ ๋ฐฉ๋ฒ•๋ก , ๋„๊ตฌ ๋ฐ ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค์Œ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค:

Pentesting VoIP

Fingerprinting and Discovery

  • OPTIONS ์š”์ฒญ์„ ์ „์†กํ•˜๊ณ  Allow, Supported, Server ๋ฐ User-Agent ํ—ค๋”๋ฅผ ๊ฒ€ํ† ํ•˜์—ฌ ์žฅ์น˜์™€ ์Šคํƒ์„ fingerprint ํ•ฉ๋‹ˆ๋‹ค:
# 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

Username/Extension Enumeration Behavior

  • ์—ด๊ฑฐ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ REGISTER/INVITE์—์„œ 401/407 ๋Œ€ 404/403์˜ ์ฐจ์ด๋ฅผ ์•…์šฉํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„๊ฐ€ ๊ท ์ผํ•˜๊ฒŒ ์‘๋‹ตํ•˜๋„๋ก ํ•˜์—ฌ ๋…ธ์ถœ์„ ๋ฐฉ์ง€ํ•˜์„ธ์š”.
  • Asterisk chan_sip: ์ผ๋ฐ˜ ์„ค์ •์œผ๋กœ alwaysauthreject=yes ๋ฅผ ์„ค์ •ํ•˜์—ฌ ์œ ํšจํ•œ ์‚ฌ์šฉ์ž๋ฅผ ๋…ธ์ถœํ•˜์ง€ ์•Š๋„๋ก ํ•˜์„ธ์š”. ์ตœ์‹  Asterisk(PJSIP)์—์„œ๋Š” anonymous endpoint๊ฐ€ ์ •์˜๋˜์ง€ ์•Š๋Š” ํ•œ guest calling์ด ๋น„ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๊ณ  ์œ ์‚ฌํ•œ โ€œalways auth rejectโ€ ๋™์ž‘์ด ๊ธฐ๋ณธ์ด์ง€๋งŒ, ์—ฌ์ „ํžˆ ๋„คํŠธ์›Œํฌ ACL๊ณผ perimeter์—์„œ์˜ 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 Digest)์— ๋Œ€ํ•ด SHA-256 ๋ฐ SHA-512/256์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ฑ„ํƒ ์ƒํ™ฉ์€ ๊ท ์ผํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค; ์ตœ์‹  PBX๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•  ๋•Œ ๋„๊ตฌ๋“ค์ด ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.

SIP over TLS (SIPS) and over WebSockets

  • Signaling encryption:
  • sips: URI์™€ TCP/TLS๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํฌํŠธ 5061์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์—”๋“œํฌ์ธํŠธ์—์„œ์˜ ์ธ์ฆ์„œ ๊ฒ€์ฆ์„ ํ™•์ธํ•˜์„ธ์š”; ๋งŽ์€ ์žฅ๋น„๊ฐ€ self-signed ๋˜๋Š” wildcard cert๋ฅผ ํ—ˆ์šฉํ•˜์—ฌ ์•ฝํ•œ ๋ฐฐํฌ์—์„œ๋Š” MitM์ด ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค.
  • WebRTC softphones๋Š” ์ข…์ข… RFC 7118์— ๋”ฐ๋ผ SIP over WebSocket (ws:// ๋˜๋Š” wss://)์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. PBX๊ฐ€ WSS๋ฅผ ๋…ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ ์ธ์ฆ ๋ฐ CORS๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ณ  HTTP ํ”„๋ก ํŠธ์—”๋“œ์—์„œ๋„ rate limit์ด ์ ์šฉ๋˜๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.

DoS quick checks (protocol level)

  • INVITE, REGISTER ๋˜๋Š” malformed ๋ฉ”์‹œ์ง€ ํ”Œ๋Ÿฌ๋”ฉ์€ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๋ฅผ ์†Œ๋ชจ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • UDP/5060์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ rate-limiting ์˜ˆ์‹œ(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

Recent, relevant SIP-stack CVE to watch (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 ๋ฒ„์ „์„ ๊ฒ€์ฆํ•˜๊ณ  ์ฑ…์ž„๊ฐ ์žˆ๊ฒŒ ๋ณด๊ณ ํ•˜์„ธ์š”.

Hardening checklist (SIP-specific)

  • ์‹ ํ˜ธ(Signaling)๋Š” TLS๋ฅผ ์šฐ์„  ์‚ฌ์šฉํ•˜๊ณ  ๋ฏธ๋””์–ด์—๋Š” SRTP/DTLS-SRTP๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”; ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ํ‰๋ฌธ(cleartext)์„ ๋น„ํ™œ์„ฑํ™”ํ•˜์„ธ์š”.
  • ๊ฐ•๋ ฅํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ๋‹ค์ด์ œ์ŠคํŠธ ์•Œ๊ณ ๋ฆฌ์ฆ˜(SHA-256/512-256 ์ง€์› ์‹œ; MD5๋Š” ํ”ผํ•จ)์„ ์ ์šฉํ•˜์„ธ์š”.
  • Asterisk์˜ ๊ฒฝ์šฐ:
  • chan_sip: alwaysauthreject=yes, allowguest=no, ์—”๋“œํฌ์ธํŠธ๋ณ„ permit/deny CIDR ACL ์„ค์ •.
  • PJSIP: ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๋ฉด anonymous endpoint๋ฅผ ์ƒ์„ฑํ•˜์ง€ ๋งˆ์„ธ์š”; endpoint acl/media_acl์„ ๊ฐ•์ œํ•˜๊ณ  fail2ban ๋˜๋Š” ๋™๋“ฑํ•œ ๊ฒƒ์„ ํ™œ์„ฑํ™”ํ•˜์„ธ์š”.
  • ์ •๋ณด ๋ˆ„์ถœ(leak)์„ ์ค„์ด๊ธฐ ์œ„ํ•ด SIP ํ”„๋ก์‹œ(์˜ˆ: outbound proxy/edge SBC)์—์„œ ํ† ํด๋กœ์ง€ ์ˆจ๊ธฐ๊ธฐ(topology hiding)๋ฅผ ์ ์šฉํ•˜์„ธ์š”.
  • ์—„๊ฒฉํ•œ OPTIONS ์ฒ˜๋ฆฌ ๋ฐ rate limit; ํ•„์š”ํ•˜์ง€ ์•Š์€ ๋ฉ”์„œ๋“œ(์˜ˆ: 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 ์ง€์›ํ•˜๊ธฐ