Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Las credenciales de nombre de usuario y contraseña siguen siendo comunes para la autenticación, incluso a medida que los métodos más seguros, como certificados, biometría y claves de acceso se vuelven más generalizados. Las claves de cifrado y otros secretos también requieren protección. Los sistemas de software deben controlar estas credenciales de forma segura para resistir el robo de credenciales, los ataques de reproducción y el movimiento lateral por parte de los atacantes.
Warning
Nunca codifique contraseñas, claves de API, cadenas de conexión u otros secretos en el código fuente. Los atacantes extraen trivialmente secretos codificados de forma rígida mediante descompiladores, inspección de memoria o pérdidas de código fuente. Se trata de una de las vulnerabilidades relacionadas con las credenciales más comunes que se explotan en ataques reales.
Importante
Cuando haya terminado de usar contraseñas o secretos en la memoria, sobrescriba inmediatamente el búfer llamando a SecureZeroMemory. A diferencia de memset, el compilador no puede eliminar mediante optimización SecureZeroMemory, lo que garantiza que los secretos se borren realmente.
Administración moderna de credenciales
Para el nuevo desarrollo en Windows, use estos enfoques en orden de preferencia:
- Elimine las contraseñas siempre que sea posible. Use Windows Hello, claves de acceso (FIDO2/WebAuthn) o autenticación basada en certificados para evitar controlar las contraseñas por completo.
- Use el administrador de credenciales de Windows. Llame a CredWrite y CredRead para almacenar y recuperar credenciales en el almacén de credenciales del sistema operativo, que las cifra con la clave de sesión de inicio de sesión del usuario.
- Use DPAPI para el almacenamiento de secretos local. Llame a CryptProtectData para cifrar los secretos que se deben conservar localmente. DPAPI vincula el cifrado a la cuenta de usuario o al equipo, lo que proporciona defensa en profundidad.
- Para las credenciales de servicio, utiliza identidades administradas o almacenes de claves. Los servicios que se ejecutan en Azure deben usar identidades administradas. Los servicios locales deben recuperar secretos de un almacén seguro en tiempo de ejecución en lugar de almacenarlos en archivos de configuración.
Principios de control de contraseñas
Cuando las contraseñas deben manejarse en el código:
- Recopile contraseñas lo más tarde posible y descártelas lo antes posible. Minimice la ventana durante la que existe el secreto en la memoria.
- Nunca registre contraseñas o secretos. Asegúrate de que los registros de diagnóstico, los registros de eventos y los volcados de memoria no contengan información sobre credenciales.
- Nunca transmita contraseñas en texto no cifrado. Use siempre TLS/HTTPS o un canal cifrado equivalente.
- Solicita las credenciales de forma segura. Use CredUIPromptForWindowsCredentials para recopilar credenciales a través del cuadro de diálogo de credenciales de Windows estándar, que exige el aislamiento seguro del escritorio.
Para obtener más información sobre amenazas y mitigaciones: