17.5 Sessions
Es gibt zwei Angriffsmöglichkeiten, vor denen Sie die Sessions Ihrer Benutzer schützen müssen:
Session Hijacking
Übernahme der Session-ID
Beim Session Hijacking übernimmt der Angreifer die Session-ID eines Benutzers. Damit hat der Angreifer Zugriff auf die Applikation, weil die Session-ID als Login-Bescheinigung dient.
Häufig kommen die Angreifer durch Sniffing in unsicheren Netzwerken wie z. B. WLAN-Netzen oder in Internetcafés an die erforderlichen Daten.
Wie Sie sich und Ihre Benutzer vor einem solchen Angriff schützen
HTTPS
Sorgen Sie dafür, dass Cookies niemals über das HTTP-Protokoll geschickt werden, sondern immer über HTTPS. Dies können Sie erreichen, indem Sie folgende Zeile in Ihre environment.rb einsetzen:
ActionController::Base.session_options[:session_secure] = true
Speichern Sie zusätzliche Informationen in Ihren Cookies, wie z. B. die IP-Adresse, und gleichen Sie sie bei jedem Aufruf ab.
Neue Session erzeugen
Erzeugen Sie eine neue Session, wenn ein Benutzer sich erfolgreich angemeldet hat, und kopieren Sie die Daten der alten Session in die neue. Setzen Sie dabei die Methode reset_session ein.
Entwerten Sie beim Abmelden eines Benutzers seine Session z. B. mit session[:user_id] = nil.
Session Fixation
Session-ID unterschieben
Bei diesem Angriff schiebt der Angreifer einem ahnungslosen Opfer eine dem Angreifer bekannte Session-ID unter. Das heißt, zunächst benötigt der Angreifer eine gültige Session-ID der Applikation, die er angreifen möchte. Dies könnte z. B. über das Anlegen eines Benutzerkontos erfolgen. Diese Session-ID schiebt der Angreifer dann einem Opfer unter. Sobald sich das Opfer anschließend auf Basis der untergeschobenen Session-ID mit seinen Zugangsdaten an der Applikation anmeldet, hat auch der Angreifer Zugriff auf die Applikation mit den Benutzerrechten des Opfers.
Das Unterschieben der Session-ID könnte über eine manipulierte URL oder über einen Cross-Site-Scripting-Angriff mit JavaScript-Code erfolgen. Der Angreifer könnte seinem Opfer auch ein Session-Cookie der anzugreifenden Applikation unterschieben, während das Opfer eine Website besucht, über die der Angreifer die Kontrolle hat. Oder der Angreifer hat physikalischen Zugriff auf den Rechner seines Opfers und kann die ihm bekannte Session-ID direkt im Browser des Opfers hinterlegen.
Secret-Hash in Rails 2.0
Rails 2 bringt auch gegen diesen Angriff einen sehr guten Schutzmechanismus mit, der das Unterschieben praktisch unmöglich macht. Sessions werden in Rails 2 in Cookies gespeichert, die mit einem Hash-Wert vor Fälschung geschützt sind.
Beim Erstellen einer Rails-2-Applikation wird automatisch in der Datei config/environment.rb dieser secret -Hash generiert:
Listing config/environment.rb
... # Your secret key for verifying cookie session data integrity. # If you change this key, all old sessions will become # invalid! Make sure the secret is at least 30 characters and # all random, no regular words or you'll be exposed to # dictionary attacks. config.action_controller.session = { :session_key => '_bookmarkmanager_session', :secret => '043067831bc3aef23ae2a8b20e31862c0d39db8c...' } ...
Zusätzlicher Schutz
Trotz dieses Sicherheitsmechanismus, den Rails 2 mitbringt, können Sie sich zusätzlich vor einem Session-Fixation-Angriff schützen, indem Sie nach dem Login eines Benutzers eine neue Session generieren.
Plug-in restful_authentication
Um sich sowohl vor einem Session-Hijacking-Angriff als auch vor einem Session-Fixation-Angriff zu schützen, empfehlen wir für die Authentifizierung das Plug-in »restful_authentication« (siehe Abschnitt 15.2.1) einzusetzen, weil bei der Entwicklung dieses Plug-ins auch Sicherheitsaspekte berücksichtigt werden. Außerdem werden Plug-ins ständig weiterentwickelt, so dass auch neu auftretende Sicherheitslücken ziemlich schnell geschlossen werden.
Update auf Rails 2 |
Wenn Sie eine vorhandene Applikation auf Rails 2 updaten, fehlt dieser
secret -Hash in der environment.rb und der Aufruf der Methode protect_
from_forgery im ApplicationController.
Beide Einträge müssen Sie in diesem Fall manuell vornehmen. Mit folgendem
rake-Task können Sie einen eigenen secret-Hash generieren:
rake secret ID="ultrageheim" => 4ed65cd4b6efb6802068fa0af79f4b194612... Diesen secret -Hash können Sie dann in der environment.rb eintragen: config.action_controller.session = { :session_key => 'ultrageheim', :secret => '4ed65cd4b6efb6802068fa0af79f4b194612...' } |
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.