Germany/Projekte/Top 10 fuer Entwickler-2013/A2-Fehler in Authentisierung und Session-Management

From OWASP
Revision as of 04:09, 17 July 2013 by T.Gigler (Talk | contribs)

Jump to: navigation, search

BAUSTELLE! Hier entsteht das deutsche Wiki der OWASP Top 10 fuer Entwickler-2013

← A1-Injection
Top 10 fuer Entwickler-2013: Inhaltsverzeichnis

Die Top-10-Risiken

A3-Cross-Site Scripting (XSS) →

A3 Fehler in Authentifizierung und Session-Management

Bedrohungsquelle
Angriffsvektor
Schwachstellen
Technische Auswirkung
Auswirkung auf das Unternehmen
______ Ausnutzbarkeit
DURCHSCHNITTLICH
Verbreitung
SEHR HÄUFIG
Auffindbarkeit
DURCHSCHNITTLICH
Auswirkung
SCHWERWIEGEND
Application / Business Specific
Nicht authentifizierte Angreifer sowie authentifizierte Nutzer könnten versuchen, Zugangs- daten anderer zu stehlen. In Betracht kommen außerdem Innentäter, die ihre Handlungen verschleiern wollen. Angreifer nutzen Lücken bei der Authentifizierung oder im Sessionmanagement (z.B. ungeschützte Nutzerkonten, Passwörter, Session-IDs), um sich eine fremde Identität zu verschaffen. Obwohl es sehr schwierig ist, ein sicheres Authentifizierungs- und Session-Management zu implementieren, setzen Entwickler häufig auf eigene Lösungen. Diese haben dann oft Fehler bei Abmeldung und Passwortmanagement, bei der Wiedererkennung des Benutzers, bei Timeouts, Sicherheitsabfragen usw. Das Auffinden dieser Fehler kann sehr schwierig sein, besonders wenn es sich um individuelle Implementierungen handelt. Diese Fehler führen zur Kompromittierung von Benutzerkonten. Ein erfolgreicher Angreifer hat alle Rechte des Opfers. Privilegierte Zugänge sind oft Ziel solcher Angriffe. Betrachten Sie den Geschäftswert der betroffenen Daten oder Anwendungsfunktionen. Betrachten Sie weiterhin Auswirkungen auf das Unter-nehmen beim Bekanntwerden der Schwachstelle.
Mögliche Angriffsszenarien

Szenario 1: Eine Flugbuchungsanwendung fügt die Session ID in die URL ein:

http://example.com/sale/saleitems;jsessionid=2P0OC2JDPXM0OQSNDLPSKHCJUN2JV?dest=Hawaii

Ein authentifizierter Anwender möchte dieses Angebot seinen Freunden mitteilen. Er versendet obigen Link per E-Mail, ohne zu wissen, dass er seine Session-ID preisgibt. Nutzen seine Freunde den Link, können sie seine Session sowie seine Kreditkartendaten benutzen.

Szenario 2: Anwendungs-Timeouts sind falsch konfiguriert. Ein Anwender verwendet einen öffentlichen PC, um die Anwendung aufzurufen. Anstatt die „Abmelden“ Funktion zu nutzen, schließt der Anwender nur den Browser. Der Browser ist auch eine Stunde später noch authentifiziert, wenn ein potentieller Angreifer ihn öffnet.

Szenario 3: Ein Angreifer erlangt Zugang zur unverschlüsselten Passwortdatenbank des Systems. Damit fallen alle Zugangsdaten im Klartext in die Hände des Angreifers.

Wie kann ich 'Fehler in Authentisierung und Session-Management' verhindern?

Wir empfehlen Organisationen und Unternehmen, ihren Entwicklern folgende Mittel bereitzustellen:

  1. Zentrale Mechanismen für wirksame Authentifizierung und Session-Management, die folgendes leisten:
    1. Einhaltung aller Anforderungen an Authentifizierung und Session-Management aus dem OWASP Application Security Verification Standard (ASVS) V2 und V3.
    2. Eine einfache Schnittstelle für Entwickler. Als gutes Beispiel können die ESAPI Authenticator and User APIs herangezogen werden.
  2. Ressourcen zur Implementierung schweißtreibender Maßnahmen zur Vermeidung von XSS, die in Diebstahl von Session-IDs resultieren. Siehe A2.
[edit]

