Нарушенная аутентификация и небезопасная десериализация
Изучите, как слабое управление сеансами, перебор учётных данных и уязвимости небезопасной десериализации позволяют злоумышленникам захватывать учётные записи и выполнять код.
«Нарушенная аутентификация и небезопасная десериализация» — бесплатный урок Security+ Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Security+ Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Security+ Academy содержит 4 уроков всего.
Что такое нарушение аутентификации?
Нарушение аутентификации — это уязвимости в способах проверки личности пользователя и управления сеансами приложения. При нарушении аутентификации атакующие могут скомпрометировать пароли, ключи или токены сеансов и выдать себя за других пользователей. Эта категория OWASP Top 10 охватывает широкий спектр недостатков: слабые учётные данные, ненадлежащее управление сеансами, отсутствие MFA и небезопасное хранение учётных данных.
Заполнение учётными данными и распыление паролей
Заполнение учётными данными использует большие списки пар имя пользователя/пароль из предыдущих утечек данных и проверяет их на других сайтах, пользуясь повторным использованием паролей. Распыление паролей использует противоположный подход: небольшое множество распространённых паролей (например, Password1!) проверяется для множества учётных записей, чтобы не достигать порогов блокировки. Обе атаки становятся успешными из-за слабых политик паролей и отсутствия MFA.
# Password spraying concept (defensive awareness)
# Attacker tries 'Password1!' against 10,000 accounts
# rather than trying 10,000 passwords against 1 account
# This avoids triggering lockout policies (e.g., 5 attempts/account)
# Defense: MFA + adaptive authentication + rate limitingСлабое управление сеансами
Сеансы связывают аутентифицированных пользователей с состоянием приложения. К недостаткам слабого управления сеансами относятся предсказуемые значения токенов сеанса (последовательные ID, которые атакующие могут угадать), токены, которые никогда не истекают, передача токенов по HTTP вместо HTTPS и отсутствие аннулирования токенов при выходе из системы. Атакующий, получивший действительный токен сеанса, может выдать себя за пользователя, не зная его пароля.
# Signs of weak session management:
# /login response sets:
# Set-Cookie: session=1042 (predictable, sequential)
# Missing: Secure; HttpOnly; SameSite flags
# Missing: session expiry / Max-Age
# Logout does NOT invalidate server-side sessionФиксация и перехват сеанса
Фиксация сеанса заставляет жертву использовать ID сеанса, выбранный атакующим. Например, атакующий отправляет ссылку с заранее заданным Cookie сеанса; после аутентификации жертвы атакующий использует тот же ID сеанса для доступа к учётной записи. Перехват сеанса позволяет украсть существующий токен сеанса через XSS, перехват сетевого трафика (в незашифрованных соединениях) или украденные Cookie. Решение: создавать новые ID сеансов после входа и использовать HTTPS повсюду.
Небезопасное хранение паролей
Хранение паролей в открытом виде или с использованием слабого хеширования (MD5, SHA-1) является критическим недостатком аутентификации. При взломе базы данных пароли в открытом виде и слабые хеши можно немедленно использовать. Безопасное хранение паролей требует адаптивного алгоритма хеширования, разработанного для паролей: bcrypt, Argon2 или PBKDF2 со случайной солью для каждого пользователя. Эти алгоритмы намеренно работают медленно, что делает перебор в автономном режиме вычислительно затратным.
# Python example — secure password hashing with bcrypt
import bcrypt
# Hash a password (includes random salt automatically)
password = b'UserSuperSecret123'
hashed = bcrypt.hashpw(password, bcrypt.gensalt(rounds=12))
# Verify
bcrypt.checkpw(password, hashed) # returns TrueЧто такое небезопасная десериализация?
Сериализация преобразует состояние объекта в формат (JSON, XML, двоичный) для хранения или передачи. Десериализация восстанавливает объект из этого формата. Небезопасная десериализация происходит, когда приложение десериализует данные, контролируемые атакующим, без проверки, позволяя атакующим изменять сериализованные объекты для манипулирования логикой приложения, повышения привилегий или выполнения произвольного кода на Server.
Пример атаки через десериализацию
Распространённый шаблон атаки связан с сериализованными объектами, передаваемыми в Cookie или параметрах API. Например, Java-приложение, использующее ObjectInputStream.readObject() для обработки ненадёжных данных, может запустить удалённое выполнение кода (RCE) через цепочки гаджетов в популярных библиотеках (Apache Commons Collections). Атакующий создаёт вредоносную сериализованную полезную нагрузку и отправляет её приложению, после чего код выполняется во время десериализации — часто ещё до проверки аутентификации.
# Insecure deserializing pattern (Python pickle — dangerous)
import pickle
# Attacker-controlled payload
class Exploit:
def __reduce__(self):
import os
return (os.system, ('id',)) # executes 'id' on server
payload = pickle.dumps(Exploit())
pickle.loads(payload) # RCE! Never deserialize untrusted data with pickleПредотвращение небезопасной десериализации
Меры защиты от небезопасной десериализации включают следующее: никогда не десериализуйте ненадёжные данные с использованием опасных форматов, таких как встроенная сериализация Java или pickle в Python. Предпочитайте форматы, содержащие только данные (JSON, XML), двоичной сериализации. Если десериализация необходима, реализуйте проверки целостности (подписывайте сериализованный объект с помощью HMAC), используйте списки разрешённых значений, чтобы ограничить классы, которые можно десериализовать, и выполняйте код десериализации в изолированных средах с минимальными привилегиями.
# Safe approach: sign serialized data before transmitting
import hmac, hashlib, json
def serialize_safe(data, secret):
payload = json.dumps(data) # use JSON, not pickle
sig = hmac.new(secret.encode(), payload.encode(), hashlib.sha256).hexdigest()
return payload + '.' + sigМногофакторная аутентификация как средство управления
Многофакторная аутентификация (MFA) — наиболее эффективное отдельное средство защиты от нарушений аутентификации. Даже если учётные данные скомпрометированы через фишинг, заполнение учётными данными или утечку базы данных, атакующий без второго фактора не сможет пройти аутентификацию. Согласно данным Microsoft, MFA блокирует более 99,9% автоматизированных атак на учётные записи. MFA должна быть обязательной для привилегированных учётных записей и рекомендованной для всех пользователей.
Блокировка Account и ограничение частоты запросов
Политики блокировки Account временно отключают Account после заданного числа неудачных попыток входа, замедляя атаки методом перебора. Однако блокировки могут позволить проводить атаки типа Denial of Service против легитимных пользователей — Attacker намеренно инициирует блокировки, чтобы предотвратить доступ. Ограничение частоты запросов (замедление ответов после повторяющихся сбоев с использованием экспоненциальной задержки) и задания CAPTCHA снижают риск перебора с меньшей вероятностью DoS.
Нарушенная Authentication в OWASP Top 10
OWASP относит Broken Authentication к критическим рискам, поскольку недостатки Authentication одновременно распространены и приводят к серьёзным последствиям. К основным признакам нарушенной Authentication относятся: возможность автоматизированных атак, таких как перебор учётных данных, возможность перебора или других автоматизированных атак, использование стандартных, слабых или широко известных Password, применение ненадёжных процессов восстановления учётных данных, хранение Password в открытом виде или с использованием слабого хеширования, а также отсутствие или неэффективность многофакторной Authentication.
Быстрая проверка
Проверьте своё понимание концепций CompTIA Security+ (SY0-701) из этого урока.
Итоги урока
В этом уроке Вы узнали, что нарушенная Authentication включает слабые сеансы, перебор учётных данных и небезопасное хранение Password, небезопасная десериализация может привести к удалённому выполнению кода через вредоносные сериализованные Object, а MFA, хеширование Password с помощью bcrypt, регенерация сеанса после входа и подписанные сериализованные данные являются ключевыми средствами защиты. Далее мы рассмотрим безопасный SDLC, а также инструменты SAST и DAST.
Часто задаваемые вопросы
Урок «Нарушенная аутентификация и небезопасная десериализация» бесплатный?
Да — полный текст урока «Нарушенная аутентификация и небезопасная десериализация» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Security+ Academy, подпишись на CoddyKit PRO. Курс Security+ Academy содержит 4 уроков всего.
Чему я научусь в уроке «Нарушенная аутентификация и небезопасная десериализация»?
Изучите, как слабое управление сеансами, перебор учётных данных и уязвимости небезопасной десериализации позволяют злоумышленникам захватывать учётные записи и выполнять код. Ты практикуешь Security+ Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Security+ Academy?
Предыдущий опыт не требуется. Security+ Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Нарушенная аутентификация и небезопасная десериализация»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Security+ Academy?
Да. Каждый урок Security+ Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- SQL-инъекции и командные инъекции
- Межсайтовый скриптинг (XSS) и CSRF
- Нарушенная аутентификация и небезопасная десериализация
- Безопасный SDLC, инструменты SAST и DAST