Защита Web-приложений. Учебное пособие
.pdfФактическая функциональность, обнаруженная в этом |
|||||||
примере, |
основана |
на |
сценарииjquery.transform.js. Однако, |
||||
прежде чем приступить к написанию сценариев, обратите |
|||||||
внимание, что страница использует |
стандартныйCSS для |
||||||
размещения |
содержимого. |
В |
большинстве |
случаев |
|||
создаваемые вами приложения будут полагаться на сочетание |
|||||||
как |
локальных, |
так |
и |
библиотечных |
источников |
||
форматирования. |
|
Содержимое |
содержит |
, абзац |
|||
отформатированный как метка и кнопку. |
|
|
|||||
Нажатие на кнопку запускает событиеclick, которое |
|||||||
выполняет одну строку кода. CSS для TransformMe изменен, |
|||||||
чтобы |
включить |
преобразование |
45в градусов. |
Текст |
|||
переходит от прямого к под углом. |
|
|
|
|
|
|
|||
|
Проблема |
с |
разрешением |
сценария |
влиять |
на |
|||
форматирование страницы состоит в том, что вы не можете |
|
|
|||||||
быть |
уверены, |
как |
будет |
выглядеть |
страница |
после |
|
||
завершения сценария. Страница может содержать скрытые |
|
||||||||
элементы или |
просто |
не предоставлять |
информацию, как |
|
|
||||
ожидалось. Скрытые элементы могут содержать код для перенаправления пользователя на зараженный сайт или
выполнения |
других |
|
действий, которые |
вы |
не |
хотите |
|
|||
связывать с вашим приложением. |
|
|
|
|
|
|||||
Взаимодействие с HTML с использованием библиотек |
|
|
||||||||
Некоторые |
|
|
библиотечные |
функции |
напрямую |
|||||
взаимодействуют |
с HTML |
вашего |
приложения |
двумя |
|
|||||
способами. |
Первый |
|
заключается |
во |
взаимодействии |
с |
||||
существующим |
элементом. |
В этом |
случае |
содержимое |
|
|||||
появляется |
внутри |
|
элемента |
на |
основе |
вызываемой |
||||
библиотечной функции. Второй – создать новые элементы и |
|
|||||||||
прикрепить |
их |
к |
существующему |
документу. Новые |
|
|||||
элементы могут содержать любой контент, включая теги, |
|
|||||||||
которые |
потенциально |
могут |
вызвать |
проблемы |
для |
|||||
конечного пользователя. |
|
|
|
|
|
|
||||
Основная проблема при использовании библиотеки для |
|
|||||||||
непосредственного взаимодействия с HTML-кодом на вашем |
|
|||||||||
сайте заключается в том, что библиотека может заполнять |
|
|||||||||
различные |
|
элементы |
вводящими |
|
в |
,заблужден |
||||
51
неправильными или напрямую зараженными данными. Например, вместо создания ожидаемой ссылки, она может фактически перенаправить пользователя на другой сайт–
возможно, тот, который |
загружает |
вирус |
|
или |
другое |
|||
вредоносное |
программное |
обеспечение |
на |
|
компьютер |
|||
пользователя. Библиотеки, работающие |
с HTML, |
могут |
||||||
вызывать такие проблемы, о которых вы можете даже не |
||||||||
догадываться, потому что все будет работать правильно. Если |
||||||||
пользователь |
не |
будет |
жаловаться |
на |
|
неправильное |
||
направление (и учитывая то, как сегодня работаютURL- |
||||||||
адреса, они, вероятно, не будут замечены), вы не будете знать |
||||||||
о проблеме до тех пор, пока не будет заражено достаточное |
||||||||
количество |
компьютеров, |
чтобы |
вызвать |
|
серьезные |
|||
проблемы. |
|
|
|
|
|
|
|
|
Добавление новых элементов на страницу является |
||||||||
обычной |
практикой. Пример, |
найденный |
в ViewJSON.html, |
|||||
добавляет |
новые |
элементы |
в существующий |
документ на |
||||
основе содержимого файла JavaScript Object Notation (JSON) с |
||||||||
именем Test.json. Следующий код показывает, как |
пример |
|||||||
выполняет эту задачу: |
|
|
|
|
|
|||
<!DOCTYPE html> <html>
<head>
<title>Viewing JSON Files</title> <script
src=”https://code.jquery.com/jquery-latest.js”> </script>
<script language=”JavaScript”> function ViewData()
{
// Obtain the data from disk. $.getJSON(“Test.json”, function(data)
{
//Create an array to hold the data. Var items = [];
//Parse the data by looking at
//each entry in the Users object.
$.each(data.Users, function(key, value)
{
items.push(“<li>” + value.Name + “<br />” + value.Number + “<br />” + (new Date(
parseInt(value.Birthday.substr(6)))).toDateString()+ “</li>”);
});
// Place the result in an unordered list.
52
$(‘<ul/>’, {html: items.join(“”)}). appendTo(‘body’); });
}
</script>
</head>
<body>
<h1>Viewing JSON Files</h1> <input id=”btnView”
type=”button” value=”View JSON Data” onclick=”ViewData()” />
</body>
</html>
В этом случае библиотека открывает файлTest.json и
считывает |
из |
него данные. Код |
удаляет форматирование |
|
файла JSON и добавляет форматирование тегаHTML. Затем |
||||
он использует |
функциюjoin |
() |
для добавления новых |
|
элементов |
на страницу. Рис. 8 |
показывает выходные данные |
||
из этого примера.
Рис. 8. Внедрение данных из внешнего источника |
|
|
|||
Обратите внимание, что в этом примере избегается |
|
||||
использование |
вызова document.write(), |
который |
может |
|
|
подвергать |
пользователей |
нежелательной |
угро |
||
безопасности. |
Вместо |
этого, использование функции join() |
|
||
обеспечивает |
более |
безопасную |
альтернативу, которая |
|
|
должна защищать страницу от проблем с безопасностью.
53
Расширение JavaScript с помощью библиотек
Большинство людей думают о том, как библиотеки расширяют CSS или HTML. Тем не менее, библиотеки могут также влиять на сценарии. Например, большинство людей знакомы с тем, как использовать alert() для отображения простых сообщений. Большинство библиотек содержат альтернативы, которые хакер может использовать для отображения других видов информации на экране или для влияния на приложение другими способами. Например, файл DialogBox.html содержит пример создания настраиваемого диалогового окна, подобного показанному здесь:
<!DOCTYPE html> <html>
<head>
<title>Creating a Simple Dialog Box</title> <script
src=”https://code.jquery.com/jquery-latest.js”> </script>
<script src=”https://code.jquery.com/ui/1.9.2/jqueryui.js”>
</script>
<link
rel=”stylesheet” href=”https://code.jquery.com/ui/1.9.2/themes/base/jqueryui.css” />
<style type=”text/css”>
.Normal
{
font-family: Arial, Helvetica, sans-serif; color: SaddleBrown;
background-color: Bisque;
}
.Emphasize
{
color: Maroon;
font-style: italic; font-size: larger;
}
</style>
</head>
<body>
<h1>Creating a Simple Dialog Box</h1>
<div id=”DialogContent” title=”Simple Dialog Example” hidden>
<p class=”Normal”> This is some
<span class=”Emphasize”>interesting</span> text for the dialog box!
54
</p>
</div>
<script type=”text/javascript”> $(«#DialogContent»).dialog();
</script>
</body>
</html>
В этом |
случае пример отображает диалоговое |
окно |
|||
сразу же после открытия приложения, как показано на рис. 9. |
|
||||
Угроза, предлагаемая такой функциональностью, заключается |
|
||||
в том, что пользователь может открыть ваше приложение, |
|||||
ожидая чего-то одного, и получить что-то совершенно другое. |
|
||||
Поскольку |
диалоговое |
окно |
отображается |
как |
часть |
приложения, |
пользователь |
будет |
предоставлять |
любую |
|
информацию, которую запрашивает диалоговое окно.
Рис. 9. Диалоговое окно
Все бибилиотеки JavaScript, если вы их сами не создали, вы качаете на стороннем сайте. Тем не менее, многие организации также имеют свои личные библиотеки. Факторы,
которые влияют на такие библиотеки: |
|
|
|
||||
· они |
находятся |
в |
системах, принадлежащих |
|
и |
||
поддерживаемых организацией; |
|
|
|
|
|||
· организация |
контролирует |
исходный |
код |
и |
может |
||
изменять |
его |
по |
мере |
необходимости для |
|
решения |
|
55
проблем, с которыми сталкиваются разработчики или
которые |
доводятся |
до |
сведения |
организац |
пользователями; |
|
|
|
|
·сторонние организации не могут получить доступ к библиотеке без разрешения организации;
·связь с библиотекой основана на внутренних линиях, а не
на доступе через Интернет.
Свои библиотеки имеют много преимуществ. По большей части при одинаковом уровне кодирования такая библиотека работает быстрее, надежнее и безопаснее, чем внешняя библиотека. Например, хакер может легко загрузить копию библиотеки, хранящейся в открытом доступе, но с меньшей вероятностью сделает это для библиотеки, хранимой локально. Кроме того, поскольку библиотека содержит только
тот код, |
который |
действительно нужен |
организации, то |
|
|
вполне |
возможно, |
что |
локальная |
библиотека |
будет |
использовать меньше ресурсов, потому что она будет меньше, |
|
||||
чем ее аналог. Конечно, эти высказывания делают много предположений о локальной библиотеке, которые могут быть неверными. Вот контрапункты, которые вы должны учитывать:
·локальные библиотеки дороги в создании и обслуживании, поэтому организация может не обновлять
их |
по |
мере |
необходимости |
для |
обеспечения |
их |
||
безопасности; |
|
|
|
|
|
|
||
· немногие |
организации |
могут |
выставить |
команду |
||||
разработчиков, |
эквивалентную |
по |
квалификации |
|
||||
стороннему поставщику, поэтому качество библиотеки, |
|
|
||||||
скорее всего, пострадает; |
|
|
|
|
|
|||
·общедоступные библиотеки проходят тестирование у значительного числа тестировщиков, так что выявляются даже небольшие ошибки, локальные библиотеки обычно проходят тестирование, которое может даже не устранить
некоторые серьезные недостатки.
Собирая приложение, вы должны взвесить преимущества, которые содержат локальные библиотеки,
56
против рисков, которые они представляют. Кроме того, вы должны дополнительно определить риски, представленные сторонними библиотеками.
2.5. Создание зоны безопасности API
Любой API-интерфейс, который вы создаете или используете как часть своего приложения, потенциально может создать множество проблем. Однако, в отличие от библиотек, вы можете сделать использованиеAPI намного безопаснее, потому что API выполняется в своем собственном адресном пространстве и в своем собственном процессе. Помещение API в изолированную или виртуальную среду(по сути, защищенную среду) позволяет:
· точно контролировать, какие действия может предпринять API, к каким ресурсам он может обращаться
и каким образом взаимодействует с вашим приложением. Конечно, вы также можете закрыть API для ресурсов или лишить API возможности выполнить задачу, сделав виртуальную среду замкнутой в . себеНеобходимо соблюдать баланс между риском(безопасностью) и способностью выполнять задачи приложения;
·контролировать, как приложение взаимодействует сAPI. Например, вы уменьшаете вероятность , тогочто ошибочный или злонамеренный ввод приведет к катастрофическим последствиям. Конечно, такой тип защиты также может затруднить улучшенияAPI или выполнение определенных типов тестирования.
Понимание концепции зоны безопасности API |
|
|
Зона |
безопасности API обеспечивает безопасный |
и |
гибкий |
метод тестирования или использования |
любого |
созданного вами API. Во время тестирования всегда полезно использовать зону безопасности API, чтобы вы могли быстро
исправить |
ошибки. |
Вы |
можете |
решить |
продолжить |
использование |
зоны |
безопасностиAPI |
после перемещения |
||
57
API в производственную среду для обеспечения функций
безопасности, которые он предоставляет. |
|
|
|
|||||
Использование |
песочницы (специально |
выделенная |
||||||
(изолированная) |
среда |
для |
|
безопасного |
исполнения |
|||
компьютерных |
программ) обеспечивает |
дополнительную |
||||||
безопасность. Однако многие организации не заботятся о |
||||||||
безопасности, |
когда |
|
внедряют |
среду |
|
песочницы. В |
||
дополнение к безопасности, песочница может предоставить |
||||||||
вам следующие преимущества: |
|
|
|
|
|
|||
· снижение |
затрат |
|
за |
счет |
контроля |
|
использования |
|
ресурсов; |
|
|
|
|
|
|
|
|
·контролируемый доступ сторонних API;
·улучшенная среда тестирования и разработки;
·сокращение времени выхода на рынок;
·моделируемые сценарии ошибок для тестирования;
·отслеживаемая производительность API.
Организации также используют виртуальные среды для |
|||||||
других целей, помимо простой защиты API. Как и в |
|||||||
песочнице, |
виртуальная |
среда |
снижает |
затраты за |
счет |
||
контроля |
использования |
ресурсов, контроля |
доступа |
к |
|||
сторонним |
API-интерфейсам |
и |
улучшения |
среды |
|||
тестирования и разработки. Виртуальная среда имеет много |
|||||||
преимуществ с организационной точки зрения, включая: |
|
||||||
· сокращение времени восстановления после сбоя API; |
|
||||||
· улучшенный |
контроль |
скорости |
|
и |
пропускной |
||
способности сети;
·улучшенное использование энергии;
·необходим меньший объем оборудования;
·увеличение времени безотказной работы.
Выбор |
между |
использованием |
изолированной |
программной среды или виртуальной среды может сводиться |
|||
к дополнительным функциям, которые каждая |
из них |
||
предоставляет, конечно же, если API будет одинаково хорошо работать с любой из этих . средОнако важно сначала рассмотреть аспекты безопасности каждого варианта, если вы
58
хотите поддерживать уровень безопасности, необходимый для современных приложений.
Определение необходимости зоны безопасности API
Безопасность – это управление рисками. Направление запросов любого API сопряжено с риском, потому что вы не знаете, что API не был скомпрометирован, предполагая, что API в первую очередь свободен от потенциальных проблем.
Необходимость |
|
применения |
политик |
|
для |
любо |
||||
используемого |
вами API становится |
очевидной, когда |
вы |
|
||||||
читаете |
об |
|
ущербе, нанесенном API-интерфейсами |
в |
|
|||||
Интернете. Любой используемый вами API может отправлять |
|
|||||||||
данные, |
которые |
оказываются |
скрытыми |
|
вирусами, |
|||||
скриптами или другими вредоносными программами. |
|
|
|
|||||||
Независимо от того, отправляет или получает вашAPI |
|
|||||||||
данные |
в |
результате |
запроса, использование |
API |
в |
|
||||
изолированной программной среде или в виртуальной среде |
|
|||||||||
имеет смысл только потому, что это снизит ваш риск. |
|
|
|
|||||||
Обеспечение работоспособности вашегоAPI, как и |
|
|||||||||
ожидалось, снижает риск, снижая вероятность того, что кто- |
|
|||||||||
то заставит API работать так, как вы не предполагали. |
|
|
|
|||||||
Включение быстрой разработки |
|
|
|
|
|
|||||
Размещение |
вашего API непосредственно |
на |
сервере |
|
||||||
означает, что у вас есть одна копияAPI для всех. При этом |
|
|||||||||
если любой из разработчиков решает что-то протестировать, |
|
|||||||||
что приводит |
к |
сбою |
API |
или сервера, что |
приведет |
к |
|
|||
приостановке доступа для всех.
Песочница помогает обеспечить быструю разработку, |
||||
снижая вероятность сбоя сервера. При сбое API в песочнице, |
||||
все можно |
восстановить |
довольно быстро. Данная среда |
||
также позволит легко моделировать всевозможные условия, |
||||
которые могут возникнуть в реальном ,миретакие как |
||||
ограничение |
ресурсов |
или |
полностью |
отсутствующие |
ресурсы.
Использование виртуальной среды позволяет каждому
разработчику |
(или |
группе |
разработчиков) иметь |
||
индивидуальную |
копию API. |
Конечно, |
вы |
используете |
|
больше серверных ресурсов |
для |
реализации |
этого сценария, |
||
59
но суть в том, что вы попадаете в среду, в которой ни один |
|
|||||||||
разработчик не может вмешиваться в усилия программистов |
|
|||||||||
других разработчиков. Все изолированы от всех. Если один |
|
|||||||||
разработчик считает, что необходимым протестировать атаку |
|
|||||||||
на API определенным образом и атака будет успешной(сбой |
|
|||||||||
API или виртуальной среды), его усилия больше никого не |
|
|||||||||
затронут. Суть в том, чтобы иметь среду, в которой |
|
|||||||||
разработчики могут свободно делать все, что приходит им в |
|
|||||||||
голову, в поисках идеальных решений для приложений. |
|
|
||||||||
Подход песочницы является более дружественным к |
|
|||||||||
ресурсам |
и, |
вероятно, лучшим |
выбором |
для |
небольших |
|
||||
организаций, |
у |
которых может не хватить аппаратных |
|
|||||||
ресурсов. |
Виртуальная |
среда – |
лучший |
подход |
для |
|
||||
организаций, работающих над более крупнымиAPI, которые |
|
|||||||||
требуют внимания ряда разработчиков. В этом случае |
|
|||||||||
первостепенное |
значение |
имеет |
|
допустить, чтобы |
|
|||||
разработчики |
не |
мешали друг другу, и |
использование |
|
||||||
дополнительного |
оборудования, |
вероятно, |
не |
является |
|
|||||
большой проблемой. |
|
|
|
|
|
|
|
|||
3. |
ТЕСТИРОВАНИЕ БЕЗОПАСНОСТИ |
|
|
|
||||||
Чтобы достичь высокого уровня безопасности операций |
|
|||||||||
(OPSEC), важно понимать, что обеспечение безопасности– |
|
|||||||||
это постоянный процесс, который требует целостного, |
|
|||||||||
системного подхода. |
|
|
|
|
|
|
|
|||
Рассмотрим |
пять |
самых |
популярных |
методологий |
|
|||||
тестирования |
|
безопасности Web-приложений. |
Также |
|
||||||
рассмотрим |
|
основные |
стандарты |
и |
рекомендации |
по |
||||
тестированию Web-безопасности. |
|
|
|
|
|
|
||||
Основные этапы OPSEC |
|
|
|
|
|
|
||||
Что такое тестирование безопасности приложений? Это |
|
|||||||||
сложный и систематический процесс, предназначенный для |
|
|||||||||
проверки и анализа безопасностиWeb-приложения или |
|
|||||||||
платформы. |
|
В |
то |
время |
как |
существует |
множество |
|||
инструментов и продуктов, которые вы можете использовать
60
