IP-Telefonie, Streaming (Peter Knapp)

Transcription

IP-Telefonie, Streaming (Peter Knapp)
IP - Telefonie / Streaming
Sicherheit in Applikationsprotokollen
Wintersemester 2011/12
Peter Knapp
MatrNr: 0615297
29. November 2011
Inhaltsverzeichnis
1 Session Initiation Protokoll
1.1 Einleitung . . . . . . . . . . . . . . . . . . . .
1.2 SIP Entities . . . . . . . . . . . . . . . . . . .
1.3 SIP Nachrichten . . . . . . . . . . . . . . . .
1.3.1 Requests . . . . . . . . . . . . . . . . .
1.3.2 Responses . . . . . . . . . . . . . . . .
1.3.3 Header / Body . . . . . . . . . . . . .
1.4 Kommunikationsbeispiele . . . . . . . . . . .
1.4.1 Registrierung . . . . . . . . . . . . . .
1.4.2 Sitzung aufbauen und beenden . . . .
1.4.3 Sitzung über einen Proxy . . . . . . .
1.5 Sicherheitsaspekte in SIP . . . . . . . . . . .
1.5.1 Gefahren und Risiken . . . . . . . . .
1.5.2 HTTP Authentifizierung . . . . . . . .
1.5.3 S/MIME . . . . . . . . . . . . . . . .
1.5.4 Sicherheit im Transport und Netzwerk
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Layer
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2
. 2
. 3
. 3
. 3
. 4
. 5
. 6
. 6
. 6
. 6
. 6
. 6
. 7
. 9
. 10
2 H.323
2.1 Information Streams . . . . . . .
2.2 Protokolle und Codecs . . . . . .
2.3 Netzwerk Komponenten . . . . .
2.3.1 Terminals . . . . . . . . .
2.3.2 Multipoint Control Units
2.3.3 Gateways . . . . . . . . .
2.3.4 Gatekeepers . . . . . . . .
2.3.5 Beispiel Kommunikation .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
10
10
11
11
11
12
12
12
13
3 Inter–Asterisk eXchange
3.1 Peer Verhalten und Nachrichten . . . .
3.1.1 Registration . . . . . . . . . . .
3.1.2 Call Link Managment . . . . .
3.1.3 Call Control . . . . . . . . . . .
3.1.4 Call Path Optimization . . . .
3.1.5 Mid–Call Behavior . . . . . . .
3.1.6 Call Tear Down . . . . . . . . .
3.1.7 Network Monitoring . . . . . .
3.1.8 Digit Dialing . . . . . . . . . .
3.1.9 Miscellaneous . . . . . . . . . .
3.1.10 Media Messages . . . . . . . .
3.2 Struktur der Frames . . . . . . . . . .
3.2.1 Full Frames . . . . . . . . . . .
3.2.2 Mini Frames . . . . . . . . . .
3.2.3 Meta Frames . . . . . . . . . .
3.3 Verschlüsselung und Authentifizierung
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
13
14
14
14
14
15
15
15
16
16
16
16
16
16
17
17
17
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
4 Real–Time Transport Protokoll & RTP Control
4.1 RTP . . . . . . . . . . . . . . . . . . . . . . . . .
4.2 RTCP . . . . . . . . . . . . . . . . . . . . . . . .
4.2.1 RTCP Paket Format . . . . . . . . . . . .
4.3 Sicherheit . . . . . . . . . . . . . . . . . . . . . .
Protokoll
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
5 Secure Real–Time Transport Protokoll
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
18
19
19
20
20
21
Session Initiation Protokoll
1.1
Einleitung
Das Session Initiation Protokoll (SIP)[10] ist ein Applikationsprotokoll, welches dazu dient
Sitzungen (sessions) zwischen einen oder mehreren Teilnehmern aufzubauen. Weiters können diese verändert, sowie auch beendet werden. Mit Hilfe von SIP können sich die Teilnehmer auf Eigenschaften einer Sitzung einigen. Eine Sitzung ist in diesem Kontext der
Austausch von Daten zwischen einer Gruppe von Teilnehmern. Mögliche Szenarien sind
zum Beispiel Internet-Telefonanrufe, Multimedia Verbreitung und auch Multimedia Konferenzen.
Das Protokoll selbst wird dabei nicht zur Datenübertragung verwendet. Diese wird
von anderen Protokollen übernommen, welche Real–Time Multimedia-Daten übertragen
können. Das Session Initiation Protokoll bietet diesen Anwendungen die Endpunkte der
Verbindung (genannt user agents). Um diese und weitere Funktionen gewährleisten zu
können, wird eine Netzwerk Infrastruktur (proxy server) aufgebaut , welche dazu verwendet wird um user agents zu registrieren, Einladungen zu Sitzungen und andere Anfragen
zu bearbeiten.
SIP bietet dabei fünf Aspekte des Auf- und Abbaus von Multimedia-Sitzungen:
• User Location: Das Finden des Endpunktes der Kommunikation.
• User Availability: Bestimmung ob der Teilnehmer gewillt ist an der Sitzung teilzunehmen.
• User Capabilities: Einigung auf Medien und Multimediaparameter welche in der
Sitzung verwendet werden sollen.
• Session Setup: Benachrichtigung des angerufenen Teilnehmers über den Anruf, sowie
das Festlegen der Sitzungsparameter.
• Session Managment: Transfer und Beendigung von Sitzungen, die Veränderung der
Sitzungsparameter und der Aufruf von weiteren Services.
Zu beachten ist allerdings, dass SIP kein Kommunikationssystem ist, sondern ein Teil einer
Multimediakommunikation, welche auch andere Protokolle, wie zum Beispiel RTP, beinhaltet. Auch anzumerken ist, dass SIP selbst keine zusätzliche Services bietet, allerdings
werden Primitive angeboten, über die man einen Service implementieren kann. Als Beispiel kann man mit SIP ein Objekt übermitteln, welches dann verwendet werden kann um
einerseits Sitzungsparameter anderer Protokolle, oder auch Bilder beziehungsweise andere
Medien zu übertragen.
Ein weiterer wichtiger Punkt ist, dass das Session Initiation Protokoll eine Reihe an
Sicherheitsfunktionen bietet. Diese sind eine DoS–Prevention, Authentifizierung zwischen
den Teilnehmern und auch zwischen Teilnehmern und Proxy Servern, sowie der Schutz
von Integrität und Verschlüsselung.
2
1.2
SIP Entities
Im Session Initiation Protokoll gibt es 4 logische Entitäten, wobei eine physische Ressource
durchaus in mehreren Rollen tätig sein kann.
User Agent: Der User Agent ist ein Endpunkt der Verbindung. Diese starten und beenden die Sitzungen indem sie Requests (1.3.1) und Responses (1.3.2) austauschen.
Dabei enthält der User Agent zwei Teile. Einerseits den User Agent Client (UAC)
welcher SIP Requests startet und andererseits der User Agent Server welcher den
Nutzer über eintreffende Requests informiert und im Auftrag des Nutzers Responses
versendet.
Proxy Server: Ein Proxy Server ist eine Entität welche als Client, wie auch als Server
im Auftrag anderer Clients handelt um Requests zu versenden. Der Request kann
entweder intern bearbeitet werden oder dieser wird weitergegeben (auch an andere
Server).
Redirect Server: Dieser akzeptiert Requests und bildet die SIP Adresse des gerufenen
Teilnehmer auf null ab wenn es keine bekannte Adresse zu diesem gibt oder gibt die
neuen Adressen des Teilnehmers zurück. Der Redirect Server leitet allerdings keine
Requests an andere Server weiter.
Registrar: Dies ist ein Server, der REGISTER Requests akzeptiert um dessen Kontakt
Informationen zu speichern.
1.3
SIP Nachrichten
Es wird der UTF-8 Zeichensatz in SIP verwendet, da es ein textbasiertes Protokoll ist.
Es gibt zwei Arten von Nachrichten. Die erste ist der Request, welcher von einem Client
zum Server gesendet wird und die zweite Art der Response vom Server zum Client. Der
Aufbau beider Nachrichten ist an sich gleich und unterscheidet sich nur in der Statuszeile,
wie der folgende Auszug aus [10] zeigt:
generic-message = start-line
*message-header
CRLF
[ message-body ]
start-line
= Request-Line / Status-Line
1.3.1
Requests
Ein SIP–Request beginnt immer mit einer Request–Line, welche den Methoden Namen, die
Request–URI, sowie die Protokoll–Version beinhaltet und diese sind durch ein Leerzeichen
getrennt. Es gibt sechs verfügbare Methoden:
1. REGISTER: Registriert einen Teilnehmer am Proxy mit seinen Kontakt Informationen
2. INVITE: Baut eine Sitzung auf
3. ACK: Akzeptiert eine Sitzung
4. CANCEL: Bricht einen Sitzungsaufbau ab
3
5. BYE: Beendet eine Sitzung
6. OPTIONS: Erfragen der Funktionen des Servers
Die Request–URI ist eine SIP oder SIPS URI (Uniform Resource Indicator), welche den
Teilnehmer oder Service beschreibt, der von dem Request angefordert wird. In einer URI
sind ausreichend Informationen enthalten um eine Sitzung mit der Ressource aufbauen
und aufrechterhalten zu können. Beispiele für eine Ressource sind ein User eines Online
Services, eine Mailbox eines Nachrichtensystems, oder auch eine Abteilung einer Organisation.
Der Unterschied zwischen einer SIP und einer SIPS URI besteht darin, dass bei Angabe einer SIPS URI eine sichere Verbindung über TLS zwischen dem user agent client
(UAC) und der Domain der URI verwendet werden muss. Innerhalb der Domain bestimmt
die Sicherheitspolitik der Domain, welche Sicherheitsmaßnahmen verwendet werden. Außerdem kann jede Ressource, die mit einer SIP URI, beschrieben ist aufgewertet werden
zu einer SIPS URI, wenn sicher kommuniziert werden soll.
sip:user:password@host:port;uri-parameters?headers
Die obige Zeile ist der Aufbau einer SIP, bzw. SIPS URI, wobei bei der SIPS Version
das "sip:" durch "sips:" ersetzt wird. Die einzelnen Teile dieser URI sind einerseits die User
Information, welche "user" und "password" beinhaltet. Es ist allerdings aus sicherheitstechnischen Gründen nicht empfehlenswert "password" zu verwenden, da in diesem Fall das
Passwort im Klartext übertragen wird. Insofern das "@" Zeichen vorhanden ist, muss der
"user" angegeben werden, ansonsten kann auch ein Host alleine angegeben werden (wenn
dieser zB. keine User verwaltet oder selbst die Ressource ist). Der "host" enthält entweder
einen Fully Qualified Domain Name oder eine IPv4/IPv6-Adresse.
Die "uri–parameters" können beliebig viele sein, dürfen sich allerdings nicht wiederholen
und sind von der Form parameter–name = parameter–Wert. Hier kann man beispielsweise
das Transportprotokoll angeben (TCP/UDP/SCTP). Mit den "?headers" kann man noch
Header Felder in der URI angeben. Diese müssen von der Form hname = hvalue sein.
1.3.2
Responses
Im Fall einer Response beginnt die Nachricht mit einer Status-Line, welche wie folgt aufgebaut ist:
Status-Line = SIP-Version SP Status-Code SP Reason-Phrase CRLF
Es gibt die folgenden Status–Codes aus [10]:
1xx: Provisional -- request received, continuing to process the request;
2xx: Success -- the action was successfully received, understood,
and accepted;
3xx: Redirection -- further action needs to be taken in order
to complete the request;
4xx: Client Error -- the request contains bad syntax or cannot
be fulfilled at this server;
5xx: Server Error -- the server failed to fulfill an apparently
valid request;
6xx: Global Failure -- the request cannot be fulfilled at any server.
Beispiele für Status–Codes sind in Tabelle 1 gegeben.
4
Status–Code
100
180
181
182
183
200
300
301
302
305
380
400
401
402
403
404
405
406
407
408
410
413
414
415
416
Beschreibender Text
Trying
Ringing
Call Is Being Forwarded
Queued
Session Progress
OK
Multiple Choices
Moved Permanently
Moved Temporarily
Use Proxy
Alternative Service
Bad Request
Unauthorized
Payment Required
Forbidden
Not Found
Method not allowed
Not Acceptable
Proxy Authentication Required
Request Timeout
Gone
Request Entity Too Large
Request URI Too Long
Unsupported Media Type
Unsupported URI Scheme
Status–Code
420
421
423
480
481
482
483
484
485
486
487
488
491
493
500
501
502
503
504
505
513
600
603
604
606
Beschreibender Text
Bad Destination
Extension Required
Interval Too Brief
Temporarily Unavailable
Call/Transaction Does Not Exist
Loop Detected
Too Many Hops
Address Incomplete
Ambiguous
Busy Here
Request Terminated
Not Acceptable Here
Request Pending
Undecipherable
Server Internal Error
Not Implemented
Bad Gateway
Service Unavaillable
Server Time–Out
Version Not Supported
Message Too Large
Busy Everywhere
Decline
Does Not Exists Anywhere
Not Acceptable
Tabelle 1: Status–Codes in SIP
1.3.3
Header / Body
Jedes Header Feld besteht aus Paaren wie folgt: "field-name: field-value". Dabei ist es unerheblich wie viele Leerzeichen darin vorkommen und es werden auch field–value Werte
erlaubt, welche sich über mehrere Zeilen erstrecken, solange die darauffolgenden Zeilen
mit Tabs oder Leerzeichen beginnen. Die Reihenfolge der Headerfelder ist ebenfalls unerheblich, allerdings ist es empfohlen die Proxy-relevanten Felder zuerst anzuführen. Es
ist auch möglich gleiche Headerfelder mehrmals anzuführen. Dabei muss es möglich sein
diese Felder in ein einziges umzuschreiben in eine durch Beistriche getrennte Liste. Die
Reihenfolge der gleichen Felder ist auch entscheidend.
Requests, wie auch Responses können einen Body enthalten, wobei dieser abhängig von
der Request Methode ist. Im Fall einer Response wird der Inhalt des Body von der Methode
und dem Rückgabe–Code der Response bestimmt. Der Medientyp des Body muss von
einem Content–Type Header Feld bestimmt werden und insofern der Body in irgendeiner
Form codiert wurde (zB. komprimiert), ist dies auch im Header als Content–Encoding
anzugeben. Ebenfalls können binäre Teile im Body enthalten sein, sowie "multipart" MIME
Typen. Die Länge ist im Header per Content–Length anzugeben.
5
1.4
1.4.1
Kommunikationsbeispiele
Registrierung
Zu Beginn muss sich ein Teilnehmer, in diesem Fall Bob, bei einem Registrar anmelden,
sodass er auch von anderen Teilnehmern gefunden werden kann. Dies geschieht mit den
Nachrichten REGISTER und der Antwort 200 OK:
REGISTER sip:registrar.biloxi.com SIP/2.0
Via: SIP/2.0/UDP bobspc.biloxi.com:5060;branch=z9hG4bKnashds7
Max-Forwards: 70
To: Bob <sip:[email protected]>
From: Bob <sip:[email protected]>;tag=456248
Call-ID: 843817637684230@998sdasdh09
CSeq: 1826 REGISTER
Contact: <sip:[email protected]>
Expires: 7200
Content-Length: 0
SIP/2.0 200 OK
Via: SIP/2.0/UDP bobspc.biloxi.com:5060;branch=z9hG4bKnashds7
;received=192.0.2.4
To: Bob <sip:[email protected]>;tag=2493k59kd
From: Bob <sip:[email protected]>;tag=456248
Call-ID: 843817637684230@998sdasdh09
CSeq: 1826 REGISTER
Contact: <sip:[email protected]>
Expires: 7200
Content-Length: 0
1.4.2
Sitzung aufbauen und beenden
Hier wird versucht eine Sitzung zwischen zwei Teilnehmern aufzubauen, wobei auch ein
Warten in einer Warteschlange angeführt ist. Die Vollständigen SIP Nachrichten werden
nicht mehr aufgeführt, allerdings sind in der Grafik 1 die Abläufe und Funktionen bzw.
Status–Codes ersichtlich. Zwischen "7: ACK" und "1 BYE" ist die Sitzung im Gange und
zB. ein IP-Telefongespräch läuft.
1.4.3
Sitzung über einen Proxy
In dem Beispiel in Grafik 2 sieht man den Sitzungsaufbau über einen Proxy Server, welcher
der Request weiterleitet. Weiters sieht man, dass nach dem OK beide Endpunkte ohne den
Server weiter kommunizieren.
1.5
1.5.1
Sicherheitsaspekte in SIP
Gefahren und Risiken
Eine Gefahr besteht darin, dass ein Angreifer die Registrationseinträge bei einem Registrar ändert. Da es für Berechtige Personen möglich ist diese Daten für andere zu ändern,
kann es einem Angreifer gelingen diese Rechte zu erhalten und somit alle Informationen
6
Abbildung 1: Aufbau einer SIP Sitzung und Beenden dieser, Quelle: [16]
so zu verändern, dass anstelle der eigentlichen Empfänger, seine selbst angegebenen Empfänger die Nachrichten erhalten. Daher ist es sehr wichtig die Urheber eines Requests
authentifizieren zu können.
Eine weitere Möglichkeit wäre, dass ein Angreifer sich für einen anderen Server ausgibt
und so kann er Nachrichten die über den eigentlichen Server gehen sollten abfangen und
falsch bzw. gar nicht weitergeben. Somit sollten auch UA’s die Möglichkeit haben Server
zu authentifizieren.
Proxy Server werden oft benötigt um Nachrichten weiterzuleiten. Diesen muss vertraut werden ob durch Authentifizierung oder durch guten Willen. Dennoch möchte man
oft nicht, dass diese den Nachrichten Body lesen können. Wenn zum Beispiel Verschlüsselungsinformationen im Body übertragen werden, sollten diese nicht mitgelesen werden.
Möglich wäre auch, dass ein solcher Server die nachfolgenden verschlüsselten Nachrichten
liest, oder gar die Schlüssel ändert und auch Sicherheitsanforderungen vermindert. Wenn
darin Informationen über RTP vorhanden sind, könnten auch diese so verändert werden,
dass folgende Medien Ströme auf andere Devices ebenfalls übertragen werden um dort
mitzuhören.
Insofern ein Angreifer Nachrichten mitgelesen hat und er die Parameter der Sitzung
kennt, könnte er zu einem späteren Zeitpunkt die Parameter ändern, indem er Nachrichten
an beide Parteien sendet. Er kann auch BYE an beide senden, womit die Sitzung sofort
beendet würde.
Denial of Service Attacken sind ebenso denkbar, wenn beispielsweise Nachrichten mit
falschem Absender an tausende Empfänger gesendet werden. Durch die Menge an Antworten könnte der vermeintliche Absender außer Gefecht gesetzt werden.
1.5.2
HTTP Authentifizierung
Das Session Initiation Protokoll bietet einen zustandlosen Mechanismus der mit Hilfe von
Aufgaben funktioniert. Dieser dient zur Authentifizierung und basiert auf dem Mechanismus in HTTP. Der grundlegende Nutzer davon ist, dass ein User Agent oder Proxy Server,
7
Abbildung 2: Aufbau einer SIP Sitzung über einen Proxy, Quelle: [16]
der einen Request erhält, feststellen kann ob der Teilnehmer autorisiert ist, den Request
zu stellen. Ein UAS sowie ein Registrar oder Redirect Server wird auf einen Request mit
einem 401 Unauthorized antworten und so diesen Authentifizierungsmechanismus anfordern. Ein Proxy Server hingegen wird mit 407 Proxy Authentication Required antworten.
In dem RFC 2617[9] ist der HTTP Authentifizierungsmechanismus beschrieben. Dieser
wird, wie bereits erwähnt auch für SIP verwendet. Die Header Felder Proxy–Authenticate,
Proxy–Authorization, WWW–Authenticate und Authorization werden genau gleich verwendet wie bei HTTP. Wichtig anzumerken ist allerdings, dass SIP den Gebrauch des
"Basic" Schemas nicht erlaubt. Es muss die "Digest Access Authentication" verwendet
werden. Der Digest Mechanismus verlangt ein Shared Secret, welches nicht im Klartext
übertragen wird. Standardmäßig wird für die Berechnung der Md5–Algorithmus verwendet, andere sind allerdings auch möglich. Wenn mit 401 geantwortet wird, so muss eine
Aufgabe per WWW–Authenticate übermittelt werden und im Fall einer 407 Antwort wird
die Aufgabe mit Proxy–Authenticate übertragen. Der Teilnehmer, der sich authentifizieren
will, wird als Antwort in seinen Request entweder das Authorization Header Feld oder das
Proxy–Authorisation Feld einbauen.
Im Gegensatz zu HTTP wird in SIP der "realm–string" nicht als canonical-root-URL
verwendet, da es diese in SIP nicht gibt. Wichtig ist aber, dass der "realm–string" global
eindeutig sein muss und es empfohlen ist einen Hostnamen, oder Domainnamen zu verwenden. Weiters ist es nicht möglich ein ACK oder CANCEL zu authorisieren. Da auf ein
ACK keine Antwort erwartet wird, kann man hier auch keine Challenge in der Antwort
senden. Somit muss ein Empfänger ein ACK akzeptieren, das die gleichen Zugangsdaten
wie vorangegangene Requests von dem Sender beinhaltet. Ein CANCEL wird akzeptiert,
wenn es von dem gleichen Hop kommt, der auch den zu terminierenden Request gesendet
8
hat. Dies kommt daher, dass ein CANCEL nicht mehrmals gesendet werden kann.
User zu User Authentifizierung
Insofern ein UAS einen Request erhält, kann er entscheiden diesen zuerst zu authentifizieren bevor er den Request bearbeitet. Wenn auch keine Nutzerdaten bereitstellt, können
diese gefordert werden mit dem 401 Status–Code in der Antwort. Wobei ein WWW–
Authenticate im Header vorhanden sein muss. Dieser hat beispielsweise diese Form:
WWW-Authenticate: Digest
realm="biloxi.com",
qop="auth,auth-int",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
opaque="5ccc069c403ebaf9f0171e9517f40e41"
Möchte sich der UAC nun authentifizieren kann er den Request erneut senden mit dem
folgenden Header Feld:
Authorization: Digest
username="bob",
realm="biloxi.com",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
uri="sip:[email protected]",
qop=auth,
nc=00000001,
cnonce="0a4f113b",
response="6629fae49393a05397450978507c4ef1",
opaque="5ccc069c403ebaf9f0171e9517f40e41"
Proxy zu User Authentifizierung
In diesem Fall geschieht die Authentifizierung gleich wie oben, nur dass hier vom Proxy
mit 407 und dem Proxy–Authenticate geantwortet wird. Wenn mehrere Proxy Server am
Weg liegen müssen diese die 407 Antwort weiterleiten an den User und dürfen Proxy–
Authenticate nicht verändern. Der Teilnehmer muss wieder seine Nutzerinformationen
angeben für diese Proxy und den Request erneut senden.
1.5.3
S/MIME
Da SIP Nachrichten MIME Bodies haben können, ist es auch möglich S/MIME zu verwenden. Die S/MIME Zertifikate, welche für Endnutzer verwendet werden, unterscheiden sich
von Server Zertifikaten. Der Unterschied liegt darin, dass sichergestellt werden muss, dass
das Zertifikat einem Endnutzer gehört und daher wird eine Endnutzeradresse verwendet.
Dies ist von der Form "userinfo"@"domainname".
Die Zertifikate beinhalten auch die Schlüssel, welche zum signieren oder verschlüsseln
der Nachrichten Bodies verwendet werden. Ein Problem hier ist, dass es keine Stelle gibt
welche Zertifikate für Endnutzeranwendungen ausgibt, dennoch sollten Nutzer versuchen
Zertifikate von öffentlichen Stellen zu erhalten. Der Schlüsselaustausch kann auch mit SIP
vonstatten gehen. Wenn eine CMS SignedData Nachricht in S/MIME verwendet wird, so
muss das Zertifikat mit dem public Key, der nötig ist um die Signatur zu prüfen, enthalten
sein. Wichtig ist dass S/MIME Implementierungen zumindest SHA1 für die Signierung und
3DES als Verschlüsselungsalgorithmus unterstützen müssen.
9
SIP Header Geheimhaltung und Integrität mit S/MIME
Um eine gewisse End-to-End Authentifikation, Integrität oder Vertraulichkeit für SIP
Header sicherstellen zu können, kann man ganze SIP Nachrichten mit S/MIME als MIME Bodies mit den "message/sip"Typ einpacken. Somit kann man darauf die Sicherheitsmöglichkeiten von S/MIME anwenden. Allerdings sind diese eingepackten SIP Requests
Kopien des äußeren Header oder auch Erweiterungen dazu. Somit kann man überprüfen,
ob der äußere Header verändert wurde. Insofern nun ein UAS eine solche getunnelte SIP
Nachricht erhält, soll dieser auf gleiche Art und Weise antworten. Normale MIME Bodies
sollten allerdings in der inneren Nachricht angehängt werden, sodass diese auch von der
MIME Sicherheit profitieren.
1.5.4
Sicherheit im Transport und Netzwerk Layer
In diesem Fall gibt es zwei Möglichkeiten Geheimhaltung und Integrität zu gewährleisten.
Einerseits die Verwendung von IPsec, das vor allem verwendet werden kann wenn bereits
bekannte Stellen miteinander kommunizieren und es kann auch auf einer Hop to Hop Basis
verwendet werden.
Andererseits gibt es die Möglichkeit TLS über TCP zu verwenden, indem man eine
SIPS-URI verwendet. Dies ist am Besten zu verwenden, wenn sich die Parteien nicht von
vornherein vertrauen. Der Nachteil ist allerdings, dass vom einen Ende zum anderen die
Verbindung über Hops geht, weil auch bei den Hops (zB. Proxy Server) das Via-Feld gesetzt
wird. Daher kann man sich nicht sicher sein, dass die ganze Verbindung über TLS geht,
da ein Hop dazwischen kein TLS zum nächsten Hop verwendet könnte. Die minimal implementierte Verschlüsselungsumgebung muss TLS_RSA_WITH_AES_128_CBC_SHA
sein.
2
H.323
Die ITU-T Recommendation H.323[15, 5] deckt die Voraussetzungen ab, welche für Multimedia Kommunikation nötig sind. Die Komponenten sind Terminals, Gateways, Gatekeeper, Multipoint Controllers, Multipoint Processors und Multipoint Control Units. Nicht
alle dieser Komponente sind für eine Kommunikation von Nöten, aber zu mindestens zwei
Terminale müssen vorhanden sein. Mit Hilfe von Kontrollnachrichten wird zwischen diesen
Komponenten kommuniziert. Diese Kommunikation geschieht mit Information Streams.
2.1
Information Streams
Diese Streams werden benötigt, damit Telefonkomponenten kommunizieren können und
werden wie folgt unterteilt:
Audio Signals beinhalten digitalisierte codierte Sprache. Dieses Signal wird von einem
Audio Control Signal begleitet.
Video Signals beinhalten digitalisierte und codierte bewegte Bilder, also Videos und
wird von einem Video Control Signal begleitet.
Data Signals bestehen aus Bildern, Dokumenten, Dateien und anderen Datenströmen.
Communication Control Signals geben Kontrollinformationen zwischen den einzelnen funktionalen Elementen weiter und werden zB. für das Öffnen und Schließen
logischer Kanäle verwendet.
10
Call Control Signals werden zB. für das Aufbauen und Beenden von Anrufen verwendet.
Diese Information Streams sind nach der ITU-T Rec. H.225.0[14] formatiert und werden
auch wie dort beschrieben versendet.
2.2
Protokolle und Codecs
H.323 benötigt und definiert einige weitere Protokolle und Codecs. Die verwendeten Codecs
sind für die Audio Kommunikation G.711, G.729, G.723.1, G.726, G.722, G.728, Speex.
Für die Video Übertragung wird H.261, H.263, H.264 verwendet und für Texte T.140.
Zumindest G.711 und H.261 sind notwendig und müssen implementiert sein.
Für die Kommunikation zwischen den einzelnen Komponenten werden verschiedene
Protokolle verwendet. Darunter wird H.255.0 für die Registration, Administration und
den Status (RAS) zwischen Terminal und Gatekeeper verwendet, sowie für die Anruf
Kommunikation zwischen zwei beliebigen Komponenten.
H.245 ist ein Kontrollprotokoll, welches für die Multimediakommunikation verwendet
wird um die Fähigkeiten der Komponenten auszutauschen und um logische Kanäle zu
öffnen und zu schließen. Für das Senden von Multimedia Information wird in der Regel
RTP verwendet.
Es können auch noch weitere Protokolle verwendet werden. Von diesen ist zum Beispiel
H.235 zu erwähnen, welches Sicherheitsaspekte für Signalströme, wie Multimediaströme
für H.323 beschreibt. In dieser Recommendation werden die Sicherheitsvorkehrungen, wie
in Grafik 3 gezeigt, beschrieben.
Abbildung 3: Sicherheit für H.323 laut H.235, Quelle: [13]
2.3
2.3.1
Netzwerk Komponenten
Terminals
Dies sind die grundlegenden Komponenten, die auch bei jedem Nutzer vorhanden sind. Sie
sind beispielsweise in IP-Telefonen eingebaut. Ein Terminal verwaltet einen Protokollstack,
der zumindest die notwendigen oben beschriebenen Protokolle und Codecs unterstützt.
In Grafik 4 sieht man den Aufbau von H.323 und die Protokolle bzw. Codecs wie sie
zusammenarbeiten.
11
Abbildung 4: Überblick über H.323, Quelle: [6]
2.3.2
Multipoint Control Units
Diese besteht aus zwei Teilen, dem Multipoint Controller und dem Multipoint Processor.
Sie dienen dazu Konferenzen mit mehreren Teilnehmern zu verwalten und es ist zum
Beispiel möglich, dass nicht nur die Audio Daten aller Teilnehmer gemixt werden und
man so alle hört, sonder dass man auch die Video Daten aller Teilnehmer bekommt und
so alle seine Gesprächsteilnehmer nicht nur hört, sondern auch sieht.
2.3.3
Gateways
Diese ermöglichen die Kommunikation zwischen H.323 Netzwerken und anderen Netzwerken, wie dem Festnetz (PSTN) oder ISDN Netzwerken. Insofern ein Teilnehmer kein
H.323 Terminal verwendet, müssen die Daten über ein Gateway zu dem Teilnehmer gesendet werden. Das Gateway ermöglicht somit die Kommunikation zwischen dem Festnetz
und IP-Telefonen.
2.3.4
Gatekeepers
Gatekeepers sind optionale Komponenten, die allerdings verschiedene Funktionen für die
anderen Komponenten bereitstellen. Dazu gehört die Registrierung der Endpunkte, Auflösung von Adressen und auch Authentifizierung. Sehr wichtig ist dabei die Auflösung
von Adressen, da somit auch Teilnehmer kommunizieren können, die ihre gegenseitigen
IP-Adressen nicht kennen.
Ein Gatekeeper kann in zwei Modi arbeiten. Einerseits "direct routed", er löst also
nur die Adresse auf und die Teilnehmer kommunizieren dann direkt miteinander und
andererseits "gatekeeper routed". Dies heißt dass der ganze Datenverkehr weiterhin vom
einen Teilnehmer zum Anderen über den Gatekeeper läuft. Die Kommunikation zwischen
Terminal und Gatekeeper, sowie zwischen Gatekeeper läuft über RAS.
12
2.3.5
Beispiel Kommunikation
Eine mögliche Kommunikation mit H.323 zwischen zwei Terminals könnte wie in Grafik 5
aussehen.
Abbildung 5: Kommunikation über H.323, Quelle: [7]
3
Inter–Asterisk eXchange
Das Inter–Asterisk eXchange Protokoll (IAX)[12] ist ein Protokoll der Anwendungsschicht,
das zur Kontrolle und Übertragung von Multimediainhalten dient. Es wird hauptsächlich
im Bereich der Voice over IP Anruf Kontrolle verwendet, kann aber auch mit anderen
Multimediainhalten verwendet werden.
IAX ist ein offenes Protokoll, das ursprünglich von Asterisk, einer Software, die die
Funktionalität einer Telefonanlage abdeckt, verwendet wurde. Es ist weiters ein binäres
Protokoll, vor allem um Overhead in Hinblick auf VOIP Verbindungen zu reduzieren.
Es verwendet auch den Ansatz, dass UDP als Transportprotokoll verwendet wird und
Daten immer auch an einen einzelnen Port gesendet werden. Dies sollt helfen den Verkehr
leichter zu erkennen und durch Firewalls durchzulassen. Die Grundstruktur dabei ist, dass
13
IAX Signale und mehrere Medienströme über einen UDP Strom zwischen zwei Rechnern
bündelt. Es wird der UDP Port 4569 verwendet für jeden möglichen IAX Datenverkehr.
Weiters gibt es die Authentifikation über Md5 oder RSA.
3.1
Peer Verhalten und Nachrichten
Es gibt zwei Kategorien von Nachrichten. Einerseits verlässliche und andererseits nicht
garantierte Nachrichten. Zu den ersten gehören die "Full Frames", welche den kompletten
Anruf Identifier und alle Identifier der Peers beinhaltet, sowie mögliche "Information Elements"(IE). Der andere Typ sind "Mini–Frames" oder "Meta–Frames", die nur den Identifier des sendenden Peers beinhalten. Im Folgenden wird das Verhalten in einige funktionale
Teile unterteilt:
3.1.1
Registration
Um es möglich zu machen, dass ein Peer einen anderen findet, ist es nötig dessen Netzwerkadresse zu kennen. Dies ist entweder manuell anzugeben, oder es kann in einem geteilten
Verzeichnis zu finden sein. IAX bietet auch die Möglichkeit, dass sich ein Peer bei einem
anderen registriert, sodass er gefunden werden kann. Dafür gibt es nun unterschiedliche
Nachrichten und wird mit einem REGREQ begonnen. Insofern Authentifikation erwünscht
ist wird mit REGAUTH geantwortet. Darauf wird REGREQ wieder gesendet, wobei die
Authentifikationsinformationen enthalten sind. Durch ein REGACK wird die Registrierung bestätigt und es kann jederzeit mit einem REGREJ ein Fehler signalisiert werden.
Die Registrierung gilt nur für bestimmte Zeit und danach muss diese mit erneuter Registrierung verlängert werden. Sollte dies nicht gewünscht sein kann auch ein REGREL zum
Registrar gesendet werden, welches wieder authentifiziert werden kann, um die Registrierung zu beenden. Ein möglicher Datenfluss für eine Registrierung ist in Grafik 6 zu sehen.
3.1.2
Call Link Managment
Mit IAX kann man einen Link zwischen zwei Peers aufbauen. Dies geschieht über eine
NEW Nachricht, welche die Nummer des zu rufenden Teilnehmers beinhaltet. Darauf hin
kann der Remote–Peer mit einer Forderung nach Authentifizierung(AUTHREQ), mit REJECT oder ACCEPT antworten. Mit AUTHREP kann der Sender die Authentifizierung
vornehmen. Daraufhin ist der Link in einem verbundenen Zustand und er kann weiter
verwendet werden um Kontrollnachrichten zu senden bis der Anruf beendet wird. Das
Beenden wird über die HANGUP Nachricht vollzogen.
3.1.3
Call Control
Hier werden Nachrichten versendet, welche erst möglich sind nachdem ein Link mit ACCEPT zustandegekommen ist. Als erstes nach einer NEW Nachricht wird eine RINGING
sein. Allerdings ist es auch erlaubt, dass eine ANSWER zuerst kommt, ansonsten erst
danach. Weiters gibt es eine BUSY Nachricht und mit HANGUP kann der Anruf auch
sofort wieder beendet werden. Insofern mit DIAL begonnen wurde folgt darauf ein PROCEEDING und dann erst das RINGING.
14
Abbildung 6: Registration unter IAX, Quelle: [17]
3.1.4
Call Path Optimization
Wenn zwei Peers über einen dritten in der Mitte kommunizieren, kann sich dieser aus
der Kommunikation herausnehmen, sodass die beiden anderen direkt in Kontakt stehen.
Hier gibt es die Nachrichten TXREQ (beginne den Transfer Prozess für die Optimierung),
TXCNT und TXACC(Prüfe die Verbindung welche die Existierende ersetzen soll), TXREADY(beende Verbindung und arbeite mit der neuen weiter).
3.1.5
Mid–Call Behavior
Hier gibt es Nachrichten FLASH(bei analogen Anlagen wenn eine kurze Unterbrechung
festgestellt wird), HOLD(den Anruf anhalten), UNHOLD(den Anruf weiterführen), QUELCH(der
Remote–Peer unterbricht den Anruf), UNQUELCH(Remote–PEER setzt Anruf fort), und
TRANSFER(Der Anruf soll abgebrochen werden und von empfangenden Peer wieder neu
aufgenommen werden).
3.1.6
Call Tear Down
Dies wird mit den bereits erwähnten Nachrichten HANGUP, REJECT, TRANSFER und
auch mit TXREADY in ihrem jeweiligen Kontext vollzogen.
15
3.1.7
Network Monitoring
Mit der POKE und PING Nachrichten wird die Erreichbarkeit eines Peers überprüft und
dieser muss mit PONG antworten und mit LAGRQ die Qualität des momentanen Links.
Dabei wird ein Timestamp gesendet der mit LAGRP zurückgesendet wird.
3.1.8
Digit Dialing
Diese Funktionalität dient dazu, dass auch analoge Geräte mit IAX kommunizieren können. Dabei werden eine Menge von DPREQ Nachrichten gesendet welche von DPREP
beantwortet werden, indem sie anzeigen ob der Server eine Rufnummer eines Peers kennt
die gleich ist oder ob weitere Zahlen eingegeben werden müssen. Wenn DPREP anzeigt
dass es die Nummer gibt, kann diese mit DIAL "angerufen" werden
3.1.9
Miscellaneous
Erhaltene Nachrichten (Full Frames) werden mit ACK bestätigt, insofern sie keine andere
Antwort erwarten. Wenn eine nicht gültige Nachricht erhalten wird, sendet der Peer eine
INVAL Nachricht. Wenn Nachrichten nicht in der richtigen Reihenfolge eintreffen (ein
Mini–Frame mit Audio Inhalt bevor ein Full–Frame eingelangt ist der den Beginn des
Audiotransfers einleitet), so wird ein VNAK gesendet. MWI wird verwendet um einem
anderen Peer zu sagen, dass man noch Nachrichten hat die warten gesendet zu werden.
Wenn ein Peer eine Nachricht nicht unterstützt, wird dies mit UNSUPPORT angezeigt.
3.1.10
Media Messages
Audio und Video Nachrichten werden mit Mini–Frames übertragen. Sie sind einzigartig,
da sie eigene Codierungen verwenden. Allerdings muss immer wenn der Timestamp ein
Vielfaches von 0x8000 ist ein Full–Frame gesendet werden. Wenn Mediennachrichten erhalten werden, welche keine solchen Mini–Frames sind, muss darauf ein ACK gesendet
werden.
Mediennachrichten sind bei IAX: DTMF (Dual Tone Multi-Frequency), Voice Media,
Video Media, Text Media, Image Media, HTML Media Nachrichten und Comfort Noise
Nachrichten.
3.2
3.2.1
Struktur der Frames
Full Frames
Der Full Frame ist wie in Grafik 7 aufgebaut. Das F-bit zeigt an ob es sich um einen Full
Frame handelt. Die 15bit Source Call Number zeigt die Nummer an welche der Sender
benützt um den Anruf zu identifizieren. Das R-bit zeigt an ob der Frame noch einmal
übertragen wird oder das erste Mal. Die Destination Call Number wird vom Sender verwendet um den Anruf bei dem Remote–Peer zu identifizieren und stimmt mit der Source
Call Number des Remote–Peer überein. Der Time-Stamp ist ein 32bit Zahl welche in Millisekunden darstellt wie viel Zeit ab der ersten Nachricht des Anrufs vergangen ist. OSeqno
ist eine Stream Sequenz Nummer die mit jedem gesendeten Full Frame erhöht wird. ISqeno wird hingegen mit jedem empfangenen Full Frame erhöht. Der Frametype zeigt den
Typ der Nachricht an, die transportiert wird. Das C-bit deutet an wie die darauffolgenden 7 Subclass bits zu interpretieren sind. Wenn C=1, dann als Potenz von 2, sonst als
vorzeichenlose Ganzzahl.
16
Abbildung 7: Aufbau eines Full Frame, Quelle: [1]
3.2.2
Mini Frames
Diese werden so genannt, da ihre Header minimal sind und sie keine Kontrolldaten beinhalten. Sie dienen nur dazu Medien über einen bereits aufgebauten Link zu senden. Sie
haben das F-bit, welches 0 sein muss, eine Source Call Number, die wie beim Full Frame
den Anruf identifiziert und einen Time-Stamp welcher die unteren 16bit des Full Frame
Time-Stamp beinhaltet. In Grafik 8 ist ein solcher Frame dargestellt.
Abbildung 8: Aufbau eines Mini Frame, Quelle: [2]
3.2.3
Meta Frames
Hier gibt es zwei Sorten von Frames. Das eine sind Video Frames, welche es erlauben Video
Daten mit einem optimierten kürzeren Header zu übertragen und das andere sind Media
Trunk Frames, welche meherere IAX Medienströme zwischen zwei Peers zusammenfassen.
Die beiden Frames sind in Grafiken 9 und 10 abgebildet.
3.3
Verschlüsselung und Authentifizierung
IAX unterstützt die Verschlüsselung von Anrufen mit symmetrischen Schlüsseln per AES
128bit. Die NEW Nachricht wird im Klartext übertragen und zeigt die Verschlüsselung
an. Dabei gibt man das IE ENCRYPTION an. Alle nachfolgenden Nachrichten müssen
verschlüsselt sein, wobei nur die Datenteile der Nachrichten codiert werden. Die Header
17
Abbildung 9: Aufbau eines Meta Video Frame, Quelle: [12]
Abbildung 10: Aufbau eines Meta Trunk Frame, Quelle: [12]
Call Numbers werden im Klartext übertragen und der Rest des Frame wird mit 16 bis
32Byte zufälliger Daten aufgefüllt und anschließend verschlüsselt. Die zufälligen Daten
werden dabei aber vor den eigentlichen Daten eingefügt.
Authentifizierung erfolgt in IAX mittles Md5 oder RSA. Mit dem Information Element CHALLENGE wird die Aufgabe für Md5 oder RSA, welches zuerst vereinbart wird
(mit dem IE AUTHMETHODS), übertragen. Die beiden IE’s MD5 RESULT bzw. RSA
RESULT liefern dann die Antwort auf die Aufgabe.
4
Real–Time Transport Protokoll & RTP Control Protokoll
Das Real–Time Transport Protokoll[11] bietet die Möglichkeit Echtzeitdaten, wie interaktive Audio- und Videokonferenzen, von einem Ende zum Anderen zu übertragen. Normalerweise wird RTP mit UDP verwendet, es ist aber auch möglich andere Transportprotokolle
zu verwenden. Ebenso wird Multicast unterstützt.
Das RTP Control Protokoll[11] wird verwendet um die Qualität des Service festzustellen und um Informationen über die Teilnehmer weiterzuleiten.
18
4.1
RTP
Abbildung 11: RTP Header, Quelle: [3]
In der Grafik 11 sind die fixen Header Felder von RTP angeführt. Das V-bit steht für
die Version und das P-bit deutet an ob am Ende ein oder mehrere Padding Bytes folgen.
Wenn das X-bit gesetzt ist, muss nach dem Header eine Header Erweiterung folgen. CC
bestimmt die Anzahl an CSRC Identifier, die nach dem Header folgen. M steht für das
Markerbit, das zB das Ende eines Streams anzeigen kann. PT definiert den Datantyp des
Payload, wobei ein Empfänger Pakete ignorieren muss, wenn er den Payload Typ nicht
kennt. SSRC ist eine zufälliger Identifier der die syncronization source bezeichnet. Die
CSRC list beinhaltet 0 bis 15 Einträge, welche die contributing sources identifizieren. Dies
ist wichtig wenn der Datenstrom aus mehreren Quellen gemixt wird.
RTP sollte einen geraden Ziel Port wählen und RTCP den nächsten ungeraden Port.
Der Port darf nicht der gleiche sein, da die Ports verwendet werden um die Ströme wieder
zu trennen.
Da RTP für viele Anwendungen verwendet werden kann, kann man für gewisse Anwendungen Profile beschreiben. Hier wählt oder definiert man die benötigten Erweiterungen,
welche für die Anwendungen benötigt werden. Ein zweiter Teil ist die Spezifikation des
Formates der Payload. Hier wird angegeben, wie zB Videodaten codiert und in RTP transportiert werden sollen.
4.2
RTCP
RTCP basiert auf dem periodischen Senden von Paketen zu allen Teilnehmern einer Sitzung und es hat folgende vier Funktionen:
• Das Protokoll soll Informationen über die Qualität der Datenverteilung liefern. Somit
können auch Fehler in der Übertragung festgestellt werden und Netzwerk Probleme
diagnostiziert werden.
• RTCP hat einen persistenten Identifier für die RTP source, der auch canonical Name
genannt wird (CNAME). Da ein SSRC sich im Konfliktfall ändern kann, oder wenn
ein Programm neu gestartet wird, brauchen Teilnehmer den CNAME um alle Teilnehmer weiterhin finden zu können. Der CNAME ist auch wichtig um zB Audio und
Videostreams, die in zwei RTP Sitzungen übertragen werden, zu synchronisieren.
• Da alle Teilnehmer RTCP Pakete senden, wissen sie immer wie viele Teilnehmer
zugegen sind und können die Rate kontrollieren und anpassen, mit welcher die Pakete
gesendet werden.
19
• Optional ist es auch möglich einige Kontrollfunktionen weiterzuleiten, wie zB Teilnehmerinformationen, welche dann in einem User Interface dargestellt werden können.
4.2.1
RTCP Paket Format
Es gibt mehrere Formate, die unterschiedliche Kontrollinformationen beinhalten:
SR: Sender Report wird verwendet um Übertragungsstatistiken und Empfangsstatistiken
von aktiv sendenden Teilnehmern zu erhalten.
RR: Receiver Report teilt Empfangsstatistiken von nicht sendenden Teilnehmern mit.
SDES: Source Description Items sind beispielsweise der CNAME.
BYE: Zeigt das Ende der Teilnahme an einer Sitzung an.
APP: Übermittelt Applikationsspezifische Funktionen.
Jedes RTCP Paket beginnt mit einem fixen Teil, der dem von RTP gleicht, gefolgt von
einem variablen Teil, der abhängig ist von dem Typ des Paketes. Doch jedes Paket muss an
einer 32bit Grenze enden und somit können RTCP Pakete zusammengehängt werden und
als compound RTCP packet in einem (zB UDP) Paket übertragen werden. Ein Beispiel
für ein solches Paket ist in Grafik 12 gegeben.
Abbildung 12: compound RTCP Paket, Quelle: [11]
4.3
Sicherheit
RTP hat einen eigenen Verschlüsselungsmechanismus um die Geheimhaltung zu gewährleisten. Dennoch ist es auch zum Teil gewollt, dass die Transportschicht die Sicherheitsaspekte abdeckt.
Wenn nun Verschlüsselung verwendet wird, so werden alle RTP oder RTCP Pakete,
welche in der darunterliegenden Schicht gemeinsam in einem Paket gesendet werden auch
gemeinsam codiert. Bei RTCP muss man vor jede solche Einheit eine 32bit Zufallszahl
einfügen, bei RTP ist dies nicht nötig, aber die Sequenznummer und der Time-Stamp
werden mit zufälligen Offsets initialisiert. Danach werden die Pakete verschlüsselt. Verwendet wird DES mit dem cipher block chaining Modus. Empfohlen wird allerdings die
Verwendung besserer Algorithmen, wie Triple-DES. Alternativ ist es möglich Profile zu
definieren, die zusätzliche eigene Payload Typen definieren. In diesen ist es dann erlaubt
eigene Codierungen zu verwenden. Wenn es ausreichend ist die Payload zu verschlüsseln
ist dies ein guter Ansatz. Ansonsten sei auf SRTP verwiesen.
Authentifizierung und Integritätsgewährleistung ist in keiner Weise vorgesehen.
20
5
Secure Real–Time Transport Protokoll
SRTP[8] ist eigentlich ein Profil des RTP, welches Geheimhaltung und Authentifizierung
für RTP und RTCP bietet. Das SRTP Framework arbeitet indem es RTP Pakete beim
Senden in SRTP Pakete umschreibt und beim Empfangen diese wieder als normale RTP
Pakete weitergibt. Für RTCP wird SRTCP verwendet bei dem Authentifizierung verpflichtet ist.
Ein SRTP Paket hat das Format das in Grafik 13 dargestellt ist. Die verschlüsselten
Abbildung 13: SRTP Paket, Quelle: [4]
Daten sind der RTP Payload, welcher gleich groß oder größer (wegen dem Padding) als der
Klartext sein kann. Die einzigen von SRTP definierten Felder sind MKI (optional) und der
Authentication Tag. MKI ist der Master Key Identifier, der von dem Schlüssel Management
definiert wird. Dieser identifiziert den Master Key von welchem die Sitzungsschlüssel über
eine Funktion abgeleitet werden.
Der Authentication Tag überträgt die Authentifizierungsdaten. Die authentifizierten
Daten sind der RTP Header, sowie die verschlüsselten Daten. Daher soll auch immer die
Verschlüsselung vor der Authentifizierung geschehen. Der Tag liefert dabei Informationen
zur Authentifizierung der Payload und des Headers. Ebenfalls wird die Sequenznummer
authentifiziert, sodass die Nachrichten nicht von Angreifern verändert und erneut gesendet
werden können.
SRTCP hingegen definiert vier neue Felder. Diese sind das E-Flag, welches anzeigt
ob das momentane Paket verschlüsselt ist. Der SRTCP-Index ist ein 31bit Zähler der bei
jedem gesendeten SRTCP Paket um 1 erhöht wird. Der Authentication Tag ist wie bei
SRTP verwendet und der MKI ebenfalls.
Als Verschlüsselungsalgorithmus wird AES mit 128bit verwendet und zur Authentifizierung der Hash basierte Authentifizierungscode mittels SHA1 und einem 160bit Schlüssel,
wobei ein 80bit Tag entstehen soll. Dadurch dass Funktionen verwendet werden um aus
einem Master Key alle benötigten Schlüssel für SRTP und SRTCP abzuleiten, ist es nur
nötig den Master Key sicher auszutauschen und wenn nötig noch ein Master Salt.
21
Literatur
[1] http://www.en.voipforo.com/images/IAX-Full-F-Frame.gif.
[2] http://www.en.voipforo.com/images/IAX-Mini-M-Frame.gif.
[3] https://prof.hti.bfh.ch/myf1/www/projects/polyphem/www/documents/images
/rtp_header.jpg.
[4] http://www.cisco.com/en/US/i/200001-300000/220001-230000/227001228000/227279.jpg.
[5] H.323. http://en.wikipedia.org/wiki/H.323.
[6] CISCO. http://www.cisco.com/image/gif/paws/5244/h323-scope.gif.
[7] CISCO. http://www.en.voipforo.com/images/H323-communication.gif.
[8] Baugher et. al. The secure real-time transport protocol (srtp), rfc3711, 3 2004.
http://tools.ietf.org/pdf/rfc3711.pdf.
[9] Franks et. al. Http authentication: Basic and digest access authentication, rfc2617, 6
1999. http://tools.ietf.org/pdf/rfc2617.pdf.
[10] Rosenberg et. al.
Sip: Session
http://tools.ietf.org/pdf/rfc3261.pdf.
initiation
protokoll,
rfc3261,
2002.
[11] Schulzrinne et. al. Rtp: A transport protocol for real-time applications, rfc3550, 7
2003. http://tools.ietf.org/pdf/rfc3550.pdf.
[12] Spencer et. al.
Iax: Inter-asterisk exchange version 2, rfc5456, 2 2010.
http://tools.ietf.org/pdf/rfc5456.pdf.
[13] ITU-T. H.323 security: Baseline security profile, 9 2005. http://www.itu.int/rec/TREC-H.235.1-200509-I/en.
[14] ITU-T. H.225.0 call signaling protocols and media stream packetization for packetbased multimedia communication systems, 12 2009. http://www.itu.int/rec/T-RECH.225.0/en.
[15] ITU-T.
H.323 packet-based multimedia communications systems, 12 2009.
http://www.itu.int/rec/T-REC-H.323-200912-I/en.
[16] Radvision. Sip: Protocol overview. http://www.radvision.com/NR/rdonlyres/51855E82BD7C-4D9D-AA8A-E822E3F4A81F/0/RADVISIONSIPProtocolOverview.pdf.
[17] Holder Schildt. Voip mit iax. http://www.qucosa.de/fileadmin/data/qucosa/ documents/4811/data/iax.pdf.
22