Чтение онлайн

на главную - закладки

Жанры

19 смертных грехов, угрожающих безопасности программ

Виега Джон

Шрифт:
...

string s = «<some string>»;

string s1 = Convert.ToBase64String(UTF8Encoding.UTF8.GetBytes(s));

string s2 = UTF8Encoding.UTF8.GetString(Convert.FromBase64String(s1));

Короче говоря, хранить секретные данные в URL либо в теле HTTP–запроса или ответа – грех, если только полезная нагрузка не защищена криптографическими средствами.

Следует принять во внимание характер конкретного Web–сайта. Если данные, передаваемые в составе URL, используются для аутентификации,

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

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

Скрытые поля формы

Другая ошибка заключается в передаче важной информации от приложения клиенту в скрытом поле формы в надежде, что клиент (1) не сможет ее увидеть и (2) не сможет ей манипулировать. Но злоумышленнику ничего не стоит прочитать все, в том числе и скрытое, содержимое формы с помощью операции просмотра исходного HTML–кода, имеющейся в любом браузере, а затем отправить серверу поддельную форму с измененными значениями скрытых полей. Сервер понятия не имеет, кто выступает в роли клиента: браузер или Perl–сценарий! В представленных ниже примерах такая угроза безопасности разъясняется подробнее.

Родственные грехи

Иногда Web–разработчики совершают и другие грехи, в частности описанный под заголовком «Загадочные URL». Суть этого греха состоит в использовании негодных методов «шифрования».

Где искать ошибку

Искать нужно места в программе, где:

□ Web–приложение получает секретную информацию из формы или из URL;

□ для принятия решения о безопасности, доверии или авторизации используются данные;

□ данные передаются по незащищенному или не заслуживающему доверия каналу.

Выявление ошибки на этапе анализа кода

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

Для скрытых полей форм задача несколько проще. Ищите в коде места, где клиенту посылается HTML–код, содержащий строку вида:

...

type=HIDDEN

Напомним,

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

...

Regex r = new Regex(«type\\s*=\\s*[\'\»]?hidden[\'\"]?",

Regex.Options.IgnoreCase);

bool isHidden = r.IsMatch(stringToTest);

На Perl это выглядит так:

...

my $hidden = /type\s*=\s*[\'\"]?hidden[\'\"]?/i;

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

Тестирование

Самый лучший способ найти подобные ошибки – подвергнуть код анализу, но на случай, если это невозможно или вы что–нибудь пропустили, можно выполнить некоторые тесты. Например, такие инструменты, как TamperlE (www.bayden.com/ Other), Web Developer (www.chrispederick.com/work/firefox/ webdeveloper) или Paessler Site Inspector (www.paessler.com), показывают исходный текст форм прямо в окне браузера. Они же позволяют модифицировать поля формы и отправлять их обратно серверу. На рис. 9.1 показано, как выглядит окно Paessler Site Inspector.

Рис. 9.1 . Программа Paessler Site Inspector показывает текст форм на Web–странице

Примеры из реальной жизни

Следующие примеры взяты из базы данных CVE .

CAN–2000–1001

Web–страница add_2_basket.asp в программе Element InstantShop позволяет противнику модифицировать информацию о цене, которая находится в скрытом поле «price».

Исходный текст формы выглядит следующим образом:

<INPOT TYPE = HIDDEN NAME = «id» VALUE = «AOTO0034»>

<INPOT TYPE = HIDDEN NAME = «product» VALUE = «BMW545»>

<INPUT TYPE = HIDDEN NAME = «name» VALUE = «Дорогая машина»>

<INPUT TYPE = HIDDEN NAME = «price» VALUE = «100»>

Вы можете записать в поле price (цена) любое значение, отправить форму на сайт, где установлена программа Element InstantShop, и получить очень дорогую машину всего за 100 долл. Правда, придется оплатить расходы по доставке.

Модификация скрытого поля формы в программе MaxWebPortal

Этой ошибке в CVE не присвоен номер, но она фигурирует также в базе OSVDB (www.osvdb.org) под номером 4933.

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

Поделиться:
Популярные книги

Долгий путь домой

Русич Антон
Вселенная EVE Online
Фантастика:
космическая фантастика
попаданцы
6.20
рейтинг книги
Долгий путь домой

Часовая битва

Щерба Наталья Васильевна
6. Часодеи
Детские:
детская фантастика
9.38
рейтинг книги
Часовая битва

Боярышня Евдокия

Меллер Юлия Викторовна
3. Боярышня
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Боярышня Евдокия

Отдельный танковый

Берг Александр Анатольевич
1. Антиблицкриг
Фантастика:
боевая фантастика
альтернативная история
5.00
рейтинг книги
Отдельный танковый

Русь. Строительство империи

Гросов Виктор
1. Вежа. Русь
Фантастика:
альтернативная история
рпг
5.00
рейтинг книги
Русь. Строительство империи

Легионер (пять книг цикла "Рысь" в одном томе)

Посняков Андрей
Рысь
Фантастика:
фэнтези
7.38
рейтинг книги
Легионер (пять книг цикла Рысь в одном томе)

Попаданка в деле, или Ваш любимый доктор

Марей Соня
1. Попаданка в деле, или Ваш любимый доктор
Фантастика:
фэнтези
5.50
рейтинг книги
Попаданка в деле, или Ваш любимый доктор

Убивать, чтобы жить

Бор Жорж
1. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать, чтобы жить

На распутье

Кронос Александр
2. Лэрн
Фантастика:
фэнтези
героическая фантастика
стимпанк
5.00
рейтинг книги
На распутье

Мымра!

Фад Диана
1. Мымрики
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Мымра!

Иной мир. Компиляция

Шарипов Никита
Иной мир
Фантастика:
боевая фантастика
фэнтези
5.00
рейтинг книги
Иной мир. Компиляция

Рота Его Величества

Дроздов Анатолий Федорович
Новые герои
Фантастика:
боевая фантастика
8.55
рейтинг книги
Рота Его Величества

Восемь бусин на тонкой ниточке

Михалкова Елена Ивановна
Настоящий детектив
Детективы:
прочие детективы
9.30
рейтинг книги
Восемь бусин на тонкой ниточке

Имперский Курьер

Бо Вова
1. Запечатанный мир
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Имперский Курьер