SIP (Session Initiation Protocol)
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
기본 정보
SIP (Session Initiation Protocol)는 신호 및 통화 제어 프로토콜로, IP 네트워크를 통해 음성, 비디오 및 인스턴트 메시징을 포함한 멀티미디어 세션을 설정, 수정 및 종료하는 데 널리 사용됩니다. **인터넷 엔지니어링 태스크 포스(IETF)**에 의해 개발된 SIP는 RFC 3261에 정의되어 있으며 VoIP 및 통합 커뮤니케이션의 사실상 표준이 되었습니다.
SIP의 주요 기능은 다음과 같습니다:
텍스트 기반 프로토콜: SIP는 텍스트 기반 프로토콜로, 사람이 읽을 수 있고 디버깅이 용이합니다. HTTP와 유사한 요청-응답 모델을 기반으로 하며, 통화 세션을 제어하기 위해 INVITE, ACK, BYE 및 CANCEL과 같은 메서드를 사용합니다.
확장성 및 유연성: SIP는 매우 확장 가능하며 소규모 배포부터 대규모 기업 및 통신사 환경까지 사용할 수 있습니다. 새로운 기능으로 쉽게 확장할 수 있어 다양한 사용 사례와 요구 사항에 적응할 수 있습니다.
상호 운용성: SIP의 광범위한 채택과 표준화는 다양한 장치, 애플리케이션 및 서비스 제공업체 간의 더 나은 상호 운용성을 보장하여 다양한 플랫폼 간의 원활한 통신을 촉진합니다.
모듈식 설계: SIP는 미디어 전송을 위한 RTP (Real-time Transport Protocol) 및 멀티미디어 세션 설명을 위한 **SDP (Session Description Protocol)**와 같은 다른 프로토콜과 함께 작동합니다. 이 모듈식 설계는 다양한 미디어 유형 및 코덱과의 호환성을 높여줍니다.
프록시 및 리디렉션 서버: SIP는 통화 라우팅을 용이하게 하고 통화 포워딩, 통화 전환 및 음성 메일 서비스와 같은 고급 기능을 제공하기 위해 프록시 및 리디렉션 서버를 사용할 수 있습니다.
프레즌스 및 인스턴트 메시징: 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 주소 간의 최신 매핑을 유지하는 데 도움을 주어 통화 라우팅 및 전달을 가능하게 합니다.
누군가에게 전화를 걸기 위해서는 REGISTER를 사용할 필요가 없습니다.
그러나 INVITE를 수행하기 위해 발신자가 먼저 인증해야 할 수도 있으며, 그렇지 않으면 401 Unauthorized
응답을 받을 수 있습니다.
이러한 핵심 메서드 외에도 다른 RFC에서 정의된 여러 SIP 확장 메서드가 있습니다:
SUBSCRIBE: RFC 6665에 정의된 SUBSCRIBE 메서드는 특정 리소스의 상태(예: 사용자의 프레즌스 또는 통화 상태)에 대한 알림을 요청하는 데 사용됩니다.
NOTIFY: RFC 6665에 정의된 NOTIFY 메서드는 서버가 구독된 사용자 에이전트에게 모니터링된 리소스의 상태 변경에 대해 알리기 위해 전송됩니다.
REFER: RFC 3515에 정의된 REFER 메서드는 수신자에게 전환을 수행하거나 제3자를 참조하도록 요청하는 데 사용됩니다. 이는 일반적으로 통화 전환 시나리오에 사용됩니다.
MESSAGE: RFC 3428에 정의된 MESSAGE 메서드는 SIP 사용자 에이전트 간에 인스턴트 메시지를 전송하는 데 사용됩니다, SIP 프레임워크 내에서 텍스트 기반 통신을 가능하게 합니다.
UPDATE: RFC 3311에 정의된 UPDATE 메서드는 기존 대화의 상태에 영향을 주지 않고 세션을 수정할 수 있게 해줍니다. 이는 진행 중인 통화 중에 코덱이나 미디어 유형과 같은 세션 매개변수를 업데이트하는 데 유용합니다.
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 예시
SIP REGISTER 예제
REGISTER 메서드는 세션 시작 프로토콜(SIP)에서 사용자 에이전트(UA), 예를 들어 VoIP 전화기나 소프트폰이 SIP 등록 서버에 자신의 위치를 등록할 수 있도록 사용됩니다. 이 과정은 서버가 등록된 사용자에게 도착하는 SIP 요청을 어디로 라우팅해야 하는지 알 수 있게 합니다. 등록 서버는 일반적으로 SIP 프록시 서버 또는 전용 등록 서버의 일부입니다.
다음은 REGISTER 인증 프로세스에 관련된 SIP 메시지의 자세한 예입니다:
UA에서 등록 서버로의 초기 REGISTER 요청:
이 초기 REGISTER 메시지는 UA(앨리스)가 등록 서버에 전송합니다. 여기에는 원하는 등록 기간(Expires), 사용자의 SIP URI (sip:alice@example.com), 및 사용자의 연락처 주소(sip:alice@192.168.1.100:5060)와 같은 중요한 정보가 포함됩니다.
401 Unauthorized 등록 서버의 응답:
The registrar server responds with a "401 Unauthorized" message, which includes a "WWW-Authenticate" header. This header contains information required for the UA to authenticate itself, such as the authentication realm, nonce, and algorithm.
REGISTER 요청 인증 자격 증명 포함:
UA는 또 다른 REGISTER 요청을 보냅니다. 이번에는 필요한 자격 증명, 즉 사용자 이름, 영역, nonce 및 제공된 정보와 사용자의 비밀번호를 사용하여 계산된 응답 값을 포함한 "Authorization" 헤더를 포함합니다.
이것이 Authorization 응답이 계산되는 방법입니다:
성공적인 등록 응답은 등록 서버에서:
등록 서버가 제공된 자격 증명을 확인한 후, 등록이 성공했음을 나타내기 위해 "200 OK" 응답을 보냅니다. 응답에는 등록된 연락처 정보와 등록의 만료 시간이 포함됩니다. 이 시점에서 사용자 에이전트(앨리스)는 SIP 등록 서버에 성공적으로 등록되었으며, 앨리스를 위한 수신 SIP 요청은 적절한 연락처 주소로 라우팅될 수 있습니다.
통화 예시
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F311514708-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F1ImEu59kE9yiIA7SmB7z%252Fuploads%252Fgit-blob-3b12c48a60522cd163d8f44ef4ee564a601966ef%252Fimage%2520%281101%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=fad1524c&sv=1)
언급되지는 않았지만, 사용자 B는 전화를 받을 수 있기 전에 Proxy 2에 REGISTER 메시지를 전송해야 합니다.
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기:
HackTricks Training GCP Red Team Expert (GRTE)
Last updated