CSRF – это кибератака, в результате которой злоумышленники могут украсть данные пользователей, зарегистрированных на незащищенном сайте.
Завладев личной информацией, хакеры могут выполнять различные действия от имени других посетителей. Это может быть, как отправка сообщений от лица пользователя, так и кража денег с его электронного счета. Любой веб-разработчик должен знать все нюансы CSRF.
Подробнее о том, как происходит CSRF
Обычно атака происходит следующим образом:
- Петя зарегистрировался на сайте. Например, на ryandex.com и оставил сессию в Cookie-файлах;
- Петя, каким-то образом, зашел на «плохую» страницу. К примеру, хакер мог прислать ему письмо, которое тот открыл и перешел по ссылке;
- В результате, форма с этой страницы отправляется на сайт ryandex.com;
- Ryandex.com исследует Cookie-файлы, обнаруживает, что пользователь зарегистрирован и обрабатывает запрос. Например, посылает сообщение от его имени.
То есть, Петя, оказавшись на «плохой» странице, отправил письмо, сам того не зная.
Как это возможно?
Обычно, мобильные приложения и сайты работают на основе клиент-серверной архитектуры. Клиентами, в данном случае, являются браузеры и мобильные телефоны. Http-запросы от них отправляются на центральный сервер, который их обрабатывает, выполняя подразумеваемые действия.
Сервер отличает запрос одного пользователя от запроса другого при помощи авторизации. У каждого пользователя есть свой логин и пароль, который он отправляет вместе с первым запросом. Сервер отвечает на это специальным идентификатором, авторизационным cookie-файлом, имеющим уникальное значение. Он запоминает какая именно cookie принадлежит каждому пользователю.
Затем браузер или мобильное приложение начинают отправлять все последующие запросы вместе с этим cookie-файлом, чтобы сервер понимал, кто совершает действия.
Итак, злоумышленники крадут cookie, заманивая юзеров на «опасные сайты, чтобы совершать действия от их имени.
Подробнее о краже cookie
Украсть cookie не всегда просто, поэтому хакеры постоянно совершенствуют свои технологии.
В процессе посещения сайта, браузеру сначала отправляется его основная структура, или HTML-код. Он содержит различные ссылки на картинки, и прочие файлы. Они могут размещаться в разных местах. Браузеру необходимо отправить запрос по каждой из ссылок, прежде чем загрузить страницу полностью. Процесс происходит по http-протоколу.
Итак, что же случается, когда мы заходим на «плохой» сайт? Во-первых, попасть на такую страницу можно не только по ссылке из письма, но и из «Гугла». Злоумышленники могут разместить в HTML-коде ссылку вроде как на картинку, но там будет не она. Браузер не может распознать «ложную» ссылку, пока не перейдет по ней. То есть, его можно заставить отправить запрос на любой домен, лишь добавив ссылку в HTML-код сайта.
Говоря коротко:
- Для совершения любого действия от имени пользователя создается http-запрос.
- Браузер прикрепляет идентификационный cookie-файл к каждому запросу.
- Запросы отправляются по каждой ссылке, даже по тем, что ведут на другие домены.
- В результате, «в руках» злоумышленников оказываются авторизационные данные.
Хакеры, завладев данными cookie могут выполнять самые разные действия – от кражи пароля профиля до перевода финансовых средств на собственный счет.
Создавая веб-сайт, разработчики заботятся о том, чтобы он был защищен от подобного рода атак.
Один из способов защиты от CSRF
В начале статье описывалась ситуация, в которой атака происходила по причине наличия слабого звена авторизации. С помощью куки сайт ryandex.com проверяет, пришел ли именно Петя. Но, в этих данных нет информации о содержимом запроса.
Чтобы защитить сайты, разработчики используют «секретные ключи». Это специальные значение, генерируемые случайным образом и сохраняемые в сессии посетителя. Они известны только серверу. Даже пользователь не получает информации о них. У каждого посетителя свой «ключ». На его основе создается «токен». Его генерируют так, чтобы он отличался от ключа (при этом, токенов для одного ключа может быть несколько), но можно было проверить, создан ли токен именно на его основе.
Каждый токен наделяется дополнительным случайным значением, называемым «соль». Это позволяет определить принадлежность к определенному ключу.
Неблагоприятному сайту не удастся создать такую форму, так как у него отсутствуют данные о ключе. Токен еще называют «подписью» формы, удостоверяющей, что форму сгенерировали непосредственно на сервере. Таким образом предотвращается отправление запроса от имени пользователя без его ведома.