[manual]Развертывание и конфигурирование

Underworld

Student-Maniac
#1
За основу была взята статья Доминика Байера - независимого консультанта по вопросам защиты. После каждой части статьи, я по возможности буду давать свои краткие комментарии по поводу написанного.

На повестке дня:
  • Основные рекомендации
  • [post="187432"]Усиление защиты ОС[/post]
  • [post="187703"]Усиление защиты сервера баз данных[/post]
  • [post="189876"]Усиление защиты Web-сервера[/post]
Рано или поздно вы развернете свое приложение на производственном сервере и откроете его для пользователей (и потенциальных злоумышленников). Защищенное приложение представляет собой комбинацию защищенного кода и защищенных файлов конфигурации ОС, коммуникационных протоколов и самой структуры Microsoft ASP.NET

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

Основные рекомендации
Начав работать с тестером (аудитором) проникновений, я заучил семь золотых правил (или мантры тестера, как я их называю). Эти правила всегда используются для обеспечения защиты системы. Следуя им, можно повысить защищенность системы

Перечисленные ниже правила применяются во всех ситуациях, связанных с проектированием серверов и инфраструктуры
  • Разделение обязаностей Каждая система в сети должна выполнять четко определенную роль (сервера web, электронной почты, DNS или другую). Вы не должны смешивать и противопоставлять эти функции на одной машине. Прежде всего, конфигурация становится гораздо сложнее, когда сервер должен поддерживать много функций, а сложность - это естественный враг защиты. Далее, если в одном компоненте найдено слабое место. позволяющие получать доступ к системе, то все остальные службы на этой машине также будут взломаны. И последнее: когда машина со множеством отконфигурированных функций по каким-либо причинам перестает работать (например, из-за аппаратного сбоя), вы потеряете больше чем одну службу в сети. Спросите администратора сети, согласится ли он устанавливать первичный и вторичный DNS-серверы на одном физическом аппаратном обеспечении. Вряд ли.
  • Минимальное программное обеспечение Выяснив, какую роль машина играет в сети, надо удалить все ПО и службы, не имеющие отношения к этой роли. В особенности это касается служб, открывающих порты и обрабатывающих сетевые пакеты. Их нужно удалить в первую очередь, потому что не имеет смысла устанавливать Web-сервер на контроллере домена. Эта технология дает преимущество и в том, что упрощается вся конфигурация системы, а процесс обновлений становится совсем не сложным, т.к. вам нужно обновлять лишь реально используемые компоненты, что также позволяет уменьшить обьем потенциально уязвимого кода. В качестве примера можно привести различные "дырявые" решения ISAPI версии 4 и 5 IIS, которые подвергались удаленным атакам, даже не будучи использованными, Еще два таких примера - Index Server и Internet Printing.
  • Минимальный уровень привилегий Этот принцип гласит, что каждый пользователь или процесс в системе должен запускаться лишь с теми привилегиями, которые необходимы для выполнения работы. Еще можно добавить "в оговоренное время". Web-приложения всегда запускаются с наименьшими привилегиями и должны иметь доступ только к требуемым ресурсам. Это может быть встроенная учетная запись NETWORK SERVICE или собственная учетная запись пользователя. Никогда не применяйте учетные записи с высоким уровнем привилегий, такие как учетная запись администратора или SYSTEM. Злоумышленники, найдя в приложении или Web-сервере слабое место, часто получают те же привилегии, которые имеет рабочий процесс. Поэтому следует назначать как можно меньше привилегий.
  • Обновления Все компоненты на сервере (например, ОС, сервер баз данных и MS .NET Framework) должны иметь самую последнюю версию обновлений систем защиты. Злоумышленник может взломать ранее зафиксированное. но до сих пор не исправленное слабое место.
  • Глубинная защита Должно быть несколько контрмер против атак. Примерами глубинной защиты в ASP.NET являются запросы или подтверждение данных. В сетях, скажем, никогда нельзя полагаться лишь на один брандмауэр для управления трафиком, ибо это может чрезвычайно усложнить конфигурацию и отслеживание точек сбоев. Одно из средств глубинной защиты - дополнительный локальный фильтр пакетов на Web-сервере.
  • Защита наиболее слабых звеньев Идентифицируйте самые слабые звенья в приложении или системе и примените дополнительные контрмеры. Примерами таких звеньев могут служить страницы регистрации в ASP.NET или шлюзы удаленного доступа в сетях. Поскольку эти области представляют собой главные цели для атак и нуждаются в защите, должно быть больше средств обнаружения атак и реагирования на них.
  • Строгая аутентификация Аутентификация доступа к приложению или системе всегда должна быть строгой. Имея дело с паролями (а вам придется работать с ними). реализуйте политику паролей с повышенной сложностью. Кроме того, используйте аутентификацию по многим факторам или альтернативные технологии, например одноразовые пароли.
