Эта статья - четвертая в серии статей, предназначенных для помощи читателям оценить риск, которому подвергаются их системы, связанные с Интернет. В первой статье мы установили причины, по которым следует производить техническую оценку риска. Во второй мы приступили к обсуждению методик, которым мы следуем при выполнении этого вида оценки. В третьей статье эти методики обсуждались более подробно, основное внимание было уделено просмотру уязвимостей и наглядности. В этой статье мы обсудим относительно малоизученный аспект безопасности Интернет - обычные Web приложения.
Эта статья - четвертая в серии статей, предназначенных для помощи читателям оценить риск, которому подвергаются их системы, связанные с Интернет. В первой статье мы установили причины, по которым следует производить техническую оценку риска. Во второй мы приступили к обсуждению методик, которым мы следуем при выполнении этого вида оценки. В третьей статье эти методики обсуждались более подробно, основное внимание было уделено просмотру уязвимостей и наглядности. В этой статье мы обсудим относительно малоизученный аспект безопасности Интернет - обычные Web приложения.
Анализ сетевых приложений
Из всех возможных служб Интернета DNS, e-mail и www наиболее популярны. Из них, Web службы - самые сложные и наиболее часто используемые злоумышленниками. Изначально являясь, простой текстовой информационной службой, Web постепенно развилась в очень функциональную диалоговую прикладную платформу, которая используется почти во всех приложениях, как в Интернете, так и во внутренних сетях. Главные продавцы признали силу Web и сделали существенные вклад в развитие ее платформ. Среди них: Sun (Java), Microsoft, открытое общество (PHP) и другие, например, ColdFusion. На базе этих платформ обычному администратору очень легко развивать сложные приложения. Вследствие бурного развития Web все, как по мановению волшебной палочки, вдруг стали программистами. Web приложения часто развивались неквалифицированными и неопытными разработчиками. Даже самые опытные программисты неосознанно делают ошибки, дающие потенциальным злоумышленникам точное направление, где искать уязвимое место, которое им нужно для проникновения в частную сеть. Что же говорить о программистах среднего уровня или даже ниже! Поскольку эти приложения создаются на стандартных платформах, они часто аналогичны и поэтому, как правило, имеют одинаково слабые места в защите.
Как все более и более значимая технология в Интернете, распространенные сетевые приложения должны рассматриваться в каждой оценке безопасности. Хотя имеется проблема: мы знаем, что почти каждый, кто запускает DNS, автоматически запускает BIND (Berkley Internet Name Domain). Таким образом, если BIND имеет уязвимость, она затронет каждого. Уязвимость станет известной общественности, а ее подпись, в конечном счете, обнаружится сканерами уязвимости и попадет в базы данных уязвимостей.
Мы можем проверить системы, используя такие сканеры и определить уязвимость, которая может нас затронуть. А как же поступать с уязвимостями, связанными с самодельным сайтом какого-нибудь клиента мелкой компании, типа Joe Soap Inc.. Обязательно ли включать их в наш сканер уязвимостей? Ответ: нет, потому что Web приложения так часто являются "самодельными", так что их уязвимости, вряд ли станут широко известными, так что каждое приложение нужно рассматривать индивидуально, пытаясь определить ошибки безопасности, возможно сделанные непрофессиональными программистами.
Оценка Web приложений является новым направлением и представляет аналитикам безопасности целый пакет проблем. Ранее известные важные предпосылки, методики и инструменты в этой области не применимы и даже ведущие практики, только начинают понимать все возникающие проблемы, связанные с этими видами систем.
Проверка защиты сетевых приложений
Наше испытание сетевых приложений главным образом основано на принципе "черного ящика", то есть мы исследуем приложения над сетью без доступа к исходной программе. Конечно, не имея доступа к исходной программе, имеется вероятность пропустить что-нибудь важное. Назовем это "фактором нечеткости". Наш собственный план тестирования "нечетких" сетевых приложений состоит из двух частей: первая часть - это простой список вопросов, на которые нужно ответить в процессе рассмотрения приложения, а вторая часть - список банальных программных ошибок, наличие которых нужно проверить.
Хотя каждый программист и, следовательно, каждое приложение уникальны, ошибки, как правило, одни и те же. Мы составили список общих программных ошибок, наличие которых можно проверить, даже находясь над сетью. Детально опишем план тестирования немного позже, а пока нужно кратко напомнить некоторые основные понятия, которые читателю необходимо понимать.
Независимо от используемой платформы, основное большинство приложений имеет подобную основную архитектуру, как изображено ниже:
Рис. 1: Типичная архитектура Web приложения.
На этом рисунке изображена популярная сетевая архитектура для Web приложений. Web-сервер располагается в особо защищенной зоне сети, называемой демилитаризированной Зоной (DMZ). Используются два файрволла: один - чтобы защитить демилитаризованную зону от Интернета, а другой - чтобы защитить внутреннюю сеть от демилитаризованной зоны. Эта архитектура - хорошо продумана системой безопасности и создана для минимизации последствий в случае, когда Web сервер будет взломан. Однако два канала должны быть всегда рабочими в этой архитектуре. Пользователь всегда должен иметь возможность соединиться с web-сервером из Интернета, а web-сервер должен иметь возможность соединиться с сервером базы данных. Эти же два канала использует и нападающий, чтобы получить доступ к внутренней сети.
Сетевые приложения: основные вопросы
Теперь, поняв основы, мы должны понять, как оценить сетевые приложения. Мы также кратко рассмотрели довольно простую, но обычную архитектуру сети. Рассмотрим теперь глубже первую часть плана оценок, о которой говорилось выше. На какие вопросы вы должны ответить, сталкиваясь с изготовленным на заказ сетевым приложением? Эти вопросы весьма просты, но важны, если мы надеемся проникнуть в глубь оцениваемого приложения:
Вопрос 1: Кто эти люди?
Проект и архитектура продукта чаще всего отражают стиль и культуру организации, которая его создала. И обратно, многое можно понять в проекте и архитектуре приложения, если вы понимаете стиль и культуру организации. Мы ищем это понимание на двух уровнях:
Общий: С какой группой мы имеем дело? Какой у них основной бизнес? Каков их стиль и культура?
Частный: Кто разработал и развивал рассматриваемое приложение? Какие они имеют знания, квалификацию, каков их стиль?
Ответы на эти вопросы дадут нам понимание того, как приложение будет построено и где оно может содержать ошибки.
Вопрос 2: Как приложение работает?
На следующем этапе мы должны понять, как рассматриваемое приложение собрано. Вы должны предпринять все усилия, чтобы понять механизм работы приложения. Приведем список важных моментов, которые необходимо рассмотреть:
1.Может ли приложение работать в диалоговом режиме? Если да, то где расположены диалоговые элементы? Не каждый сайт является диалоговым. Кроме того, некоторые сайты более диалоговые, чем другие. Вы должны найти диалоговые элементы сайта и определить, насколько они диалоговые в действительности.
2.Как была построена система? Вспомним прикладные платформы развития, о которых говорилось выше. Каждый план развития имеет свои силы и слабости. Определив и поняв основные компоненты, на которых приложение было построено, мы узнаем, где нужно начинать искать возможную уязвимость.
3.Откуда приложение получает данные? Диалоговое приложение должно получать информацию из каких-то источников. Поскольку сетевые приложения не имеют "гражданства", необходимо найти место хранения данных пользователей. Определение места расположения конечного источника данных многое даст нам в понимании принципа работы приложения и того, как его можно взломать.
4.Как приложения получают данные? Итак, сайт получает данные из какого-то дополнительного источника. Возможно даже с отдаленного сервера. Каким образом? Имеется много вариантов, включая запросы HTTP, XML, обычный вход в файл и вечно популярный ODBC. Каждый из этих подходов опять имеет сильные и слабые стороны, которые нужно определить.
5.Как они узнают меня? Многие сайты позволяют работать анонимно, то есть без установления личности, но некоторые сайты предпочитают познакомиться с вами, прежде, чем предоставить вам доступ. Если это так, вам нужно понимать, как происходит установление вашей личности. Какими методами (например, Basic Authentication), и где хранятся данные пользователей (например, в NT SAM).
6.Как они отслеживают состояние? Как только пользователь определен, не имеющее гражданства приложение должно отслеживать пользователя. Отслеживание состояния также необходимо в сложных процессах, когда результаты, полученные на предыдущем шаге, используются, как входные данные на следующем. В каждом случае, отслеживание состояния - область, крайне склонная к ошибкам, и нужно иметь глубокое понимание этого при оценке приложения.
Вопрос 3: Почему они выбрали именно этот способ?
Независимо от ответов на предыдущие вопросы и архитектуры, которую вы узнали, всегда имеются причины того, что система была построена именно тем способом, которым она построена. Если мы сможем понять мотивацию проекта, мы сможем понять уязвимые места системы. Приведем список некоторых наиболее распространенных мотиваций.
Вопрос 4: Каковы типичные ошибки данной архитектуры?
Теперь, когда вы имеете общий вид оцениваемой системы, вы можете начать искать возможные ошибки безопасности. Вы просматриваете пути сквозь защиту разработчика в попытках найти ошибки, которые он, возможно, просмотрел. В пятой и заключительной части этой серии статей мы обсудим некоторые обычные категории ошибок программирования и рассмотрим некоторые частные примеры. Теперь, когда мы создали фундамент для понимания того, чем являются сетевые приложения и как они работают, мы можем исследовать, как оценивать их для риска безопасности Интернета, что будет сделано в следующей (и последней) статье в этой серии.
Первое — находим постоянно, второе — ждем вас