Die Sicherheit von ICQ
Version 3.0b 27. Juli 2000
Geschrieben von Marc Ruef <marc.ruef@computec.ch> für http://www.computec.ch/
Alle Rechte vorbehalten - Kopieren erlaubt!
http://www.computec.ch/mruef/texte/icq.html


1.0 Inhaltsverzeichnis
1.0 Inhaltsverzeichnis

2.0 Einführung

2.1 Das System der UINs

2.2 Die Kontakt-Liste

2.3 Die Kommunikation

2.4 Die ActiveList

2.5 Die Webserver-Funktionalität

3.0 Die Sicherheit
3.1 Die Sicherheitslücken
3.1.1 ICQ98a: Bufferoverflow durch korrupte URL

3.1.2 ICQ98a: Datei-Endungen vortäuschen

3.1.3 ICQ98b: ICQ-Hijacking

3.1.4 ICQ98b: IP-Sniffing durch TCP-Pakete

3.1.5 ICQ98b: Message-Spoofing

3.1.6 ICQ99a: Passwörter werden im Klartext gespeichert

3.1.7 ICQ99a: Unsichere Authentifizierung

3.1.8 ICQ99b: Bufferoverflow dank URL

3.1.9 ICQ99b: Client-to-Client-Protokoll

3.1.10 ICQ99b: DoS-Attacke dank guestbook.cgi

3.1.11 ICQ99b: DoS-Attacke durch URL

3.1.12 ICQ99b: File-Sharing

3.1.13 ICQ2000a: ICQMail Webaccount

2.0 Einführung
ICQ (Ausgesprochen "I seek you") konnte sich aufgrund seines hohen Komforts und stetig wachsenden Funktionsumfang als das meistgenutzte Chat-System, neben IRC (Internet Relay Chat), des Internets durchsetzen. Eine Kommunikation kann auf zwei Wege stattfinden: Entweder vom ICQ-Client über den Chat-Server zu einem anderen User, oder direkt von Anwender zu Anwender. Offizielle und inoffizielle ICQ-Clients finden sich für die verschiedensten Plattformen: So sind welche für Windows 9x, Windows NT, Windows CE, Linux, MacOS, BeOS, BSD und sogar Solaris erhältlich. Dies ist gewissermassen eine Meisterleistung der Hersteller der inoffiziellen Client-Software, da das eingesetzte Protokoll nicht öffentlich einsehbar ist. Für Windows empfiehlt sich eindeutig das Nutzen des neuesten offiziellen Clients von Mirabilis, da jener den besten Komfort und höchste Sicherheit bietet und mit allen anderen Clients kompatibel ist. Für Unix-Derivate wurde von Mirabilis offiziell ein Java-Client herausgegeben, der jedoch niemals an die Bedienerfreundlichkeit vieler inoffizieller Clients herankommt. Für Linux gibt es neben den grafischen Clients für die Oberfläche X auch diverse Programme für die Kommandozeile. Mein absoluter Favourit ist zICQ, der zwar einige Einbussen in Punkto Funktionsumfang machen muss, dafür stabil und schnell läuft. Es ist mir dadurch sogar möglich ICQ portabel auf meinem Handy (NOKIA 9110) zu nutzen: Ich wähle mich bequem unterwegs per Telnet auf meinem Linux-Server ein, um danach den Konsolen-Client in Anspruch zu nehmen.

2.1 Das System der UINs