От себя В данной статье Доминик Байер постарался назвать обязательные правила которые должны соблюдаться при развертывании какого либо приложения на сервере и которым по возможности надо следовать. В следующей статье Доминик рассказывает как можно усилить защиту ОС Windows 2003 по средствам отключения неиспользуемых служб и фильтрации пакетов на примере развертывания Web-сервера
 

Underworld

Student-Maniac
#2
Усиление защиты ОС

Первое, что нужно сделать при установке нового сервера, - составить список всех требований и определить, кому какие службы будут предоставляться. Позже это облегчит отключение служб и конфигурирование фильтрации пакетов. Microsoft Windows Server 2003 была первой ОС Microsoft, устанавливаемой лишь с базовыми настройками во время исходной инсталляции. Первое диалоговое окно которое вы видите после первой перезагрузки (точнее, регистрации), позволяет выбрать роль "сервера". Для Web-сервера ASP.NET следует выбрать роль Application Server, которая устанавливает IIS и включает поддержку ASP.NET

Автоматическое обновление

После установки всех необходимых компонентов (например, IIS и ASP.NET) следует убедиться, что у вас самая последняя версия обновлений. ОС Microsoft Windows имеет службу автоматического обновления, которая переодически ищет новые важные изменения. Включите ее, открыв диалоговое окно Automatic Updates с панели управления. Это позволит вам получать и загружать все обновления защиты автоматически.

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

Отключение служб и протоколов

Узнав, какие службы должен обеспечивать сервер, вы можете отключить все остальные. Самое сложное - выяснить, какие службы нужны а какие следует отключить. Далее приведен список служб, которые вы можете отключить на машине, играющей роль исключительно Web-сервера (предложены только службы HTTP, а для администрирования используется утилита Remote Desktop):
  • Computer Browser (Обозреватель компьютеров);
  • DHCP Client (DHCP-клиент);
  • Distributed File System, FDS (Распределенная файловая система);
  • Distributed Link Tracking Client (Клиент отслеживания изменившихся связей);
  • Distributed Transaction Coordinator (Координатор распределенных транзакций);
  • Error Reporting Service (Служба регистрации ошибок);
  • Help and Support (Справка и поддержка);
  • Remote Registry (Удаленный реестр);
  • Secondary Logon (Вторичный вход в систему);
  • Server (Сервер);
  • TCP/IP NetBIOS Helper (Модуль поддержки NetBOIS через TCP/IP);
  • Wireless Configuration (Беспроводная настройка);
  • Workstation (Рабочая станция);
  • Application Management (Управление приложениями);
  • File Replication (Репликация файлов);
  • Portable Media Serial Number Service;
  • Remote Access Auto Connection Manager (Диспечер автоматического подключения удаленного доступа);
  • Remote Access Connection Manager (Диспечер подключения удаленного доступа);
  • Remote Desktop Help Session Manager (Диспечер сеанса справки для удаленного рабочего стола);
  • Resultant Set of Policy Provider (Поставщик результирующей политики);
  • Smart Card (Смарт-карта);
  • Special Administration Console Helper (Модуль поддержки специальной консоли администрирования);
  • Telephony (Телофония);
  • Windows Installer;
  • WinHTTP Web Proxy Auto-Discovery Service (Служба авто-обнаружения Web-прокси WinHTTP);
  • File and Print Sharing (Служба доступа к файлам и принтерам);
  • NerBOIS over TCP/IP (NetBIOS через TCP/IP);


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


