This site is the archived OWASP Foundation Wiki and is no longer accepting Account Requests.
To view the new OWASP Foundation website, please visit https://owasp.org

Difference between revisions of "Germany/Projekte/Top 10 fuer Entwickler-2013/A2-Fehler in Authentifizierung und Session-Management"

From OWASP
Jump to: navigation, search
m
m (redaktionelle Änderung)
 
(33 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{Top_10_2010_Developer_Edition_De:TopTemplate|useprev=PrevLink_Germany_Projekte|usenext=NextLink_Germany_Projekte|next=Top_10_fuer_Entwickler/A4_Unsichere direkte Objektreferenzen|prev=Top_10_fuer_Entwickler/A2_Cross-Site_Scripting_(XSS)}}
+
{{Top_10_2013_DeveloperEdition:TopTemplate
== Seite in Bearbeitung (BAUSTELLE!!) ==
+
    |usenext=2013NextLinkDeveloperEdition
 +
    |next=A3-{{Top_10_2010:ByTheNumbers
 +
              |3
 +
              |year=2013
 +
              |language=de}}
 +
    |useprev=2013PrevLinkDeveloperEdition
 +
    |prev=A1-{{Top_10_2010:ByTheNumbers
 +
              |1
 +
              |year=2013
 +
              |language=de}}
 +
    |year=2013
 +
    |language=de
 +
}}
  
== A3 Fehler in Authentifizierung und Session-Management==
+
{{Top_10_2010:SubsectionColoredTemplate
 
+
      |A2 {{Top_10_2010:ByTheNumbers
{{Top_10_2010_Developer_Edition_De:SummaryTableHeaderBeginTemplate}}
+
              |2
{{Top_10_2010:SummaryTableValue-2-Template|Ausnutzbarkeit|DURCHSCHNITTLICH}}
+
              |year=2013
{{Top_10_2010:SummaryTableValue-2-Template|Verbreitung|HÄUFIG}}
+
              |language=de}}
{{Top_10_2010:SummaryTableValue-2-Template|Auffindbarkeit|DURCHSCHNITTLICH}}
+
      ||year=2013
{{Top_10_2010:SummaryTableValue-1-Template|Auiswirkung|SCHWERWIEGEND}}
+
}}
{{Top_10_2010:SummaryTableHeaderEndTemplate}}
 
    <td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}>Nicht authentifizierte Angreifer sowie authenti- fizierte Nutzer könnten versuchen, Zugangs- daten anderer zu stehlen. In Betracht kommen außerdem Innentäter, die ihre Handlungen verschleiern wollen.</td>
 
    <td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}>Angreifer nutzen Lücken bei der Authentifi- zierung oder im Sessionmanagement (z.B. ungeschützte Nutzerkonten, Passwörter, Session-IDs), um sich eine fremde Identität zu verschaffen.</td>
 
    <td colspan=2  {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}>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.</td>
 
    <td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}>Diese Fehler führen zur Kompromittierung von Benutzerkonten. Ein erfolgreicher Angreifer hat alle Rechte des Opfers. Privilegierte Zu- gänge sind oft Ziel solcher Angriffe.</td>
 
    <td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}>Betrachten Sie den Geschäftswert der betro- ffenen Daten oder Anwendungsfunktionen. Betrachten Sie weiterhin Auswirkungen auf das Unter-nehmen beim Bekanntwerden der Schwachstelle.</td>
 
  
 +
{{Top_10_2010:SummaryTableHeaderBeginTemplate|type=images|year=2013|language=de}}
 +
{{Top_10:SummaryTableTemplate|exploitability=2|prevalence=1|detectability=2|impact=1|language=de|year=2013}}
 +
{{Top_10_2010:SummaryTableHeaderEndTemplate|year=2013|language=de}}
 +
    <td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}>Nicht authentifizierte Angreifer sowie authentifizierte Nutzer könnten versuchen, Zugangsdaten anderer zu stehlen. In Betracht kommen außerdem Innentäter, die ihre Handlungen verschleiern wollen.</td>
 +
    <td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}>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.</td>
 +
    <td colspan=2  {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}>
 +
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.</td>
 +
    <td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}>Diese Fehler führen zur Kompromittierung von Benutzerkonten. Ein erfolgreicher Angreifer hat alle Rechte des Opfers. Privilegierte Zugänge sind oft Ziel solcher Angriffe.</td>
 +
    <td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}>Betrachten Sie den Geschäftswert der betroffenen Daten oder Anwendungsfunktionen. Betrachten Sie weiterhin Auswirkungen auf das Unternehmen beim Bekanntwerden der Schwachstelle.</td>
 
