visual studio community wpf security snoop

studio - ¿Cómo hacer una prueba a prueba de su aplicación wpf?



visual studio community (3)

Al implementar seguridad correctamente Si su "seguridad" puede frustrarse con una herramienta como Snoop, entonces lo está haciendo mal.

Supongamos que hay un comando que solo ciertos usuarios pueden ejecutar. Parece que el único lugar donde aplica esto es en el nivel de UI (al deshabilitar el botón correspondiente, por ejemplo). Siendo ese el caso, tienes razón, podría usar Snoop fácilmente para habilitar el botón y ejecutar el comando. Pero debe hacer cumplir las restricciones de seguridad en su servidor, o tal vez en su lógica de ejecución de comandos si no tiene servidor. Básicamente, la seguridad debe implementarse tan cerca de lo que intenta proteger como sea posible. La seguridad en el nivel de UI es meramente para la conveniencia del usuario.

Snoop le permite mirar dentro de la aplicación y cambiar las propiedades del elemento. Es una gran ventaja para los desarrolladores, pero puede ser un problema de seguridad en algunos casos, como cuando tenemos usuarios a quienes les gusta buscar en lugares donde no deberían estar buscando. ¿Hay alguna forma de evitar que aplicaciones como Snoop "fisgoneen" tu aplicación?

Y si no hay forma de bloquearlo, ¿qué recomienda hacer para minimizar los riesgos de seguridad?

Snoop es una utilidad que le permite explorar el árbol visual de una aplicación wpf y ver y cambiar propiedades. Es muy útil cuando intenta depurar algo y no tiene idea de lo que está pasando. Puedes encontrar más here .

Gracias.


En realidad, hay una manera de detectar si su aplicación está siendo "fisurada" por el programa snoop. La solución que daré no es una bala de cristal, y si alguien realmente quiere fisgonear su aplicación, tendrían que modificar el código fuente de snoop (es un proyecto de código abierto).

Lo que realmente hace snoop es inyectar un ensamblaje en su aplicación, y el ensamblado inyectado examina recursivamente el árbol visual de sus aplicaciones comenzando desde la raíz. En otras palabras, snoop se ejecuta realmente dentro de su aplicación. Una vez dicho esto, la solución es plantear un evento cuando el conjunto de snoop se inyecta en su aplicación.

En primer lugar, debe suscribirse al evento cargado de ensamblaje en algún lugar de su aplicación (preferiblemente la mendicidad):

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

Entonces, implementaría el controlador de la siguiente manera:

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

Probablemente necesites mejorar esta solución para una verdadera solución de bala de plata, pero al menos esta solución definitivamente evitará que la última versión actual de snoop se ejecute como está (sin el código modificado). La mejor solución sería verificar que no se estén inyectando ensambles externos en su aplicación.

Sin embargo, Kent todavía tiene razón en el hecho de que una utilidad como Snoop no debería causar ninguna vulnerabilidad de seguridad ya que la seguridad no debería implementarse en el nivel de UI. Pero al menos esto le muestra cómo evitar que las personas "husmeen" su aplicación.


Grandes respuestas para una muy buena pregunta,

Quiero agregar un ejemplo de la contraseña que nunca debe guardarse en su contexto de datos, ya que snoop también verifica el contexto de datos de la interfaz de usuario, por lo que si utiliza el control correcto PasswordBox encontrará que no puede enlazar la propiedad de la contraseña, que significa que incluso si indaga en la aplicación no puede obtener la contraseña, ya que no se guarda en ninguna propiedad

Pero encontramos muchas personas que intentan crear un entorno alternativo (ayudantes, comportamientos, control de usuarios ...) para enlazar la contraseña, pero se olvidan de que Snoop puede obtenerlo de esa manera

Por lo tanto, su servidor nunca debe confiar en su cliente, cada vez que debe verificar el privilegio correcto (ya que podemos olfatear la solicitud del cliente utilizando Fiddler para exp y luego reconstruir una solicitud de acceso para pasar la seguridad de la aplicación del cliente)