<div align='left'>Остальные службы полностью соответствуют роли Web-сервера.

Фильтрация пакетов

Отключив все ненужные службы, вы закроете большую часть портов. Благодаря этому значительно снизится фронт атак на сервер. К сожалению, ряд портов невозможно отключить (например, TCP/135, который предоставляет RPC, поскольку ОС Win сама полагается на этот протокол). Другие порты должны по возможности быть видны для некоторых областей сети. Типичный пример - удаленное управление, такое как Terminal Services. Обычно удаленное администрирование включается только из внутренней сети, отдельной подсети или особых IP-адресов, но не из Интернета.

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

В ОС Win встроены два фильтра пакетов: брандмауэер Windows и Interbet Protocol Security (IPsec). Преимущество брендмауэра состоит в том, что он обеспечивает простой интерфейс для закрытия портов. Однако он не позволяет ограничить исходящие подключения. Фильтр IPsec может управлять входящим и исходящим трафиками, но его чуть сложнее настраивать

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

Службы IPsec ОС Windows позволяют управлять исходящим трафиком. Полное описание их возиожностей и конфигурации вы найдете на сайте TechNet (www.microsoft.com/technet/itsolutions/network/ipsec/default.mspx), ровно как и описание фильтрации пакетов (msdn.microsoft.com/practices/topics/security/default.aspx?pull=*library/en-us/dnnetsec/html/HTUseIPsec.asp)

Защита совместно используемых файлов Windows

Мало кому известно, что при разделении файлов Win все данные передаются в совершенно незащищенном виде. По умолчанию не используется ни шифрование, ни защита целостности. Можно включить встроенную поддержку подписи трафика, что усложнит модификацию сетевых пакетов для злоумышленников. Однако если вы передаете уязвимые данные с помощью протоколов совместного использования файлов win, следует дополнительно шифровать трафик.

Аудит

В ОС Win имеются встроенные возможности аудита, благодаря которым система записывает успешные или неудачные регистрации, изменения в политике и доступ к ресурсам. Процесс включения аудита можно разбить на два этапа: сначала включается аудит системы, а затем указывается ресурс, аудит которого нужно выполнять. Мастер конфигурирования безопасности может автоматизировать эти задачи, однако если вам необходимо изменить конфигурацию вручную, это можно сделать, открыв папку Administrative Tools\Local Security Policy (Secpol.msc). Политики перечислены в папке Local Policies\Auditing Policies (Локальные политики\Политика аудита). Сначала надо включить аудит входа в систему и доступа к объектам, а затем, с помощью настроек защиты в Win Explorer (Проводник Win), аудит специфических файлов или папок.

Вы всегда должны выполнять аудит доступа к системной папке и Web-приложениям. Даже при нерегулярном аудите входа в систему в случае взлома можно получить ценную информацию для анализа. Регистрационные записи адита содержаться в журнале событий Event Viewer (Просмотр событий), хранящемся в файле Eventvwr.msc
</div>
От себя: Как видите, если верно настроить ОС Win то можно получить весьма шуструю и безопасную систему, но это если конечно соблюдать некоторые рекомендации специалистов по безопасности:) В следующей статье Доминик дает небольшие рекомендации по усилению защиты сервера баз данных
 

Underworld

