Al planear la creación de una aplicación web, ¿cuáles son algunas de las cosas que los desarrolladores deben tener en cuenta en términos de seguridad contra el ciberataque?

Me concentraré en las áreas relacionadas con la criptografía de su pregunta, ya que esta es mi especialidad y hay muchas personas que saben más sobre las otras áreas que yo.

Datos de usuario / cliente:

  • Almacene solo lo que absolutamente necesita
  • Almacene lo que necesita cifrado / hash y salado, particularmente contraseñas y datos de tarjetas de crédito. Dependiendo de su país, puede estar sujeto a las normas PCI-DSS que llaman “tokenización” de hash. Básicamente, en lugar de almacenar el número o la contraseña de la tarjeta de crédito de texto sin formato, almacena el hash + sal criptográfico en su base de datos. No utilice funciones de hashing que se hayan roto, como MD5, o que se consideren dañadas con suficiente tiempo de cálculo, como SHA1. Si es posible, evite el SHA2 / 3 también, ya que estas funciones se han optimizado para la velocidad y no para la protección contra ataques de fuerza bruta. Una sal es una cadena de número o letra que se adjunta a la contraseña o al número CC antes de que se divida en hash. Se puede almacenar en texto sin formato. Hace que sea imposible para un atacante descifrar los hash utilizando las tablas de texto sin formato hash precomputado.

Datos del sitio web:

  • Realice copias de seguridad con regularidad, almacénelas encriptadas en un disco o dispositivo que esté físicamente separado de la máquina en la que se ejecuta el sitio. (La parte encriptada es opcional aquí, pero en caso de infección por virus o troyanos, ver más abajo, puede confundir el malware que generalmente está programado para encriptar solo ciertos tipos de archivos)
  • Antes de hacer una copia de seguridad, asegúrese de no haber detectado un troyano criptográfico: se sabe que algunos de estos esperan hasta que se conecten unidades externas para cifrar los datos en ellos también para asegurarse de que se ve obligado a pagar el rescate.
  • Obtenga un certificado SSL / TLS para su sitio para ofrecer una conexión https que esté encriptada y, por lo tanto, sea inmune incluso a la inspección profunda de paquetes. Esto protegerá a sus usuarios contra algunas formas de censuras e inyecciones de anuncios. Sin mencionar que también aumentará la confianza de su cliente en su sitio.

Comunicación con tus clientes:

  • Es posible que desee obtener una clave PGP para la comunicación por correo electrónico con sus clientes y publicarla en su sitio web y en algunos servidores clave. Muchos probablemente insistirán en que es excesivo y que nadie usa el cifrado de correo electrónico de todos modos (y son parcialmente correctos), pero tampoco hace daño, no le cuesta nada y podría mostrarles a los clientes más técnicos que toman en serio su privacidad. También con las brechas de datos semanales y el debate público entre Apple y el FBI, la opinión del público en general podría volverse hacia el cifrado de correo electrónico.
  • Alternativamente, es posible que desee obtener un certificado S / MIME, aunque no son tan cómodos como usar PGP para el cifrado de correo electrónico.

Gracias por el A2A.

Estas son algunas de las cosas, como desarrollador, en las que debe centrarse en términos de seguridad de aplicaciones web:

