Skype-Protokoll - Skype protocol

Das Skype-Protokoll ist ein proprietäres Internet-Telefonie-Netzwerk, das von Skype verwendet wird . Die Spezifikationen des Protokolls wurden von Skype nicht öffentlich zugänglich gemacht, und offizielle Anwendungen, die das Protokoll verwenden, sind Closed Source .

Das Skype-Netzwerk ist ohne eine ordnungsgemäße Lizenzierung von Skype nicht mit den meisten anderen Voice over IP (VoIP)-Netzwerken interoperabel . Zahlreiche Versuche , zu studieren oder Reverse-Engineering , das Protokoll wurde das Protokoll zu offenbaren unternommen, untersuchen die Sicherheit oder ermöglichen inoffizielle Kunden.

Am 20. Juni 2014 kündigte Microsoft die Einstellung des alten Skype-Protokolls an. Um die Skype-Dienste weiterhin nutzen zu können, mussten Skype-Benutzer innerhalb einiger Monate nach diesem Datum auf die im Jahr 2014 veröffentlichten Skype-Anwendungen aktualisieren, und Benutzer konnten sich nicht bei älteren Skype-Versionen (Clients) anmelden . Es wurde keine Ankündigung gemacht, ob SmartTV und Hardware-Telefone mit integrierter Skype-Funktionalität weiterhin ohne Unterbrechungen funktionieren. Das neue Skype-Protokoll – Microsoft Notification Protocol 24 – versprach besseres Offline-Messaging und eine bessere Nachrichtensynchronisierung zwischen Skype-Geräten. Die Einstellung trat in der zweiten Augustwoche 2014 in Kraft.

Peer-to-Peer-Architektur

Skype war das erste Peer-to-Peer- IP-Telefonienetzwerk. Das Netzwerk enthält drei Arten von Entitäten: Supernodes , normale Nodes und den Login-Server. Jeder Client verwaltet einen Host-Cache mit der IP-Adresse und den Portnummern der erreichbaren Superknoten. Das Skype-Benutzerverzeichnis ist dezentralisiert und auf die Supernodes im Netzwerk verteilt. Supernodes sind in Slots gruppiert (9–10 Supernodes) und Slots sind in Blöcken (8 Slots) gruppiert .

Bisher konnte jeder Client mit guter Bandbreite, ohne Einschränkungen durch Firewall oder Network Address Translation (NAT) und ausreichender Rechenleistung ein Supernode werden. Dies stellte eine zusätzliche Belastung für diejenigen dar, die ohne NAT mit dem Internet verbunden waren, da Skype ihre Computer und Internetverbindungen als Dritte für UDP-Hole-Punching (um zwei Clients direkt hinter NAT zu verbinden) oder die Anrufe anderer Benutzer vollständig weiterleitete, nutzte . 2012 änderte Microsoft das Design des Netzwerks und brachte alle Supernodes als gehostete Server in Rechenzentren unter ihre Kontrolle. Microsoft verteidigte damals den Schritt und sagte, dass sie "glauben, dass dieser Ansatz sofortige Vorteile bei Leistung, Skalierbarkeit und Verfügbarkeit für die Hunderte Millionen von Benutzern bietet, die die Skype-Community bilden." Zu dieser Zeit gab es einige Bedenken hinsichtlich der Auswirkungen der Änderung auf die Privatsphäre, die sich mit der Enthüllung des PRISM- Überwachungsprogramms im Juni 2013 als wahr erwiesen haben .

Skype unterstützt die Verwendung des IPv6- Protokolls nicht, was die mit der oben genannten IPv4-Kommunikationsstruktur verbundene Komplexität erheblich reduzieren würde.

Supernodes leiten die Kommunikation im Auftrag von zwei anderen Clients weiter, die sich beide hinter Firewalls oder einer "One-to-Many"-Netzwerkadressübersetzung befinden. Ohne die Weiterleitung durch die Supernodes könnten zwei Clients mit Firewall- oder NAT-Schwierigkeiten keine Anrufe mehr tätigen oder empfangen. Skype versucht, die beiden Enden dazu zu bringen, die Verbindungsdetails direkt auszuhandeln, aber manchmal kann die Summe der Probleme an beiden Enden den Aufbau einer direkten Konversation verhindern.

Die Probleme mit Firewalls und NAT können sein:

  • Die externen Portnummern oder IP-Adressen sind nicht ableitbar, da NAT sie umschreibt
  • Die verwendete Firewall und NAT verhindern den Empfang der Sitzung
  • UDP ist aufgrund von NAT-Problemen wie Timeout nicht verwendbar
  • Firewalls blockieren viele Ports
  • TCP über Viele-zu-Eins-NAT ist standardmäßig immer "nur nach außen" – das Hinzufügen von Port-Weiterleitungseinstellungen zum NAT-Router kann den Empfang von TCP-Sitzungen ermöglichen