Student-Maniac
#3
Усиление защиты баз данных
Для баз данных применяются те же основные правила защиты. Кроме того, нужно учитывать следующие обстоятельства и рекомендации.
  • Базы данных обычно состоят из многих служб (в частности, механизма СУБД, полнотекстового поиска и передачи сообщений), одни из которых нужны, а другие - нет. Например, MSSQL Server 2005 включает в себя Attack Surface Wizard, который можно использовать для выбора служб.
  • Большинство баз данных построено на концепции схем. Создавайте отдельные схемы для приложений и их данных. Учетная запись приложения и его пользователи должны иметь доступ только к схеме приложения. Это упрощает управление доступом и препятствует доступу приложения к системным данным или данным из других схем.
  • Никогда не подтверждайте прямой доступ к таблицам для приложений или пользователей. Упаковывайте все функции баз данных для приложения в хранимые процедуры и задайте для них подтверждение разрешения Execute (Выполнить). Таким образом вы получите удаленный доступ к таблицам. В результате будет значительно упрощено управление правами доступа и снизится фронт атак на базы данных.
  • По возможности ограничивайте доступ к метаданным. Вложение программных кодов SQL вслепую, рассчитано на то, что приложение может запрашивать такие метаданные, как имена баз данных, таблиц и столбцов.
  • Если возможно, используйте интегрированную аутентификацию. Благодаря этому вы избавитесь от паролей в файлах конфигурации или коде
  • Большинство баз данных передают информацию в открытом виде. Выясните, как можно защитить передачу информации в системе баз данных. Например, SQL Server поддерживает SSL (Secure Socket Layer). Если система баз данных не оснащена встроенной службой защиты передачи, вы можете использовать IPSec для туннелирования трафика баз данных.


От себя: В данной статье Доминик дает рекомендации по настройке защиты баз данных. В следующей статье (моей любимой) Доминик рассказывает как можно усилить защиту IIS на примере 6 версии (в нашем же случаи я буду рассказывать на примере 7)
 

pchayka™

You're an amateur
#4
было бы еще интересно аналогичный мануал по службам, но уже для промышленного сервера аки lin2 pts. хотя надо бы почитать документацию...

а статья кстати оч хорошая =)
 

Underworld

Student-Maniac
#5
было бы еще интересно аналогичный мануал по службам, но уже для промышленного сервера аки lin2 pts. хотя надо бы почитать документацию...

а статья кстати оч хорошая =)
Если учесть что ПТС-сервер по многим принципам работы похож на Web-сервер, то можно попробовать использовать те же настройки, но с изменением некоторых политик безопасности (например, добавление и удаление портов в брандмауэре). Во общем нужно экспериментировать, ибо ни одна безопасность не обходится без экспериментов, чтобы получить равное соотношение производительность / безопасность.
 

pchayka™

You're an amateur
#6
Обновления Все компоненты на сервере (например, ОС, сервер баз данных и MS .NET Framework) должны иметь самую последнюю версию обновлений систем защиты. Злоумышленник может взломать ранее зафиксированное. но до сих пор не исправленное слабое место.
Вот этот пункт может быть спорным. не всегда разработчик проводит достаточный комплекс тестирования новых features. Тогда мы рискуем попасть в другую крайность - ослабление защиты.

Это конечно не касается hotfix.
 

Underworld

Student-Maniac
#7
Вот этот пункт может быть спорным. не всегда разработчик проводит достаточный комплекс тестирования новых features. Тогда мы рискуем попасть в другую крайность - ослабление защиты.

Это конечно не касается hotfix.
Вот поэтому эти правила входят в разряд рекомендаций, т.к. ты верно подметил что разработчик, не всегда проводит достаточный комплекс тестирования. А если учесть что разработчик зачастую Microsoft, то желательно иметь собственных тестеров на проникновение, ибо мы все знаем как MS выпускает продукты :derisive:
 

pchayka™

You're an amateur
#8
мне эта печальная ситуация знакома не столько благодаря MS, сколько благодаря Эму... Когда ждешь долгожданных фиксов и фич, а получаешь сюрприз в виде новой пачки багов, зачастую еще более ужасных чем предыдущие...

и остается только сидеть и не рыпаться
 

Underworld

Student-Maniac
#10
мне эта печальная ситуация знакома не столько благодаря MS, сколько благодаря Эму... Когда ждешь долгожданных фиксов и фич, а получаешь сюрприз в виде новой пачки багов, зачастую еще более ужасных чем предыдущие...

и остается только сидеть и не рыпаться
Ладно что хоть, в фикс патче не меняют координально полностью всю логику работы, из за которого приходится зачастую заново писать то что использовало эту часть
 

