Nexpert SIP - Security: Difference between revisions

From 탱이의 잡동사니
Jump to navigation Jump to search
No edit summary
Line 123: Line 123:
[[File:Sip security 4.png]]
[[File:Sip security 4.png]]


위의 그림에서 Alice 가
위의 그림은 Alice 가 Audrey 에게 INVITE 를 전송하는 과정이다. 즉, UAC 가 보내는 INVITE 메시지이다. 내용을 간단히 살펴보면, From 헤더는 anonymous 로 표시되고, P-Preferred-Identity 헤더에 사용자 정보가 포함된다.
 
Privacy 헤더는 "none"으로 표시되어 P-Asserted-Identity 가 있던 없던 상관하지 않겠다는 의미이다.
 
여기서 From 헤더가 anonymous 로 ㅠㅛ시된 것은 P-Preferred-Identity 가 우선적으로 사용되기 때문이다.
 
* P-Asserted-Identity(PAI)
: 이 헤더는 신뢰할 수 있는 SIP Entity 사이에 사용되며, SIP message 를 보내는 사용자를 확인한다. 이 헤더는 From 헤더와 달리 다른 값으로 변경이 불가능하며 우선순위가 더 높아 From 의 값보다는 PAI 값을 사용한다. 서버 측에서 인증하고 생성하는 P-Asserted-Identity 가 과금 정보에 주로 사용된다.
 
* P-Preferred-Identity(PPI)
: 이 헤더는 신뢰할 수 있는 도메인 내에서 UAC가 선호하는 URI 를 지정한다. 즉, UAC가 신뢰할 수 있는 Proxy Server 에게 SIP Message 를 보내는 자신의 정확한 ID 를 명기하는 것이다.
 
* Privacy
: Privacy에 "id"가 있으면, 신뢰할 수 없는 곳으로 SIP Message를 전달할 때, P-Asserted-Identity Header를 삭제하고 전달해야 하며, "none"으로 표시되어 있으면 삭제하지 않고 전달한다. 만일, Privacy 헤더가 없다면, P-Asserted-Identity 헤더의 추가 또는 삭제를 마음대로 할 수 있다.


== See also ==
== See also ==

Revision as of 13:11, 12 December 2019

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 인즌은 다음과 같은 호 흐름을 사용한다.

Sip security 1.png

SIPS(TLS): Hop-by-Hop Security

SIP Proxy 서버가 SIP Message를 추가 변경 삭제가 가능할 뿐만 아니라 항상 메시지 내용을 확인해야 하기 때문에 Alice 와 Bob 간의 End-to-End 로 암호화를 하는 것이 어렵다. 그래서, Hop-by-Hop 으로 처리될 수 밖에 없다.

아래 그림에서처럼 Alice 의 전화기와 Proxy 1 간에 TLS 를 이용하여 암호화를 수행하고, 복호화한 후에 다시 암호화하여 Proxy 2 로 전송하는 과정을 반복해야 한다.

Sip security 2.png

TLS 는 Transport Layer Security 의 약자이며, 두 통신 시스템간의 데이터 무결성과 기밀성을 제공한다. TLS를 활용한 SIPS 는 다음과 같은 몇 가지 특징이 있다.

  • TLS 를 TCP 와 같은 신뢰할 수 있는 전송 프로토콜 위에서 동작한다.
  • 데이터 암호화를 위해 DES 와 같은 Symmetric 암호화를 사용한다.
  • 암호화 키는 connection 마다 유일하다.
  • MD5나 SHA 해쉬로 메시지 무결성을 나타낸다.
  • 서버와 클라이언트간에 상호 인증을 수행한다.
  • TLS 는 AES@128 bit 를 사용해야 한다.

S/MIME

S/MIME는 SDP를 암호화하거나 SIP 전체 미시지에 대한 서명, 무결성을 제공할 수 있다. 아래 그림은 Alice 가 Bob 에게 INVITE 를 보내는 과정을 나타낸 것이며, SDP 부분이 암호화 되어 있다.

Sip security 3.png

위 SIP 메시지 중에 Content-Type 헤더의 application/pkcs7-mime 이라는 파라미터는 S/MIME 임을 가리킨다. S/MIME는 SHA1 인증과 3 DES 암호화 알고리즘을 사용한다. S/MIME 는 SDP 가 암호화되어 End-to-End 간 즉, Alice 와 Bob 만이 이해할 수 있다. 따라서, 중간에서 SDP 메시지를 이해해야 하는 서비스 즉, Redirect 또는 Forking 과 같은 서비스를 같이 사용할 수 없는 것이 단점이다.

Network Asserted Identity/Privacy (Trusted)

도메인 내에서 Digest 가 사용자를 인증한다면, NAI 는 사용자 식별을 위해 사용되는 매커니즘이다. 둘다 비슷하지만 구체적으로는 약간의 차이가 있다.

Sip security 4.png

위의 그림은 Alice 가 Audrey 에게 INVITE 를 전송하는 과정이다. 즉, UAC 가 보내는 INVITE 메시지이다. 내용을 간단히 살펴보면, From 헤더는 anonymous 로 표시되고, P-Preferred-Identity 헤더에 사용자 정보가 포함된다.

Privacy 헤더는 "none"으로 표시되어 P-Asserted-Identity 가 있던 없던 상관하지 않겠다는 의미이다.

여기서 From 헤더가 anonymous 로 ㅠㅛ시된 것은 P-Preferred-Identity 가 우선적으로 사용되기 때문이다.

  • P-Asserted-Identity(PAI)
이 헤더는 신뢰할 수 있는 SIP Entity 사이에 사용되며, SIP message 를 보내는 사용자를 확인한다. 이 헤더는 From 헤더와 달리 다른 값으로 변경이 불가능하며 우선순위가 더 높아 From 의 값보다는 PAI 값을 사용한다. 서버 측에서 인증하고 생성하는 P-Asserted-Identity 가 과금 정보에 주로 사용된다.
  • P-Preferred-Identity(PPI)
이 헤더는 신뢰할 수 있는 도메인 내에서 UAC가 선호하는 URI 를 지정한다. 즉, UAC가 신뢰할 수 있는 Proxy Server 에게 SIP Message 를 보내는 자신의 정확한 ID 를 명기하는 것이다.
  • Privacy
Privacy에 "id"가 있으면, 신뢰할 수 없는 곳으로 SIP Message를 전달할 때, P-Asserted-Identity Header를 삭제하고 전달해야 하며, "none"으로 표시되어 있으면 삭제하지 않고 전달한다. 만일, Privacy 헤더가 없다면, P-Asserted-Identity 헤더의 추가 또는 삭제를 마음대로 할 수 있다.

See also

References

<references />