Verteidigungs-Option 1 gegen 'Fehler in Authentisierung und Session-Management':

Erfinde das Sessionmanagement nicht neu! Die verbreiteten Plattformen (wie Tomcat, Websphere, u.a.) liefern das alles schon mit.
Grundsätzliche Anforderungen an das Session Management:

  • SessionID mit TLS schützen (wie alle Authentifizierungsdaten) (->web.xml)
  • die SessionID hat in der URL nichts verloren (->web.xml)
  • nach jeder erfolgreichen Authentifizierung eine neue SessionID generieren
  • für die Erzeugung der SessionID einen kryptografisch sicheren Zufallszahlengenerator verwenden (Entropy mindestens 128bit)
  • der Timeout von Cookies sollte so schnell wie möglich erfolgen (beim Onlinebanking ist ein Wert von ca 10 Min. mittlerweile Standard) (->web.xml)
  • beim Logout/TimeOut wird die SessionID auf dem Server ungültig gemacht
  • grundsätzlich das Secure-Attribut für Cookies benutzen (->web.xml)
  • für Cookies das httponly-Attribut setzen (->web.xml)
  • Domain-und Pfad-Attribut in Cookies so eng wie möglich setzen (->web.xml Tbd)
Konfigurationsdatei 'WEB-INF/web.xml' des Webservers (Auszug)

<session-config>

<!-- Define a session timeout to 10 minutes -->
<session-timeout>10</session-timeout>
 
<!-- Define that the JSESSIONID is stored in a cookie -->
<tracking-mode>COOKIE</tracking-mode>
 
<!-- Define cookie parameters 'HttpOnly' and 'Secure-Flag' -->
<cookie-config>
<secure>true</secure>
<http-only>true</http-only>
</cookie-config>

<session-config>
<security-constraint>

<web-resource-collection>
<web-resource-name>Entire Application</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<!-- ssl only -->
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>

</security-constraint>

<context-param>

<param-name>sessionCookieDomain</param-name>
<param-value>.domain.tld</param-value>
<param-name>sessionCookiePath</param-name>
<param-value>/something</param-value>

</context-param>

Verteidigungs-Option 2 gegen 'Fehler in Authentisierung und Session-Management':

tbd

Verteidigungs-Option 3 gegen 'Fehler in Authentisierung und Session-Management':

tbd

Referenzen

OWASP

Andere

Verteidigungs-Option 1 gegen 'Fehler in Authentisierung und Session-Management':

Erfinde das Sessionmanagement nicht neu! PHP liefert das alles schon mit.
Grundsätzliche Anforderungen an das Session Management:

  • SessionID mit TLS schützen (wie alle Authentifizierungsdaten) (->php.ini)
  • die SessionID hat in der URL nichts verloren (->php.ini)
  • nach jeder erfolgreichen Authentifizierung eine neue SessionID generieren
  • für die Erzeugung der SessionID einen kryptografisch sicheren Zufallszahlengenerator verwenden (Entropy mindestens 128bit)
  • der Timeout von Cookies sollte so schnell wie möglich erfolgen (beim Onlinebanking ist ein Wert von ca 10 Min. mittlerweile Standard) (->php.ini)
  • beim Logout/TimeOut wird die SessionID auf dem Server ungültig gemacht
  • grundsätzlich das Secure-Attribut für Cookies benutzen (->php.ini)
  • für Cookies das httponly-Attribut setzen (->php.ini)
  • Domain-und Pfad-Attribut in Cookies so eng wie möglich setzen (->php.ini)
Konfigurationsdatei 'php.ini'

session.cookie_secure = On

session.cookie_httponly = On

session.use_trand_sid = Off

session.use_only_cookies = On

session.hash_function = sha512


Verteidigungs-Option 2 gegen 'Fehler in Authentisierung und Session-Management':

tbd Text

Verteidigungs-Option 3 gegen 'Fehler in Authentisierung und Session-Management':

tbd Text

Auswirkung(en) auf den Benutzer

(ganze Breite) Text

Referenzen

← A1-Injection
Top 10 fuer Entwickler-2013: Inhaltsverzeichnis

Die Top-10-Risiken

A3-Cross-Site Scripting (XSS) →

© 2002-2013 OWASP Foundation This document is licensed under the Creative Commons Attribution-ShareAlike 3.0 license. Some rights reserved. CC-by-sa-3 0-88x31.png