{{Top_10_2010:SummaryTableEndTemplate}}
 
{{Top_10_2010:SummaryTableEndTemplate}}
  
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|number=1|risk=1}}   
+
{{Top_10:SubsectionTableBeginTemplate|type=main}} {{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=example|position=firstLeft|risk=2|year=2013|language=de}}   
'''<u>Szenario 1:</u>''' Eine Flugbuchungsanwendung fügt die Session ID in die URL ein:  
+
'''Szenario 1:''' Eine Flugbuchungsanwendung fügt die Session-ID in die URL ein:
{{Top_10_2010:ExampleBeginTemplate}}<nowiki>http://example.com/sale/saleitems</nowiki>;<span style="color:red;">jsessionid=2P0OC2JDPXM0OQSNDLPSKHCJUN2JV</span>?dest=Hawaii{{Top_10_2010:ExampleEndTemplate}} <!--- ''' ... ''' zum Hervorheben des ungeprüften Pareameters eingefügt -->
+
{{Top_10_2010:ExampleBeginTemplate|year=2013}}<nowiki>http://example.com/sale/saleitems</nowiki>;<span style="color:red;">'''jsessionid=2P0OC2JDPXM0OQSNDLPSKHCJUN2JV'''</span>?dest=Hawaii{{Top_10_2010:ExampleEndTemplate}} <!--- ''' ... ''' zum Hervorheben des ungeprüften Pareameters eingefügt -->
 
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.
 
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.
  
