XSS-уязвимость - что такое
Cross Site Scripting или XSS-атака (дословный перевод - межсайтовый скриптинг) - разновидность уязвимости веб-ресурсов, которая возникает, когда хакерские скрипты оказываются и выполняются на страничках сайта. По актуальным статистическим данным, на такой вид атак приходится около 15% всех кибер-преступлений.
Использование XSS открывает хакерам файлы куки и иные конфиденциальные данные пользователей, усложняет работу посетителя с ресурсом или помогает внедрить вирус (вредоносный код) в ОС. Поэтому при создании и продвижении ресурсов необходимо предусматривать методы противодействия подобным угрозам.
Что такое XSS простыми словами
Межсайтовый скриптинг (XSS) - это проблема, которая позволяет внедрить код на стороне клиента, например, JavaScript, на сайт, который просматривают другие люди.
XSS уязвимость пример и как это работает
Целью межсайтового скриптинга является похищение cookies пользователей с помощью заранее запрограммированного скрипта на сервере. Затем система получает желаемую информацию и применяет ее для будущих атак и взломов. Преступник не нацеливается непосредственно на жертв, а скорее обнаруживает слабые места в посещаемой ими веб-странице, а затем вставляет специальный JavaScript. Этот код представляется пользователю как раздел веб-сайта, тем самым заставляя веб-сайт участвовать в XSS-атаке.
XSS не так опасен для сервера, как SQL-инъекция, но он может быть опасен для тех, кто использует пораженный источник или веб-страницу. Тем не менее, если хакеру удастся получить доступ к cookies администратора, он сможет проникнуть в панель управления и хранящийся в ней контент."
Разновидности XSS
По исполнению межсайтовые скриптинги могут быть пассивными либо активными. В последнем случае опасные скрипты размещают на сервере веб-ресурса, они выполняются браузером при доступе к любой из его страниц. Для активизации пассивных XSS необходимы определенные действия от пользователя, к примеру, переход по созданной ссылке.
По каналам внедрения скрипта, XSS-уязвимости бывают:
с применением HTML-тегов в постах для форматирования текстового содержания. При поверхностной фильтрации таких сообщений, в них нередко упускается из виду тег <script>, который отправляет злоумышленнику куки пользователя, к примеру, при навигации по форуму или открытии в браузере любых ссылок. Чтобы защититься от подобных угроз, необходимо удалять все лишние теги, за исключением регламентированных;
пробелы с фильтрацией допустимых тегов: значений и наименований атрибутов. Опасный скрипт внедряется, предположим, в тег img. Чтобы исключить подобную угрозу, необходимо использовать жесткую фильтрацию тегов, запретить использование javascript и data в ссылках;
изменение кода в Title. Чтобы не допустить эту угрозу, в рамках поисковой оптимизации ресурса кодировка страницы задается до полей, заполняемых пользователем.
Также межсайтовые скриптинги бывают отложенными (код находится в системе какое-то время, а внедрение в страницу осуществляется с временным лагом) и моментальными (скрипт выполняется сразу в качестве ответа на действия пользователя).
Атаки межсайтового скриптинга (XSS) происходят, когда:
- Данные поступают в веб-приложение через ненадежный источник, чаще всего через веб-запрос.
- Данные включаются в динамическое содержимое, которое отправляется веб-пользователю без проверки на наличие вредоносного содержимого.
Вредоносный контент, отправляемый в веб-браузер, часто принимает форму сегмента JavaScript, но может также включать HTML, Flash или любой другой тип кода, который браузер может выполнять. Разнообразие атак, основанных на XSS, практически безгранично, но обычно они включают в себя передачу злоумышленнику личных данных, таких как файлы cookie или другой информации сеанса, перенаправление жертвы на веб-контент, контролируемый злоумышленником, или выполнение других вредоносных операций на машине пользователя. под видом уязвимого сайта.
Сохраненные и отраженные XSS-атаки
XSS-атаки обычно можно разделить на две категории: сохраненные и отраженные. Существует третий, гораздо менее известный тип XSS-атаки, называемый XSS на основе DOM, который обсуждается отдельно.
Сохраненные атаки XSS
Сохраненные атаки - это атаки, при которых внедренный сценарий постоянно хранится на целевых серверах, например, в базе данных, в форуме сообщений, журнале посетителей, поле комментариев и т. Д. Затем жертва извлекает вредоносный сценарий с сервера, когда запрашивает сохраненный Информация. Сохраненный XSS также иногда называют постоянным или XSS типа I.
Отраженные XSS-атаки
Отраженные атаки - это атаки, при которых внедренный сценарий отражается от веб-сервера, например в сообщении об ошибке, в результате поиска или в любом другом ответе, который включает некоторые или все входные данные, отправленные на сервер как часть запроса. Отраженные атаки доставляются жертвам другим путем, например, в сообщении электронной почты или на другом веб-сайте. Когда пользователя обманом заставляют щелкнуть вредоносную ссылку, отправить специально созданную форму или даже просто перейти на вредоносный сайт, внедренный код перемещается на уязвимый веб-сайт, что отражает атаку обратно в браузер пользователя. Затем браузер выполняет код, потому что он пришел с «доверенного» сервера. Отраженный XSS также иногда называют непостоянным или XSS типа II.
Другие типы уязвимостей XSS
Помимо Stored и Reflected XSS, еще один тип XSS, XSS на основе DOM, был идентифицирован Амитом Кляйном в 2005 году . OWASP рекомендует категоризацию XSS, как описано в статье OWASP: Типы межсайтовых сценариев , которая охватывает все эти термины XSS, организуя их в матрицу сохраненных и отраженных XSS и серверных и клиентских XSS, где XSS на основе DOM является подмножество Client XSS.
Последствия XSS-атак
Последствия атаки XSS одинаковы, независимо от того, сохраняется она или отражается ( или на основе DOM.). Разница в том, как полезная нагрузка попадает на сервер. Не дайте себя обмануть, думая, что сайт «только для чтения» или сайт «брошюра» не уязвим для серьезных отраженных XSS-атак. XSS может вызвать множество проблем для конечного пользователя, серьезность которых варьируется от раздражения до полной компрометации учетной записи. Наиболее серьезные атаки XSS включают раскрытие файла cookie сеанса пользователя, что позволяет злоумышленнику захватить сеанс пользователя и завладеть учетной записью. Другие вредоносные атаки включают раскрытие файлов конечного пользователя, установку программ троянских коней, перенаправление пользователя на какую-либо другую страницу или сайт или изменение представления контента. XSS-уязвимость, позволяющая злоумышленнику изменять пресс-релиз или новость, может повлиять на стоимость акций компании или снизить доверие потребителей. XSS-уязвимость на фармацевтическом сайте может позволить злоумышленнику изменить информацию о дозировке, что приведет к передозировке. Подробнее об этих типах атак см. Content_Spoofing.
Как определить, что вы уязвимы
Недостатки XSS могут быть трудными для выявления и удаления из веб-приложения. Лучший способ найти недостатки - это выполнить проверку безопасности кода и найти все места, где входные данные HTTP-запроса могут попасть в выходные данные HTML. Обратите внимание, что для передачи вредоносного кода JavaScript могут использоваться различные HTML-теги. Nessus, Nikto и некоторые другие доступные инструменты могут помочь сканировать веб-сайт на предмет этих недостатков, но могут только поверхностно. Если одна часть веб-сайта уязвима, высока вероятность того, что есть и другие проблемы.
Как защитить себя
Основные средства защиты от XSS описаны в шпаргалке по предотвращению XSS OWASP .
Кроме того, очень важно отключить поддержку HTTP TRACE на всех веб-серверах. Злоумышленник может украсть данные cookie через Javascript, даже если document.cookie отключен или не поддерживается клиентом. Эта атака устанавливается, когда пользователь публикует вредоносный скрипт на форуме, поэтому, когда другой пользователь щелкает ссылку, запускается асинхронный вызов HTTP Trace, который собирает информацию cookie пользователя с сервера, а затем отправляет ее на другой вредоносный сервер, который собирает информация cookie, чтобы злоумышленник мог организовать атаку с перехватом сеанса. Это легко устранить, удалив поддержку HTTP TRACE на всех веб-серверах.
В рамках проекта OWASP ESAP был разработан набор повторно используемых компонентов безопасности на нескольких языках, включая процедуры проверки и экранирования для предотвращения подделки параметров и внедрения XSS-атак. Кроме того, в обучающем приложении OWASP WebGoat Project есть уроки по межсайтовому скриптингу и кодированию данных.
Альтернативный синтаксис XSS
XSS с использованием скрипта в атрибутах
XSS-атаки могут проводиться без использования <script>...</script> тегов. Другие теги будут делать то же самое, например: <body onload=alert('test1')>или другие атрибуты, такие как: onmouseover, onerror.
при наведении мыши
<b onmouseover=alert('Wufff!')>click me!</b>
ошибка
<img data-lazy-src="http://url.to.file.which/not.exist" onerror=alert(document.cookie);>
XSS с использованием сценария через закодированные схемы URI
Если нам нужно спрятаться от фильтров веб-приложений, мы можем попытаться закодировать строковые символы, например: a=&\#X41(UTF-8) и использовать их в IMGтегах:
<IMG SRC=jAvascript:alert('test2')>
Существует множество различных нотаций кодировки UTF-8, которые дают нам еще больше возможностей.
XSS с использованием кодирования кода
Мы можем закодировать наш скрипт в base64 и поместить его в METAтег. Таким образом мы alert()полностью избавляемся от . Более подробную информацию об этом методе можно найти в RFC 2397.
<META HTTP-EQUIV="refresh"
CONTENT="0;url=data:text/html;base64,PHNjcmlwdD5hbGVydCgndGVzdDMnKTwvc2NyaXB0Pg">
Индексация XSS
При раскрутке в поисковиках, наличие XSS может затруднять нормальную индексацию ресурса, из-за генерации многочисленных страничек. Запретить их добавление в индекс поисковыми ботами можно с помощью прописывания инструкций в файле Роботс.