Protección de su aplicación web: cómo cerrarla de la interferencia de terceros

imagen

De un traductor: estamos publicando un artículo para usted por Jim Medlock, un programador y arquitecto de software. Medlock habla sobre las formas básicas de proteger su aplicación o servicio web. Vale la pena señalar que es probable que este material sea útil para los programadores novatos. Aunque si los profesionales dejan sus comentarios, todos estarán agradecidos.

¿Por qué molestarse con alguien que piratea la aplicación? Sí, aunque solo sea porque cada vez hay más personas que quieren hacer esto con el tiempo. Estos son piratas informáticos "comunes" para quienes vencer la protección de alguien es de interés deportivo, cibercriminales que desglosan servicios y sitios con fines de lucro, organizaciones gubernamentales.

En los últimos meses, muchas organizaciones grandes han llegado a las noticias después de enormes filtraciones de información. Entre ellos, Facebook y sus 50 millones de cuentas robadas, FIFA con 3,4 TB de datos y 70 millones de documentos, Google con 0,5 millones de cuentas, Marriott Hotels con datos de 427 millones de clientes de toda la red.

Skillbox recomienda: Curso práctico de dos años "Soy un desarrollador web PRO" .

Le recordamos: para todos los lectores de "Habr": un descuento de 10.000 rublos al registrarse en cualquier curso de Skillbox con el código de promoción "Habr".


Fuente

No solo aumenta el número de ataques de piratas informáticos, sino también la cantidad de daño que hacen los ciberdelincuentes. Según los expertos, el tamaño promedio de las pérdidas directas e indirectas causadas por los ciberdelincuentes es de $ 3.86 millones por cada pirateo exitoso. Por supuesto, este es un promedio del mercado; los números reales varían, y más o menos.

Algunas estadísticas más. El daño causado por los ciberdelincuentes puede juzgarse con los siguientes datos:

  • $ 148 - el "precio" de una cuenta robada;
  • $ 40 millones - por 1 millón de cuentas;
  • $ 350 millones - para 50 millones de cuentas.



El dinero no es el único argumento: piense en cuánto tiempo llevará poner todo en orden.

Infraestructura de seguridad vs. seguridad de la aplicación




La mayoría de las medidas de seguridad están destinadas a proteger la base de la infraestructura de TI, como un servidor, almacenamiento y centro de datos. Es necesario, pero no solo ellos deben ser protegidos.

Las medidas de seguridad con respecto a la aplicación en sí también son extremadamente importantes. Proporcionan un conjunto completo de métodos para encontrar, corregir y prevenir el uso malicioso de las lagunas en su software. Vale la pena destacar estos:

  • revisión de código realizada por especialistas en seguridad de la información, cuando el objetivo es buscar exclusivamente lugares que sean problemáticos en términos de ciberseguridad;
  • Auditoría basada en Blackbox basada en el trabajo con la aplicación;
  • revisión de la arquitectura de la aplicación antes de escribir la mayor parte del código;
  • el uso de herramientas automáticas que ayudan a evaluar la protección;
  • lanzamiento de programas de recompensas que permiten a terceros especialistas encontrar áreas problemáticas.

Las medidas más efectivas se basan en el concepto de seguridad capa por capa. En este caso, cada uno de los elementos protegidos utiliza su propio conjunto de herramientas.



No puedes hacer nada con el lado del cliente


El problema es que es poco probable que pueda proteger su proyecto del lado del usuario. Los navegadores modernos son vulnerables, a pesar de los esfuerzos de sus creadores.

En el caso de los servicios web, el componente débil de todo el sistema es la clave necesaria para la autorización. Por ejemplo, las aplicaciones que usan la API de GitHub deben admitir la autenticación de token. Si el delincuente puede tener la llave en sus manos, tendrá acceso al código y los proyectos de la víctima en GitHub.

Para un desarrollador frontend, el peligro es que puede estar seguro de la seguridad completa de su servicio si se proporcionan medidas como claves privadas y tokens. Todo esto es bueno, pero todos los mismos navegadores son un enlace débil.

¿Es seguro separar datos de seguridad como claves de todo el proyecto?


Por lo general, las variables de entorno se usan para extraer datos a un archivo, como .env. Un paso adicional es agregar el nombre de dichos archivos a .gitignore, lo que impide la ejecución de comandos de inserción de git para cargarlos en repositorios públicos, donde el archivo estará abierto para todos.



Todo esto es bueno, pero los archivos .env no están encriptados. En el caso de la aplicación Create React, se pueden verificar utilizando la opción Herramientas de desarrollador en el navegador, en el directorio build / static / js. Aquí, por ejemplo, es lo que encontramos al examinar 0.chunk.js.



Como puede ver, este enfoque no ofrece ventajas especiales, en algunos casos es mejor almacenar elementos de seguridad importantes en el código fuente. Hay otro escenario atractivo donde la separación de código se usa para retrasar la carga de scripts que contienen variables de entorno hasta que el usuario autentica la aplicación. Pero si la computadora cliente se ve comprometida, nada funcionará; después de todo, su sistema de archivos es accesible para los intrusos.

Solución




A diferencia de la parte del cliente, las aplicaciones del servidor pueden protegerse para que los datos importantes no caigan en manos de los atacantes. Para hacer esto, puede usar Oauth para obtener un nivel adicional de autenticación y control de acceso, cifrado y protocolos como HTTPS y TLS.



El dilema de proteger los secretos de la aplicación se puede resolver implementando una API del lado del servidor. Al mismo tiempo, actúa como un servidor proxy para aislar la aplicación cliente de los proveedores de servicios, que utiliza. En lugar de utilizar datos privados en el lado del cliente para autenticarlos en el servicio, la API se autentica desde la aplicación del servidor, ejecuta solicitudes y solo luego devuelve los resultados al cliente. Las claves privadas u otros datos no se divulgan a este último bajo ninguna circunstancia.

Enfoque integrado




Sí, la complejidad no son solo palabras. Para proporcionar a los usuarios confianza en la protección confiable de sus datos, es necesaria una planificación cuidadosa, una estrategia de seguridad bien pensada, que se base en una protección profunda y atención a los detalles.

No es suficiente confiar en las "islas tecnológicas". Es necesario conectar todos los elementos juntos, entendiendo cómo funcionará todo el sistema.

Solo en este caso la aplicación o el servicio estarán seguros.

Source: https://habr.com/ru/post/es433538/


All Articles