Проблемы безопасности современных веб-технологий

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

В отраслевом отчете компании VeriSign по итогам 2-го квартала 2005 года фигурирует число в 82,9 млн доменов, из которых за отчетный период было зарегистрировано 8,1 млн доменных имен. Очевидно, что в связи с таким быстрым ростом количества используемых веб-приложений, именно они попали под пристальный взгляд как специалистов по сетевой безопасности, так и тех, кто, пользуясь различными уязвимостями веб-приложений, получают личную выгоду. Здесь специально не используется термин «хакеры», потому что «хакеры», обладая большим багажом знаний для поиска новых уязвимостей, далеко не всегда играют за «нападение»: все чаще и чаще высококлассные специалисты по сетевой безопасности играют в команде «защиты». В сети находится множество материалов по использованию известных уязвимостей веб-приложений; для осуществления взлома достаточно знать лишь технические азы, а все остальное сделает специально написанная программа.

На самом деле, прежде чем говорить о проблемах безопасности веб-технологий, следует условно разделить веб-серверы на несколько групп: персональный сайт, информационный сайт (портал), корпоративный сайт и веб-сервер программных приложений.

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

Но наиболее интересным представляется атака на веб-серверы приложений. Для начала давайте разберемся, что имеется в виду под веб-ориентированными приложениями. Такие понятия, как CRM, CMS, ERP, прочно вошли в бизнес-реалии современных компаний, а современные веб-технологии позволили перенести эти система (или их интерфейсы) на уровень веб-сервера. Согласитесь, гораздо удобнее получать доступ к последним отчетам о продажах компании из любой точки мира, имея на руках не громоздкое программное обеспечение, а всего лишь веб-браузер. Кроме удобства одним из ключевых преимуществ веб-ориентированных решений является кросс-платформенность. Разработаны веб-браузеры для любой операционной системы, и, соответственно, разработку приложения или интерфейса нужно вести всего лишь под одну платформу – веб. Логично, что подобная трансфигурация существенно сократила время и стоимость разработки и, как результат, цену продукта. Использование веб-ориентированных технологий стало тем самым ключом, открывающим двери к быстрой и эффективной разработке приложений. В результате множество компаний (как среди разработчиков программного обеспечения, так и среди его заказчиков) по всему миру приняли на вооружение подобный инструментарий.

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

Другими словами, при заказе разработки веб-ориентированной системы, системы управления контентом (CMS) корпоративного сайта необходимо выяснить у разработчика тот уровень безопасности, который он закладывает в разрабатываемую систему. К сожалению, статистика подсказывает, что в настоящее время 9 из 10 веб-разработчиков не уделяют должного внимания вопросам безопасности.

Предупрежден – значит вооружен. В России есть компании-разработчики, четко понимающие важность обеспечения безопасности устанавливаемого или разрабатываемого приложения. Задача заказчика – понять, как к вопросу безопасности относится компания, которой он собирается доверить внедрение или разработку требуемой веб-системы.

Любой разработчик или заказчик веб-приложений должен осознать, что построить защищенное приложение гораздо проще (и эффективнее с точки зрения финансовых и временных затрат), если заложить компоненты и модули обеспечения безопасности в фундамент системы. Поэтому рассмотреть вопросы обеспечения безопасности целесообразно еще на этапе проектирования системы. Гораздо сложнее будет защитить систему и написать необходимую “заплатку”, когда организация безопасности системы не продумана с самого начала и не является ее базовым компонентом. Для подтверждения вышесказанного рассмотрим проблему с SQL-инъекциями. Наверное, ни одно из современных веб-приложений не обходится без использования СУБД (системы управления базой данных), где хранятся как информационные, так и авторизационные данные. Именно поэтому SQL-инъекции являются одним из наиболее действенных методов взлома веб-приложений. Обеспечить устойчивость веб-приложения к SQL-инъекциям можно только в том случае, если инструментарий защиты находится в самом сердце приложения.

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

Взломщик, как правило, проверяет уязвимость к SQL-инъекциям путем подачи входных данных, которые генерируют ошибочный запрос к БД. И если приложение возвращает сообщение об ошибке, взломщик пытается проанализировать возможную структуру таблицы или БД, опираясь на полученную из ошибки информацию. Типичный метод защиты – отключение возможностей генерации ошибок при обращении к базе данных. Метод действенный, но, к сожалению, недостаточный. Веб-приложение, не возвращающее никаких сообщений об ошибках, все равно может быть подвержено SQL-инъекциям, на сей раз “слепым”.

“Слепые” SQL-инъекции – это метод взлома, при котором аналитическая информация добывается взломщиком не на основе сообщений об ошибках, а на основе логических конструкций.

Рассмотрим простой теоретический пример атаки на веб-приложение методом SQL-инъекций:

Допустим, взломщик изучает корпоративный сайт, где по адресу:
www.site.ru/documents.php?7
отображается документ с номером 7.
В параметре («7») указывается номер документа, который необходимо показать.
На самом деле при запросе подобного адреса к базе данных отправляется запрос наподобие:

ВЫБРАТЬ название_документа, дата_документа, адрес_документа ИЗ таблицы_документов ГДЕ номер_документа=7

Веб-приложение сработает нормально и покажет документ с номером 7.

Для определения, подвержено ли приложение SQL-инъекциям, давайте попробуем добавить дополнительные параметры, введя в браузере адрес:
www.site.ru/documents.php?7 И 1=1

Передаваемым параметром будет выражение «7 И 1=1», соответственно, к БД будет передан запрос вида:

ВЫБРАТЬ название_документа, дата_документа, адрес_документа ИЗ таблицы_документов ГДЕ номер_документа=7 И 1=1

Если приложение вернуло тот же документ, что и в первый раз, – это означает, что оно принимает пользовательское выражение как часть запроса к базе данных и, соответственно, подвержено взлому методом SQL-инъекций.

Безопасное приложение отклонило бы подобный запрос, потому что принимает параметром ввода только число, а поскольку параметр «7 И 1=1» является текстовой строкой, а не числом , то подобный запрос был бы отклонен и требуемый документ не был бы отображен.

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

Еще одним методом скрытия внутренних процессов приложения является использование ЧПУ - человеку понятного адреса (URL) в системе адресации веб-приложения. Например, если в вышеуказанном документе его название «Тест надежности», то адрес с применением ЧПУ мог бы быть не www.site.ru/documents.php?7, а www.site.ru/test_nadezhnosti.html. Использование ЧПУ не только затрудняет поиск и выполнение SQL-инъекций, но и значительно упрощает и визуализирует адресацию документов на веб-сайте.

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

Виталий Яковлев, компания «Телегрид», генеральный директор

Тематики: ПО, Web

Ключевые слова: