Уязвимости web-приложений и обеспечение их безопасности
XSS (межсайтовый скриптинг)
Данный вид атак направлен на веб-сайты, отображающие вводимые пользователями данные. Вместо попытки получения контроля над базой данных путем ввода вредоносного кода злоумышленник пытается атаковать код самого веб-сайта, внедряя в него вредоносные сегменты.
Многие сайты хранят имена всех посетителей в базе данных, чтобы иметь возможность отображать их при вводе соответствующих пользователей. Злоумышленник может создать подложную учетную запись, разместив при этом в поле имени вредоносный код. Подобные атаки обычно реализуются с помощью вредоносных скриптов на языке Javascript, которые затем загружают контент с другого веб-сайта. Предполагается, что в базе данных хранится имя пользователя, но на самом деле в данном случае это будет вредоносный код. Соответственно, если веб-сайт отображает имя пользователя в верхней части страницы, то этот код будет выполнен. Поскольку при наличии определенных условий такой код может делать практически все, что угодно, угроза становится вполне реальной; тем не менее, разработчики зачастую про нее забывают. В разное время жертвами XSS -атак стали многие популярные веб-сайты, в том числе MySpace, Facebook, Google Mail, ВКонтакте.
Рассмотрим следующий PHP -код:
$firstname = $_POST["firstname"]; echo "Your name: $firstname";
После ввода имени в веб-форме сайт отображает на странице соответствующее сообщение. Если указать в форме имя " John ", то сообщение будет иметь следующий вид: " Your name: John ".
Что произойдет, если вместо имени ввести следующую конструкцию:
"<script>alert ("You just got hacked!") ;</script>" ?
К сожалению, XSS -атакам зачастую трудно что-либо противопоставить, поскольку для этого необходимо должным образом фильтровать вводимые и выводимые данные, а также все поля, которые могут меняться пользователями. Сюда относятся данные, получаемые из запросов GET и POST, а также запросы, возвращаемые из базы данных.
Использование уязвимостей
Одной из желанных целей для создателей вредоносного ПО является возможность запуска кода без каких-либо действий пользователя. Самый распространенный способ достижения этой цели - использование уязвимости приложения или операционной системы для получения прав на выполнение. В последние годы эта тактика применялась многочисленными семействами сетевых червей, заражавших сетевые компьютеры с использованием различных уязвимостей. Этот метод (т.е. применение эксплойтов) особенно характерен для интернет-атак. Использование уязвимостей в клиентских браузерах предоставляет вредоносным программам возможность выполнения кода даже в том случае, если пользователь просто перешел на вредоносную страницу. Такие атаки зачастую называют " drive-by download " (попутная загрузка).
В последние годы вредоносные программы все чаще используют сеть WWW. Можно привести следующие примеры:
- Трояны-загрузчики используют WWW в качестве хранилища файлов, загружая другие вредоносные файлы по HTTP.
- Вредоносные скрипты, размещаемые на атакующих сайтах, активируются пользователями уязвимых браузеров, используя эти уязвимости для заражения компьютера пользователя.
- Зараженные сайты являются удобным механизмом расширения масштабов воздействия вредоносного кода.
- Спам-сообщения и сайты-приманки используются для того, чтобы обманом заставить пользователя запустить вредоносный код.
- Вредоносные программы могут вести перенаправление полезного трафика. Увеличение объемов интернет-трафика сайта путем перенаправления пользователей может использоваться для зарабатывания денег с помощью партнерского маркетинга.
Использование уязвимостей является идеальным механизмом, с помощью которого может запускаться вредоносный код. Тем не менее, социальная инженерия по-прежнему остается надежным инструментом создателей вредоносного ПО и продолжает широко применяться в почтовых атаках. Современное повышение пропускной способности каналов и усовершенствования в клиентских технологиях привели к существенному росту потребности в полнофункциональном браузерном контенте. Все больше веб-страниц содержат встроенный звук, анимацию или видеоконтент. Это упрощает задачу создателей вредоносного ПО, позволяя им повысить эффективность использования социальной инженерии в WWW.
Использование порнографии в качестве приманки можно продемонстрировать на примере семейства троянов для платформы Windows, известного как Zlob. Используемый им механизм установки подразумевает посещение различных веб-сайтов, на которых предлагается порнографический веб-контент. При попытке доступа к определенному контенту (обычно привлекательному порноролику) пользователь сталкивается с сообщением об ошибке. Щелкнув ссылку, чтобы установить отсутствующий видеокодек, пользователь на самом деле загружает подложный установочный пакет с другого сайта, специально созданного для атаки. При запуске пакета устанавливаются вредоносные компоненты Zlob, в результате чего компьютер клиента заражается.
Использование поисковых интернет-систем при выявлении потенциальных целей особенно актуально в случаях, когда атаке подвергается сам веб-ресурс, будь то сайт или отдельное веб-приложение. Данная техника используется в целом ряде экземпляров вредоносного ПО, наиболее известным из которых является Perl/Santy - червь, применяющий поисковую систему Google для выявления новых жертв, использующих определенное форумное интернет-приложение. Если раньше хакеры использовали для поиска уязвимых компьютеров в сети специализированные скрытные средства, то теперь подходящие для атаки мишени можно находить с помощью поисковых систем. Предположим, что в популярном приложении для ведения форума или блога найдена уязвимость. Злоумышленники могут использовать поисковые системы для выявления сайтов, на которых имеются страницы, создаваемые популярным приложением (например, для поддержки форума или блога), имеющим уязвимость, формируя список потенциальных жертв.
Вредоносное ПО может размещаться на самых разных сайтах. Хакеры могут использовать бесплатные службы веб-хостинга, создавать новые сайты, специально предназначенные для атаки, а также захватывать существующие сайты, превращая их в базу для атаки. В большинстве случаев для заражения жертв используются скрипты (обычно на JavaScript ). Так же, как обычные скрипты зачастую опрашивают клиентский браузер, чтобы обеспечить корректное отображение страницы, вредоносные скрипты могут запрашивать браузер, чтобы загрузить подходящий эксплойт. В таких атаках обычно используется перебор списка известных эксплойтов, в ходе которого ищется тот эксплойт, от которого клиент не защищен.
Скомпрометированные сайты
Пользователи подключаются к сайтам для использования предоставляемых ими услуг (от интернет-карт и новостей до прогнозов погоды), позволяя своим браузерам соответствующим образом отображать страницы. Пользователей обычно призывают вести списки надежных сайтов, чтобы браузер можно было настроить в соответствии с уровнем надежности просматриваемого сайта. Таким образом пользователи могут включать в браузерах также вещи, как скрипты, ActiveX и Java, если они необходимы для просмотра конкретного сайта. Сама по себе идея применения более строгих правил к разрешенному контенту, поступающему из ненадежной области, основана на разумных принципах.
Компрометация сайта, в результате которой на страницах загружается вредоносный контент, служит малозаметным средством достижения своих целей. Более того, если скомпрометирован сайт с большим количеством регулярных пользователей, которые считают его надежным, то потенциальное число жертв также будет весьма велико.
Методы, основанные на использовании тега <IFRAME>
Язык HTML предоставляет множество удобных способов загрузки дополнительного контента. Чаще всего на скомпрометированных сайтах используется метод с применением тега <IFRAME> , который позволяет незаметно загрузить на страницу дополнительный контент. Этот тег широко используется для обычной разметки на многих веб-сайтах. Компрометация считавшегося надежным сайта с помощью этого метода весьма удобна для создателей вредоносного ПО, поскольку для привлечения пользователей на сайт не требуется применение социальной инженерии, а для загрузки вредоносного контента не нужны действия пользователя. Тег <IFRAME> поддерживает несколько атрибутов. Чаще всего в атаках используются атрибуты ширины и высоты, с помощью которых можно задавать размер фрейма на странице, куда загружается контент. Чтобы сделать компрометацию незаметной для пользователя, в большинстве вредоносных тегов <IFRAME> задаются весьма малые значения для длины и ширины (0-10 пикселей). Подобные теги приводят к созданию на странице множества мелких полей, которые могут стать весьма заметны в случае ее многократного заражения.
Аналогичный результат обычно достигается путем компрометации веб-страницы с помощью вредоносного скрипта, который просто вписывает тег <IFRAME> в страницу при ее просмотре.
Теоретически после обхода системы безопасности сайта и получения удаленного доступа на скомпрометированном сервере могут размещаться все компоненты, необходимые для атаки. Измененные страницы могут запускать вредоносные скрипты и устанавливать вредоносное ПО, размещаемое на том же сервере. Однако, во-первых, перенаправление скомпрометированных сайтов на единый атакующий сайт предоставляет хакеру единый пункт управления атакой. Во-вторых, добавление небольших скриптов или тегов на страницы скомпрометированного сайта менее заметно, чем загрузка крупных скриптов и двоичных файлов. Помимо видимых признаков многократного заражения сайта исходный код сайта также зачастую будет содержать соответствующие признаки. Часто в нем можно увидеть несколько тегов <IFRAME> или вредоносных скриптов, зачастую обрамленных специфичными маркерами ( HTML -комментариями).
Clickjacking
Clickjacking (кража кликов) является вредоносной технологией обмана пользователей WWW с целью получения конфиденциальной информации или осуществления перехвата управления машиной путем перехода пользователя по ссылке на веб-странице, не вызывающей подозрений у пользователя. Такая атака реализуется в форме кода или сценария, исполняемого без ведома пользователя.
Вариант реализация атаки может быть следующим: злонамеренный сайт A содержит в себе HTML элемент IFRAME, с адресом сайта B, к которому пользователь имеет доступ на основе авторизационных данных Cookie. Сайт A перекрывает страницу с сайта B таким образом, чтобы оставить видимым конкретный элемент, например, кнопку "Удалить аккаунт", "Добавить друга" и т.д. Сайт A может иметь такой интерфейс, который позволял бы рассматривать элемент с сайта B, как часть сайта A, побуждая пользователя нажать на него. Тем самым пользователь подвергается опасности совершения абсолютно непредполагаемых им действий, который выгодны злоумышленнику. Добиться такого "перекрывания" интерфейса другого сайта можно с помощью метода CSS Overlay.
Вариант атаки типа Clickjacking, известный также как UI Redressing (фальсификация идентичности пользователя), возможна благодаря выполнению нестандартных действий веб-страницей, не вызывающей подозрений у пользователя. Такая страница вынуждает пользователя выполнить нежелательные действия при активировании им замаскированной ссылки. На такой странице-ловушке злоумышленник помещает набор фальшивых кнопок, затем загружает поверх предыдущей другую страницу в виде прозрачного слоя. Пользователь думает, что он нажимает на видимую кнопку, в то время как действия выполняются на скрытой странице. В результате пользователь выполняет не предполагавшиеся им действия. Что важно, практически невозможно отследить такие операции, так как пользователь был аутентифицирован совершенно на другой странице. Следует отметить, что реализации такой атаки основана на использовании HTML элемента IFRAME.
Простым средством противодействия является использование JavaScript, блокирующего использование HTML -фреймов. Но в последнее время разрабатываются версии Clickjacking, которые не требует фреймов.
XML-бомба
XML -бомба - это XML -документ, который содержит:
- слишком много байт
- слишком много символов
- слишком большую глубину вложений
- слишком много элементов
- слишком много дочерних элементов
- слишком много атрибутов
- слишком много имен
- слишком длинные имена, префиксы, значения элементов
- рекурсивное вложение элементов
- слишком много открывающих и закрывающих тэгов (т.е. слишком много стековых операций)
Когда XML -парсер пытается обработать такой документ, объем внутренних данных парсера растет экспоненциально, что приводит к сбою в работе веб-сайта или даже интернет-провайдера. По-сути, данный вид атаки является разновидностью DoS (denial-of-service) атаки.
CSRF
CSRF (Cross-site request forgery) атака, известная также как "атака одного клика", основана на исполнении веб-сайтом неавторизованных команд, исходящих от пользователя, которому веб-сайт доверяет.
Атака может быть реализована путем включения ссылки или сценария в страницу, с которой происходит переход на сайт, считающий, что пользователь прошел авторизацию. Например, Боб может просматривать форум и увидеть запись, оставленную Джоном . Предположим, что Джон создал HTML элемент типа IMAGE, ссылающийся на сценарий, выполняющийся на веб-сайте банка, клиентом которого является Боб, например:
<img src="http://bank.example/withdraw?account=Bob&amount=1000000&for=John">
Если при этом банк Боба сохраняет аутентификационную информацию в cookie, и срок действия cookie еще не истек, тогда попытка браузера Боба загрузить это "изображение" приведет к перемещению денег со счета Боба на счет Джона, путем авторизации данной транзакции без ведома Боба.
Особенностями общими для всех атак типа CSRF являются следующие:
- вовлекаются сайты, которые основаны на идентификации пользователей
- используется доверие сайта, на основе идентификации
- браузер пользователя обманным способом вынуждают отправить HTTP -запрос на целевой сайт
- использование HTTP -запросов с побочными эффектами
Риску подвергаются веб-приложения, которые выполняют действия, основанные на данных от доверяемых или авторизованных пользователей без требования от пользователя подтвердить конкретное действие. Пользователь, который авторизуется с помощью cookie его веб-браузера может невольно направить HTTP -запрос на сайт, который доверяет этому пользователю, вызвав тем самым нежелательные действия.
CSRF атаки с использованием элемента IMAGE часто используются в интернет-форумах, в которых пользователям разрешено оставлять изображения, но не JavaScript -сценарии.