Problema de seguridad

06/03/2007 - 14:38 por Hugo Gsell | Informe spam
Hola... haber si puedo explicar Y QUE SE ENTIENDA... jeje
con el tema de las capas e independencia... he creado, en una aplicáción,
una capa de acceso a datos... digamos para un ejemplo que esta capa tiene
las funciones implementadas para leer, modificar, eliminar y recuperar
información de una tabla implementada en una base de datos sqlserver
autenticada por usuario y contraseña... así que el usuario y contraseña LO
GUARDO en la dll que genero con esta capa... Luego, desde mi aplicación
(solución), incluyo la dll y la utilizo la cosa es que acabo de ver una
IMPORTANTE brecha de seguridad... así como esta planteada, cualquiera "con
un poco de idea" se instala un .net toma mi dll, la incluye en un
proyecto y dale que te dale usarla como se le cante.
Se entiende?, es posible "mARCARLA o sellarla de alguna manera para que solo
pueda ser usada por las aplicaciones que YO DESEO???

Hug oA. Gsell
Sgo del Estero
Argentina
 

Leer las respuestas

#1 Alberto Poblacion
06/03/2007 - 16:10 | Informe spam
"Hugo Gsell" wrote in message
news:%23Y%23aLV$
Hola... haber si puedo explicar Y QUE SE ENTIENDA... jeje
con el tema de las capas e independencia... he creado, en una aplicáción,
una capa de acceso a datos... digamos para un ejemplo que esta capa tiene
las funciones implementadas para leer, modificar, eliminar y recuperar
información de una tabla implementada en una base de datos sqlserver
autenticada por usuario y contraseña... así que el usuario y contraseña LO
GUARDO en la dll que genero con esta capa... Luego, desde mi aplicación
(solución), incluyo la dll y la utilizo la cosa es que acabo de ver
una IMPORTANTE brecha de seguridad... así como esta planteada, cualquiera
"con un poco de idea" se instala un .net toma mi dll, la incluye en un
proyecto y dale que te dale usarla como se le cante.
Se entiende?, es posible "mARCARLA o sellarla de alguna manera para que
solo pueda ser usada por las aplicaciones que YO DESEO???



Podrías firmar con un Strong Name todos los assemblies que llamen a tu
DLL y desde dentro de la DLL hacer un LinkDemand de
StrongNameIdentityPermission, con lo cual comprueba que el llamante esté
firmado con tu clave pública y no admite llamadas desde otros llamantes:

<StrongNameIdentityPermission(SecurityAction.LinkDemand, PublicKey:="...")>
_
Public Class MiClase
...

La clave indicada arriba con "..." la tienes que extraer previamente del
.snk que uses para poner los Strong Names asi:
sn -p misClaves.snk miClavePublica.snk
sn -tp mClavePublica.snk

Esto te protege hasta cierto punto, pero no es 100% infalible: Alguien
que realmente domine .Net y que sea capaz de lanazr un assembly con
FullTrust podría saltarse los permisos usando Reflexión.

Preguntas similares