Nexpert SIP - Security
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 인즌은 다음과 같은 호 흐름을 사용한다.
SIPS(TLS): Hop-by-Hop Security
SIP Proxy 서버가 SIP Message를 추가 변경 삭제가 가능할 뿐만 아니라 항상 메시지 내용을 확인해야 하기 때문에 Alice 와 Bob 간의 End-to-End 로 암호화를 하는 것이 어렵다. 그래서, Hop-by-Hop 으로 처리될 수 밖에 없다.
아래 그림에서처럼 Alice 의 전화기와 Proxy 1 간에 TLS 를 이용하여 암호화를 수행하고, 복호화한 후에 다시 암호화하여 Proxy 2 로 전송하는 과정을 반복해야 한다.
TLS 는 Transport Layer Security 의 약자이며, 두 통신 시스템간의 데이터 무결성과 기밀성을 제공한다. TLS를 활용한 SIPS 는 다음과 같은 몇 가지 특징이 있다.
- TLS 를 TCP 와 같은 신뢰할 수 있는 전송 프로토콜 위에서 동작한다.
- 데이터 암호화를 위해 DES 와 같은 Symmetric 암호화를 사용한다.
- 암호화 키는 connection 마다 유일하다.
- MD5나 SHA 해쉬로 메시지 무결성을 나타낸다.
- 서버와 클라이언트간에 상호 인증을 수행한다.
- TLS 는 AES@128 bit 를 사용해야 한다.
S/MIME
See also
References
<references />