SIP (Session Initiation Protocol)
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
SIP (Oturum Başlatma Protokolü), IP ağları üzerinden ses, video ve anlık mesajlaşma dahil olmak üzere çoklu ortam oturumlarını başlatmak, değiştirmek ve sonlandırmak için yaygın olarak kullanılan bir sinyalizasyon ve çağrı kontrol protokolüdür. Internet Engineering Task Force (IETF) tarafından geliştirilen SIP, RFC 3261'de tanımlanmıştır ve VoIP ve birleşik iletişim için fiili standart haline gelmiştir.
SIP'in bazı temel özellikleri şunlardır:
Metin Tabanlı Protokol: SIP, insan tarafından okunabilir ve hata ayıklamayı kolaylaştıran metin tabanlı bir protokoldür. HTTP'ye benzer bir istek-cevap modeline dayanır ve çağrı oturumlarını kontrol etmek için INVITE, ACK, BYE ve CANCEL gibi yöntemler kullanır.
Ölçeklenebilirlik ve Esneklik: SIP, yüksek derecede ölçeklenebilir olup, küçük ölçekli dağıtımlardan büyük işletme ve taşıyıcı sınıfı ortamlara kadar kullanılabilir. Yeni özelliklerle kolayca genişletilebilir, bu da çeşitli kullanım senaryolarına ve gereksinimlere uyum sağlamasını sağlar.
Etkileşim: SIP'in yaygın benimsenmesi ve standartlaşması, farklı cihazlar, uygulamalar ve hizmet sağlayıcıları arasında daha iyi etkileşim sağlar ve çeşitli platformlar arasında kesintisiz iletişimi teşvik eder.
Modüler Tasarım: SIP, medya iletimi için RTP (Gerçek Zamanlı Taşıma Protokolü) ve çoklu ortam oturumlarını tanımlamak için SDP (Oturum Tanım Protokolü) gibi diğer protokollerle çalışır. Bu modüler tasarım, farklı medya türleri ve kodeklerle daha büyük bir esneklik ve uyumluluk sağlar.
Proxy ve Yönlendirme Sunucuları: SIP, çağrı yönlendirmeyi kolaylaştırmak ve çağrı yönlendirme, çağrı transferi ve sesli mesaj hizmetleri gibi gelişmiş özellikler sağlamak için proxy ve yönlendirme sunucularını kullanabilir.
Varlık ve Anlık Mesajlaşma: SIP, ses ve video iletişimi ile sınırlı değildir. Ayrıca varlık ve anlık mesajlaşmayı destekler, bu da geniş bir birleşik iletişim uygulamaları yelpazesini mümkün kılar.
Birçok avantajına rağmen, SIP, özellikle NAT geçişi ve güvenlik duvarı sorunlarıyla başa çıkarken yapılandırması ve yönetimi karmaşık olabilir. Ancak, çok yönlülüğü, ölçeklenebilirliği ve endüstri genelindeki geniş desteği, onu VoIP ve çoklu ortam iletişimi için popüler bir seçim haline getirir.
RFC 3261'de tanımlanan temel SIP yöntemleri şunlardır:
INVITE: Yeni bir oturum (çağrı) başlatmak veya mevcut bir oturumu değiştirmek için kullanılır. INVITE yöntemi, önerilen oturumun ayrıntılarını, medya türleri, kodekler ve taşıma protokolleri gibi bilgileri alıcıya iletmek için oturum tanımını (genellikle SDP kullanarak) taşır.
ACK: Bir INVITE isteğine verilen son yanıtın alındığını onaylamak için gönderilir. ACK yöntemi, uçtan uca onay sağlayarak INVITE işlemlerinin güvenilirliğini sağlar.
BYE: Kurulmuş bir oturumu (çağrıyı) sonlandırmak için kullanılır. BYE yöntemi, iletişimi sonlandırmak isteyen taraf tarafından gönderilir.
CANCEL: Oturum kurulmadan önce bekleyen bir INVITE isteğini iptal etmek için gönderilir. CANCEL yöntemi, gönderenin fikrini değiştirmesi veya alıcıdan yanıt gelmemesi durumunda bir INVITE işlemini iptal etmesine olanak tanır.
OPTIONS: Bir SIP sunucusunun veya kullanıcı aracısının yeteneklerini sorgulamak için kullanılır. OPTIONS yöntemi, oturum kurmadan desteklenen yöntemler, medya türleri veya diğer uzantılar hakkında bilgi talep etmek için gönderilebilir.
REGISTER: Bir kullanıcı aracı tarafından bir SIP kayıt sunucusuna mevcut konumunu kaydetmek için kullanılır. REGISTER yöntemi, bir kullanıcının SIP URI'si ile mevcut IP adresi arasında güncel bir eşleme sağlamaya yardımcı olur, bu da çağrı yönlendirme ve teslimatını mümkün kılar.
Birine çağrı yapmak için REGISTER kullanmak gerekli değildir.
Ancak, bir INVITE gerçekleştirmek için arayanın önce kimlik doğrulaması yapması gerekebilir veya 401 Unauthorized
yanıtı alabilir.
Bu temel yöntemlerin yanı sıra, diğer RFC'lerde tanımlanan birçok SIP uzantı yöntemi bulunmaktadır:
SUBSCRIBE: RFC 6665'te tanımlanan SUBSCRIBE yöntemi, belirli bir kaynağın durumu hakkında bildirim talep etmek için kullanılır, örneğin bir kullanıcının varlığı veya çağrı durumu.
NOTIFY: RFC 6665'te de tanımlanan NOTIFY yöntemi, bir sunucu tarafından abonelikteki bir kullanıcı aracısına izlenen bir kaynağın durumundaki değişiklikler hakkında bilgi vermek için gönderilir.
REFER: RFC 3515'te tanımlanan REFER yöntemi, alıcının bir transfer gerçekleştirmesini veya üçüncü bir tarafa yönlendirmesini talep etmek için kullanılır. Bu genellikle çağrı transferi senaryolarında kullanılır.
MESSAGE: RFC 3428'de tanımlanan MESSAGE yöntemi, SIP kullanıcı araçları arasında anlık mesajlar göndermek için kullanılır ve SIP çerçevesinde metin tabanlı iletişimi mümkün kılar.
UPDATE: RFC 3311'de tanımlanan UPDATE yöntemi, mevcut diyalogun durumunu etkilemeden bir oturumu değiştirmeye olanak tanır. Bu, devam eden bir çağrı sırasında kodekler veya medya türleri gibi oturum parametrelerini güncellemek için yararlıdır.
PUBLISH: RFC 3903'te tanımlanan PUBLISH yöntemi, bir kullanıcı aracı tarafından bir sunucuya olay durumu bilgilerini yayınlamak için kullanılır ve bu bilgileri diğer ilgilenen taraflara sunar.
1xx (Geçici Yanıtlar): Bu yanıtlar, isteğin alındığını ve sunucunun işlemeye devam ettiğini gösterir.
100 Trying: İstek alındı ve sunucu üzerinde çalışıyor.
180 Ringing: Aranan kişi uyarılıyor ve çağrıyı alacak.
183 Session Progress: Çağrının ilerlemesi hakkında bilgi sağlar.
2xx (Başarılı Yanıtlar): Bu yanıtlar, isteğin başarıyla alındığını, anlaşıldığını ve kabul edildiğini gösterir.
200 OK: İstek başarılı oldu ve sunucu bunu yerine getirdi.
202 Accepted: İstek işleme alındı, ancak henüz tamamlanmadı.
3xx (Yönlendirme Yanıtları): Bu yanıtlar, isteği yerine getirmek için daha fazla eylem gerektiğini gösterir, genellikle alternatif bir kaynağa başvurarak.
300 Multiple Choices: Birden fazla seçenek mevcut ve kullanıcı veya istemci birini seçmelidir.
301 Moved Permanently: İstenilen kaynak yeni bir kalıcı URI'ye atanmıştır.
302 Moved Temporarily: İstenilen kaynak geçici olarak farklı bir URI'de mevcuttur.
305 Use Proxy: İstek belirtilen bir proxy'e gönderilmelidir.
4xx (İstemci Hatası Yanıtları): Bu yanıtlar, isteğin kötü bir sözdizimi içerdiğini veya sunucu tarafından yerine getirilemeyeceğini gösterir.
400 Bad Request: İstek biçimsel olarak hatalı veya geçersizdi.
401 Unauthorized: İstek kullanıcı kimlik doğrulaması gerektirir.
403 Forbidden: Sunucu isteği anladı ancak yerine getirmeyi reddetti.
404 Not Found: İstenilen kaynak sunucuda bulunamadı.
408 Request Timeout: Sunucu, beklemeye hazır olduğu süre içinde tamamlanmış bir istek almadı.
486 Busy Here: Aranan kişi şu anda meşguldür ve çağrıyı alamaz.
5xx (Sunucu Hatası Yanıtları): Bu yanıtlar, sunucunun geçerli bir isteği yerine getirmekte başarısız olduğunu gösterir.
500 Internal Server Error: Sunucu isteği işlerken bir hata ile karşılaştı.
501 Not Implemented: Sunucu, isteği yerine getirmek için gereken işlevselliği desteklemiyor.
503 Service Unavailable: Sunucu, bakım veya aşırı yük nedeniyle isteği şu anda işleyemiyor.
6xx (Küresel Hata Yanıtları): Bu yanıtlar, isteğin herhangi bir sunucu tarafından yerine getirilemeyeceğini gösterir.
600 Busy Everywhere: Çağrı için tüm olası varış noktaları meşguldür.
603 Decline: Aranan kişi çağrıya katılmak istemiyor.
604 Does Not Exist Anywhere: İstenilen kaynak ağda hiçbir yerde mevcut değil.
REGISTER yöntemi, bir kullanıcı ajanının (UA), örneğin bir VoIP telefonu veya bir softphone'un, bir SIP kayıt sunucusuna konumunu kaydetmesine olanak tanır. Bu süreç, sunucunun kayıtlı kullanıcıya yönelik gelen SIP isteklerini nereye yönlendireceğini bilmesini sağlar. Kayıt sunucusu genellikle bir SIP proxy sunucusunun veya özel bir kayıt sunucusunun parçasıdır.
İşte bir REGISTER kimlik doğrulama sürecinde yer alan SIP mesajlarının ayrıntılı bir örneği:
UA'dan kayıt sunucusuna ilk REGISTER isteği:
Bu başlangıç REGISTER mesajı, UA (Alice) tarafından kayıt sunucusuna gönderilir. İstenilen kayıt süresi (Expires), kullanıcının SIP URI'si (sip:alice@example.com) ve kullanıcının iletişim adresi (sip:alice@192.168.1.100:5060) gibi önemli bilgileri içerir.
401 Yetkisiz yanıtı kayıt sunucusundan:
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.
KAYIT isteği kimlik doğrulama bilgileri ile:
UA, bu sefer gerekli kimlik bilgilerini içeren "Authorization" başlığını, kullanıcı adı, realm, nonce ve sağlanan bilgiler ile kullanıcının şifresini kullanarak hesaplanan bir yanıt değeri ile birlikte başka bir REGISTER isteği gönderir.
Authorization yanıtı bu şekilde hesaplanır:
Başarılı kayıt yanıtı kayıt sunucusundan:
After the registrar server verifies the provided credentials, kayıt işleminin başarılı olduğunu belirtmek için "200 OK" yanıtı gönderir. Yanıt, kayıtlı iletişim bilgilerini ve kaydın sona erme zamanını içerir. Bu noktada, kullanıcı ajanı (Alice) SIP kayıt sunucusuna başarıyla kaydedilmiştir ve Alice için gelen SIP istekleri uygun iletişim adresine yönlendirilebilir.
Bahsedilmemiştir, ancak Kullanıcı B'nin arama alabilmesi için Proxy 2'ye bir REGISTER mesajı göndermiş olması gerekir.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)