pchayka™

You're an amateur
#11
Или же править самому... Ручками... :)
Я предпочитаю капать на мозг разработчику :05e811906ebf:

Ладно что хоть, в фикс патче не меняют координально полностью всю логику работы, из за которого приходится зачастую заново писать то что использовало эту часть
фикс у нас это просто другие ревизии, в которых, нужно надеяться, будет работать =)

че-то я погнал на визора, он молодец =)
 

Underworld

Student-Maniac
#12
Усиление защиты Web-сервера
По умолчанию IIS 7 устанавливается в несколько ограниченной форме. Если вы не обеспечите поддержку любой технологии сервера приложений, например ASP.NET или класической платформы ASP, то IIS 7 сможет обслуживать лишь статические файлы в стандартной конфигурации. Нужно определить типы разрешенного активного содержимого, контексты защиты, в которых вы будите запускать свои приложения, и ресурсы, к которым они должны иметь доступ.

Пулы приложения
Пул приложения представляетрабочий процесс в IIS 7. Для каждого пула приложения вы получаете экземпляр рабочего процесса w3wp.exe, который позже будет управлять CLR, ASP.NET и вашими приложениями. Можно конфигурировать несколько аспеутов рабочего процесса, например настройки рециркуляции и мониторинг состояния.

ВНИМАНИЕ! Настройки рециркуляции по умолчанию каждые 29 часов закрывают рабо-
чий процесс для получения последеней копии данных. При ререциркуляции рабочего процесса
вы теряете все хранящиеся в процессе данные, в частночти внутрипроцессные сеансы
или кеш. В производственной среде эту настройку обычно изменяют на управляемую
рециркуляцию с использованием схемы.​

Наиболее вожное значение для защиты имеет вкладка Удосторверение. В ней вы можете определить, под какой учетной записью должен запускаться пул приложения. По умолчанию используется учетная запись Network Service (Сетевая служба), однако можно применить и собственную учетную запись (рис. 1).

Рис. 1. Конфигурирование контекста защиты в пуле приложения​

Необходимо учитывать следующие аспекты.
  • При закрытии рабочего процесса (неважно, по какойто причине) закрываются все запущенные в нем приложения. Для надежности распределяйте важные приложения по разным рабочим процессам.
  • Все приложения, запущенные в одном рабочем процессе, совместно используют контекст защиты. Идентификатор рабочего процесса обычно применяются для получения доступа к ресурсам, например файлам или базам данных. С точки зрения ОС нельзя различить два приложения, запущенные в одном рабочем процессе. Групируйте приложения, в котором требуется одни и те же настройки защиты (скажем, списки ACL файловой системы NTFS или доступ к базе данным). Если же вам необходима раздельная защита, распределяйте приложения по различным процессам (и контекстам защиты). Такой подход позволяет задавать отдельные списки ACL.
  • Запросы ASP.NET обслуживаются из пула потока. этот пул обслуживает один процесс и содержит 25 потоков на каждый CPU. Запуск множества приложений в одном процессе влияет на расширяемость, поскольку приложения должны совместно использовать потоки.
  • Если вы зхотите применять в прилложении делегирование, запускайте рабочий процесс под учетной записью домена и зарегистрируйте имя принципа службы (SPN) для этой учетной записи.
  • Все учетные записи, используемыее для рабочих процессов, нужно добавить в локальную группу IIS_IUSRS. Таким образом будут потверждены некоторые привилегии, требуемые для запуска рабочих процессов IIS.
  • Можно загружать в процесс только одну версию CLR. Если на вашем сервере есть приложения ASP.NET 2.0 и 1.1, их нужно разделить по разным рабочим процессам.
После настройки пулов приложения вы можете конфигурировать каждые приложение для запуска в назначенном пуле в диалоговом окне Дополнительные параметры (рис. 2).

Рис. 2. Настройка пула для каждого приложения​