'''<u>Szenario 2:</u>''' 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 2:''' Anwendungs-Timeouts sind falsch konfiguriert. Ein Anwender benutzt einen öffentlichen PC, um die Anwendung aufzurufen. Anstatt die &quot;Abmelden&quot;-Funktion zu benutzen, schließt der Anwender nur den Browser. Der Browser ist auch eine Stunde später noch authentifiziert, wenn ein potentieller Angreifer ihn öffnet.
  
'''<u>Szenario 3:</u>''' Ein Angreifer erlangt Zugang zur unverschlüsselten Passwortdatenbank des Systems. Damit fallen alle Zugangsdaten im Klartext in die Hände des Angreifers.
+
'''Szenario 3:''' Ein Angreifer erlangt Zugang zur nicht richtig gehashten Passwortdatenbank des Systems. Damit fallen alle Zugangsdaten quasi im Klartext in die Hände des Angreifers.
 
+
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=howPrevent|position=right|risk=2|year=2013|language=de}}  
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|number=2|risk=3}}  
 
 
Wir empfehlen Organisationen und Unternehmen, ihren Entwicklern folgende Mittel bereitzustellen:
 
Wir empfehlen Organisationen und Unternehmen, ihren Entwicklern folgende Mittel bereitzustellen:
# Zentrale Mechanismen für wirksame Authentifizierung und Session-Management, die folgendes leisten:
+
# <b>Zentrale Mechanismen für eine wirksame Authentifizierung und Session-Management</b>, die folgendes leisten:
## Einhaltung aller Anforderungen an Authentifizierung und Session-Management aus dem OWASP Application Security Verification Standard (ASVS) V2 und V3.
+
## Einhaltung aller Anforderungen an Authentifizierung und Session-Management aus dem OWASP Einhaltung aller Anforderungen an Authentifizierung und Session-Management aus dem OWASP [[ASVS | Application Security Verification Standard]] (ASVS) V2 und V3.
## Eine einfache Schnittstelle für Entwickler. Als gutes Beispiel können die ESAPI Authenticator and User APIs herangezogen werden.
+
## Eine einfache Schnittstelle für Entwickler. Als gutes Beispiel können die [http://owasp-esapi-java.googlecode.com/svn/trunk_doc/latest/org/owasp/esapi/Authenticator.html ESAPI Authenticator and User APIs] herangezogen werden.
# Ressourcen zur Implementierung schweißtreibender Maßnahmen zur Vermeidung von XSS, die in Diebstahl von Session-IDs resultieren. Siehe A2.
+
# Schwachstellen, die XSS oder den Diebstahl von Session-IDs ermöglichen, sind unter allen Umständen zu vermeiden. Siehe [[Germany/Projekte/Top 10 fuer Entwickler-2013/{{Top_10_2010:ByTheNumbers
</td> </tr>
+
              |3
</table>
+
              |year=2013
 +
              |language=de}}| A3]].
 +
{{Top_10:SubsectionTableEndTemplate}}
  
 
= '''JAVA''' =   
 
= '''JAVA''' =   
<!-- z.Z ohne Template --->
+
<!-- Beispiele für JAVA --->
 +
{{Top_10:SubsectionTableBeginTemplate|type=headertab}}{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=firstLongLeft|title=1|risk=2|year=2013|language=de}}
 +
<b>Erfinde das Sessionmanagement nicht neu!</b> Die verbreiteten Plattformen (wie Tomcat, Websphere, u.a.) liefern das alles schon mit.<br>
 +
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)
 +
* Durch den <b>Server bzw. die Anwendung</b> sollte ein absolutes Session-Timeout <b>und</b> ein 'Inaktivitäts-Timeout' durchgesetzt werden
 +
* Expire und Max-Age Attribute (->web.xml):
 +
:* Session-Cookies (ohne Timeout): Weder 'Expire', noch 'Max-Age' setzen, damit das Cookie im Browser nicht dauerhaft gespeichert wird
 +
:* Beim Benutzen von permanenten Cookies sollten aus Kompatibilitätsgründen beide Werte gesetzt werden; der Timeout von Cookies sollte so schnell wie möglich erfolgen (beim Ansichern von Transaktionen im Onlinebanking ist ein Wert von ca 10 Min. mittlerweile Standard)
 +
* beim Logout/TimeOut wird die SessionID auf dem Server ungültig gemacht, dasselbe sollte auch auf dem Client erfolgen (z.B. Cookie mit einem ungültigen Wert überschrieben und einen 'Expire'-Wert in der Vergangenheit setzen)
 +
* grundsätzlich das Secure-Attribut für Cookies benutzen (->web.xml), Voraussetzung: Absicherung der Verbindung mittels https
 +
* für Cookies das httponly-Attribut setzen (->web.xml)
 +
* Domain-und Pfad-Attribut in Cookies so eng wie möglich setzen (->web.xml)
  
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|number=11|risk=3}}
 
<b>Erfinde das Sessionmanagement nicht neu!</b> Die verbreiteten Plattformen (wie Tomcat, Websphere, u.a.) liefern das alles schon mit.<br>
 
Grundsätzliche Anforderungen:
 
* Schütze die SessionID (wie alle Authentisierungsdaten)´mit TLS
 
* Die SessionID hat in der URL nichts verloren
 
* Beim Logout/TimeOut wird die SessionID auf dem Server ungültig gemacht
 
* Benutze grundsätzlich das Secure-Attribut für Cookies, Ausnahmen davon sollten wohlbegründet sein.
 
* Setze für Cookies das httponly-Attribut
 
* Setze das Domain-Attribut in Cookies so eng wie möglich
 
* Verwende für die Erzeugung der SessionID einen kryptografisch sicheren Zufallszahlengeneerator (Entropy mindestens 128bit)
 
* Der Timeout von Cookies sollte so schnell wie möglich erfolgen (Beim Onlinebanking hat ein Wert von ca 10 Min. mittlerweile Standard)
 
  
{{Top_10_2010:ExampleBeginTemplate}}
+
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=right|title=2|risk=2|year=2013|language=de}}
 +
'''Beispiel:'''
 +
{{Top_10_2010:ExampleBeginTemplate|year=2013}}
 +
;Konfigurationsdatei 'WEB-INF/web.xml' des Webservers (Auszug):
 +
&lt;session-config&gt;
 +
: &lt;!-- Define a session timeout to 10 minutes --&gt;
 +
: &lt;session-timeout&gt;10&lt;/session-timeout&gt;
 +
: &nbsp;
 +
: &lt;!-- Define that the JSESSIONID is stored in a cookie  --&gt;
 +
: <tracking-mode>COOKIE</tracking-mode>
 +
: &nbsp;
 +
: &lt;!-- Define cookie parameters '<u>[[HttpOnly#Using_Java_to_Set_HttpOnly|HttpOnly]]</u>' and '<u>[[SecureFlag#web.xml|Secure-Flag]]</u>' --&gt;
 +
:  &lt;cookie-config&gt;
 +
::    &lt;secure&gt;true&lt;/secure&gt;
 +
::    &lt;http-only&gt;true&lt;/http-only&gt;
 +
:  &lt;/cookie-config&gt;
 +
&lt;session-config&gt;<br/>
 +
<security-constraint>
 +
:  <web-resource-collection>
 +
::  <web-resource-name>Entire Application</web-resource-name>
 +
::  <url-pattern>/*</url-pattern>
 +
:  </web-resource-collection>
 +
: &lt;!-- ssl only --&gt;
 +
: <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>
 
{{Top_10_2010:ExampleEndTemplate}}  
 
{{Top_10_2010:ExampleEndTemplate}}  
  
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|number=4|risk=3}}
 
  
{{Top_10_2010:ExampleBeginTemplate}}
+
{{Top_10_2010:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=references|position=left|risk=2|year=2013|language=de}}
 +
{{Top_10_2010:SubSubsectionOWASPReferencesTemplate}}
 +
 
 +
Einen umfangreicheren Überblick über Anforderungen und zu vermeidende Probleme gibt [[ASVS | ASVS requirements areas for Authentication (V2) and Session Management (V3)]].
 +
* [[Authentication_Cheat_Sheet | OWASP Authentication Cheat Sheet]]
 +
* [[Forgot_Password_Cheat_Sheet | OWASP Forgot Password Cheat Sheet]]
 +
* [[Session_Management_Cheat_Sheet | OWASP Session Management Cheat Sheet]]
 +
* [[OWASP_Proactive_Controls | OWASP Proactive Controls:]] [[OWASP_Proactive_Controls#5:_Implement_Identity_and_Authentication_Controls|Kapitel über 'Implement Identity and Authentication Controls']]
 +
* [[:Category:OWASP_Guide_Project | OWASP Development Guide: Kapitel über Authentifikation]]
 +
* [[Testing_for_authentication | OWASP Testing Guide: Kapitel über Authentifikation]]
 +
* [[Testing_for_Session_Management | OWASP Testing Guide: Kapitel über Session Management]]
 +
* [[Testing_for_Logout_and_Browser_Cache_Management_%28OWASP-AT-007%29 | OWASP Testing Guide: Abschitt über Logout]]
 +
 
 +
{{Top_10_2010:SubSubsectionExternalReferencesTemplate|language=de}}
 +
* [http://cwe.mitre.org/data/definitions/287.html  CWE Entry 287 on Improper Authentication]
 +
* [http://cwe.mitre.org/data/definitions/384.html  CWE Entry 384 on Session Fixation]
 +
{{Top_10:SubsectionTableEndTemplate}}{{Top 10 DeveloperEdition:NavigationByHeadertab
 +
    |headertab=JAVA
 +
    |useprev=2013PrevHeaderTabDeveloperEdition
 +
    |usenext=2013NextHeaderTabDeveloperEdition
 +
    |next=A3-{{Top_10_2010:ByTheNumbers
 +
              |3
 +
              |year=2013
 +
              |language=de}}
 +
    |prev=A1-{{Top_10_2010:ByTheNumbers
 +
              |1
 +
              |year=2013
 +
              |language=de}}
 +
    |year=2013
 +
    |language=de
 +
}}
  
{{Top_10_2010:ExampleEndTemplate}}
+
= '''PHP''' =
 +
{{taggedSection
 +
    | type=tbd
 +
    | comment=Bitte senden Sie uns weitere gute Beispiele mit PHP für diesen Abschnitt.
 +
}}
 +
<!-- weitere Programmiersprachen oder evtl Anti-Beispiele --->
 +
{{Top_10:SubsectionTableBeginTemplate|type=headertab}} {{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=firstLeft|title=1|risk=2|year=2013|language=de}}
 +
<b>Erfinde das Sessionmanagement nicht neu!</b> PHP liefert das alles schon mit.<br>
 +
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)
 +
{{Top_10_2010:ExampleBeginTemplate|year=2013}}
 +
;Konfigurationsdatei 'php.ini':
 +
 
 +
session.cookie_secure = On
  
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|number=5|risk=3}}
+
session.cookie_httponly = On
  
{{Top_10_2010:ExampleBeginTemplate}}
+
session.use_trand_sid = Off
  
{{Top_10_2010:ExampleEndTemplate}}
+
session.use_only_cookies = On
  
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|number=8|risk=3}}
+
session.hash_function = sha512
{{Top_10_2010:SubSubsectionOWASPReferencesTemplate}}
+
{{Top_10_2010:ExampleEndTemplate}}  
* [[SQL_Injection_Prevention_Cheat_Sheet | OWASP SQL Injection Prevention Cheat Sheet]]
 
* [[Command_Injection | OWASP Injection Flaws Article]]
 
* [http://owasp-esapi-java.googlecode.com/svn/trunk_doc/latest/org/owasp/esapi/Encoder.html ESAPI Encoder API]
 
* [http://owasp-esapi-java.googlecode.com/svn/trunk_doc/latest/org/owasp/esapi/Validator.html ESAPI Input Validation API]
 
* [http://www.owasp.org/index.php/ASVS#tab=Downloads ASVS: Output Encoding/Escaping Requirements (V6)]
 
* [[Testing_for_SQL_Injection_(OWASP-DV-005) | OWASP Testing Guide: Chapter on SQL Injection Testing]]
 
* [[Reviewing_Code_for_SQL_Injection | OWASP Code Review Guide: Chapter on SQL Injection]]
 
* [[Reviewing_Code_for_OS_Injection | OWASP Code Review Guide: Command Injection]]
 
{{Top_10_2010_Developer_Edition_De:SubSubsectionExternalReferencesTemplate}}
 
* [http://cwe.mitre.org/data/definitions/77.html CWE Entry 77 on Command Injection]
 
* [http://cwe.mitre.org/data/definitions/89.html CWE Entry 89 on SQL Injection]
 
</td></tr></table>
 
  
= '''Test''' =
 
<!-- weitere Programmiersprachen oder evtl Anti-Beispiele --->
 
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|number=11|risk=3}}
 
{{Top_10_2010:ExampleBeginTemplate}}
 
tbd
 
Text
 
{{Top_10_2010:ExampleEndTemplate}}
 
  
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|number=4|risk=3}}
+
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=right|title=2|risk=2|year=2013|language=de}}
{{Top_10_2010:ExampleBeginTemplate}}
+
{{Top_10_2010:ExampleBeginTemplate|year=2013}}
 
tbd
 
tbd
 
Text
 
Text
 
{{Top_10_2010:ExampleEndTemplate}}
 
{{Top_10_2010:ExampleEndTemplate}}
  
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|number=6|risk=3}}
+
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=whole|title=3|risk=2|year=2013|language=de}}
 
tbd
 
tbd
 
Text
 
Text
  
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|number=7|risk=3}}
+
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=userImpact|position=left|risk=2|year=2013|language=de}}
 
(ganze Breite)
 
(ganze Breite)
 
Text
 
Text
  
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|number=9|risk=3}}
+
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=references|position=right|risk=2|year=2013|language=de}}
</td></tr></table>
+
{{Top_10:SubsectionTableEndTemplate}}{{Top 10 DeveloperEdition:NavigationByHeadertab
 +
    |headertab=PHP
 +
    |useprev=2013PrevHeaderTabDeveloperEdition
 +
    |usenext=2013NextHeaderTabDeveloperEdition
 +
    |next=A3-{{Top_10_2010:ByTheNumbers
 +
              |3
 +
              |year=2013
 +
              |language=de}}
 +
    |prev=A1-{{Top_10_2010:ByTheNumbers
 +
              |1
 +
              |year=2013
 +
              |language=de}}
 +
    |year=2013
 +
    |language=de
 +
}}
 
<headertabs />
 
<headertabs />
 
+
{{Top_10_2013_DeveloperEdition:BottomAdvancedTemplate
{{Top_10_2010_Developer_Edition_De:BottomAdvancedTemplate|type=0|usenext=NextLink_Germany_Projekte|next=Top_10_fuer_Entwickler/A2_Cross-Site_Scripting_(XSS)|useprev=PrevLink_Germany_Projekte|prev=Top_10_fuer_Entwickler}}
+
    |type=0
 
+
    |usenext=2013NextLinkDeveloperEdition
 
+
    |next=A3-{{Top_10_2010:ByTheNumbers
[[Category:OWASP Top 10 fuer Entwickler]]
+
              |3
 +
              |year=2013
 +
              |language=de}}
 +
    |useprev=2013PrevLinkDeveloperEdition
 +
    |prev=A1-{{Top_10_2010:ByTheNumbers
 +
              |1
 +
              |year=2013
 +
              |language=de}}
 +
    |year=2013
 +
    |language=de
 +
}}

Latest revision as of 11:28, 24 March 2016

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

Die Top-10-Risiken

A3-Cross-Site Scripting (XSS) →
A2 Fehler in Authentifizierung und Session-Management


Bedrohungsquellen
Angriffsvektoren
Schwachstellen
Technische Auswirkung
Auswirkung auf das Unternehmen
Anwendungs-
spezifisch
Ausnutzbarkeit
DURCHSCHNITTLICH
Verbreitung
SEHR HÄUFIG
Auffindbarkeit
DURCHSCHNITTLICH
Auswirkung
SCHWERWIEGEND
Anwendungs-/
Geschäftsspezifisch
Nicht authentifizierte Angreifer sowie authentifizierte Nutzer könnten versuchen, Zugangsdaten 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 Unternehmen 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 benutzt einen öffentlichen PC, um die Anwendung aufzurufen. Anstatt die "Abmelden"-Funktion zu benutzen, 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 nicht richtig gehashten Passwortdatenbank des Systems. Damit fallen alle Zugangsdaten quasi im Klartext in die Hände des Angreifers.

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

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

  1. Zentrale Mechanismen für eine wirksame Authentifizierung und Session-Management, die folgendes leisten:
    1. Einhaltung aller Anforderungen an Authentifizierung und Session-Management aus dem OWASP 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. Schwachstellen, die XSS oder den Diebstahl von Session-IDs ermöglichen, sind unter allen Umständen zu vermeiden. Siehe A3.
Verteidigungs-Option 1 gegen 'Fehler in Authentifizierung 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)
  • Durch den Server bzw. die Anwendung sollte ein absolutes Session-Timeout und ein 'Inaktivitäts-Timeout' durchgesetzt werden
  • Expire und Max-Age Attribute (->web.xml):
  • Session-Cookies (ohne Timeout): Weder 'Expire', noch 'Max-Age' setzen, damit das Cookie im Browser nicht dauerhaft gespeichert wird
  • Beim Benutzen von permanenten Cookies sollten aus Kompatibilitätsgründen beide Werte gesetzt werden; der Timeout von Cookies sollte so schnell wie möglich erfolgen (beim Ansichern von Transaktionen im Onlinebanking ist ein Wert von ca 10 Min. mittlerweile Standard)
  • beim Logout/TimeOut wird die SessionID auf dem Server ungültig gemacht, dasselbe sollte auch auf dem Client erfolgen (z.B. Cookie mit einem ungültigen Wert überschrieben und einen 'Expire'-Wert in der Vergangenheit setzen)
  • grundsätzlich das Secure-Attribut für Cookies benutzen (->web.xml), Voraussetzung: Absicherung der Verbindung mittels https
  • für Cookies das httponly-Attribut setzen (->web.xml)
  • Domain-und Pfad-Attribut in Cookies so eng wie möglich setzen (->web.xml)


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

Beispiel:

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>


Referenzen

OWASP

Einen umfangreicheren Überblick über Anforderungen und zu vermeidende Probleme gibt ASVS requirements areas for Authentication (V2) and Session Management (V3).

Andere

This section is under construction. Please help OWASP to add missing content!
Comment: Bitte senden Sie uns weitere gute Beispiele mit PHP für diesen Abschnitt.
Verteidigungs-Option 1 gegen 'Fehler in Authentifizierung 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 Authentifizierung und Session-Management':

tbd Text

Verteidigungs-Option 3 gegen 'Fehler in Authentifizierung 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-2017 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