Cómo evitar la enumeración de nombres de usuario | Secure Code Warrior
Un ataque de canal lateral es cuando un hacker puede obtener información de la implementación física de un sistema de software en lugar de una debilidad teórica en el algoritmo o un error en el código del software.
Un ejemplo que me gusta utilizar para dejar esto más claro es una forma de hacer la enumeración de nombres de usuario. Si quieres saber qué es la enumeración de nombres de usuario o por qué es mala, visita nuestra página web para ver un vídeo explicativo o juega a un reto para ver si puedes identificarlo en el código.
Ahora, para entender cómo se puede hacer la enumeración de nombres de usuario a través de un ataque de canal lateral, es necesario tener un poco de conocimiento de cómo se manejan las contraseñas (o al menos deberían manejarse) en las aplicaciones web modernas. Una buena aplicación web no conoce tu contraseña, no guarda o almacena tu contraseña en ningún sitio. Entonces, ¿cómo sabe que lo que has escrito es correcto y que es tu contraseña? Bueno, tu contraseña está cifrada.
Una función hash es una operación matemática que es fácil de realizar en un sentido (aunque algo costosa desde el punto de vista computacional) pero muy difícil de revertir y, en el caso de los buenos algoritmos hash, la salida es única dependiendo de la entrada. Cuando te registras en un sitio web, ese hash se almacena de forma segura, no tu contraseña en sí. Esto significa que cada vez que te registras, la aplicación web realiza el hash de tu entrada y compara el resultado con el hash almacenado. Si quieres saber más sobre el almacenamiento seguro de contraseñas, puedes hacerlo en nuestra plataforma.
El hash de la entrada lleva algún tiempo en un ordenador y los desarrolladores siempre intentan optimizar todo lo que escriben para que los usuarios tengan una experiencia fluida. Una cosa que acelera el programa es omitir el hash cuando no es necesario. Por ejemplo, cuando el nombre de usuario no existe (y por tanto no hay que comprobar la contraseña) pueden responder al usuario inmediatamente. De esta manera, se puede omitir el lento cálculo de la contraseña. Si el nombre de usuario es correcto, se hará un hash de la contraseña introducida y se comparará con el hash almacenado.
Llegados a este punto, ya habrás adivinado dónde pueden ir mal las cosas. Aunque en realidad el hashing tarda sólo unos milisegundos, un hacker puede utilizar este retraso añadido para averiguar si el nombre de usuario que ha introducido es correcto o no, ya que un nombre de usuario incorrecto tendrá una respuesta ligeramente más rápida porque no se ha realizado el hashing. Este tipo de ataque de canal lateral se llama ataque de tiempo y es un buen ejemplo de cómo diferentes requisitos no funcionales pueden contrarrestarse entre sí. A veces el código no puede ser rápido y seguro al mismo tiempo.
Así que aunque las contraseñas se manejen perfectamente, y el mensaje que se muestra sea genérico y no avise de si la contraseña o el nombre de usuario eran incorrectos, el sistema sigue siendo vulnerable. La solución es fácil, siempre hash la contraseña o retrasar el envío de la respuesta el tiempo que tardaría en hash.
La información obtenida puede ser utilizada por un atacante para obtener una lista de usuarios en el sistema. Esta información puede ser utilizada para atacar la aplicación web, por ejemplo, a través de un ataque de fuerza bruta o de nombre de usuario/contraseña por defecto.
La enumeración de nombres de usuario se produce cuando los hackers utilizan ataques de fuerza bruta para obtener información sobre el nombre de usuario y la contraseña. Aprenda a evitar la enumeración de nombres de usuario con Secure Code Warrior.
Investigador de seguridad de aplicaciones - Ingeniero de I+D - Candidato a doctor
Secure Code Warrior está a disposición de su organización para ayudarle a proteger el código a lo largo de todo el ciclo de vida de desarrollo de software y crear una cultura en la que la ciberseguridad sea una prioridad. Tanto si es director de AppSec, desarrollador, CISO o cualquier persona implicada en la seguridad, podemos ayudar a su organización a reducir los riesgos asociados a un código inseguro.
Reservar una demostraciónInvestigador de seguridad de aplicaciones - Ingeniero de I+D - Candidato a doctor
Un ataque de canal lateral es cuando un hacker puede obtener información de la implementación física de un sistema de software en lugar de una debilidad teórica en el algoritmo o un error en el código del software.
Un ejemplo que me gusta utilizar para dejar esto más claro es una forma de hacer la enumeración de nombres de usuario. Si quieres saber qué es la enumeración de nombres de usuario o por qué es mala, visita nuestra página web para ver un vídeo explicativo o juega a un reto para ver si puedes identificarlo en el código.
Ahora, para entender cómo se puede hacer la enumeración de nombres de usuario a través de un ataque de canal lateral, es necesario tener un poco de conocimiento de cómo se manejan las contraseñas (o al menos deberían manejarse) en las aplicaciones web modernas. Una buena aplicación web no conoce tu contraseña, no guarda o almacena tu contraseña en ningún sitio. Entonces, ¿cómo sabe que lo que has escrito es correcto y que es tu contraseña? Bueno, tu contraseña está cifrada.
Una función hash es una operación matemática que es fácil de realizar en un sentido (aunque algo costosa desde el punto de vista computacional) pero muy difícil de revertir y, en el caso de los buenos algoritmos hash, la salida es única dependiendo de la entrada. Cuando te registras en un sitio web, ese hash se almacena de forma segura, no tu contraseña en sí. Esto significa que cada vez que te registras, la aplicación web realiza el hash de tu entrada y compara el resultado con el hash almacenado. Si quieres saber más sobre el almacenamiento seguro de contraseñas, puedes hacerlo en nuestra plataforma.
El hash de la entrada lleva algún tiempo en un ordenador y los desarrolladores siempre intentan optimizar todo lo que escriben para que los usuarios tengan una experiencia fluida. Una cosa que acelera el programa es omitir el hash cuando no es necesario. Por ejemplo, cuando el nombre de usuario no existe (y por tanto no hay que comprobar la contraseña) pueden responder al usuario inmediatamente. De esta manera, se puede omitir el lento cálculo de la contraseña. Si el nombre de usuario es correcto, se hará un hash de la contraseña introducida y se comparará con el hash almacenado.
Llegados a este punto, ya habrás adivinado dónde pueden ir mal las cosas. Aunque en realidad el hashing tarda sólo unos milisegundos, un hacker puede utilizar este retraso añadido para averiguar si el nombre de usuario que ha introducido es correcto o no, ya que un nombre de usuario incorrecto tendrá una respuesta ligeramente más rápida porque no se ha realizado el hashing. Este tipo de ataque de canal lateral se llama ataque de tiempo y es un buen ejemplo de cómo diferentes requisitos no funcionales pueden contrarrestarse entre sí. A veces el código no puede ser rápido y seguro al mismo tiempo.
Así que aunque las contraseñas se manejen perfectamente, y el mensaje que se muestra sea genérico y no avise de si la contraseña o el nombre de usuario eran incorrectos, el sistema sigue siendo vulnerable. La solución es fácil, siempre hash la contraseña o retrasar el envío de la respuesta el tiempo que tardaría en hash.
La información obtenida puede ser utilizada por un atacante para obtener una lista de usuarios en el sistema. Esta información puede ser utilizada para atacar la aplicación web, por ejemplo, a través de un ataque de fuerza bruta o de nombre de usuario/contraseña por defecto.
Un ataque de canal lateral es cuando un hacker puede obtener información de la implementación física de un sistema de software en lugar de una debilidad teórica en el algoritmo o un error en el código del software.
Un ejemplo que me gusta utilizar para dejar esto más claro es una forma de hacer la enumeración de nombres de usuario. Si quieres saber qué es la enumeración de nombres de usuario o por qué es mala, visita nuestra página web para ver un vídeo explicativo o juega a un reto para ver si puedes identificarlo en el código.
Ahora, para entender cómo se puede hacer la enumeración de nombres de usuario a través de un ataque de canal lateral, es necesario tener un poco de conocimiento de cómo se manejan las contraseñas (o al menos deberían manejarse) en las aplicaciones web modernas. Una buena aplicación web no conoce tu contraseña, no guarda o almacena tu contraseña en ningún sitio. Entonces, ¿cómo sabe que lo que has escrito es correcto y que es tu contraseña? Bueno, tu contraseña está cifrada.
Una función hash es una operación matemática que es fácil de realizar en un sentido (aunque algo costosa desde el punto de vista computacional) pero muy difícil de revertir y, en el caso de los buenos algoritmos hash, la salida es única dependiendo de la entrada. Cuando te registras en un sitio web, ese hash se almacena de forma segura, no tu contraseña en sí. Esto significa que cada vez que te registras, la aplicación web realiza el hash de tu entrada y compara el resultado con el hash almacenado. Si quieres saber más sobre el almacenamiento seguro de contraseñas, puedes hacerlo en nuestra plataforma.
El hash de la entrada lleva algún tiempo en un ordenador y los desarrolladores siempre intentan optimizar todo lo que escriben para que los usuarios tengan una experiencia fluida. Una cosa que acelera el programa es omitir el hash cuando no es necesario. Por ejemplo, cuando el nombre de usuario no existe (y por tanto no hay que comprobar la contraseña) pueden responder al usuario inmediatamente. De esta manera, se puede omitir el lento cálculo de la contraseña. Si el nombre de usuario es correcto, se hará un hash de la contraseña introducida y se comparará con el hash almacenado.
Llegados a este punto, ya habrás adivinado dónde pueden ir mal las cosas. Aunque en realidad el hashing tarda sólo unos milisegundos, un hacker puede utilizar este retraso añadido para averiguar si el nombre de usuario que ha introducido es correcto o no, ya que un nombre de usuario incorrecto tendrá una respuesta ligeramente más rápida porque no se ha realizado el hashing. Este tipo de ataque de canal lateral se llama ataque de tiempo y es un buen ejemplo de cómo diferentes requisitos no funcionales pueden contrarrestarse entre sí. A veces el código no puede ser rápido y seguro al mismo tiempo.
Así que aunque las contraseñas se manejen perfectamente, y el mensaje que se muestra sea genérico y no avise de si la contraseña o el nombre de usuario eran incorrectos, el sistema sigue siendo vulnerable. La solución es fácil, siempre hash la contraseña o retrasar el envío de la respuesta el tiempo que tardaría en hash.
La información obtenida puede ser utilizada por un atacante para obtener una lista de usuarios en el sistema. Esta información puede ser utilizada para atacar la aplicación web, por ejemplo, a través de un ataque de fuerza bruta o de nombre de usuario/contraseña por defecto.
Haga clic en el siguiente enlace y descargue el PDF de este recurso.
Secure Code Warrior está a disposición de su organización para ayudarle a proteger el código a lo largo de todo el ciclo de vida de desarrollo de software y crear una cultura en la que la ciberseguridad sea una prioridad. Tanto si es director de AppSec, desarrollador, CISO o cualquier persona implicada en la seguridad, podemos ayudar a su organización a reducir los riesgos asociados a un código inseguro.
Ver el informeReservar una demostraciónInvestigador de seguridad de aplicaciones - Ingeniero de I+D - Candidato a doctor
Un ataque de canal lateral es cuando un hacker puede obtener información de la implementación física de un sistema de software en lugar de una debilidad teórica en el algoritmo o un error en el código del software.
Un ejemplo que me gusta utilizar para dejar esto más claro es una forma de hacer la enumeración de nombres de usuario. Si quieres saber qué es la enumeración de nombres de usuario o por qué es mala, visita nuestra página web para ver un vídeo explicativo o juega a un reto para ver si puedes identificarlo en el código.
Ahora, para entender cómo se puede hacer la enumeración de nombres de usuario a través de un ataque de canal lateral, es necesario tener un poco de conocimiento de cómo se manejan las contraseñas (o al menos deberían manejarse) en las aplicaciones web modernas. Una buena aplicación web no conoce tu contraseña, no guarda o almacena tu contraseña en ningún sitio. Entonces, ¿cómo sabe que lo que has escrito es correcto y que es tu contraseña? Bueno, tu contraseña está cifrada.
Una función hash es una operación matemática que es fácil de realizar en un sentido (aunque algo costosa desde el punto de vista computacional) pero muy difícil de revertir y, en el caso de los buenos algoritmos hash, la salida es única dependiendo de la entrada. Cuando te registras en un sitio web, ese hash se almacena de forma segura, no tu contraseña en sí. Esto significa que cada vez que te registras, la aplicación web realiza el hash de tu entrada y compara el resultado con el hash almacenado. Si quieres saber más sobre el almacenamiento seguro de contraseñas, puedes hacerlo en nuestra plataforma.
El hash de la entrada lleva algún tiempo en un ordenador y los desarrolladores siempre intentan optimizar todo lo que escriben para que los usuarios tengan una experiencia fluida. Una cosa que acelera el programa es omitir el hash cuando no es necesario. Por ejemplo, cuando el nombre de usuario no existe (y por tanto no hay que comprobar la contraseña) pueden responder al usuario inmediatamente. De esta manera, se puede omitir el lento cálculo de la contraseña. Si el nombre de usuario es correcto, se hará un hash de la contraseña introducida y se comparará con el hash almacenado.
Llegados a este punto, ya habrás adivinado dónde pueden ir mal las cosas. Aunque en realidad el hashing tarda sólo unos milisegundos, un hacker puede utilizar este retraso añadido para averiguar si el nombre de usuario que ha introducido es correcto o no, ya que un nombre de usuario incorrecto tendrá una respuesta ligeramente más rápida porque no se ha realizado el hashing. Este tipo de ataque de canal lateral se llama ataque de tiempo y es un buen ejemplo de cómo diferentes requisitos no funcionales pueden contrarrestarse entre sí. A veces el código no puede ser rápido y seguro al mismo tiempo.
Así que aunque las contraseñas se manejen perfectamente, y el mensaje que se muestra sea genérico y no avise de si la contraseña o el nombre de usuario eran incorrectos, el sistema sigue siendo vulnerable. La solución es fácil, siempre hash la contraseña o retrasar el envío de la respuesta el tiempo que tardaría en hash.
La información obtenida puede ser utilizada por un atacante para obtener una lista de usuarios en el sistema. Esta información puede ser utilizada para atacar la aplicación web, por ejemplo, a través de un ataque de fuerza bruta o de nombre de usuario/contraseña por defecto.
Índice
Investigador de seguridad de aplicaciones - Ingeniero de I+D - Candidato a doctor
Secure Code Warrior está a disposición de su organización para ayudarle a proteger el código a lo largo de todo el ciclo de vida de desarrollo de software y crear una cultura en la que la ciberseguridad sea una prioridad. Tanto si es director de AppSec, desarrollador, CISO o cualquier persona implicada en la seguridad, podemos ayudar a su organización a reducir los riesgos asociados a un código inseguro.
Reservar una demostraciónDescargarRecursos para empezar
Evaluación comparativa de las competencias en materia de seguridad: optimización del diseño seguro en la empresa
El movimiento Secure-by-Design es el futuro del desarrollo de software seguro. Conozca los elementos clave que las empresas deben tener en cuenta cuando piensan en una iniciativa Secure-by-Design.
DigitalOcean reduce su deuda de seguridad con Secure Code Warrior
El uso por parte de DigitalOcean de la formación Secure Code Warrior ha reducido significativamente la deuda de seguridad, permitiendo a los equipos centrarse más en la innovación y la productividad. La mejora de la seguridad ha reforzado la calidad de sus productos y su ventaja competitiva. De cara al futuro, SCW Trust Score les ayudará a seguir mejorando las prácticas de seguridad y a continuar impulsando la innovación.
Recursos para empezar
La puntuación de confianza revela el valor de las iniciativas de mejora de la seguridad mediante el diseño
Nuestra investigación ha demostrado que la formación en código seguro funciona. Trust Score, que utiliza un algoritmo basado en más de 20 millones de puntos de datos de aprendizaje procedentes del trabajo de más de 250 000 alumnos en más de 600 organizaciones, revela su eficacia a la hora de reducir las vulnerabilidades y cómo hacer que la iniciativa sea aún más eficaz.
Seguridad reactiva frente a seguridad preventiva: Prevenir es mejor que curar
La idea de introducir la seguridad preventiva en el código y los sistemas heredados al mismo tiempo que en las aplicaciones más recientes puede parecer desalentadora, pero un planteamiento basado en el diseño seguro, aplicado mediante la mejora de las competencias de los desarrolladores, puede aplicar las mejores prácticas de seguridad a esos sistemas. Es la mejor oportunidad que tienen muchas organizaciones de mejorar su seguridad.
Ventajas de la evaluación comparativa de las competencias de seguridad de los desarrolladores
La creciente atención que se presta al código seguro y a los principios del diseño seguro exige que los desarrolladores reciban formación en ciberseguridad desde el principio del proceso de desarrollo de software, con herramientas como Secure Code Warrior's Trust Score, que ayudan a medir y mejorar sus progresos.
Impulsando iniciativas de seguridad por diseño para empresas con éxito significativo
Nuestro último documento de investigación, Benchmarking Security Skills: Streamlining Secure-by-Design in the Enterprise, es el resultado de un análisis profundo de iniciativas reales de Secure-by-Design a nivel empresarial y de la derivación de enfoques de mejores prácticas basados en hallazgos basados en datos.