angle-uparrow-clockwisearrow-counterclockwisearrow-down-uparrow-leftatcalendarcard-listchatcheckenvelopefolderhouseinfo-circlepencilpeoplepersonperson-fillperson-plusphoneplusquestion-circlesearchtagtrashx

Flask Standort penetration tests: security headers und die session cookie

Penetration testing ist eine einfache Möglichkeit, um zu überprüfen, ob Ihre Website für böswillige Angriffe anfällig ist.

27 Dezember 2019
post main image
https://unsplash.com/@cathrynlavery

Sie haben eine Flask Webanwendung erstellt, sie läuft einwandfrei und verwendet https. Aber ist es sicher genug? Haben Sie alles getan, um Ihre Besucher zu schützen, haben Sie alles getan, um böswillige Angriffe zu verhindern?

Ein guter Weg, dies zu tun, ist pentest Ihre Website. Penetration testing Tools oder Stift-Test-Tools können Sicherheitsschwächen identifizieren. Sie identifizieren Schwachstellen in der Webanwendung, die eine Sicherheitsverletzung verursachen können.

Wikipedia: Der National Cyber Security Center, beschreibt den Penetrationstest wie folgt: "Eine Methode, um die Sicherheit eines IT-Systems zu gewährleisten, indem versucht wird, die Sicherheit dieses Systems teilweise oder ganz zu verletzen, wobei die gleichen Werkzeuge und Techniken wie bei einem Gegner verwendet werden.

Die meisten pentest -Tools müssen installiert sein und natürlich nicht auf Ihrem lokalen Rechner, sondern irgendwo im Internet, damit Sie Ihre Produktionsstätte testen können, ohne firewalls, NAT. Irgendwann werde ich diese Tools genauer unter die Lupe nehmen, aber vorerst wollte ich nur einen Hinweis auf mögliche Schwachstellen haben.

Ich habe einen Online-Test von Pentest-Tools.com verwendet, siehe Link unten, Sie erhalten zwei kostenlose Tests. Wählen Sie die Website Vulnerability Scanner, geben Sie die URL Ihrer Website ein und lehnen Sie sich zurück und warten Sie auf die Ergebnisse. Natürlich ist dies nur ein sehr, sehr, sehr einfacher Test, aber immerhin hat er mir gezeigt, dass meine Seite security headers fehlte und dass der session cookie nicht sicher war. Ich habe auch Dareboost benutzt, siehe Link unten, ihr Website Speed Test and Website Analysis Test gab mir einen schönen Quality and Performance Bericht.

Fehlende security headers ergänzen

Es ist sehr einfach, die fehlende security headers zu Ihrer Flask Seite hinzuzufügen. Zuerst habe ich eine Funktion, die die zusätzlichen Header hinzufügt, ich benutze das Flag include_security_headers für Sites, die tatsächlich im Internet sind.

from werkzeug.http import http_date

import  datetime


def prepare_response_extra_headers(include_security_headers):

    response_extra_headers = {
        # always
        'Cache-Control': 'no-cache, no-store, must-revalidate',
        'Pragma': 'no-cache',
        'Expires': '0',
        'Last-Modified': http_date(datetime.datetime.now()),
    }
    if include_security_headers:
        response_security_headers = {
            # X-Frame-Options: page can only be shown in an iframe of the same site
            'X-Frame-Options': 'SAMEORIGIN',
            # ensure all app communication is sent over HTTPS
            'Strict-Transport-Security': 'max-age=63072000; includeSubdomains',
            # instructs the browser not to override the response content type
            'X-Content-Type-Options': 'nosniff',
            # enable browser cross-site scripting (XSS) filter
            'X-XSS-Protection': '1; mode=block',
        }
        response_extra_headers.update(response_security_headers)

    return response_extra_headers

Dann, in create_app() füge ich die zusätzlichen Header der Antwort in after_request hinzu:

    ...
    include_security_headers = config_name in ['staging', 'production']
    ...
    # prepare extra response headers, see after_request
    response_extra_headers = prepare_response_extra_headers(include_security_headers)
    ...
    @app.after_request
    def after_request(response):
        # after_request is not called for 500 error

        response.headers.extend(response_extra_headers)
        return response

