Cookies

Als Cookie bezeichnet man Datenpakete oder -sequenzen, die zwischen Computerprogrammen ausgetauscht werden, um einen Zustand innerhalb der ausgeführten Anwendung festzuhalten. Heute wird der Begriff Cookie häufig synonym mit HTTP-Cookies in Webbrowsern verwendet, in welchen der aktuelle Zustand einer Webanwendung auf dem Client gespeichert und an den Webserver übertragen wird. Allgemein werden Cookies als Datentoken von Anwendungen ausgewertet, um bereits durchgeführte Aktionen zu protokollieren. Im folgenden sollen hauptsächlich HTTP-Cookies betrachtet werden.

Magic-Cookies als Vorgänger zu HTTP-Cookies

Der Begriff Magic-Cookies wurde bereits vor Erfindung des World Wide Web (WWW) unter Unix-Programmierer*innen verwendet, um einen Token zu beschreiben, der zwischen korrespondierenden Computerprogrammen ausgetauscht wird, um eine zuvor ausgeführte Interaktion zwischen diesen Programmen zu protokollieren [1]. Am prominentesten ist das Beispiel der ftell-Routine der C-Standardbibliothek, welche für das fseek-Programm zum Durchsuchen von Dateien die aktuelle Pointerposition zurückgibt. Wichtig hierbei ist, dass dieses Token nur von der fseek-Routine sinnvoll ausgewertet werden kann und in keinem anderem Kontext für sinnvolle Berechnungen verwendet werden kann. In der analogen Welt wird das Token mit einer Garderobenmarke verglichen, die nur sinnvoll dafür verwendet werden kann, die abgegebene Garderobe wieder abzuholen [2][3].

Mit dem Aufkommen von Webtechnologien in den 1980er und 1990er Jahren und der damit verbundenen zunehmenden Vernetzung verschiedenster Geräte wurde 1989 durch Tim Berners-Lee mit dem Hyper Text Transfer Protocol (HTTP) eine Standardisierung der Kommunikation zwischen den teilnehmenden Clients geschaffen [4]. Der erste Webbrowser zur Anzeige von Webseiten, deren Format in der Hyper Text Markup Language (HTML) standardisiert ist, war der Netscape Navigator. Der Netscape-Programmierer Lou Montulli stieß dabei auf das Problem, dass aufgrund der technischen Grundlagen der IP-Kommunikation im WWW keine Zustände der Verbindung im Protokoll gespeichert wurden. Dies bedeutete für HTML-Webseiten, dass jeder Aufruf der Seite für den Webserver wie der allererste Seitenaufruf schien und bereits abgeschlossene Interaktionen zwischen Browser und Server nicht protokolliert wurden. Montulli erfand daher, auf der Grundlage der aus UNIX-Umgebungen bekannten Magic Cookies, den sogenannten HTTP-Cookie. Die Netscape-Spezifikation zu HTTP-Cookies wurde von den ersten Webbrowsern Netscape Mosaic und Internet Explorer unterstützt und wurde von Internet Engineering Task Force (IETF) erstmals 1997 im Request for Comments (RFC) 2109 formalisiert.

Technische Grundlagen

RFCs

  • RFC2109 (1997, abgelöst durch RFC2965) [5]
  • RFC2965 (2000, abgelöst durch RFC6265) [6]
  • RFC6265 (2011) [7]

Aufbau

Ein Cookie wird angelegt wenn der Server den "set cookie:" Befehl an den Client sendet. Dieser wird mit der "Session ID" (SID) verknüpft. Der Client erwähnt die gespeicherten Cookies im "HTTP Request Header" an den Server, der die "neue" Session dann der ihm bereits bekannten SID zuordnen kann.

Beispielhaft könnte der "set cookie" Befehl so aussehen:

   Set-Cookie: SID=53d4d92e618ccd69

Der Client "meldet" beim aufruf der Seite den Cookie zurück an den Server:

   Cookie: SID=53d4d92e618ccd69

Über Cookies lassen sich viele Informationen sehr granular hinterlegen, so zum Beispiel informationen über HTTP-Sicherheit- und Spracheinstellungen:

   Set-Cookie: SID=53d4d92e618ccd69; Path=/; Secure; HttpOnly
   Set-Cookie: lang=de-DE; Path=/; Domain=wings.de

Speicherort unter verschiedenen Browsern/Betriebsystemen

  • Mozilla Firefox Cookies unter Windows: %APPDATA%\Mozilla\Firefox\Profiles\<profile>\cookies.sqlite
  • Internet Explorer Cookies unter Windows: C:\Users\<username>\AppData\Local\Microsoft\Windows\INetCache

Forensische Analyse von HTTP-Cookies

Da HTTP-Cookies in der Regel von Webbrowsern in Form von SQLite-Datenbanken abgespeichert werden, können diese mit SQLite Anzeigeprogrammen wie dem SQLite Forensic Explorer [8] oder dem SQLite DB Browser [9] analysiert werden.

Alternativ können diese Dateien auch von den Webbrowsern selbst angezeigt und untersucht werden. Bei Mozilla Firefox beispielsweise ruft man hierzu in den Einstellungen die Web-Entwickler Konsole auf und öffnet den Reiter Web-Speicher.

Es gibt außerdem in verschiedenen Programmiersprachen Möglichkeiten, SQLite-Datenbanken auszulesen, wie beispielsweise unter Python.

Quellen

[1] https://de.wikipedia.org/wiki/Magic-Cookie

[2] http://outpost9.com/reference/jargon/jargon_28.html#TAG1093

[3] http://outpost9.com/reference/jargon/jargon_18.html#TAG342

[4] https://www.w3.org/Protocols/HTTP/AsImplemented.html

[5] https://tools.ietf.org/html/rfc2109

[6] https://tools.ietf.org/html/rfc2965

[7] https://tools.ietf.org/html/rfc6265

[8] https://www.sqliteviewer.org/

[9] https://sqlitebrowser.org/