Как проверить ваше приложение wpf?

Snoop позволяет вам заглянуть внутрь приложения и изменить свойства элемента. Это большое преимущество для разработчиков, но в некоторых случаях может быть проблемой безопасности, например, когда у нас есть пользователи, которым нравится искать в местах, где они не должны искать. Есть ли способ сделать что-то, чтобы блокировать такие приложения, как Snoop, от "отслеживания" вашего приложения?

И если нет способа заблокировать это, что вы рекомендуете сделать, чтобы минимизировать риски безопасности?

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

Спасибо.

3 ответа

Решение

Правильно внедряя безопасность. Если ваша "безопасность" может быть нарушена с помощью такого инструмента, как Snoop, то вы делаете это неправильно.

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

На самом деле существует способ определить, отслеживает ли ваше приложение программа snoop. Решение, которое я дам, не является "серебряной пулей", и если кто-то действительно хочет отследить ваше приложение, ему придется изменить исходный код Snoop (это проект с открытым исходным кодом).

На самом деле Snoop внедряет сборку в ваше приложение, а внедренная сборка рекурсивно проверяет визуальное дерево ваших приложений, начиная с корня. Другими словами, snoop фактически работает внутри вашего приложения. При этом решение состоит в том, чтобы вызвать событие, когда сборка snoop внедряется в ваше приложение.

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

AppDomain.CurrentDomain.AssemblyLoad += new AssemblyLoadEventHandler(CurrentDomain_AssemblyLoad);

Затем вы бы реализовали обработчик примерно так:

        void CurrentDomain_AssemblyLoad(object sender, AssemblyLoadEventArgs args)
    {
        if (args.LoadedAssembly.FullName.StartsWith("ManagedInjector"))
            MessageBox.Show("hey you, stop snooping");//and shut down your application.
    }

Возможно, вам потребуется усовершенствовать это решение для реального решения "серебряной пули", но по крайней мере это решение определенно остановит запуск текущей последней версии snoop как есть (без изменения кода). Лучшим решением было бы убедиться, что в ваше приложение не вставляются никакие внешние сборки.

Однако Кент по-прежнему прав в том факте, что такая утилита, как Snoop, не должна вызывать каких-либо уязвимостей безопасности, поскольку безопасность не должна реализовываться на уровне пользовательского интерфейса. Но, по крайней мере, это показывает вам, как предотвратить отслеживание вашего приложения.

Отличные ответы на очень хороший вопрос,

Я хочу добавить пример пароля, который никогда не должен быть сохранен в вашем текстовом контенте, так как snoop проверяет также текстовый текст интерфейса пользователя, поэтому, если вы используете правильный элемент управления PasswordBox, вы обнаружите, что не можете связать свойство пароля, что означает, что даже если вы отслеживаете приложение, вы не можете получить пароль, так как он не сохраняется ни в каком свойстве

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

Таким образом, ваш сервер никогда не должен доверять вашему клиенту, каждый раз, когда он должен проверять правильные привилегии (поскольку мы можем прослушать запрос клиента, используя Fiddler для exp, затем перестроить запрос обычного пользователя, чтобы обойти защиту клиентского приложения)

Другие вопросы по тегам