Bitte beachten Sie, dass wir Extend statt Update verwenden, siehe die Informationen zu Werkzeugdatenstrukturen.

Sichern des session cookie

Über die session cookie, meine Website ist mit https, http-Anfragen werden auf https umgeleitet, was ist also das Problem? Das Problem ist, dass das Cookie nicht bei der ersten (!) Anfrage von Ihrem Browser kommen muss. Sie können den HTTP Strict Transport Security (HSTS)-Header setzen und https erzwingen, aber das löst das Problem nicht, da nicht alle Browser diesen Header unterstützen.

Der einzige Weg, wie Sie Ihre session cookie sichern können, ist das Hinzufügen des Attributs "Cookie-Secure". Ich bin immer noch nicht sicher, ob damit alles gelöst ist, aber es ist kein Aufwand zur Umsetzung. In Flask machen wir einfach:

    SESSION_COOKIE_SECURE = True

Wenn Sie Flask-Login und die 'remember me'-Funktionalität verwenden, dann fügen Sie auch hinzu:

    REMEMBER_COOKIE_SECURE = True
    REMEMBER_COOKIE_HTTPONLY = True

Ein weiteres (unlösbares) Sicherheitsproblem: Passwörter im Speicher

Es gibt noch ein weiteres Sicherheitsproblem, wenn Sie eine Website auf einem VPS betreiben (Virtual Private Server). Passwörter werden über https gesendet, aber auf dem Server entschlüsselt. Anschließend werden sie nach bewährten Verfahren verschlüsselt und in der Datenbank gespeichert.

Selbst wenn der Server gepatcht wurde, um Schwachstellen wie Zombieload zu beseitigen, kann eine Person, die Zugriff auf den Server hat, den Speicher des Servers überwachen und die unverschlüsselten Passwörter sehen. Sie können das Kennwort auf dem Client mit Javascript verschlüsseln, aber dann kann sich der Angreifer trotzdem mit diesem verschlüsselten Wert anmelden. Das Minimum, das Sie tun können, ist einen zuverlässigen VPS-Provider zu bekommen.

Zusammenfassung

Ohne Penetrationstest hoffen Sie nur das Beste. Penetration testing ist eine sehr gute Möglichkeit, die Schwachstellen Ihrer Website zu überprüfen. Es ist nicht sehr schwierig, benötigt aber einige/mehrere Zeit. Denken Sie daran, dass das Betreiben einer Website auf einem VPS nie völlig sicher ist.

Links / Impressum

40 Best Penetration Testing (Pen Testing) Tools in 2020
https://www.guru99.com/top-5-penetration-testing-tools.html

Cookie Security for Flask Applications
https://blog.miguelgrinberg.com/post/cookie-security-for-flask-applications

Dareboost
https://www.dareboost.com/en

Data Structures
https://werkzeug.palletsprojects.com/en/0.15.x/datastructures/

HTTP Security Headers Analysis of Top One Million Websites
https://ccdcoe.org/uploads/2018/10/Art-18-HTTP-Security-Headers-Analysis-of-Top-One-Million-Websites.pdf

Mozilla Observatory
https://observatory.mozilla.org/

Penetration test
https://en.wikipedia.org/wiki/Penetration_test

Pentest-Tools.com
https://pentest-tools.com

Secure your Cookies (Secure and HttpOnly flags)
https://blog.dareboost.com/en/2019/03/secure-cookies-secure-httponly-flags/

Securing Cookies with HttpOnly and secure Flags
https://resources.infosecinstitute.com/securing-cookies-httponly-secure-flags/

Security Headers
https://securityheaders.com/

ZombieLoad attack lets hackers steal data from Intel chips
https://www.theverge.com/2019/5/14/18623708/zombieload-attack-intel-processors-speculative-execution

Mehr erfahren

Flask Pentesting

Einen Kommentar hinterlassen

Kommentieren Sie anonym oder melden Sie sich zum Kommentieren an.

Kommentare

Eine Antwort hinterlassen

Antworten Sie anonym oder melden Sie sich an, um zu antworten.