CSRF атака: что это такое, последствия и методы защиты

15 декабря 2020

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




Что такое CSRF атака?

CSRF (Cross-Site Request Forgery или Client-Site Request Forgery) – это особый вид хакерской атаки, в результате которой злоумышленник выполняет произвольные действия на сайте с браузера жертвы.

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

Например, может произойти смена пароля или электронной почты от аккаунта жертвы, перевод денежных средств на счет злоумышленника и тому подобное. Все зависит от места, где допущена ошибка, которая допускает CSRF атаку.

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




Последствия от CSRF атаки

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

  • смена пароля от профиля пользователя
  • перевод денежных средств на личный счет
  • покупка продуктов или товаров за счет пользователя
  • рассылка вредосных ссылок и ПО от имени жертвы
  • смена адреса электронной почты в профиле.


Конечно же, посетители сайта после перевода с их личного счета денежных средств без их разрешения останутся недовольными и вряд ли будут пользоваться в дальнейшем услугами этого сайта. Поэтому владелец страницы в интернете в случае CSRF атаки будет терпеть не только денежные, но и репутационные убытки, даже если мошенника удастся наказать и вернуть деньги владельцам. Поэтому следует заранее побеспокоиться о защите своего сервиса.




Методы защиты от CSRF атаки

Первое и самое важное – использовать CSRF токены. Это специальные уникальные значения, которые предотвращают атаку с подделкой межсайтовых запросов. Этот токен генерируется на сервере, после чего передается клиенту. В случае какого-либо запроса со стороны клиента сервер запрашивает токен и проверяет его на идентичность с начальным вариантом. Если значения совпадают, то сайт удовлетворяет запрос пользователя, а в противном случае будет отказ. Простой и эффективный метод защиты от подобных атак.


Также следует использовать больше дополнительных заголовков (Headers), чтобы злоумышленники с меньшей вероятностью смогли успешно провести хакерскую атаку. При наличии заголовков сервер будет проверять не только совпадение токенов при запросе, но и совпадение дополнительных заголовков. А значит, злоумышленникам уже будет в разы труднее подобрать подходящий код и числовые значения.


Последний способ – использование Same Site в Google, которым пользуются далеко не все сервисы, к сожалению. Этот атрибут позволяет контролировать передачу файлов cookie во время пользовательского запроса, тем самым предотвращается автоматическое добавление этих файлов. Правда, использовать только Same Site не стоит. Лучше всего защита обеспечивается во время использования всех трех перечисленных методов защиты от CSRF атаки.




Актуальность атаки

Несмотря на то, что методов защиты от CSRF полно, все равно находятся новые лазейки, которые позволяют воспользоваться подобной уязвимостью.
Так, в октябре 2020 года платформа TikTok заплатила исследователю Лаурицу из Германии 2300$ за то, что он нашел получить доступ к аккаунту Жертвы с помощью CSRF атаки.(Account Takeover via CSRF)


Из-за отсутствия защиты CSRF и уязвимости Open Redirect злоумышленник мог захватить аккаунт кандидата в TikTok Careers.
В связи с тем, что карьерный портал участвует в программе Bug Bounty, компания ТикТок заплатила исследователю и закрыла эту уязвимость в своей системе.


Сценарий атаки был следующим:

  • Жертва посещает вредоносный сайт.
  • На конечную точку TikTok поступает запрос, который запускает процесс входа в систему через Facebook.
  • Без дальнейшего взаимодействия с жертвой пользователь перенаправляется на Facebook.
  • Поскольку у пользователя есть активный сеанс в Facebook, а его учетная запись уже связана с доменом №1, Facebook перенаправляет кандидата обратно на сайт redirect_uri без дальнейшего взаимодействия
  • Домен №2 перенаправляет пользователя на /api/v1/user/facebook/callback, но на домен злоумышленника в связи со второй уязвимостью - Open Redirect в redirect_uri

  • Итог: На домен злоумышленника утекает token параметр, который позволяет получить доступ к аккаунту Tiktok Career.
    Все действия происходит на фоне и соответственно пользователь этого не видит.




    Резюмируя

    Актуальность CSRF атаки по-прежнему высока, несмотря на огромное количество методов защиты. Если вовремя не побеспокоиться о слабостях в своей системе, то злоумышленники могут воспользоваться этим в своих целях.
    Конечно же, владельца сайта ждут денежные и репутационные потери, которые могут оказаться невосполнимыми. Поэтому следует постоянно следить за безопасностью серверов и постоянно обновлять уровень защиты.