Jeder Nutzer des ICQ-Dienstes erhält bei seinem Eintritt in die Community eine eindeutige Nummer, die UIN (Universal Identifier Number) genannt wird. Diese Nummer ist mit der eindeutigen IP-Adresse oder Telefon-Nummer vergleichbar, da sich dadurch andere User finden und identifizieren lassen. Die Nummern werden additionell 1 vergeben. Das heisst, dass wenn ich bei meiner Registrierung die Nummer 10742206 erhalten habe, der kommende Nutzer automatisch die nächst höhere bekommen wird; also die UIN 10742207. Mitlerweile existieren über 70000000 Nummern, und wer sich noch mit einer 7- oder gar 6-stelligen UIN brüsten darf, kann sich ohne weiteres zu den alten Hasen zählen. UINs mit weniger Stellen werden nicht öffentlich vergeben und vorzugsweise vom Person von ICQ (Mirabilis und AOL) genutzt. Möchte man jemanden finden, lassen sich mit der Eingabe des vollständigen Namens, E-Mail-Adresse oder UIN in das "elektronische Telefonbuch" von ICQ den Nutzer einfach aufspüren. Es gibt auch die offiziellen weissen Seiten, bei denen sich Benutzer des Dienstes in Listen eintragen lassen, die sich einem speziellen Thema widmen.
2.2 Die Kontakt-Liste
Auf der sogenannten Kontakt-Liste sind alle User eingetragen, mit denen man regelmässig in Kontakt steht. Auf jener Liste wird stets aktuell ersichtlich, wer gerade online ist oder den PC für einen kurzen Augenblick verlassen hat. Es ist möglich den eigenen Status zu verändern, wobei auf der Kontaktliste des Gegenübers automatisch der neue Status angezeigt wird. Die gängigen Zustände reichen von "online" über "away" bis hin zu "do not disturb". Möchte man nicht öffentlich zugeben, dass man mittels Internet-Zugang zur Zeit im ICQ erreichbar ist, ändert man den eigenen Status in "invisible", wobei nur noch Auserwählte einem als "online" in der Kontakt-Liste registrieren können. Nun ist es möglich mit wenigen Maus-Klicks oder Tasten-Kombinationen einem ICQ-Nutzer in der eigenen Contact-List eine Message zukommen zu lassen.
2.3 Die Kommunikation
Neben (Kurz-)Mitteilungen sind auch sind längere Chat-Sessions möglich, bei denen ganz im Stile von IRC auch mehrere Anwender in real-time beiwohnen können. Im Laufe der Zeit hat sich ICQ zu einer wahren Kommunikations-Schaltzentrale entwickelt, da nun bei den neueren (Windows-)Clients auch das Verschicken multimedialer Nachrichten möglich wird oder mittels Plug-Ins Voice-over-IP (VOIP) genutzt werden
kann.
2.4 Die ActiveList
Kurz vor dem Erscheinen der Test-Version von ICQ 2000 machte ein neues Add-On zu ICQ die Runde: Die sogenannte ActiveList. Dadurch wird die Usenet-ähnliche Zusammenhaltung einer Diskussion möglich. Der Moderator muss als erstes die Server-Software auf dem heimischen PC installieren und die neu erstellte Liste im Internet anmelden. Ab da an können Interessierte dieser Community beitreten, um einem zuvor spezifizierten Thema in Form einer Diskussion beizuwohnen.

Diese Form der Unterhaltung konnte sich (leider) nicht wirklich durchsetzen, da zu wenige ActiveList-Moderatoren Standleitungen besitzen, und das Nutzen dieses Zusatzdienstes somit nur temporär möglich ist.

2.5 Die Webserver-Funktionalität
Mit ICQ99 wird der heimische Rechner zum Internet-Server: Wurde die "My ICQ Page"-Funktionalität aktiviert, verwandelt sich der eigene PC neben einem Web-Server auch in in einen File-Server. Hinzu wird auch noch ein CGI-basierendes Gästebuch aktiviert. Daten, die in dieses Guestbook eingetragen werden, werden von der Datei "guestbook.cgi" verwaltet. Dieser Host ist natürlich unter der IP-Adresse erreichbar, mit welcher er im Internet auftaucht.

Es öffnen sich viele potentielle Sicherheitslücken beim Zurückgreifen auf dieses Feature, wobei ein Firewall-Element mit Socks- oder Masquerading-Funktionalität ("/sbin/ipfwadm" oder "/sbin/ipchains" für Unix-Derivate) Abhilfe schaffen kann, da keine direkten Connections mehr zum verwundbaren Client möglich sind.

3.0 Die Sicherheit

Dieser Text ist unverfälscht frei kopierbar!
Marc Ruef <marc.ruef@computec.ch>
http://www.computec.ch/