# Аутентификация

Концептуально уязвимости аутентификации понять несложно. Однако обычно они критичны из‑за прямого влияния на безопасность.

Уязвимости аутентификации могут позволить злоумышленникам получить доступ к конфиденциальным данным и функциональности. Они также расширяют доступную площадь атаки. Поэтому важно научиться выявлять и эксплуатировать уязвимости аутентификации, и понять как обходятся распространённые меры защиты.

В этом разделе мы рассмотрим:

* Наиболее распространённые механизмы аутентификации, используемые веб‑сайтами.
* Потенциальные уязвимости этих механизмов.
* Типичные уязвимости, возникающие из‑за неправильной реализации.
* Как сделать собственные механизмы аутентификации максимально устойчивыми.

![password reset poisoning](https://2753068357-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7KQ4F0M3A1jSCGxOdZRW%2Fuploads%2Fgit-blob-624e71a477cc65834a12fe16fc0dda1263d19f7b%2Fpassword-reset-poisoning.svg?alt=media)

{% hint style="success" %}
**Лабораторные задания**

Если вы знакомы с базовыми концепциями уязвимостей аутентификации и хотите попрактиковаться в их эксплуатации на реалистичных, намеренно уязвимых целях, вы можете перейти к лабораторным работам по ссылке ниже.

* [Все лабораторные по уязвимостям аутентификации](https://portswigger.net/web-security/all-labs#authentication)
  {% endhint %}

## Что такое аутентификация?

Аутентификация — это процесс проверки личности пользователя или клиента. Веб‑сайты потенциально доступны любому, кто подключён к интернету. Поэтому, надежные механизмы аутентификации — неотъемлемая часть веб‑безопасности.

Существует три основных типа аутентификации:

* Фактор знания — что‑то, **что вы знаете**, например пароль или ответ на контрольный вопрос.
* Фактор владения — что‑то, **чем вы обладаете**. Это физический объект, такой как мобильный телефон или токен безопасности.
* Фактор свойства — что‑то, **чем вы являетесь** или что вы делаете. Например, ваши биометрические данные или поведенческие шаблоны.

Механизмы аутентификации полагаются на набор технологий для проверки одного или нескольких из этих факторов.

### В чём разница между аутентификацией и авторизацией?

Аутентификация — это процесс проверки того, что пользователь действительно тот, за кого себя выдаёт. Авторизация — это проверка того, разрешено ли пользователю что‑то делать. Например, аутентификация определяет, действительно ли тот, кто пытается получить доступ к сайту под именем пользователя `Carlos123`, является тем самым человеком, который создал эту учётную запись.

После того как `Carlos123` прошёл аутентификацию, его права определяют, что ему авторизовано делать. Например, ему может быть разрешён доступ к персональной информации о других пользователях или выполнение действий, таких как удаление учётной записи другого пользователя.

## Как возникают уязвимости аутентификации?

Большинство уязвимостей в механизмах аутентификации возникает одним из двух способов:

* Механизмы аутентификации слабы, потому что они не обеспечивают достаточную защиту от атак перебора.
* Логические ошибки или плохой код в реализации позволяют злоумышленнику полностью обойти механизмы аутентификации.

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

## Какие последствия уязвимостей аутентификации?

Последствия уязвимостей аутентификации могут быть серьёзными. Если атакующий обойдёт аутентификацию или подберёт пароль и войдёт в учётную запись другого пользователя, он получит доступ ко всем данным и функциям, доступным скомпрометированной учётной записи. Если ему удастся скомпрометировать учётную запись c высокими привилегиями, такую как системный администратор, он может полностью взять под контроль всё приложение и потенциально получить доступ к внутренней инфраструктуре.

Даже компрометация учётной записи с низкими привилегиями может предоставить атакующему доступ к данным, к которым у него иначе не было бы доступа, например к информации, чувствительной для бизнеса. Даже если у учётной записи нет доступа к конфиденциальным данным, она всё равно может позволить атакующему попасть на дополнительные страницы, что расширяет площадь атаки. Часто атаки высокой серьёзности невозможны с публично доступных страниц, но могут быть осуществимы с внутренней страницы.

## Уязвимости в механизмах аутентификации

Система аутентификации веб‑сайта обычно состоит из нескольких отдельных механизмов, в которых могут проявляться уязвимости. Некоторые уязвимости применимы ко всем контекстам, другие более специфичны для предоставляемого функционала.

Рассмотрим более подробно некоторые из наиболее распространённых уязвимостей в следующих областях:

* [Уязвимости входа по паролю](https://wr3dmast3r.gitbook.io/portswiggerfundamental/server-side/authentication-vulnerabilities/uyazvimosti-vkhoda-po-parolyu)
* [Уязвимости многофакторной аутентификации](https://wr3dmast3r.gitbook.io/portswiggerfundamental/server-side/authentication-vulnerabilities/uyazvimosti-mnogofaktornoi-autentifikacii)
* [Уязвимости в других механизмах аутентификации](https://wr3dmast3r.gitbook.io/portswiggerfundamental/server-side/authentication-vulnerabilities/uyazvimosti-v-drugikh-mekhanizmakh-autentifikacii)

Несколько лабораторных заданий требуют перечисления имён пользователей и брутфорса паролей. Чтобы помочь вам в этом процессе, на следующих страницах собраны списки [usernames](https://portswigger.net/web-security/authentication/auth-lab-usernames) и [passwords](https://portswigger.net/web-security/authentication/auth-lab-passwords), которые следует использовать для решения лабораторных задач.

### Уязвимости в механизмах аутентификации третьих сторон

Если вам нравится взламывать механизмы аутентификации и вы прошли основные лабораторные задания по аутентификации, можете также попробовать лабораторные работы по аутентификации OAuth.

{% hint style="info" %}
**Подробнее**

[Уязвимости аутентификации OAuth 2.0](https://wr3dmast3r.gitbook.io/portswiggerfundamental/advanced/oauth)
{% endhint %}

## Предотвращение уязвимостей в ваших механизмах аутентификации

Мы рассмотрели несколько примеров уязвимостей механизмов аутентификации веб-сайтов. Чтобы снизить риск атак на ваши веб-сайты, следует соблюдать несколько принципов, описанных на следующей странице.

{% hint style="info" %}
**Подробнее**

[Как защитить механизмы аутентификации](https://wr3dmast3r.gitbook.io/portswiggerfundamental/server-side/authentication-vulnerabilities/kak-zashitit-mekhanizmy-autentifikacii)
{% endhint %}
