ли System.Security.Principal.WindowsIdentity
разумно защищены от взлома, например, что экземпляр я получаю от Thread.CurrentPrincipal
«s Identity
или WindowsIdentity.GetCurrent()
которого true
для IsAuthenticated
дает свою сборочную ложную идентификационную информацию? Ничто, конечно, не является полностью защищенным от несанкционированного доступа, но, учитывая приверженность Microsoft и зависимость от .Net, я ожидал бы, что критические API, подобные этому, будут Locked Down Hard и с трудом подделать. Является ли это обоснованным предположением с моей стороны?Является ли это использование System.Security.Principal.WindowsIdentity разумно безопасным?
Моей целью здесь является предоставление разумного опыта SSO в моей сборке. Если сама Windows подверглась риску, это не входит в мой контроль, но если (например) это простое дело для приложения, связанного с моей сборкой, чтобы подавать мне ложную информацию, это было бы для меня неспособным выполнить должную осмотрительность. Это большая область невежества для меня.
Чтобы быть ясным, я ищу твердую информацию, а не мнения о манжете. Таким образом, опубликованные эксплойты или продемонстрировали использование конструктора WindowsIdentity
таким образом, чтобы обмануть мой код и т. Д. Или на стороне «это допустимое предположение», надежные статьи, поддерживающие его, известные применения, полагающиеся на него, и т. Д. Я «Было много удачи в их поиске, но я включил то, что я нашел до сих пор ниже под разделителем.
Вот как я намерен использовать WindowsIdentity
:
using System.Security.Principal;
using System.Threading;
// ...
// I only want Windows-authenticated users
WindowsIdentity identity = Thread.CurrentPrincipal == null
? null
: Thread.CurrentPrincipal.Identity as WindowsIdentity;
SecurityIdentifier sid;
// I can't imagine how an authenticated account would be anonymous, but...
if (identity != null && identity.IsAuthenticated && !identity.IsAnonymous) {
// SSO success from thread identity
sid = identity.User;
// ...check that that SID is allowed to use our system...
} else {
identity = WindowsIdentity.GetCurrent();
if (identity != null && identity.IsAuthenticated && !identity.IsAnonymous) {
// SSO success from current Windows user
sid = identity.User;
// ...check that that SID is allowed to use our system...
} else {
// SSO fail
}
}
Это в сборке DLL —, к сожалению, мы застряли на .Net 3.5 — что обеспечивает публичный API к ресурсам, может быть ограничено права пользователя. Он может использоваться в настольных приложениях или в приложении ASP.Net IIS с проверкой подлинности Windows (ASP.Net устанавливает WindowsIdentity
экземпляр на Thread.CurrentPrincipal.Identity
при использовании Windows auth, мы не поддерживаем другие виды IIS-аутентификации в настоящее время).
Могу ли я обоснованно доверять SID из экземпляра WindowsIdentity
из тех источников, которые утверждают, что они прошли аутентификацию?
не приходило мне интересно, если это было в порядке (Doh!), пока в this question пользователь lc. поднял обеспокоенность тем, что сборка будет восприимчив к обманули злонамеренным приложением, которое связано с ним и " подделанной "этой информацией. У него не было никаких конкретных доказательств, указывающих на то, почему это может быть серьезной проблемой, хотя, следовательно, этот вопрос.
Что (мало) я нашел до сих пор:
This answer делает заявление
Вы можете доверять, что нынешний
WindowsIdentity
, кто это говорит, что это, поскольку так как вы можете доверять любой данной части данных в своем приложении.Книга Hacking the Code утверждает, что ASP.Net требует
WindowsIdentity
ассоциироваться с просьбой при выполнении проверки файла authorizaton, что если это правда кажется довольно прочной основой для Microsoft говоря, по крайней мере, считает его достаточно хорошо ,Я могу найти множество примеров счастливых людей, используя информацию в своем коде, но большинство из них не задают вопрос о том, являются ли они безопасными. Там в Подразумевается, но ...
В каком контексте вы спрашиваете об этом? Вы говорите о приложениях ASP.NET и Desktop. Это может быть очевидно, но [при запуске на «pwned» системе все ставки отключены - вредоносный пользователь может вводить и изменять в вашем процессе любым способом] (http://stackoverflow.com/questions/8357469/ как-могу-я-защита-мой-частный-funcs-противы-отражений-исполнитель). – CodeCaster
@CodeCaster: если сама Windows правильно взломана, это не в моих силах. Но если (например) приложение может просто создать экземпляр «WindowsIdentity», назначьте его текущему потоку, а затем вызовите мою сборку и обманите меня, полагая, что они такие, кем они не являются, это было бы для меня неудачным трудолюбие. В принципе, я пытаюсь достичь разумной передовой практики SSO. Я не сомневался, могу ли я доверять API выше, пока этот пользователь не пометил его по моему другому вопросу (он может быть просто параноиком), а затем я беспокоился о том, чего не знаю, что в этой области много. :-) –