Расширение Web-служб
Расширение Web-служб определяют, какие активное содержимое вы разрешаете использовать на своем сервере. По существу это глобальный список расширений ISAPI и шлюзов CGI, разрешенных для вызова. Применять можно только те серверные технологии, которые действительно нужны, то есть следовать минимального ПО. Обычно используется ASP.NET 2.0 (и 1.1 если нужно поддерживать множество версий структуры).
Злоумышленники, управляя копированием исполняемого файла (например, CGI в Web-приложении), не смогут выполнять его через браузер, пока этот двоичный код не зарегистрирован в списке разрешений Web-служб (рис. 3).

Рис. 3. Конфигурирование разрешенноо активного содержимого​

Содержимое Web
Удалите все лишнее содержимое на Web-сервере, в частности образцы приложений, документацию продукта или неиспользуемые приложения. Чем больше исполняемого кода на вашем сервере, тем вероятнее, что он будет взломан. Образцы приложений имеют больше всего слабых мест.
Кроме того, переместите папку Web-прирожения из раздела, в котором находятся ОС. Это обеспечит защиту против всех типов атак отслеживания

Заголовки HTTP
Удалите все ненужные заголовки HTTP, которые можно конфигурировать в IIS, например X-Powered из ASP.NET. Вы можете найти эту настройку в IIS MMC на вкладке Заголовки HTTP диалогового окна Начальная страница Default Web Site.

