Saltar al contenido principal

Asegurar Proyectos Basados en la Web

Cualquier aplicación que gestione criptomonedas es un objetivo frecuente de actores maliciosos y necesita seguir prácticas recomendadas de seguridad. La lista de verificación a continuación ofrece orientación sobre las vulnerabilidades más comunes. Sin embargo, incluso si sigues cada consejo, la seguridad no está garantizada. La seguridad en la web y los actores maliciosos están en constante evolución, así que es bueno mantener una dosis saludable de paranoia.

SSL/TLS

Asegúrate de que TLS esté habilitado. Redirige HTTP a HTTPS donde sea necesario para asegurarte de que no puedan ocurrir ataques de Hombre en el medio y que los datos sensibles se transfieran de forma segura entre el cliente y el navegador. Habilita TLS y obtén un certificado SSL gratis en LetsEncrypt.

Si no tienes habilitado SSL/TLS, detén todo y haz esto primero.

Cabeceras de política de seguridad de contenido (CSP)

Las cabeceras CSP le indican al navegador de dónde puede descargar recursos estáticos. Por ejemplo, si estás en astralwallet.io y solicita un archivo JavaScript de myevilsite.com, tu navegador lo bloqueará a menos que esté en la lista blanca con cabeceras CSP. Puedes leer acerca de cómo implementar cabeceras CSP aquí.

La mayoría de los frameworks web tienen un archivo de configuración o extensiones para especificar tu política CSP, y las cabeceras son generadas automáticamente para ti. Por ejemplo, mira Helmet para Node.js. Esto habría prevenido el Hack de Blackwallet.

Cabeceras de estricta seguridad de transporte HTTP

Esta es una cabecera HTTP que le indica al navegador que todas las futuras conexiones a un sitio en particular deben usar HTTPS. Para implementar esto, añade la cabecera a tu sitio web. Some web frameworks (like Django) have this built-in. Esto habría prevenido el Hack DNS de MyEtherWallet.

Almacenando datos sensibles

Preferiblemente, no tienes que almacenar muchos datos sensibles. Si debes hacerlo, asegúrate de proceder con cuidado. Hay muchas estrategias para almacenar datos sensibles:

  • Asegúrate de que los datos sensibles estén cifrados usando un cifrado comprobado como AES-256 y almacenados por separado de los datos de la aplicación. Siempre utiliza el modo AEAD. Cualquier comunicación entre el servidor de aplicaciones y el servidor secreto debe estar en una red privada y/o autenticada a través de HMAC.
  • Tu estrategia de cifrado cambiará según si enviarás el texto cifrado a través de la red varias veces. Haz copias de seguridad de cualquier clave de cifrado que puedas usar fuera de línea y guárdalas solo en memoria en tu aplicación.
  • Realiza una copia de seguridad de cualquier clave de cifrado que utilices fuera de línea y guárdala solo en la memoria de tu aplicación.
  • Consulta a un buen criptógrafo y lee sobre prácticas recomendadas. Revisa la documentación de tu framework web favorito.
  • Crear tu propio cifrado es una mala idea. Siempre utiliza bibliotecas probadas y comprobadas como NaCI.

Monitoreo

Los atacantes a menudo necesitan pasar tiempo explorando tu sitio web en busca de comportamientos inesperados u pasados por alto. Examinar los registros defensivamente puede ayudarte a darte cuenta de lo que están tratando de lograr. Al menos puedes bloquear su IP o automatizar el bloqueo basado en comportamientos sospechosos.

También vale la pena configurar un informe de errores (como Sentry). A menudo, las personas activan errores extraños al intentar hackear cosas.

Debilidades de autenticación

Debes desarrollar tu autenticación de manera segura si tienes inicios de sesión para usuarios. La mejor manera de hacer esto es usar algo ya preparado. Tanto Ruby on Rails como Django tienen esquemas de autenticación robustos integrados.

Muchas implementaciones de token web JSON están mal hechas, así que asegúrate de que la biblioteca que utilices esté auditada.

Cifrar contraseñas con un esquema comprobado es bueno. Y el Hashing de Globo también vale la pena considerarlo.

Preferimos firmemente la 2FA y requerimos U2F o TOTP 2FA para acciones sensibles. La 2FA es importante ya que las cuentas de correo electrónico suelen no ser muy seguras. Tener un segundo factor de autenticación asegura que los usuarios que accidentalmente permanezcan conectados o tengan su contraseña adivinada aún estén protegidos.

Finalmente, exige contraseñas seguras. Las contraseñas comunes y cortas pueden ser forzadas. Dropbox tiene una excelente herramienta open-source que mide la fortaleza de la contraseña de manera bastante rápida, haciéndola utilizable para interacciones de usuario.

Ataques de denegación de servicio (DOS)

Los ataques DOS se logran generalmente sobrecargando tus servidores web con tráfico. Para mitigar este riesgo, limita la tasa de tráfico proveniente de IPs y huellas digitales de navegador. A veces, las personas utilizan proxies para eludir el límite de tasa IP. Al final, los actores maliciosos siempre pueden encontrar formas de suplantar su identidad, así que la manera más segura de bloquear los ataques DOS es implementar verificaciones de prueba de trabajo en tu cliente o usar un servicio gestionado como Cloudflare.

Cerrar puertos no utilizados

Los atacantes a menudo escanearán tus puertos para ver si fuiste negligente y dejaste alguno abierto. Servicios como Heroku hacen esto por ti- lee sobre cómo habilitar esto en AWS.

Phishing y ingeniería social

Los ataques de phishing frustrarán cualquier infraestructura de seguridad bien formada. Ten políticas claras publicadas en tu sitio web y comunícalas a los usuarios cuando se registren (nunca pedirás su contraseña, etc.). Firma mensajes para tus usuarios y solicita a los usuarios que verifiquen el dominio del sitio web en el que están.

Escanea tu sitio web y bibliotecas en busca de vulnerabilidades

Utiliza una herramienta como Snyk para escanear tus bibliotecas de clientes de terceros en busca de vulnerabilidades. Asegúrate de mantener actualizadas tus bibliotecas de terceros. A menudo, las actualizaciones son provocadas por exploits de seguridad. También puedes utilizar Mozilla Observatory para verificar la seguridad de tu HTTP.

Protección contra falsificación de solicitudes en sitios cruzados (CSRF), inyecciones SQL

La mayoría de los frameworks web y móviles modernos manejan tanto la protección CSRF como las inyecciones SQL. Asegúrate de que la protección CSRF esté habilitada y que estés utilizando un ORM de base de datos en lugar de ejecutar SQL en bruto basado en la entrada del usuario. Por ejemplo, consulta lo que dice la documentación de Ruby on Rails sobre las inyecciones SQL.