Nexpert SIP - Security

From 탱이의 잡동사니
Jump to navigation Jump to search

Overview

원문은 이곳<ref>https://www.nexpert.net/276</ref>에서 확인이 가능하다.

다양한 SIP 보안 방법

SIP 에서 제공하는 보안을 위한 방법들은 다음과 같다.

  • Digest Authentication (발신자 인증)
같은 도메인 내에서 적용되어 발신자를 인증하기 위해 사용하는 방식으로 가장 많이 사용한다. HTTP에서 사용되는 인증방식으로 재사용 공격 방지와 인증을 제공한다.
  • TLS/IPSec
Hop by Hop 또는 End-to-End 로 Signalling 에 대한 기밀성과 무결성을 보장한다.
  • S/MIME(Secure / Multipurpose Internet Mail Extension)
SIP 메시지 바디는 MIME으로 구성되어 있으며, 이 메시지를 암호화하여 기밀성 및 무결성을 제공한다.
  • Network Asserted Identity(NAI)
같은 도메인 내의 사용자를 식별한다.
  • SIP Identity
NAI 가 같은 도메인 내에서 발신측을 식별하였다면, SIP Identity 는 도메인과 도메인같에 발신측을 인증한다.
  • SIP Privacy
외부 도메인에 대해 메시지의 특정 부분을 보호한다.

SIP Digest Authentication

SIP Digest은 INVITE, REGISTER 등과 같은 요청에 대해 서버는 NONCE 라고 하는 난수 물자열을 생성하여 전송한다. UAC는 사용자 이름, 암호 및 NONCE 를 포함하는 MD5 Hash 로 응답한다. 주고 받는 메시지 내에서 사용자 이름과 암호를 확인하기 어렵기 때문에 발신자에 대한 인증과 재사용(Replay) 공격을 방지할 수 있다. 이 인증 방법은 HTTP Digest Authentication 을 기반으로 하여 RFC 2617 에 자세히 나와 있다. 여기서, 사용자 이름과 암호는 고유하며, 쌍방간에 사전에 교환되었음을 가정한다. 따라서, 신뢰할 수 있는 도메인 내에서만 사용되는 것이다.

UAC -> Proxy
INVITE sip:9999999999@test.sip.pchero21.com;transport=UDP SIP/2.0
Via: SIP/2.0/UDP 192.168.100.10:52049;branch=z9hG4bK-524287-1---e188803aa3bf9d83;rport
Max-Forwards: 70
Contact: <sip:test@192.168.100.10:52049;transport=UDP>
To: <sip:9999999999@test.sip.pchero21.com;transport=UDP>
From: <sip:test@test.sip.pchero21.com;transport=UDP>;tag=df29ba2b
Call-ID: io3Rq9OC_jPd0C5q8copaA..
CSeq: 1 INVITE
Allow: INVITE, ACK, CANCEL, BYE, NOTIFY, REFER, MESSAGE, OPTIONS, INFO, SUBSCRIBE
Content-Type: application/sdp
User-Agent: Z 5.2.28 rv2.8.115
Allow-Events: presence, kpml, talk
Content-Length: 655
<UAC's SDP not shown>


Proxy -> UAC
SIP/2.0 407 Proxy Authentication Required
Via: SIP/2.0/UDP 192.168.100.10:52049;branch=z9hG4bK-524287-1---e188803aa3bf9d83;rport=52049;received=192.168.100.10
To: <sip:9999999999@test.sip.pchero21.com;transport=UDP>;tag=883012262b7bb76abb1fc00203c3e0e7.a390
From: <sip:test@test.sip.pchero21.com;transport=UDP>;tag=df29ba2b
Call-ID: io3Rq9OC_jPd0C5q8copaA..
CSeq: 1 INVITE
Proxy-Authenticate: Digest realm="test.sip.pchero21.com", nonce="XfH7cF3x+kQNger90ldf+Spo5nmM4L66"
Content-Length: 0

UAC -> Proxy
ACK sip:9999999999@test.sip.pchero21.com;transport=UDP SIP/2.0
Via: SIP/2.0/UDP 192.168.100.10:52049;branch=z9hG4bK-524287-1---e188803aa3bf9d83;rport
Max-Forwards: 70
To: <sip:9999999999@test.sip.pchero21.com;transport=UDP>;tag=883012262b7bb76abb1fc00203c3e0e7.a390
From: <sip:test@test.sip.pchero21.com;transport=UDP>;tag=df29ba2b
Call-ID: io3Rq9OC_jPd0C5q8copaA..
CSeq: 1 ACK
Content-Length: 0

UAC의 INVITE를 받은 SIP Proxy 서버는 407 Proxy Auth Req 에러 메시지를 전송한다. 만일 SIP Redirect 나 Registra Server 라면, 401 Unauthorised 라는 에러 메시지를 전송한다. 여기서 Proxy-Authenticate 헤더는 인증에 필요한 정보를 포함하여 INVITE 를 재전송할 것을 요구하는 것이다.

Proxy-Authenticate: Digest realm="test.sip.pchero21.com", nonce="XfH7cF3x+kQNger90ldf+Spo5nmM4L66"

복잡한 내용이지만 모든것을 알아야 할 필요는 없다. realm 파라미터는 도메인 네임을 의미하며, qop="auth" 파라미터는 사용자 인증 요청을 의미한다. nonce 는 시간을 기반으로 만들어진 문자 난수열이며, MD5 로 해쉬되어 있다.

UAC -> Proxy
INVITE sip:9999999999@test.sip.pchero21.com;transport=UDP SIP/2.0
Via: SIP/2.0/UDP 192.168.100.10:52049;branch=z9hG4bK-524287-1---e98fbd655da0654f;rport
Max-Forwards: 70
Contact: <sip:test@192.168.100.10:52049;transport=UDP>
To: <sip:9999999999@test.sip.pchero21.com;transport=UDP>
From: <sip:test@test.sip.pchero21.com;transport=UDP>;tag=df29ba2b
Call-ID: io3Rq9OC_jPd0C5q8copaA..
CSeq: 2 INVITE
Allow: INVITE, ACK, CANCEL, BYE, NOTIFY, REFER, MESSAGE, OPTIONS, INFO, SUBSCRIBE
Content-Type: application/sdp
Proxy-Authorization: Digest username="test",realm="test.sip.pchero21.com",nonce="XfH7cF3x+kQNger90ldf+Spo5nmM4L66",uri="sip:9999999999@test.sip.pchero21.com;transport=UDP",response="c1e14f
3ebc88eebc094e308ba5c278",algorithm=MD5
User-Agent: Z 5.2.28 rv2.8.115
Allow-Events: presence, kpml, talk
Content-Length: 655
<UAC's SDP not shown>

407 Proxy Quth Req 에러 메시지를 받은 UAC 는 Authorization/Proxy-Authorization 헤더를 포함하여 INVITE를 재전송하며, 수신한 SIP Proxy 서버는 INVITE 를 보낸 발신자가 인증된 UAC 가 맞다는 것을 확인하는 것이다.

만일 2 개의 SIP Proxy 를 거치는 경우의 Digest 인즌은 다음과 같은 호 흐름을 사용한다.

See also

References

<references />