ASP.NET — уровень доверия = полный?

Недавно я присоединился к фирме, и при анализе их среды я заметил, что для SharePoint web.config уровень доверия установлен на «Полный». Я знаю, что это абсолютно ужасная практика, и надеялся, что сообщество stackoverflow поможет мне определить недостатки этого решения.

О, похоже, это решение было принято, чтобы позволить разработчикам развертывать dll в папке Bin без создания политик CAS. Вздох.

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


person Todd Friedlich    schedule 20.01.2009    source источник


Ответы (5)


Тодд,

Книга "Programming Microsoft ASP.Net 3.5", автор Дино Эспизито, содержит веские аргументы в пользу запрета полного доверия в приложениях ASP.Net.

Среди других причин Дино заявляет, что веб-приложения, открытые для доступа в Интернет, являются «одной из самых неблагоприятных сред для компьютерной безопасности, которую вы только можете себе представить». А также:

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

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

person Tom Resing    schedule 11.06.2009
comment
Это не просто сообщество SO. отсутствие «беспокойства» по поводу проблемы FullTrust широко распространено (и очень удручает) - person Dinis Cruz; 31.01.2012

Если они игнорируют политику CAS, может быть трудно убедить их отказаться от нее, поскольку это немного усложняет их работу (или, по крайней мере, делает их менее снисходительными). Менять методы обеспечения безопасности всегда сложно — например, когда мне пришлось убеждать своего босса, что использование учетных записей SA в строке подключения SQL наших веб-приложений — плохая идея, — но держитесь.

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

РЕДАКТИРОВАТЬ: я немного переусердствовал со своим языком здесь. Полное доверие позволит приложению контролировать все, что оно хочет, но только если у процесса пула приложений есть достаточные права для этого. Поэтому, если вы работаете как пользователь с ограниченными правами без каких-либо прав на сервере, кроме тех, которые нужны приложению, то я полагаю, что для «Полного доверия» практически нет риска. Реальность такова, что владелец пула приложений, скорее всего, имеет ряд прав, которые вы не хотели бы, чтобы ваше приложение имело (а в некоторых случаях, многие, многие другие), поэтому гораздо безопаснее ограничить безопасность приложения и предоставить дополнительные права индивидуально. к приложению. Спасибо за поправку, Барри.

person SqlRyan    schedule 20.01.2009
comment
эскалация до контроля над любым ресурсом — это слишком сильный язык. Безопасность кода полного доверия не зависит от безопасности Windows и подчиняется ей. Права рабочего процесса ASP.NET ограничены правами пользователя, которому принадлежит этот процесс. Полное доверие здесь не может и не дает дополнительных прав. - person Barry Kelly; 20.01.2009

Недостатки? Много. Но самое ужасное прямо из утилиты CAS:

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

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

Большинство веб-программистов сказали бы: «Это не проблема, это просто мой код», и это нормально… пока в их коде не обнаруживается брешь в системе безопасности, позволяющая злоумышленнику использовать его для сомнительных целей. Тогда ранее предоставленное полное доверие становится весьма неудачным.

person TheSmurf    schedule 20.01.2009
comment
Не путайте концепцию полного доверия кода .NET с авторизацией Windows. Установка полного доверия не предоставляет никаких новых прав учетной записи рабочего процесса ASP.NET. Windows по-прежнему будет, например. ограничить права доступа к файловой системе в соответствии с DACL и т. д. - person Barry Kelly; 20.01.2009
comment
Верно, но с полным доверием сборка с достаточно высокими учетными данными Windows (учитывая слабую политику CAS, это первое, на что я бы обратил внимание, если бы я просматривал это приложение ....) также может просто начать изменять DACL. - person TheSmurf; 20.01.2009
comment
Э... нет. Как вы думаете, например, гостевая учетная запись может просто изменить разрешения на файлы ОС и начать запись в случайном порядке? Вы когда-нибудь сталкивались с проблемами на практике с iusr-аккаунтами? - person Barry Kelly; 21.01.2009
comment
Не лично, но я не про гостевой аккаунт. Учитывая, насколько ленивы они кажутся в отношении безопасности, ПЕРВОЕ предположение, которое я бы сделал, заключается в том, что учетная запись ASP.NET также работает с повышенными привилегиями в ОС. Конечно, это обесценивает атаку эскалации, которая также вполне возможна. - person TheSmurf; 21.01.2009

Честно говоря, я обнаружил, что Sharepoint слишком ограничителен.

Взгляните на следующую страницу, чтобы узнать, что можно и что нельзя делать на основе уровней доверия http://msdn.microsoft.com/en-us/library/ms916855.aspx

Одна проблема, с которой я сразу столкнулся, заключалась в том, что я не мог использовать блок приложений кэширования. Мы использовали этот блок приложения вместо кэширования ASP.NET, потому что использовали шаблон MVP и могли открыть приложение winforms.

Другая проблема — отсутствие отражения, это привело к сбою страницы «О программе», поскольку номер версии вытаскивается из метаданных сборки.

Я думаю, что лучшее решение — не использовать Sharepoint в качестве хоста приложений. Я бы использовал Sharepoint в качестве хоста приложений только в том случае, если объем кода был настолько мал, что не влиял на уровень доверия, и это было бы меньше работы, чем настройка нового приложения. Если вы выполняете какой-то тип кодирования, который начинает упираться в стены уровня доверия, переместите свое приложение в подходящую среду ASP.NET. Но это только я, и я предвзят. Возможно, вам следует попытаться достичь среднего уровня доверия.

person Bob    schedule 20.01.2009
comment
Если вы снова работаете с SharePoint, уровень доверия по умолчанию для SharePoint можно изменить в файле web.config веб-приложений. По умолчанию это просто по умолчанию. - person Tom Resing; 11.06.2009
comment
Иногда при работе с крупными организациями с большими фермами Sharepoint у них будут свои собственные политики, которые предотвращают любые изменения значений по умолчанию. Типичная причина этого заключается в том, что они запускают так много экземпляров, что хотят, чтобы все было настроено одинаково и с минимально возможной настройкой. Поэтому изменить значение по умолчанию не всегда возможно. - person Bob; 11.06.2009

Я использую полное доверие на своих машинах для разработки, поэтому я могу развертывать в BIN при создании нового кода. Я доверяю своему собственному коду и запускаю его в GAC на производстве, потому что создание политик CAS — это проблема.

Сторонняя вещь заставила бы меня побеспокоиться.. однако:

Большинство сторонних решений, найденных в Интернете, также развертываются в GAC (при условии, что по тем же причинам). Это дает им все права независимо от уровня доверия. Похоже, это больше связано с тем, доверяете ли вы третьим сторонам или нет ... и действительно ли вы доверяете своим собственным разработчикам?

Что бы сделал хакер? Сценарий, когда хакер сбрасывает вредоносную dll в вашу папку BIN, я не считаю очень реалистичным. Независимо от того, может ли он это сделать, он также, вероятно, может изменить уровень доверия.

person ArjanP    schedule 03.09.2009