Angriffe auf VoIP
Diese Seite beschäftigt sich mit einer Auswahl von Angriffen, die in meiner Diplomarbeit behandelt wurden. Zu den Angriffen wird auch jeweils eine Implementierung in Perl zum Download angeboten. Getestet wurden die Programme auf einem Linux-System mit einem Kernel der 2.6er-Reihe. Da teilweise auf sehr betriebssystemspezifische Funktionen zurückgegriffen wird, ist davon auszugehen, dass sie nicht unter Windows lauffähig sind.
Ich möchte an dieser Stelle darauf hinweisen, dass die hier angebotenen Programme nur für Demonstrationszwecke gedacht sind. Also liebe Skriptkiddies: kein Terror machen und lieber woanders spielen gehen ;-)
Suchen von VoIP-Geräten
Mit sip-scan können IP-Bereiche schnell nach VoIP-Geräten gescannt werden. Dazu wird der OPTIONS-Request des SIP-Protokolls verwendet. Zum aufzählen von IPs wird die Klasse IP_iterator verwendet.
Abbrechen eines Gesprächs
Das Programm sip-kill ermöglicht es, einen Anruf durch Injektion von gültigen SIP-Paketen in einen bestehenden oder im Aufbau befindlichen Dialog zu beenden. Folgende Methoden können dazu verwendet werden:
- CANCEL: Abbruch nach einer provisorischen Antwort, die nicht zwingend zu einem SIP-Dialog gehört.
- Response: eine negative Antwort wird gesendet. Kann evtl. durch Race-Conditions fehlschlagen.
- BYE: ein bereits aufgebautes Gespräch wird beendet. Sicherste Methode, jedoch leicht erkennbar.
Umleiten der Sprachdaten
Dieser Angriff besteht aus zwei Teilen: dem Programm sip-redirectrtp, welches den SDP-Body des SIP-Pakets so manipuliert, dass die RTP-Daten an einen beliebigen Host gesendet werden und rtpproxy, der die ankommenden Pakete auf diesem Host zu ihren richtigen Empfängern weiterleitet. Zwischen beiden Teilen findet auch eine rudimentäre Signalisierung statt.
Da hierbei Pakete manipuliert werden müssen, wird bei sip-redirectrtp das Userspace Queuing von Iptables verwendet. Das kleine Skript ipq_rules führt die dafür benötigten Befehle aus.
sip-redirectrtp rtpproxy ipq_rules
Teilweises beenden von Gesprächen
Jeder Host auf der Signalisierungskette verwaltet seine eigenen Zustandsdaten. Mit sip-proxykill kann ein Gespräch auf Teilen der Signalisierungkette beendet werden. Dazu wird ein BYE-Paket der Gegenseite simuliert und gesendet, welches den Signalisierungspfad durchläuft. Erreicht das Paket wieder den Absender, dann wird es verworfen. Dadurch scheint das Gespräch für die Proxys beendet zu sein, während der Gesprächspartner bis auf eine unerwartete Antowrt nichts mitbekommt und es fortführt.