2010-03-20 7 views
5

Tuve un caso bastante interesante de piratería en mi sitio web ASP.Net MVC. Para este sitio web, implementé un sistema de autenticación bastante sencillo para mi área de administración: una cookie cifrada que tenía una firma de identificación para el miembro. Cada vez que el administrador visita el sitio web, la cookie se descifra y se verifica la firma. Si coinciden, no tendría que iniciar sesión.¡Mi sitio web fue pirateado usando Statcounter! ¿Statcounter mantiene un registro de cookies?

Hace un par de días, un visitante de mi sitio me dijo que había podido iniciar sesión en mi sitio web simplemente haciendo clic en un enlace de referencia en su consola Statcounter que apuntaba a mi área de administración (había visitado su sitio desde un enlace dentro de mi vista de administrador).

¡Acaba de hacer clic en un enlace en statcounter y ha iniciado sesión como administrador!

¡La única forma en que esto podría haber sucedido es si Statcounter de alguna manera grabó mis cookies y las usó cuando hizo clic en el enlace que apuntaba a mi administrador!

¿Es lógico o comprensible?

No entiendo lo que está pasando. ¿Tiene alguna sugerencia sobre cómo puedo proteger mi sitio web contra este tipo de cosas?

Actualización: Creé un sistema de listas blancas de direcciones IP para proteger a mi administrador del acceso no autorizado. Básicamente, el servidor comparará ahora la dirección IP del visitante con una lista blanca y solo permitirá el acceso si la dirección IP está en esa lista. También admite comodines, por lo que estará bien incluso para direcciones IP dinámicas.

Aunque no es infalible, pero requiere muchas muescas.

Respuesta

2

No veo cómo podría haber sucedido esto a través de StatCounter, incluso si se expuso el enlace a su área de administración como se describe, su máquina local no tendría la cookie de autenticación. Pídale que le envíe el enlace que siguió, y pruébelo usted mismo en un navegador que no usa normalmente, o en una PC diferente. Supongo que hay algo defectuoso en su sistema de autenticación que significa que un enlace al área de administración funciona automáticamente si alguien (es decir, usted) ya ha iniciado sesión en otro lugar. Alternativamente, el enlace incluye sus credenciales completas y eso no es culpa de StatCounter.

+0

No estoy usando una variable estática o global para mantener los datos de acceso. Se realiza a través del diccionario ViewData, por lo que no creo que el problema que usted ha descrito pueda haber ocurrido. ¿Tienes alguna otra idea? –

0

Probablemente el sitio es vulnerable a XSS pasivo. Puedo ayudar, pero debes publicar la dirección del sitio.

Para el futuro, si usted quiere proteger su (o usuario) galleta, la puso de esta manera:

$cookie = encoded($user-ip-address); 


A continuación, para verificar la firma:

if (decoded($cookie) == $user-ip-address){ 
    //succesefull login 
} 
+0

Pero la dirección IP del usuario no es permanente para la mayoría de los usuarios y esta es una cookie a largo plazo (recuérdame). ¿Cómo puedo usar esto? –

+0

Si el inicio de sesión no es exitoso, puede mostrar un formulario de inicio de sesión o enviar un correo electrónico con un enlace especial al usuario e informarlo al respecto. Además, cuando se configura cookie, no es necesario usar solo IP, puede usar subred. Para mayor seguridad, puede combinar la subred + sistema operativo o la versión del navegador. – B7ackAnge7z

3

Pongo No sé cómo hizo la autenticación en su sitio, pero así es como lo hice, y no creo que nadie pueda romper este:

var authTicket = new FormsAuthenticationTicket(
      1, 
      userName, //user id 
      DateTime.Now, 
      DateTime.Now.AddMinutes(20), // expiry 
      createPersistentCookie, 
      null, 
      "/"); 

     var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(authTicket)); 

     HttpContext.Current.Response.Cookies.Add(cookie); 

este utiliza FormsAuthentication y encripta la cookie utilizando la clave de su machine.config

+0

No, no utilicé la autenticación de formularios. Puse el mío y estaba bastante convencido de que no debería romperse. Pero aparentemente lo ha hecho ... Y no debido a la piratería deliberada, solo se hizo clic en un enlace. –

+2

¿Por qué no te gusta FormsAuthentication o WindowsAuthentication, no es lo suficientemente seguro?, No escuché a nadie que los rompiera – Omu

0

Suena como una galleta robada a través de XSS. Bastante viejo article pero esto te interesa.

0

No, ¡StatCounter no mantiene un registro de cookies!

Las cookies solo pueden enviarse desde/hacia su dominio de origen, por lo que las cookies de su sitio nunca se pudieron haber enviado a StatCounter de todos modos.

Supongo que el miembro original que accedió a su sitio de administración no tenía habilitadas las cookies, y su sitio web .net volvió a la URL que codifica la identificación de la sesión.

Esta sesión-codificada en una url fue registrada por StatCounter como un enlace de referencia, que filtró la autenticación.

Más información: Session Hijacking Protection in ASP.NET

Cuestiones relacionadas