Protokoll

Die Signalisierung wird mit RC4 verschlüsselt ; das Verfahren verschleiert jedoch nur den Verkehr, da der Schlüssel aus dem Paket wiederhergestellt werden kann. Sprachdaten werden mit AES verschlüsselt .

Die Anwendungsprogrammierschnittstelle (API) des Skype-Clients öffnet das Netzwerk für Softwareentwickler. Die Skype-API ermöglicht es anderen Programmen, das Skype-Netzwerk zu verwenden, um " White Pages "-Informationen zu erhalten und Anrufe zu verwalten.

Der Skype-Code ist Closed Source und das Protokoll ist nicht standardisiert. Teile des Clients verwenden Internet Direct (Indy) , eine Open-Source-Socket-Kommunikationsbibliothek.

Am 8. Juli 2012 veröffentlichte ein Forscher aus Benin, Ouanilo Medegan, Artikel und Proof-of-Concept-Code, Ergebnisse seines Reverse Engineering des Skype-Clients.

Protokollerkennung

Viele Netzwerk- und Sicherheitsunternehmen behaupten, das Skype-Protokoll für Unternehmens- und Netzbetreiberanwendungen zu erkennen und zu kontrollieren. Während die von diesen Unternehmen verwendeten spezifischen Nachweismethoden oft proprietär sind, sind der Chi-Quadrat-Test von Pearson und die stochastische Charakterisierung mit Naive Bayes-Klassifikatoren zwei Ansätze, die 2007 veröffentlicht wurden.

Verschleierungsschicht

Der RC4- Verschlüsselungsalgorithmus wird verwendet, um die Nutzlast von Datagrammen zu verschleiern.

  1. Die CRC32 der öffentlichen Quell- und Ziel-IP, Skypes Paket-ID werden verwendet
  2. Initialisierungsvektor (IV) der Skype-Verschleierungsschicht .

Das XOR dieser beiden 32-Bit-Werte wird unter Verwendung einer unbekannten Schlüssel-Engine in einen 80-Byte-RC4-Schlüssel umgewandelt.

Ein bemerkenswerter Missbrauch von RC4 in Skype findet sich bei TCP-Streams (UDP ist nicht betroffen). Die ersten 14 Byte (10 davon sind dem Benutzer bekannt, da sie aus einem Hash von Benutzername und Passwort bestehen) werden mit dem RC4-Stream XOR-verknüpft. Dann wird die Chiffre neu initialisiert, um den Rest des TCP-Streams zu verschlüsseln.

TCP

TCP-Pakete:

TCP
Skype Init TCP packet

Das Skype Init TCP-Paket enthält

  • der Seed (4 Byte)
  • init_str string 00 01 00 00 01 00 00 00 01/03

Low-Level-Datagramme

Fast der gesamte Verkehr wird verschlüsselt. Jeder Befehl hat seine Parameter in einer Objektliste angehängt. Die Objektliste kann komprimiert werden.

                                 / Object List     ... -|
        Enc      -> Cmd -> Encod
                     ^           \ Compressed List ... -|
        Frag         |                                  |
                     |------------------<---------------|
        Ack
        NAck
        Forward  -> Forwarded..Message

Objektlisten

Ein Objekt kann eine Zahl, ein String, ein IP:Port oder sogar eine andere Objektliste sein. Jedes Objekt hat eine ID. Diese ID identifiziert, welcher Befehlsparameter das Objekt ist.

 Object:
         Number
         IP:Port
         List of numbers
         String
         RSA key
 Object List
         List Size (n)
         Object 1
         .
         .
         Object n

Paketkomprimierung

Pakete können komprimiert werden. Der Algorithmus ist eine Variation der arithmetischen Komprimierung , die reelle Zahlen anstelle von Bits verwendet.

Rechtsfragen

Reverse Engineering des Skype-Protokolls durch Überprüfen/Deassemblieren von Binärdateien ist durch die Bedingungen der Lizenzvereinbarung von Skype untersagt. Das Recht der Europäischen Union erlaubt jedoch das Reverse-Engineering eines Computerprogramms, ohne die Erlaubnis eines Autors für Interoperabilitätszwecke einzuholen. In den Vereinigten Staaten bietet der Digital Millennium Copyright Act Schutz für Reverse Engineering-Software zum Zwecke der Interoperabilität mit anderer Software. Auch in den USA gibt es rechtliche Präzedenzfälle, wenn das Reverse-Engineering auf die Interoperabilität von Dateiformaten und Protokollen abzielt.

Darüber hinaus erlauben einige Länder ausdrücklich das Kopieren eines Programms zum Zwecke des Reverse Engineering.

Anmerkungen

Verweise

Externe Links