Какой риск несет отражение? (Среднее доверие)

Отсутствие отражения в средах хостинга Medium Trust, похоже, вызывает множество проблем для многих популярных веб-приложений.

  • Почему ReflectionPermission по умолчанию отключен со средним доверием?
  • Какой риск представляет отражение в среде общего хостинга?

Для случайной справки см. MSDN: Как использовать среднее доверие в ASP.NET 2.0


person Gabe Sumner    schedule 21.07.2009    source источник


Ответы (3)


Отражение позволяет вредоносному коду проверять все виды секретов: не столько интеллектуальную собственность (хотя, конечно, и это тоже), но данные, которые должны быть конфиденциальными и безопасными, такие как строки подключения, пароли, данные банковских счетов и т. Д.

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

Отредактировано, чтобы выделить часть обсуждения из комментариев:

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

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

person Jeff Sternal    schedule 21.07.2009
comment
Я не совсем понимаю, как это работает. Например, в среде общего хостинга как мне получить доступ к сборкам другого клиента? Как мне использовать отражение для проверки содержимого частных свойств и методов? - person Gabe Sumner; 21.07.2009
comment
Если вы (например) запускаете проект веб-сайта, а не проект веб-приложения, и вы предоставляете пользователю способ загрузки файлов на ваш сайт, они могут загрузить страницу ASPX, которая компилируется при ее вызове - если это используется отражение, чтобы прочитать состояние вашего приложения, тогда возможно, что строки подключения и т. д. могут быть доступны. Это небольшая возможность, но тем не менее, поэтому в вашей ссылке может быть. Не забывайте, что некоторые хосты не всегда используют обычную среду среднего доверия, но настраивают, какие функции доступны, а какие нет. - person Zhaph - Ben Duguid; 22.07.2009
comment
Бен меня опередил. Я просто добавлю еще одну вещь: в среде общего хостинга вы наследуете (некоторые) уязвимости безопасности других приложений, работающих на вашем сервере, поэтому вашим коллегам-клиентам даже не нужно быть злонамеренными, чтобы представлять опасность для ты, просто халатный. - person Jeff Sternal; 22.07.2009
comment
Я знаю, что многие веб-хосты не используют обычные среды доверия со средним уровнем доверия. Некоторые хосты специально включают отражение из-за проблем, которые возникают при отключении. Я пытаюсь понять, является ли это безответственным с их стороны или разумным допущением. - person Gabe Sumner; 22.07.2009
comment
Полное доверие - это прямо сейчас, поскольку оно включает в себя неограниченное разрешение FileIOPermission (которое, в свою очередь, допускает все виды вреда с отражением), но может оказаться, что включение Reflection (в противном случае при работе в MediumTrust) было бы целесообразным. Это зависит от того, насколько строгими являются политики безопасности хостинговой компании для их серверов общего хостинга. Если разные клиенты на сервере действительно защищены друг от друга, это может быть разумным. Тем не мение ... - person Jeff Sternal; 22.07.2009
comment
... всегда существует опасность, что другое приложение на вашем общем сервере будет иметь уязвимость, которая позволит злоумышленнику получить доступ к файловой системе и, следовательно, выдать себя за некую сборку, которую вы вызываете. Затем, когда вы вызываете это собрание, оно может нанести вред отражению. - person Jeff Sternal; 22.07.2009
comment
@Zhaph - Ben Duguid В этом сценарии загрузка файла .aspx является уязвимостью, а не отражением. Если у вас есть такой уровень доступа, вы можете загрузить весь исходный код, и отражение в этом случае бессмысленно как атака. Я еще не видел атаки, с которой я согласен в отношении отражения. - person rook; 09.06.2010
comment
@The Rook - конфиденциальные данные, которые обрабатывает ваше приложение, недоступны из его исходного кода. - person Jeff Sternal; 09.06.2010

Я никогда не находил ничего «плохого», что пользователь мог бы делать с помощью отражения. Люди пугаются, потому что вы можете вызывать методы, отмеченные как частные или защищенные, но, судя по тому, что я видел, ни один из них не представляет реального риска.

Скорее всего, это, по крайней мере частично, метод продаж, чтобы заставить вас раскошелиться на (полу) выделенный хостинг :)

person Thorarin    schedule 21.07.2009

Я нашел следующую статью MSDN по этому поводу:

Вопросы безопасности для отражения

Эта статья повторяет ответ Джеффа:

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

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

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

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

Включение отражения не должно представлять опасности для большинства веб-приложений с общим хостингом:

<IPermission class="ReflectionPermission" version="1" Flags="RestrictedMemberAccess"/>

Пожалуйста, поправьте меня, если я ошибаюсь.

person Gabe Sumner    schedule 21.07.2009
comment
Если доступ к веб-приложению был скомпрометирован, то отражение можно было использовать для исследования строк подключения к базе данных и другой конфиденциальной информации. Это компромисс. Насколько важно, чтобы приложение было защищено от самого себя? - person Gabe Sumner; 22.07.2009
comment
честно говоря, это оставило мне больше вопросов. Хотя +1 вы подтвердили, что есть проблемы с безопасностью с хорошей ссылкой. Я с уважением не согласен с вами по поводу сценария атаки, хотя у меня нет лучшего сценария, поэтому я не могу говорить чепухи. - person rook; 09.06.2010