mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/network-services-pentesting/pentesting-voip/basic-voip-
This commit is contained in:
parent
4b9a53425c
commit
5fa3ff1678
@ -4,72 +4,72 @@
|
||||
|
||||
## Temel Bilgiler
|
||||
|
||||
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 (Session Initiation Protocol), IP ağları üzerinden ses, video ve anlık mesajlaşma dahil olmak üzere multimedya oturumlarını başlatmak, değiştirmek ve sonlandırmak için yaygın olarak kullanılan bir **sinyalleşme ve çağrı kontrol protokolü**dür. **Internet Engineering Task Force (IETF)** tarafından geliştirilmiş olan SIP, **RFC 3261**'de tanımlanmıştır ve VoIP ile birleşik iletişim için fiili standart haline gelmiştir.
|
||||
|
||||
SIP'in bazı temel özellikleri şunlardır:
|
||||
|
||||
1. **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.
|
||||
2. **Ö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.
|
||||
3. **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.
|
||||
4. **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.
|
||||
5. **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.
|
||||
6. **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.
|
||||
1. **Metin-tabanlı Protokol**: SIP metin tabanlı bir protokoldür; bu da onu insan tarafından okunabilir ve hata ayıklaması daha kolay yapar. HTTP'ye benzer şekilde istek-cevap modeli üzerine kuruludur ve INVITE, ACK, BYE, CANCEL gibi yöntemleri çağrı oturumlarını kontrol etmek için kullanır.
|
||||
2. **Ölçeklenebilirlik ve Esneklik**: SIP yüksek derecede ölçeklenebilir olup küçük ölçekli kurulumlardan büyük kurumsal veya taşıyıcı düzeyi ortamlara kadar kullanılabilir. Yeni özelliklerle kolayca genişletilebilir, bu da farklı kullanım durumları ve gereksinimlere uyum sağlamasını sağlar.
|
||||
3. **Birlikte Çalışabilirlik**: SIP'in yaygın kabulü ve standartlaştırılması, farklı cihazlar, uygulamalar ve servis sağlayıcıları arasında daha iyi birlikte çalışabilirlik sağlayarak çeşitli platformlarda kesintisiz iletişimi teşvik eder.
|
||||
4. **Modüler Tasarım**: SIP, medya iletimi için **RTP (Real-time Transport Protocol)** ve multimedya oturumlarını tanımlamak için **SDP (Session Description Protocol)** gibi diğer protokollerle çalışır. Bu modüler tasarım, farklı medya türleri ve codec'lerle daha fazla esneklik ve uyumluluk sağlar.
|
||||
5. **Proxy ve Redirect Sunucuları**: SIP, çağrı yönlendirmesini kolaylaştırmak ve çağrı yönlendirme, çağrı transferi ve sesli posta hizmetleri gibi gelişmiş özellikler sunmak için proxy ve redirect sunucularını kullanabilir.
|
||||
6. **Presence ve Anlık Mesajlaşma**: SIP yalnızca ses ve video iletişimi ile sınırlı değildir. Ayrıca presence ve anlık mesajlaşmayı destekleyerek geniş bir birleşik iletişim uygulamaları yelpazesi sağ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, VoIP ve çoklu ortam iletişimi için popüler bir seçim olmasını sağlar.
|
||||
Birçok avantajına rağmen, SIP yapılandırma ve yönetim açısından özellikle NAT geçişi ve firewall sorunlarıyla uğraşırken karmaşık olabilir. Ancak esnekliği, ölçeklenebilirliği ve sektördeki geniş desteği, VoIP ve multimedya iletişimi için popüler bir seçim olmasını sağlar.
|
||||
|
||||
### SIP Yöntemleri
|
||||
|
||||
**RFC 3261**'de tanımlanan temel SIP yöntemleri şunlardır:
|
||||
|
||||
1. **INVITE**: Yeni bir oturum (çağrı) başlatmak veya mevcut birini 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.
|
||||
2. **ACK**: Bir INVITE isteğine verilen son yanıtın alındığını **onaylamak için** gönderilir. ACK yöntemi, INVITE işlemlerinin güvenilirliğini sağlamak için uçtan uca onay sağlar.
|
||||
3. **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.
|
||||
4. **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.
|
||||
5. **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.
|
||||
6. **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önlendirmeyi ve iletimini mümkün kılar.
|
||||
1. **INVITE**: Yeni bir oturumu (çağrıyı) **başlatmak** veya mevcut bir oturumu değiştirmek için kullanılır. INVITE yöntemi, önerilen oturumun detayları hakkında alıcıyı bilgilendirmek için oturum tanımını (genellikle SDP kullanılarak) taşır; örneğin medya türleri, codec'ler ve taşıma protokolleri.
|
||||
2. **ACK**: Bir INVITE isteğine verilen nihai yanıtın **alındığını teyit etmek** için gönderilir. ACK yöntemi, INVITE işlemlerinin güvenilirliğini uçtan uca onaylayarak sağlar.
|
||||
3. **BYE**: Kurulmuş bir oturumu (çağrıyı) **sonlandırmak** için kullanılır. BYE yöntemi, iletişimi sonlandırmak isteyen taraflardan herhangi biri tarafından gönderilir.
|
||||
4. **CANCEL**: Bekleyen bir INVITE isteğini oturum kurulmadan önce **iptal etmek** için gönderilir. Gönderenin fikrini değiştirmesi veya alıcıdan yanıt gelmemesi durumunda INVITE işleminden vazgeçmesini sağlar.
|
||||
5. **OPTIONS**: Bir SIP sunucusunun veya user agent'ın **yetkinliklerini sorgulamak** için kullanılır. OPTIONS yöntemi, bir oturum kurmadan desteklenen yöntemler, medya türleri veya diğer uzantılar hakkında bilgi istemek için gönderilebilir.
|
||||
6. **REGISTER**: Bir user agent'ın **mevcut konumunu bir SIP registrar sunucusuna kaydetmesi** için kullanılır. REGISTER yöntemi, bir kullanıcının SIP URI'si ile mevcut IP adresi arasındaki güncel eşlemenin korunmasına yardımcı olarak çağrı yönlendirme ve teslimatını sağlar.
|
||||
|
||||
> [!WARNING]
|
||||
> 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.
|
||||
> Kişiyi aramak için herhangi bir şey için **REGISTER kullanmak zorunda olmak** gerekli değildir.\
|
||||
> Ancak, bir **INVITE** gerçekleştirebilmek için arayanın önce **kimlik doğrulaması** yapması gerekebilir veya **`401 Unauthorized`** cevabı alabilir.
|
||||
|
||||
Bu temel yöntemlere ek olarak, diğer RFC'lerde tanımlanan **birçok SIP uzantı yöntemi** bulunmaktadır:
|
||||
Bu temel yöntemlere ek olarak, diğer RFC'lerde tanımlanmış **birkaç SIP uzantı yöntemi** de vardır; örneğin:
|
||||
|
||||
1. **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.
|
||||
2. **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.
|
||||
3. **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.
|
||||
4. **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çevesi içinde metin tabanlı iletişimi mümkün kılar.
|
||||
5. **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.
|
||||
6. **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 ilgili taraflara sunar.
|
||||
1. **SUBSCRIBE**: RFC 6665'te tanımlanmıştır; SUBSCRIBE yöntemi, bir kullanıcının varlığı veya çağrı durumu gibi belirli bir kaynağın durumu hakkında **bildirim talep etmek** için kullanılır.
|
||||
2. **NOTIFY**: Yine RFC 6665'te tanımlıdır; NOTIFY yöntemi, bir sunucu tarafından **abone olan user agent'ı** izlenen bir kaynağın durumundaki değişiklikler hakkında bilgilendirmek için gönderilir.
|
||||
3. **REFER**: RFC 3515'te tanımlanmıştır; REFER yöntemi, alıcıdan **bir transfer gerçekleştirmesini veya üçüncü bir tarafa yönlendirmesini** istemek için kullanılır. Bu genellikle **çağrı transferi** senaryolarında kullanılır.
|
||||
4. **MESSAGE**: RFC 3428'de tanımlanmıştır; MESSAGE yöntemi, SIP user agent'ları arasında **anlık mesaj göndermek** için kullanılır ve SIP çerçevesi içinde metin tabanlı iletişim sağlar.
|
||||
5. **UPDATE**: RFC 3311'de tanımlanmıştır; UPDATE yöntemi, **mevcut dialog durumunu etkilemeden bir oturumu değiştirmeye** olanak tanır. Bu, devam eden bir çağrı sırasında codec'ler veya medya türleri gibi oturum parametrelerini güncellemek için yararlıdır.
|
||||
6. **PUBLISH**: RFC 3903'te tanımlanmıştır; PUBLISH yöntemi, bir user agent'ın **sunucuya olay durum bilgisi yayınlaması** için kullanılır ve bu bilgi diğer ilgililere sunulur.
|
||||
|
||||
### SIP Yanıt Kodları
|
||||
|
||||
- **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 verir.
|
||||
- 180 Ringing: Aranan kişi uyarılıyor ve çağrıyı kabul edecek.
|
||||
- 183 Session Progress: Çağrı ilerleyişi 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 atanmıştır.
|
||||
- 302 Moved Temporarily: İstenilen kaynak geçici olarak farklı bir URI'de mevcuttur.
|
||||
- 305 Use Proxy: İstek belirtilen bir proxy'ye 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.
|
||||
- 202 Accepted: İstek işleme kabul edildi, ancak henüz tamamlanmadı.
|
||||
- **3xx (Yeniden Yönlendirme Yanıtları)**: Bu yanıtlar, isteği yerine getirmek için genellikle alternatif bir kaynakla iletişim kurulması gerektiğini gösterir.
|
||||
- 300 Multiple Choices: Birden çok seçenek var ve kullanıcı veya istemci bunlardan birini seçmeli.
|
||||
- 301 Moved Permanently: İstenen kaynağa kalıcı yeni bir URI atandı.
|
||||
- 302 Moved Temporarily: İstenen kaynak geçici olarak farklı bir URI'de mevcut.
|
||||
- 305 Use Proxy: İstek belirtilen bir proxy'e gönderilmelidir.
|
||||
- **4xx (İstemci Hatası Yanıtları)**: Bu yanıtlar, isteğin kötü sözdizimine sahip olduğunu veya sunucunun isteği yerine getiremediğini gösterir.
|
||||
- 400 Bad Request: İstek hatalı veya geçersizdi.
|
||||
- 401 Unauthorized: İstek kullanıcı kimlik doğrulaması gerektiriyor.
|
||||
- 403 Forbidden: Sunucu isteği anladı ancak yerine getirmeyi reddediyor.
|
||||
- 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.
|
||||
- 404 Not Found: İstenen kaynak sunucuda bulunamadı.
|
||||
- 408 Request Timeout: Sunucu tam bir istek almak için beklediği süre içinde tamamlanmış bir istek almadı.
|
||||
- 486 Busy Here: Aranan kişi şu anda meşgul ve çağrıyı alamıyor.
|
||||
- **5xx (Sunucu Hatası Yanıtları)**: Bu yanıtlar, sunucunun geçerli bir isteği yerine getiremediğini 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.
|
||||
- 503 Service Unavailable: Sunucu şu anda bakım veya aşırı yük nedeniyle isteği işleyemiyor.
|
||||
- **6xx (Küresel Başarısızlık Yanıtları)**: Bu yanıtlar, isteğin hiçbir sunucu tarafından yerine getirilemeyeceğini gösterir.
|
||||
- 600 Busy Everywhere: Çağrı için olası tüm hedefler meşgul.
|
||||
- 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.
|
||||
- 604 Does Not Exist Anywhere: İstenen kaynak ağda hiçbir yerde mevcut değil.
|
||||
|
||||
## Örnekler
|
||||
|
||||
@ -94,43 +94,43 @@ s=-
|
||||
c=IN IP4 pc33.example.com
|
||||
t=0 0
|
||||
m=audio 49170 RTP/AVP 0
|
||||
a=rtpmap:0 PCMU/8000te
|
||||
a=rtpmap:0 PCMU/8000
|
||||
```
|
||||
<details>
|
||||
|
||||
<summary>Her Parametre Açıklandı</summary>
|
||||
<summary>Her Parametrenin Açıklaması</summary>
|
||||
|
||||
1. **Request-Line**: `INVITE sip:jdoe@example.com SIP/2.0` - Bu satır, yöntemi (INVITE), istek URI'sini (sip:[jdoe@example.com](mailto:jdoe@example.com)) ve SIP sürümünü (SIP/2.0) belirtir.
|
||||
2. **Via**: `Via: SIP/2.0/UDP pc33.example.com;branch=z9hG4bK776asdhds` - Via başlığı, taşıma protokolünü (UDP) ve istemcinin adresini (pc33.example.com) belirtir. "branch" parametresi döngü tespiti ve işlem eşleştirmesi için kullanılır.
|
||||
3. **Max-Forwards**: `Max-Forwards: 70` - Bu başlık alanı, isteğin proxyler tarafından kaç kez iletilebileceğini sınırlayarak sonsuz döngüleri önler.
|
||||
4. **To**: `To: John Doe <sip:jdoe@example.com>` - To başlığı, aramanın alıcısını, görüntüleme adını (John Doe) ve SIP URI'sini (sip:[jdoe@example.com](mailto:jdoe@example.com)) belirtir.
|
||||
5. **From**: `From: Jane Smith <sip:jsmith@example.org>;tag=1928301774` - From başlığı, aramanın gönderenini, görüntüleme adını (Jane Smith) ve SIP URI'sini (sip:[jsmith@example.org](mailto:jsmith@example.org)) belirtir. "tag" parametresi, gönderenin diyalogdaki rolünü benzersiz olarak tanımlamak için kullanılır.
|
||||
6. **Call-ID**: `Call-ID: a84b4c76e66710` - Call-ID başlığı, iki kullanıcı ajanı arasındaki bir çağrı oturumunu benzersiz olarak tanımlar.
|
||||
7. **CSeq**: `CSeq: 314159 INVITE` - CSeq başlığı, bir sıra numarası ve istekte kullanılan yöntemi içerir. Yanıtları isteklere eşleştirmek ve sırasız mesajları tespit etmek için kullanılır.
|
||||
8. **Contact**: `Contact: <sip:jsmith@pc33.example.com>` - Contact başlığı, gönderenin doğrudan yolunu sağlar, bu da sonraki istekler ve yanıtlar için kullanılabilir.
|
||||
9. **User-Agent**: `User-Agent: ExampleSIPClient/1.0` - User-Agent başlığı, gönderenin yazılımı veya donanımı hakkında bilgi sağlar, adını ve sürümünü içerir.
|
||||
10. **Allow**: `Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO` - Allow başlığı, gönderen tarafından desteklenen SIP yöntemlerini listeler. Bu, alıcının iletişim sırasında hangi yöntemlerin kullanılabileceğini anlamasına yardımcı olur.
|
||||
11. **Content-Type**: `Content-Type: application/sdp` - Content-Type başlığı, mesaj gövdesinin medya türünü belirtir, bu durumda SDP (Oturum Tanım Protokolü).
|
||||
12. **Content-Length**: `Content-Length: 142` - Content-Length başlığı, mesaj gövdesinin boyutunu bayt cinsinden belirtir.
|
||||
13. **Message Body**: Mesaj gövdesi, önerilen oturum için medya türleri, kodekler ve taşıma protokolleri hakkında bilgi içeren SDP oturum tanımını içerir.
|
||||
1. **Request-Line**: `INVITE sip:jdoe@example.com SIP/2.0` - Bu satır yöntemi (INVITE), istek URI'sini (sip:[jdoe@example.com](mailto:jdoe@example.com)) ve SIP sürümünü (SIP/2.0) belirtir.
|
||||
2. **Via**: `Via: SIP/2.0/UDP pc33.example.com;branch=z9hG4bK776asdhds` - Via başlığı taşıma protokolünü (UDP) ve istemcinin adresini (pc33.example.com) belirtir. "branch" parametresi döngü tespiti ve transaction eşleştirme için kullanılır.
|
||||
3. **Max-Forwards**: `Max-Forwards: 70` - Bu başlık alanı isteğin proxy'ler tarafından kaç kez yönlendirilebileceğini sınırlar ve sonsuz döngüleri önler.
|
||||
4. **To**: `To: John Doe <sip:jdoe@example.com>` - To başlığı çağrının alıcısını, görüntülenme adını (John Doe) ve SIP URI'sini (sip:[jdoe@example.com](mailto:jdoe@example.com)) belirtir.
|
||||
5. **From**: `From: Jane Smith <sip:jsmith@example.org>;tag=1928301774` - From başlığı çağrıyı göndereni, görüntülenme adını (Jane Smith) ve SIP URI'sini (sip:[jsmith@example.org](mailto:jsmith@example.org)) belirtir. "tag" parametresi dialog içindeki gönderenin rolünü benzersiz şekilde tanımlamak için kullanılır.
|
||||
6. **Call-ID**: `Call-ID: a84b4c76e66710` - Call-ID başlığı iki user agent arasındaki çağrı oturumunu benzersiz şekilde tanımlar.
|
||||
7. **CSeq**: `CSeq: 314159 INVITE` - CSeq başlığı bir sıra numarası ve istekte kullanılan yöntemi içerir. Yanıtları isteklere eşleştirmek ve sıra dışı mesajları tespit etmek için kullanılır.
|
||||
8. **Contact**: `Contact: <sip:jsmith@pc33.example.com>` - Contact başlığı gönderene doğrudan bir rota sağlar; sonraki istekler ve yanıtlar için kullanılabilir.
|
||||
9. **User-Agent**: `User-Agent: ExampleSIPClient/1.0` - User-Agent başlığı göndericinin yazılım veya donanımı hakkında, adı ve sürümü dahil olmak üzere, bilgi verir.
|
||||
10. **Allow**: `Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO` - Allow başlığı göndericinin desteklediği SIP yöntemlerini listeler. Bu, alıcının iletişim sırasında hangi yöntemlerin kullanılabileceğini anlamasına yardımcı olur.
|
||||
11. **Content-Type**: `Content-Type: application/sdp` - Content-Type başlığı mesaj gövdesinin medya türünü belirtir; bu durumda SDP (Session Description Protocol).
|
||||
12. **Content-Length**: `Content-Length: 142` - Content-Length başlığı mesaj gövdesinin byte cinsinden boyutunu gösterir.
|
||||
13. **Message Body**: Mesaj gövdesi, önerilen oturum için medya türleri, codec'ler ve taşıma protokolleri hakkında bilgi içeren SDP oturum tanımını içerir.
|
||||
|
||||
- `v=0` - Protokol sürümü (SDP için 0)
|
||||
- `o=jsmith 2890844526 2890842807 IN IP4 pc33.example.com` - Başlatıcı ve oturum tanımlayıcı
|
||||
- `s=-` - Oturum adı (tek bir tire, oturum adı olmadığını belirtir)
|
||||
- `c=IN IP4 pc33.example.com` - Bağlantı bilgileri (ağ türü, adres türü ve adres)
|
||||
- `t=0 0` - Zamanlama bilgileri (başlangıç ve bitiş zamanları, 0 0 oturumun sınırlı olmadığını belirtir)
|
||||
- `m=audio 49170 RTP/AVP 0` - Medya tanımı (medya türü, port numarası, taşıma protokolü ve format listesi). Bu durumda, RTP/AVP (Gerçek Zamanlı Taşıma Protokolü / Ses Video Profili) kullanarak bir ses akışını ve format 0 (PCMU/8000) belirtir.
|
||||
- `a=rtpmap:0 PCMU/8000` - Formatı (0) kodek (PCMU) ve saat hızı (8000 Hz) ile eşleştiren özellik.
|
||||
- `o=jsmith 2890844526 2890842807 IN IP4 pc33.example.com` - Oturumu başlatan ve oturum tanımlayıcısı
|
||||
- `s=-` - Oturum adı (tek bir kısa çizgi oturum adı olmadığını belirtir)
|
||||
- `c=IN IP4 pc33.example.com` - Bağlantı bilgisi (ağ türü, adres türü ve adres)
|
||||
- `t=0 0` - Zamanlama bilgisi (başlangıç ve bitiş zamanları, 0 0 oturumun sınırlandırılmadığını gösterir)
|
||||
- `m=audio 49170 RTP/AVP 0` - Medya tanımı (medya türü, port numarası, taşıma protokolü ve format listesi). Bu durumda, RTP/AVP (Real-time Transport Protocol / Audio Video Profile) kullanan ve format 0 (PCMU/8000) olarak belirtilen bir ses akışını tanımlar.
|
||||
- `a=rtpmap:0 PCMU/8000` - Formatı (0) codec (PCMU) ve saat hızı (8000 Hz) ile eşleyen attribute.
|
||||
|
||||
</details>
|
||||
|
||||
### SIP REGISTER Örneği
|
||||
|
||||
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ç, sunucuya **kayıtlı kullanıcı için yönlendirilmesi gereken gelen SIP isteklerinin nereye yönlendirileceğini** bildirir. Kayıt sunucusu genellikle bir SIP proxy sunucusunun veya özel bir kayıt sunucusunun parçasıdır.
|
||||
REGISTER yöntemi, Session Initiation Protocol (SIP) içinde bir user agent (UA) — örneğin bir VoIP telefon veya softphone — için **konumunu bir SIP registrar sunucusuna kaydetmesine** izin vermek amacıyla kullanılır. Bu işlem, sunucunun **kayıtlı kullanıcıya yönlendirilecek gelen SIP isteklerini nerede göndereceğini bilmesini** sağlar. Registrar sunucusu genellikle bir SIP proxy sunucusunun parçası veya ayrı bir kayıt sunucusudur.
|
||||
|
||||
İşte bir REGISTER kimlik doğrulama sürecinde yer alan SIP mesajlarının ayrıntılı bir örneği:
|
||||
Aşağıda REGISTER doğrulama sürecinde yer alan SIP mesajlarının ayrıntılı bir örneği bulunmaktadır:
|
||||
|
||||
1. UA'dan kayıt sunucusuna ilk **REGISTER** isteği:
|
||||
1. Başlangıçta UA'dan registrar sunucusuna yapılan ilk **REGISTER** isteği:
|
||||
```yaml
|
||||
REGISTER sip:example.com SIP/2.0
|
||||
Via: SIP/2.0/UDP 192.168.1.100:5060;branch=z9hG4bK776asdhds
|
||||
@ -143,11 +143,11 @@ Contact: <sip:alice@192.168.1.100:5060>;expires=3600
|
||||
Expires: 3600
|
||||
Content-Length: 0
|
||||
```
|
||||
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](mailto:alice@example.com)) ve kullanıcının iletişim adresi (sip:alice@192.168.1.100:5060) gibi önemli bilgileri içerir.
|
||||
Bu ilk REGISTER mesajı UA (Alice) tarafından registrar sunucusuna gönderilir. İçinde istenen kayıt süresi (Expires), kullanıcının SIP URI'si (sip:[alice@example.com](mailto:alice@example.com)) ve kullanıcının iletişim adresi (sip:alice@192.168.1.100:5060) gibi önemli bilgiler bulunur.
|
||||
|
||||
2. **401 Yetkisiz** yanıtı kayıt sunucusundan:
|
||||
```css
|
||||
cssCopy codeSIP/2.0 401 Unauthorized
|
||||
2. **401 Unauthorized** yanıtı registrar sunucusundan:
|
||||
```
|
||||
SIP/2.0 401 Unauthorized
|
||||
Via: SIP/2.0/UDP 192.168.1.100:5060;branch=z9hG4bK776asdhds
|
||||
From: Alice <sip:alice@example.com>;tag=565656
|
||||
To: Alice <sip:alice@example.com>;tag=7878744
|
||||
@ -156,9 +156,9 @@ CSeq: 1 REGISTER
|
||||
WWW-Authenticate: Digest realm="example.com", nonce="abcdefghijk", algorithm=MD5, qop="auth"
|
||||
Content-Length: 0
|
||||
```
|
||||
Registrar sunucusu, **authentication realm, nonce ve algorithm** gibi UA'nın kendini kimlik doğrulaması için gereken bilgileri içeren "WWW-Authenticate" başlığı ile birlikte "401 Unauthorized" mesajı ile yanıt verir.
|
||||
Registrar sunucusu "401 Unauthorized" mesajı ile yanıt verir; bu mesaj "WWW-Authenticate" başlığını içerir. Bu başlık, UA'nın kendini doğrulaması için gereken bilgileri içerir, örneğin **authentication realm, nonce, and algorithm**.
|
||||
|
||||
3. Kimlik doğrulama bilgileri ile **REGISTER** isteği:
|
||||
3. REGISTER request **with authentication credentials**:
|
||||
```vbnet
|
||||
REGISTER sip:example.com SIP/2.0
|
||||
Via: SIP/2.0/UDP 192.168.1.100:5060;branch=z9hG4bK776asdhds
|
||||
@ -172,9 +172,9 @@ Expires: 3600
|
||||
Authorization: Digest username="alice", realm="example.com", nonce="abcdefghijk", uri="sip:example.com", response="65a8e2285879283831b664bd8b7f14d4", algorithm=MD5, cnonce="lmnopqrst", qop=auth, nc=00000001
|
||||
Content-Length: 0
|
||||
```
|
||||
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.
|
||||
UA başka bir REGISTER isteği daha gönderir; bu sefer verilen bilgiler ve kullanıcının parolası kullanılarak hesaplanan **"Authorization" header with the necessary credentials, such as the username, realm, nonce, and a response value**'ı içerir.
|
||||
|
||||
**Authorization yanıtı** bu şekilde hesaplanır:
|
||||
Bu şekilde **Authorization response** hesaplanır:
|
||||
```python
|
||||
import hashlib
|
||||
|
||||
@ -207,7 +207,7 @@ qop = "auth"
|
||||
response = calculate_sip_md5_response(username, password, realm, method, uri, nonce, nc, cnonce, qop)
|
||||
print(f"MD5 response value: {response}")
|
||||
```
|
||||
4. **Başarılı kayıt** yanıtı kayıt sunucusundan:
|
||||
4. **Başarılı kayıt** registrar sunucusundan gelen yanıt:
|
||||
```yaml
|
||||
SIP/2.0 200 OK
|
||||
Via: SIP/2.0/UDP 192.168.1.100:5060;branch=z9hG4bK776asdhds
|
||||
@ -219,13 +219,98 @@ Contact: <sip:alice@192.168.1.100:5060>;expires=3600
|
||||
Expires: 3600
|
||||
Content-Length: 0
|
||||
```
|
||||
Kayıt sunucusu sağlanan kimlik bilgilerini doğruladıktan sonra, **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.
|
||||
Kayıtçı (registrar) sunucusu sağlanan kimlik bilgilerini doğruladıktan sonra, **kayıt işleminin başarılı olduğunu belirtmek için "200 OK" yanıtını gönderir**. Yanıt, kayıtlı contact bilgilerini ve kaydın sona erme zamanını içerir. Bu noktada, user agent (Alice) SIP registrar sunucusuna başarılı şekilde kayıtlıdır ve Alice için gelen SIP istekleri uygun contact adresine yönlendirilebilir.
|
||||
|
||||
### Arama Örneği
|
||||
|
||||
<figure><img src="../../../images/image (1101).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
> [!NOTE]
|
||||
> Belirtilmemiştir, ancak Kullanıcı B'nin arama alabilmesi için **Proxy 2'ye bir REGISTER mesajı göndermiş olması gerekir**.
|
||||
> [!TIP]
|
||||
> Bahsedilmiyor, fakat Kullanıcı B'nin çağrı alabilmesi için **REGISTER message to Proxy 2** göndermiş olması gerekir.
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
## SIP Security and Pentesting Notes
|
||||
|
||||
Bu bölüm, daha geniş VoIP rehberini tekrarlamadan protokole özgü pratik ipuçları ekler. Uçtan uca VoIP saldırı metodolojisi, araçlar ve senaryolar için bkz:
|
||||
|
||||
{{#ref}}
|
||||
../README.md
|
||||
{{#endref}}
|
||||
|
||||
### Parmak İzi Çıkarma ve Keşif
|
||||
|
||||
- Bir `OPTIONS` isteği gönderin ve cihazları/stack'leri parmak izi almak için `Allow`, `Supported`, `Server` ve `User-Agent` başlıklarını inceleyin:
|
||||
|
||||
```bash
|
||||
# nmap NSE (UDP 5060 by default)
|
||||
sudo nmap -sU -p 5060 --script sip-methods <target>
|
||||
|
||||
# Minimal raw OPTIONS over UDP
|
||||
printf "OPTIONS sip:<target> SIP/2.0\r\nVia: SIP/2.0/UDP attacker;branch=z9\r\nFrom: <sip:probe@attacker>;tag=1\r\nTo: <sip:probe@<target>>\r\nCall-ID: 1@attacker\r\nCSeq: 1 OPTIONS\r\nMax-Forwards: 70\r\nContact: <sip:probe@attacker>\r\nContent-Length: 0\r\n\r\n" | nc -u -w 2 <target> 5060
|
||||
```
|
||||
|
||||
### Kullanıcı Adı/Uzantı Sorgulama Davranışı
|
||||
|
||||
- Keşif genellikle `REGISTER`/`INVITE` üzerinde `401/407` ile `404/403` arasındaki farkları kötüye kullanır. Sunucuları tek tip yanıt verecek şekilde sertleştirin.
|
||||
- Asterisk chan_sip: geçerli kullanıcıları açığa çıkarmamak için genel olarak `alwaysauthreject=yes` ayarlayın. Yeni Asterisk sürümlerinde (PJSIP) guest calling, bir `anonymous` endpoint tanımlanmadıkça devre dışıdır ve benzer "always auth reject" davranışı varsayılan olabilir; yine de çevreye yönelik network ACL'leri ve fail2ban uygulayın.
|
||||
|
||||
### SIP Digest Kimlik Doğrulaması: algoritmalar ve cracking
|
||||
|
||||
- SIP genellikle HTTP-Digest tarzı auth kullanır. Tarihsel olarak MD5 (ve MD5-sess) yaygındır; yeni stack'ler RFC 8760 uyarınca SHA-256 ve SHA-512/256'yi destekler. Modern dağıtımlarda bu daha güçlü algoritmaları tercih edin ve mümkünse MD5'i devre dışı bırakın.
|
||||
- Bir pcap'den offline cracking MD5 digest'ler için basittir. Challenge/response çıkarıldıktan sonra hashcat mod 11400 (SIP digest, MD5) kullanabilirsiniz:
|
||||
|
||||
```bash
|
||||
# Example hash format (single line)
|
||||
# username:realm:method:uri:nonce:cnonce:nc:qop:response
|
||||
echo 'alice:example.com:REGISTER:sip:example.com:abcdef:11223344:00000001:auth:65a8e2285879283831b664bd8b7f14d4' > sip.hash
|
||||
|
||||
# Crack with a wordlist
|
||||
hashcat -a 0 -m 11400 sip.hash /path/to/wordlist.txt
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> RFC 8760 defines SHA-256 and SHA-512/256 for HTTP Digest (used by SIP). Adoption is uneven; ensure your tools handle these when targeting modern PBXs.
|
||||
|
||||
### SIP over TLS (SIPS) ve WebSockets Üzerinden
|
||||
|
||||
- Sinyal şifrelemesi:
|
||||
- `sips:` URI'leri ve TCP/TLS genellikle 5061 üzerinde çalışır. Endpoint'lerde sertifika doğrulamasını doğrulayın; birçok cihaz self-signed veya wildcard sertifikaları kabul eder, zayıf dağıtımlarda MitM'e olanak tanıyabilir.
|
||||
- WebRTC softphone'lar genellikle RFC 7118 uyarınca SIP over WebSocket kullanır (`ws://` veya `wss://`). PBX WSS açığa veriyorsa, kimlik doğrulamayı ve CORS'u test edin ve HTTP ön yüzünde de rate limitlerin uygulandığından emin olun.
|
||||
|
||||
### DoS hızlı kontrolleri (protokol düzeyi)
|
||||
|
||||
- INVITE, REGISTER veya bozuk (malformed) mesajların flood edilmesi transaction işlemesini tüketebilir.
|
||||
- UDP/5060 için basit bir rate-limiting örneği (Linux iptables hashlimit):
|
||||
|
||||
```bash
|
||||
# Limit new SIP packets from a single IP to 20/s with burst 40
|
||||
iptables -A INPUT -p udp --dport 5060 -m hashlimit \
|
||||
--hashlimit-name SIP --hashlimit 20/second --hashlimit-burst 40 \
|
||||
--hashlimit-mode srcip -j ACCEPT
|
||||
iptables -A INPUT -p udp --dport 5060 -j DROP
|
||||
```
|
||||
|
||||
### İzlenmesi Gereken Güncel SIP-yığını CVE'leri (Asterisk PJSIP)
|
||||
|
||||
- CVE-2024-35190 (published May 17, 2024): Belirli Asterisk sürümlerinde, `res_pjsip_endpoint_identifier_ip` yetkisiz SIP isteklerini yerel bir endpoint olarak yanlış tanımlayabiliyor; bu potansiyel olarak yetkisiz işlemlere veya bilgi açığa çıkmasına yol açabilir. 18.23.1, 20.8.1 ve 21.3.1'de düzeltildi. Test yaparken PBX sürümünüzü doğrulayın ve sorumlu şekilde raporlayın.
|
||||
|
||||
### Sertleştirme kontrol listesi (SIP'e özgü)
|
||||
|
||||
- Sinyalleme için TLS'i ve medya için SRTP/DTLS-SRTP'yi tercih edin; mümkün olduğunda düz metin (cleartext) kullanımı devre dışı bırakın.
|
||||
- Güçlü parolalar ve digest algoritmaları uygulayın (desteklenen yerlerde SHA-256/512-256; MD5'ten kaçının).
|
||||
- Asterisk için:
|
||||
- chan_sip: `alwaysauthreject=yes`, `allowguest=no`, her-endpoint için `permit`/`deny` CIDR ACL'leri.
|
||||
- PJSIP: gerekmedikçe bir `anonymous` endpoint oluşturmayın; endpoint `acl`/`media_acl` uygulayın; fail2ban veya eşdeğerini etkinleştirin.
|
||||
- Bilgi sızıntısını azaltmak için SIP proxy'lerinde topology hiding (örn. outbound proxy/edge SBC).
|
||||
- `OPTIONS` işlemlerini sıkı tutun ve rate limitler uygulayın; kullanılmayan yöntemleri (ör. `MESSAGE`, `PUBLISH`) gerekmiyorsa devre dışı bırakın.
|
||||
|
||||
|
||||
|
||||
## Referanslar
|
||||
|
||||
- RFC 8760 – Using SHA-256 and SHA-512/256 for HTTP Digest (applies to SIP Digest too): https://www.rfc-editor.org/rfc/rfc8760
|
||||
- Asterisk GHSA advisory for CVE-2024-35190: https://github.com/asterisk/asterisk/security/advisories/GHSA-qqxj-v78h-hrf9
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user