Вход в систему
Регистрацию IIS можно конфигурировать для каждого сайта (в диалоговом окне Начальная страница Default Web Site). По умолчанию записи в поле Reference (ссылка) не вносятся. Чтобы знать, кто ссылается на ваш сайт, заполните это поле вручную. Рассмотрите возможность помещения записей в отдельный раздел и их регулярного резервного копирования.
Для анализа файлов регистрации вы можете использовать инструмент LogParser (http://www.microsoft.com/technet/scriptcenter/tools/logparser/default.mspx). Кроме того, что вы сможете запрашивать такую стандартную информацию, как количество обращений, этот инструмент позволит вам осуществлять поиск специфических шаблонов атак (http://www.securityfocus.com/infocus/1712). Инструмент LogParser использует язык запросов SQL. Далее представлен пример запроса, который возвращает пользовательские имена, вызвавшие сбой аутентификации IIS (путем просмотра кодов состояния ошибок 401 и 403)

[sql]SELECT cs-username, sc-status, COUNT(*) AS Total
FROM ex*.log WHERE cs-username IS NOT NULL AND sc-status > 400 AND sc-status < 404
GROUP BY cs-username, sc-status
ORDER BY Total DESC[/sql]

Фильтр URLScan
URLScan представляет собой фильтр ISAPI, который позволяет проверять входящие запросы. Используя технологию белых или черных списков, можно определить несколько правил проверки. Например, вы можете разрешать или запрещать расширения, команды, последовательности URL и заголовки. Кроме того, можно задать максимальные значения длины строк запросов и заголовков, а также удалить заголовок сервера из списка реагирования HTTP.
Во многих документах указано, что большинство функций URLScan необходимо переместить в файл HTTP.SYS, однако это не совсем так. Инструмент URLScan представляет больше возможностей и является эффективным средством глубинной защиты. Интересно, что во время написания этой статьи два изъяна ASP.NET (MS06-33 и MS05-004) можно было устранить именно посредством установления данного инструмента. Посмотрите основную документацию по URLScan (http://www.microsoft.com/technet/security/tools/urlscan.mspx) и статью из базы знаний Microsoft, где описано, как ограничивать функциональность приложения ASP.NET с помощью URLScan (http://support.microsoft.com/kb/815155)

Контрольные списки доступа
В перспективе ASP.NET-списки ACL следует настраивать (или защищать) в трех различных каталогах. Посредством ключа -ga команды Aspnet regiis можно автоматизировать большую их часть, однако я рекомендую выполнить это вручную. чтобы придерживаться принципа минимальных привилегий.

ВНИМАНИЕ! Помимо указания всех необходимых списков ACL для работы приложения
всегда следует продумывать уровень разделения между запущенными на сервере при-
ложениями. Если вы не разделите соответствующим образом приложения, вам придется
полностью доверять каждому из них (а также всем разработчикам этих приложений).
Частичное доверие - самый эффективный способ реального разделения,
однако списки ACL всегда должны применяться независимо.​

Файлы Web-приложения
Длалее речь пойдет о папке, в которой расположены файлы вашего приложения (например, страницы или графика). Точно определите, какие учетные записи должны иметь специфические типы доступа к этой папке. В перспективе ASP.NET-доступ Read, Read and Execute и List Folder Contents к этим файлам требуется только контексту защиты, в котором запущено приложение (рис. 4).
Применяя в приложении аутентификацию Windows, помните, что модуль FileAuthorizationModule дополнительно проверяет ресурс, запрашиваемый для доступа Read. Для этого он использует индентификатор из RequestLogonUserIdentity. Это может быть либо атентифицированный пользователь, либо анонимная учетная запись Интернета. Чтобы использовать эту конфигурацию, акажите для таких учетных записей доступ Read. Кроме того, помните, что статичные файлы обслуживаются IIS с применением тех же правил безопастности - аутентифицированного пользользователя или анонимной учетной записи.
Если вы меняете идентификатор приложения с помощью элемента <identity> файла web.config, присвойте этому идентификатору соответствующий тип доступа.

Рис. 4 Списки ACL для приложений​

Временная папка сборок
Особого внимания заслуживает папка, в которую копируется сборки для компилированных страниц, элементов управления и компонентов. По умолчанию она размещена по адресу Windows\Microsoft.NET\Framework\version\Temporary ASP.NET\Assemblies.
Идентификатор рабочего процесса и учетная запись олицетворения приложения требует доступа Modify к этому каталогу и его папкам. Помните, что по существу данный каталог содержит весь код вашего приложения (правда, в двоичном виде), поэтому возможность считывания и записи в папку должно иметь только соответствующее приложение. По умолчанию эта папка защищена списком ACL, подтверждающим доступ Modify для группы IIS_WPG, которая содержит все учетные записи рабочего процесса. Чтобы достичь более четкого разделения, следует изменить место временных сборок для сайта или приложения с помощью атрибута tempDirectory элемента <compilation> в файле web.config. Это позволит защищать папки по отдельности с помощью списков ACL, в которых использован идентификатор соответствующего приложения.
ВНИМАНИЕ! Описанный подход особенно важен тогда, когда множество сторон
совместно используют сервер. Вряд ли вы захотите, чтобы другие приложения
на сервере имели доступ к сборкам компилированных страниц.​

Папка Temp
В некоторых ситуациях CLR компилирует временный код "на лету". В качестве распространненых примеров можно привести XML Serializer и скомпилированные регулярныевыражения. Эти временные сборки вкладываются в папку системы Windows, которая называется temp и хранится по адресу Windows\Temp. Идентификаторам рабочего процесса или цчетной записи олицетворения также требуется доступ Modify. Если вы используете собственные учетные записи, то лучше всего предоставить доступ к папке для группы IIS_WPG. Папка Temp является машинной и не может быть задана на основе приложения.

Включение SSL
Если в приложении вы имеете дело с уязвимыми данным, всегда включайте и используйте SSL. Это дает вам два преимущества. Во-первых, SSL позволяет выполнять аутентификацию сервера и гарантирует пользователям, что они подключились к правильному серверу, прежде чем они введут такие уязвимые данные, как пароли. Во-вторых, после аутентификации сервера все передаваемые данные шифруются с обеспечением защиты целовтности. Чтобы включить SSL, нужен сертификат сервера. Кго можно получить несколькими способами:
  • приобрести в центре сертификации (Certificate Authority, CA), например VeriSign;
  • запросить из внутреннего CA;
  • создать собственный сертификат для тестирования

Методы аутентификации
Всегда точно определяйте настройки аутентификации. В папке диагностики IIS есть средство диагностики процесса проверки подлинности AuthDiag, которое позволяет определить методы аутентификации, списки ACL и привилегии процессов. В частности, оно указывает различные способы получения доступа к вашему сайту, и вы можете использовать его для определения всех нежелательных метоов аутентификации, разрешенных вашим приложением (http://www.microsoft.com/downloads/details.aspx?FamilyID=e90fe777-4a21-4066-bd22-b931f7572e9a&DisplayLang=en)
От себя: если вознинут вопросы как получить SSL Сертификак под IIS 7 то обращайтесь объясню, по возможности. Также рекомендую использовать данные утилиты:
  • Web Platform Installer (http://www.iis.net/downloads/default.aspx?tabid=34&g=6&i=1735) - удобная утилита по установки и настройки IIS, как для работы с ASP.NET, так и php
  • Administration Pack for IIS 7.0 (http://www.iis.net/downloads/default.aspx?tabid=34&g=6&i=1682) - необходимая утилита для усиления безопастности IIS
 

Underworld

Student-Maniac
#13
На этом серии статей Доминика Баера заканчиваются, последнюю статья я решил не выкладывать т.к. там уже надо немного разбираться в самой технологии ASP.NET. Теперь я буду отвечать на все вопросы которые у вас возникнут по ходу чтения или после чтения этих статей. Может быть потом когда разберусь с Web-ом напишу статью по настройке и защите промышленного сервера La2 на основе ОС Windows 2008 Standart Edition. И на последок предлогаю вам пожевать данный код:
Код:
<%@ Page Language="C#" %>

<%@ Import Namespace="System.Web.Configuration" %>
<%@ Import Namespace="System.IO" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<script runat="server">
protected string tempDirectory
{
// Извлекаем местоположение папок Temp. Если они не отконфигурированы
// особым способом, используем местоположение по умолчанию
get
{
CompilationSection comp = (CompilationSection)WebConfigurationManager.GetWebApplicationSection("system.web/compilation");
if (!String.IsNullOrEmpty(comp.TempDirectory))
{
return comp.TempDirectory;
}
else
{
return Path.Combine(HttpRuntime.AspInstallDirectory, "Temporary ASP.NET Files");
}
}
}

//Отслеживаем подкаталоги
protected void _treeView_OnPopulate(object sender, TreeNodeEventArgs e)
{
string path = e.Node.Value;
foreach (string directory in Directory.GetDirectories(path))
{
string name = Path.GetFileName(directory);
TreeNode n = new TreeNode(name, e.Node.Value + "\\" + name);
n.PopulateOnDemand = true;
e.Node.ChildNodes.Add(n);
}
}

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
TreeNode node = new TreeNode("temp dir", tempDirectory);
node.PopulateOnDemand = true;
treeView.Nodes.Add(node);
}
}

protected void _treeView_SelectedNodeChanged(object sender, EventArgs e)
{
_lstFiles.Items.Clear();
foreach (string f in Directory.GetFiles(treeView.SelectedNode.Value))
{
_lstFiles.Items.Add(f);
}
}

//Загружаем выбранный файл
protected void _btnDownload_Click(object sender, EventArgs e)
{
Response.AddHeader("Content-type", "binary/octet-stream");
Response.AddHeader("Content-Disposition", String.Format("attachment; filename={0}", Path.GetFileName(_lstFiles.SelectedValue)));
Response.WriteFile(_lstFiles.SelectedValue);
Response.End();
}
</script>

<html xmlns="http://schemas.microsoft.com/intellisense/html-401">
<head runat="server">
<title>Download Assemblies of othe Applications</title>
</head>
<body>
<form id="form1" runat="server">
<div>
ASP.NET Temp Directory:
<asp:TreeView ExpandDepth="0" ID="treeView" runat="server" OnTreeNodePopulate="_treeView_OnPopulate"
OnSelectedNodeChanged="_treeView_SelectedNodeChanged">
</asp:TreeView>
<br />
Files:
<br />
<asp:ListBox ID="_lstFiles" runat="server" Height="150px" />
<br />
<asp:Button ID="_btnDownload" runat="server" Text="Download" OnClick="_btnDownload_Click" />
</div>
</form>
</body>
</html>
 

Вверх