(He puesto algunos ejemplos para poner el elemento en contexto)

  1. Entrada
  1. Desinfecte la entrada del usuario tanto como sea posible. Suponga que todos provienen de fuentes no confiables. Utilice la coincidencia de expresiones regulares para la lista blanca, etc.
  • Salida
    1. Codifique todos los caracteres que se mostrarán a menos que se sepa que son seguros. Asegúrese de codificar los datos que devuelve al cliente como salida
  • Base de datos
    1. Usar consultas parametrizadas
    2. En la medida de lo posible, cree una API centralizada (basada en el modelo MVC) para acceder a las consultas
    3. Las contraseñas en almacenes de credenciales deben ser criptográficamente procesadas con un algoritmo fuerte (también puede hacer varias ejecuciones del algoritmo de hash para la mejor práctica)
  • Autenticación
    1. Hacer cumplir los requisitos de complejidad de la contraseña Utilice dos factores / multicanal tanto como sea posible
  • Cripto
    1. Utilice algoritmos estándar que sean “fuertes”, en el sentido de que aún no están rotos, para todas las funciones que necesitan criptografía
  • Acceso
    1. Principio de privilegio mínimo para acceder a todos los recursos
  • Sesión
    1. Utilice algoritmos bien investigados que garanticen identificadores de sesión suficientemente aleatorios
  • Manejo y registro de errores
    1. Asegúrese de tener una política y controles de registro efectivos (sugiero leer Logging and Log Management por el Dr. Anton A Chuvakin, et al )
  • Comunicación
    1. Cifre el tráfico de red de acuerdo con la mejor práctica criptográfica (use TLS estándar)
  • Configuración del sistema
    1. Asegúrese de que los sistemas, servidores y complementos ejecuten las últimas versiones parcheadas
  • Archivos
    1. Para cargas, use permisos de solo lectura tanto como sea posible
  • Memoria
    1. No utilice funciones vulnerables al desbordamiento del búfer (desbordamiento del búfer

    También me gustaría recomendar el uso de un firewall de aplicaciones web (como ModSecurity) para mayor seguridad.

    (Esta lista se basa en https://www.owasp.org/images/0/0 …)

    Como desarrollador para mejorar la seguridad, una cosa que se puede hacer es elegir un marco de desarrollo web maduro que pueda manejar el ataque contra la inyección SQL, el phishing y el secuestro de sesión

    En lugar de usar Frameworks, el desarrollador puede hacerlo manualmente, pero reinventa la rueda. Los marcos siempre tienen las mejores estrategias para manejar esos ataques.

    Si su aplicación va a cargar archivos, asegúrese de que esté libre de virus escaneándola contra un servidor antivirus. Usé ClamavNet.

    La autenticación de dos factores se puede implementar para la autenticación del usuario, lo que agrega una capa de seguridad. Utilicé la autenticación de dos factores twilio

    El 80% de la responsabilidad de seguridad recae en el ingeniero de infraestructura

    1. La seguridad HTTPS es lo primero, en lugar de usar un certificado autofirmado, use certificados firmados por terceros como firmar su certificado con GoDaddy
    2. Nunca exponga su servidor de aplicaciones directamente, use el equilibrador de carga Http o el proxy de reenvío
    3. Bloquee todos los puertos no utilizados en el servidor

    Arriba hay algunos puntos que conocía por experiencia, hay aún más métodos para asegurar la infraestructura contra ataques de DOS y otro tipo de ataques.

    Solo hay una cantidad que estará en sus manos: asegurarse de que cada parte de su aplicación pueda manejar cualquier tipo de datos que se le arrojen. Las pruebas unitarias de todos y cada uno de los componentes podrían ayudar.

    También es importante saber algunas cosas sobre los ataques, ya que es posible que deba interactuar con su proveedor de alojamiento o enlace.

    • El atacante tiene la ventaja. No se sabe cuándo vendrá un ataque.
    • Cada punto accesible visible para el mundo exterior (Internet) es un posible vector de ataque. Olvidar los servicios innecesarios que se ejecutan en el servidor podría crear un riesgo.
    • El software puede tener fallas de seguridad en absolutamente cualquier nivel: su aplicación, alguna biblioteca o marco, una dependencia indirecta, bibliotecas del sistema (vea los problemas de seguridad recientes de Glibc), firmware y el núcleo del sistema operativo.
    • El hardware también puede tener fallas en los mismos aspectos. Un RNG débil o predecible, por ejemplo, o paquetes especialmente diseñados que pueden provocar errores en una interfaz de red.
    • Parámetros del sistema, que pueden ser demasiado relajados y crear condiciones apropiadas para los recursos del servicio (por ejemplo, largos tiempos de espera)
    • Ciertas condiciones requieren ayuda externa, como la del proveedor de enlaces para bloquear el tráfico entrante. Cuando las cosas se salgan de control, incluso requerirán la ayuda de saltos vecinos en el caso de un pequeño grupo de atacantes. Las cosas se ponen muy difíciles bajo DDoS y los amplificadores de ataque.

    Prevenir los ataques de seguridad cibernética no es un gran problema en estos días. Pero, como programador, siempre debe tener en cuenta que un flujo de cualquier proceso que conduzca a una conectividad a una base de datos de fondo, debe asegurarse bien en lugar de cualquier otro aspecto de una aplicación. Porque los hackers siempre intentan encontrar una forma directa / vinculada a la base de datos, y una vez que tienen acceso a la base de datos, pueden hacer lo que quieran. Por lo tanto, un punto clave que debe tenerse en cuenta es asegurar todos los túneles a través de HTTP / HTTPS / SSH / etc. que conducen al procesamiento del lado del servidor. Porque, si una aplicación está siendo moderada y se comunica con el servidor, entonces el servidor también podría tener el mismo nivel de riesgo que las aplicaciones.

    Hiren Patel (Pune, MH)

    La más grande … nunca, nunca confíes en la entrada de un usuario.

    Si de alguna manera no puede restringir las opciones a un pequeño conjunto de valores esperados (como un botón de radio en un formulario o un botón para mezclar que ejecuta un procedimiento almacenado que es totalmente inaccesible para el usuario final), valídelo de todas las maneras posibles puede y asume que las personas aún encontrarán formas de ingresar valores oscuros si no son maliciosos.