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

Flask сайт penetration tests: security headers и session cookie

Penetration testing - это простой способ проверить, является ли ваш сайт уязвимым для вредоносных атак.

27 декабря 2019
post main image
https://unsplash.com/@cathrynlavery

Вы создали веб-приложение Flask , оно работает нормально и использует https. Но достаточно ли безопасно? Делали ли вы все, чтобы защитить посетителей, делали ли вы все, чтобы предотвратить вредоносные атаки?

Хорошим способом для этого является pentest ваш сайт. Инструменты Penetration testing или pen testing могут идентифицировать слабые места в системе безопасности. Они выявляют уязвимости в веб-приложении, которые могут привести к нарушению безопасности.

Википедия: National Cyber Security Center, описывает тестирование на проникновение следующим образом: Метод получения гарантии безопасности ИТ системы путем попытки взлома некоторых или всех элементов безопасности этой системы, используя те же самые инструменты и приемы, что и противник.

Большинство инструментов pentest должны быть установлены и, конечно же, не на локальной машине, а где-нибудь в интернете, чтобы вы могли протестировать ваш производственный сайт, не проходя firewalls, NAT. Когда-нибудь я рассмотрю эти инструменты более подробно, но пока что я просто хотел иметь некоторое представление о возможных уязвимостях.

Я использовал онлайн-тест Pentest-Tools.com, смотрите ссылку ниже, вы получаете два бесплатных теста. Выберите Website Vulnerability Scanner, введите url вашего сайта, откиньтесь назад и ждите результатов. Конечно, это всего лишь очень простой тест, но, по крайней мере, он показал мне, что на моем сайте отсутствует security headers и что session cookie не является безопасным. Я также использовал Dareboost, смотрите ссылку ниже, их Website Speed Test and Website Analysis тест дал мне хороший отчет Quality and Performance .

Добавление отсутствующего security headers

Очень легко добавить отсутствующий security headers на ваш сайт Flask . Сначала у меня есть функция добавления дополнительных заголовков, я использую флаг include_security_headers для сайтов в интернете.

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

Затем, в функции create_app() я добавляю дополнительные заголовки к ответу в after_request:

    ...
    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

Обратите внимание, что мы используем расширение вместо обновления, см. информацию о структурах данных Werkzeug.

Обеспечение безопасности session cookie

О session cookie, мой сайт использует https, http запросы перенаправляются на https, так в чем же проблема? Проблема в том, что при первом (!) запросе куки-файл не должен приходить из браузера. Вы можете установить заголовок HTTP Strict Transport Security (HSTS) и внедрить https, но это не решает проблему, потому что не все браузеры поддерживают этот заголовок.

Единственный способ обезопасить ваш session cookie - это добавить атрибут безопасности cookie. Я все еще не уверен, что это все решает, но это не усилия для реализации. В Flask мы просто делаем:

    SESSION_COOKIE_SECURE = True

Если вы используете Flask-Login и функциональность 'помните меня', то также добавьте:

    REMEMBER_COOKIE_SECURE = True
    REMEMBER_COOKIE_HTTPONLY = True

Другая (неразрешимая) проблема безопасности: пароли в памяти

Существует еще одна проблема безопасности при запуске сайта на VPS (Virtual Private Server). Пароли передаются по https, но декодируются на сервере. Затем, используя передовые методы, они шифруются и хранятся в базе данных.

Даже если сервер был исправлен для устранения уязвимостей типа Zombieload, человек, имеющий доступ к серверу, может следить за памятью сервера и видеть незашифрованные пароли. Можно зашифровать пароль на клиенте с помощью javascript, но тогда злоумышленник все равно сможет использовать это зашифрованное значение для входа в систему. Минимум, что вы можете сделать, это получить надежного VPS-провайдера.

Резюме

Без проверки на проникновение вы просто надеетесь на лучшее. Penetration testing - очень хороший способ проверить уязвимости вашего сайта. Это не очень сложно, но занимает некоторое / много времени. Помните, что работа сайта на VPS никогда не бывает полностью безопасной.

Ссылки / кредиты

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

Подробнее

Flask Pentesting

Оставить комментарий

Комментируйте анонимно или войдите в систему, чтобы прокомментировать.

Комментарии

Оставьте ответ

Ответьте анонимно или войдите в систему, чтобы ответить.