Как невозможно подделать заголовок Referer во время атаки CSRF?

Предположим, что единственная защита приложения от атак CSRF - это проверка заголовка referer на предмет того же источника. Предположим также, что все браузеры будут отправлять заголовок referer (хотя это не всегда так).

Я читал, что пользователю тривиально подделать свой заголовок реферера, но это НЕВОЗМОЖНО для атакующего CSRF.

1.) Как подделать заголовок реферера? (Обратите внимание, что заголовки рефереров нельзя изменить программно)

2.) Почему злоумышленник не может этого сделать?


person ineedahero    schedule 17.11.2016    source источник


Ответы (1)


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

Это легко сделать с помощью прокси-сервера перехвата, такого как Burp Suite. Обычно вы указываете браузеру использовать локальный перехватывающий прокси в качестве прокси-сервера. Затем браузер отправит запрос на ваш локальный прокси. Локальный прокси-сервер будет поддерживать запрос и позволит вам изменить все, что вы хотите, в тексте HTTP, включая заголовок реферера. Когда вы будете готовы, вы просто отпускаете запрос, и локальный прокси-сервер отправляет его. Очень просто.

Также стоит отметить, что из этого следует, что если вы не используете TLS на своем веб-сайте, любые переходы на этом пути потенциально могут быть вредоносными и изменять запрос / ответ, если они захотят. Чтобы получить представление о множестве переходов на пути, вы можете попробовать traceroute (хотя некоторые маршрутизаторы просто отбрасывают пакеты, которые заставляют инструмент traceroute работать, поэтому это ненадежное измерение).

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

Тем не менее, лучшим решением для борьбы с CSRF является использование токена CSRF. OWASP рекомендует использовать исходный заголовок и CSRF токен.

Надеюсь, это поможет. Если нет, дайте мне знать в комментариях, и я постараюсь уточнить.

person Freedom_Ben    schedule 17.11.2016
comment
во втором параграфе метод, который вы определяете для изменения заголовка реферера через прокси, не будет работать, если сайт находится на HTTPS, верно? - person Vinay; 12.07.2017
comment
Это можно сделать, даже если сайт использует HTTPS. Ваш браузер просто покажет вам предупреждение о сертификате, поскольку сертификат Burp по умолчанию не доверяет вашему браузеру. В любом случае это все равно будет работать. Предупреждение может быть удалено, если вы вручную установите сертификат Burp как надежный. - person niilzon; 01.08.2017