Capítulo 1. Principios y conceptos
Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com
Sí, ésta es una guía práctica, pero necesitamos cubrir algunos principios y conceptos de seguridad relevantes para la nube a un alto nivel antes de sumergirnos en las partes prácticas. Si eres un profesional de la seguridad experimentado, pero nuevo en la nube, quizá quieras hojear hasta "El modelo de responsabilidad compartida en la nube".
La razón por la que cubro estos principios y conceptos en primer lugar es porque se utilizan implícitamente en el resto del libro cuando hablo del diseño y la aplicación de controles de seguridad para detener a los atacantes. Las lagunas conceptuales y los malentendidos en seguridad pueden causar muchos problemas. Por ejemplo:
-
Si no estás familiarizado con el mínimo privilegio, puede que entiendas bien la autorización para los servicios en la nube, pero aun así concedas demasiado acceso a personas o automatizaciones en tu cuenta en la nube o en una base de datos en la nube con información sensible.
-
Si no estás familiarizado con la defensa en profundidad, tener varias capas de autenticación, control de acceso a la red o encriptación puede no parecer útil.
-
Si no sabes un poco de modelado de amenazas -las motivaciones probables de los atacantes y los límites de confianza del sistema que estás diseñando-, puedes estar dedicando tiempo y esfuerzo a proteger las cosas equivocadas.
-
Si no entiendes los modelos de prestación de servicios en la nube y el modelo de responsabilidad compartida, puedes dedicar tiempo a preocuparte por riesgos que son responsabilidad de tu proveedor de servicios en la nube y pasar por alto riesgos que son responsabilidad tuya abordar.
-
Si no sabes un poco de gestión de riesgos, puedes dedicar demasiado tiempo y esfuerzo a los riesgos bajos, en lugar de gestionar los riesgos más altos.
Cubriré esta información básica rápidamente para que podamos pasar a los controles de seguridad en la nube.
Mínimo privilegio
El principio del menor privilegio establece simplemente que las personas o las herramientas automatizadas deben poder acceder sólo a lo que necesitan para hacer su trabajo, y no más. Es fácil olvidar la parte de automatización de esto; por ejemplo, un componente que accede a una base de datos no debe utilizar credenciales que permitan el acceso de escritura a la base de datos si no se necesita el acceso de escritura.
Una aplicación práctica del mínimo privilegio suele significar que tus políticas de acceso son de denegación por defecto. Es decir, a los usuarios no se les concede ningún privilegio (o muy pocos) por defecto, y tienen que pasar por el proceso de solicitud y aprobación de cualquier privilegio que necesiten.
Para los entornos en nube, algunos de tus administradores necesitarán tener acceso a la consola en nube, una página web que te permite crear, modificar y destruir activos en nube, como máquinas virtuales. Con muchos proveedores, cualquiera que tenga acceso a su consola de nube tendrá privilegios divinos por defecto para todo lo que gestione ese proveedor de nube. Esto puede incluir la capacidad de leer, modificar o destruir datos de cualquier parte del entorno de la nube, independientemente de los controles que existan en los sistemas operativos de los sistemas aprovisionados. Por esta razón, tienes que controlar estrictamente el acceso y los privilegios en la consola de la nube, de forma muy parecida a como controlas estrictamente el acceso al centro de datos físico en los entornos locales, y registrar lo que hacen estos usuarios.
Defensa en profundidad
Muchos de los controles de este libro, si se aplicaran perfectamente, anularían la necesidad de otros controles. La defensa en profundidad es un reconocimiento de que casi cualquier control de seguridad puede fallar, ya sea porque un atacante es lo suficientemente decidido y hábil o por un problema con la forma en que se implementa ese control de seguridad. Con la defensa en profundidad, creas múltiples capas de controles de seguridad superpuestos, de modo que si uno falla, el que está detrás aún puede atrapar a los atacantes.
Sin duda, puedes llegar a extremos absurdos con la defensa en profundidad, por eso es importante comprender las amenazas a las que probablemente te enfrentes. Sin embargo, como norma general, deberías poder señalar cualquier control de seguridad que tengas y decir: "¿Y si esto falla?". Si la respuesta es inaceptable, probablemente tengas una defensa en profundidad insuficiente. También puedes tener una defensa en profundidad insuficiente si un único fallo puede hacer que varios de tus controles de seguridad sean ineficaces, como un problema de inventario que hace que varias herramientas pasen por alto un problema.
Confianza cero
Hoy en día, muchos productos y servicios afirman ser de confianza cero, o apoyar los principios de confianza cero. El nombre es confuso, porque confianza cero no significa falta total de confianza en nada, y la confusión es mayor porque se utiliza con muchos fines de marketing diferentes. Existen muchas definiciones e ideas diferentes sobre lo que se entiende por confianza cero.
Probablemente estemos atascados con el término en este punto, pero "confianza cero" en realidad debería llamarse de otra manera, como "confianza implícita cero" o "confianza asumida cero sin una buena razón".1 El principio básico es que la confianza de un usuario o de otro sistema debe ganarse, en lugar de otorgarse simplemente porque el usuario puede localizarte en la red, o tiene un dispositivo propiedad de la empresa, o algún otro criterio que no esté biencontrolado.
La implementación de la confianza cero será muy diferente según se trate de confiar en dispositivos, conexiones de red u otra cosa. Una implementación comúnmente utilizada de la confianza cero es exigir cifrado y autenticación para todas las conexiones, incluso las que se originan y terminan en redes supuestamente de confianza. Esto siempre ha sido una buena idea, pero es aún más importante en los entornos de nube, donde el perímetro está diseñado de forma menos estricta y la conectividad a Internet es fácil.
Otra aplicación común de los principios de confianza cero consiste en limitar el acceso de los usuarios a la red sólo a las aplicaciones que necesitan, desafiando la confianza implícita de que todos los usuarios deberían poder conectarse a todas las aplicaciones, aunque no puedan iniciar sesión. Si piensas que esto se parece mucho al privilegio mínimo y a la defensa en profundidad, tienes razón. Existe un solapamiento considerable entre los principios de confianza cero y algunos de los otros principios de este capítulo.
Un tercer ejemplo de confianza cero es el uso de la autenticación multifactor de los usuarios, con la reautenticación requerida periódicamente o cuando se solicitan transacciones de mayor riesgo. En este caso, estamos desafiando la confianza implícita de que quien tiene la contraseña de una cuenta, o controla una sesión concreta de una aplicación, es el usuario previsto.
Cuando sigas los principios de confianza cero, sólo debes confiar en una interacción si tienes pruebas sólidas de que la confianza está garantizada, como por ejemplo mediante una prueba de autenticación sólida, o autorización, o configuración correcta. Esas pruebas deben proceder de algo que controles directamente (como tu propio sistema de autenticación o de gestión de dispositivos), o de algún tercero que hayas evaluado explícitamente como competente para tomar decisiones de confianza por ti. Al igual que otros principios de este capítulo, puede ser perjudicial para la experiencia del usuario si se lleva al extremo.
Actores de la amenaza, diagramas y límites de confianza
Hay diferentes maneras de pensar en tus riesgos, pero yo suelo favorecer un enfoque orientado a los activos. Esto significa que te concentras primero en lo que necesitas proteger, y por eso profundizo primero en los activos de datos, en el Capítulo 2.
También es una buena idea tener en cuenta quién tiene más probabilidades de causarte problemas. En la jerga de la ciberseguridad, éstos son tus "actores de amenaza" potenciales. Por ejemplo, puede que no necesites protegerte contra un actor estatal bien financiado, pero puede que tengas un negocio en el que un ciberdelincuente pueda ganar dinero robando tus datos, o en el que un "hacktivista" quiera desfigurar tu sitio web por motivos políticos o sociales. Ten en cuenta a estas personas cuando diseñes todas tus defensas.
Aunque hay mucha información y debates disponibles sobre el tema de los actores de amenazas, motivaciones y métodos,2 en este libro consideraremos cuatro tipos principales de actores de amenazas de los que puedes tener que preocuparte:
-
Crimen organizado o delincuentes independientes, interesados principalmente en ganar dinero
-
Hacktivistas, interesados principalmente en desacreditarte divulgando datos robados, cometiendo actos de vandalismo o perturbando tu negocio.
-
Atacantes internos, normalmente interesados en desacreditarte o ganar dinero
-
Agentes estatales, que pueden estar interesados en robar secretos o perturbar tu negocio para promover la misión o causa política de un gobierno extranjero.
Tomando prestada una técnica del mundo del diseño de la experiencia del usuario, quizá quieras imaginar a un miembro de cada grupo aplicable, darle un nombre, apuntar un poco sobre esa "persona" en una tarjeta, y mantener las tarjetas a la vista cuando diseñes tus defensas.
Lo segundo que tienes que hacer es averiguar qué tiene que hablar con qué en tu aplicación, y la forma más fácil de hacerlo es hacer un dibujo y averiguar dónde es probable que estén tus puntos débiles. Hay libros enteros sobre cómo hacerlo,3 pero no necesitas ser un experto para dibujar algo lo suficientemente útil que te ayude a tomar decisiones. Sin embargo, si estás en un entorno de alto riesgo, probablemente deberías crear diagramas formales con una herramienta adecuada, en lugar de dibujar figuras de palo.
Aunque existen muchas arquitecturas de aplicación diferentes, para la aplicación de ejemplo utilizada aquí como ilustración, mostraré un diseño sencillo de tres niveles. Esto es lo que recomiendo para un diagrama de componentes de aplicación muy sencillo:
-
Dibuja una figura de palo y etiquétala como "usuario". Dibuja otra figura de palo y etiquétala como "administrador"(Figura 1-1). Puede que más adelante descubras que tienes varios tipos de usuarios y administradores, u otras funciones, pero éste es un buen comienzo.
-
Dibuja un recuadro para el primer componente con el que habla el usuario (por ejemplo, los servidores web), traza una línea desde el usuario hasta ese primer componente, y etiqueta la línea con la forma en que el usuario habla con ese componente(Figura 1-2). Ten en cuenta que, en este punto, el componente puede ser una función sin servidor, un contenedor, una máquina virtual o cualquier otra cosa. Esto permitirá que cualquiera hable con él, así que probablemente será lo primero que se ataque. Realmente no queremos que los demás componentes confíen en éste más de lo necesario.
-
Dibuja otros recuadros detrás del primero para todos los demás componentes con los que tenga que hablar el primer sistema, y traza líneas que vayan a ellos(Figura 1-3). Cuando llegues a un sistema que realmente almacene datos, dibuja un pequeño símbolo (yo utilizo un cilindro) junto a él y anota qué datos hay allí. Sigue así hasta que no se te ocurran más cajas que dibujar para tu aplicación.
-
Dibuja ahora cómo accede el administrador (y cualquier otro rol que hayas definido) a la aplicación. Ten en cuenta que el administrador puede tener varias formas distintas de hablar con esta aplicación; por ejemplo, a través del portal o las API del proveedor de la nube, o a través del sistema operativo, o de forma similar a como accede un usuario(Figura 1-4).
-
Dibuja algunos límites de confianza como líneas de puntos alrededor de las casillas(Figura 1-5). Un límite de confianza significa que cualquier cosa dentro de ese límite puede tener al menos cierta confianza en los motivos de cualquier otra cosa dentro de ese límite, pero requiere verificación antes de confiar en cualquier cosa fuera del límite. La idea es que si un atacante entra en una parte del límite de confianza, es razonable suponer que acabará teniendo el control total de todo lo que haya en ella, por lo que atravesar cada límite de confianza debería suponer cierto esfuerzo. Observa que he dibujado varios servidores web dentro del mismo límite de confianza; eso significa que está bien que estos servidores web confíen unos en otros, y que si alguien tiene acceso a uno, efectivamente tiene acceso a todos. O, dicho de otro modo, si alguien compromete uno de estos servidores web, no se producirá más daño si se comprometen todos.
En este contexto, los principios de confianza cero nos llevan a reducir estos límites de confianza al tamaño más pequeño razonable: por ejemplo, un único componente, que aquí podría ser un servidor individual o un clúster de servidores con los mismos datos y finalidad.
-
Hasta cierto punto, confiamos más en todo nuestro sistema que en el resto del mundo, así que traza una línea de puntos alrededor de todas las casillas, incluido el admin, pero no el usuario(Figura 1-6). Ten en cuenta que si tienes varios administradores, como un administrador del servidor web y un administrador de la base de datos, podrían estar en límites de confianza diferentes. El hecho de que haya límites de confianza dentro de límites de confianza muestra los distintos niveles de confianza. Por ejemplo, los servidores aquí pueden estar dispuestos a aceptar conexiones de red de servidores de otros límites de confianza dentro de la aplicación, pero aún así verificar sus identidades. Por otro lado, pueden no estar dispuestos a aceptar conexiones de sistemas situados fuera de todo el límite de confianza de la aplicación.
Utilizaremos este diagrama de una aplicación de ejemplo a lo largo del libro cuando hablemos del modelo de responsabilidad compartida, el inventario de activos, los controles y el monitoreo. En este momento, no se muestran controles específicos de la nube en el diagrama, pero eso cambiará a medida que avancemos en los capítulos. Fíjate en cualquier lugar donde una línea cruce un límite de confianza. ¡Estos son los lugares en los que tenemos que centrarnos en asegurar primero!
Modelos de prestación de servicios en la nube
Existe una ley no escrita según la cual ningún libro sobre computación en nube está completo sin una visión general de la Infraestructura como Servicio (IaaS), la Plataforma como Servicio (PaaS) y el Software como Servicio (SaaS). En lugar de dar la visión general estándar, me gustaría decir rápidamente que los servicios IaaS suelen permitirte crear ordenadores virtuales, almacenamiento y redes; los servicios PaaS suelen ser servicios de nivel superior, como bases de datos, que te permiten crear aplicaciones; y los servicios SaaS son aplicaciones utilizadas por los usuarios finales. Puedes encontrar muchas definiciones ampliadas y subdivisiones de estas categorías, pero éstas son las definiciones básicas.
Estos modelos de servicio sólo son útiles para una comprensión general de los conceptos; en concreto, la línea entre IaaS y PaaS es cada vez más difusa. ¿Un servicio de red de distribución de contenidos que almacena información en caché en Internet para mantenerla cerca de los usuarios es un PaaS o un IaaS? En realidad, no importa. Lo importante es que entiendas lo que proporciona (¡y lo que no!) el servicio, no si encaja o no en una categoría concreta.
Gestión de riesgos
La gestión de riesgos es un tema profundo, sobre el que se han escrito libros enteros. Si realmente te interesa profundizar, te recomiendo que leas El fracaso de la gestión de riesgos: Why It's Broken and How to Fix It, de Douglas W. Hubbard (Wiley, 2020), y la Publicación Especial 800-30 Rev 1 del NIST. En pocas palabras, los humanos somos realmente malos evaluando el riesgo y averiguando qué hacer al respecto. Esta sección pretende darte sólo lo esencial para gestionar el riesgo de incidentes de seguridad y violaciones de datos.
A riesgo de afirmar lo obvio, un riesgo es algo malo que podría ocurrir. En la mayoría de los sistemas de gestión de riesgos, el nivel de riesgo se basa en una combinación de lo probable que es que ocurra lo malo (probabilidad) y lo malo que será el resultado si ocurre (impacto). Por ejemplo, algo que es muy probable que ocurra (como que alguien adivine que tu contraseña es "1234") y que será muy malo si ocurre (como que pierdas todos los archivos de tus clientes y tengas que pagar grandes multas) sería un riesgo alto. Algo que es muy improbable que ocurra (como que un asteroide acabe con dos centros de datos regionales diferentes a la vez) pero que sería muy malo si ocurriera (quebrar el negocio) podría ser sólo un riesgo bajo, dependiendo del sistema que utilices para decidir el nivel de riesgo.5
En este libro, hablaré de riesgos desconocidos (de los que no tenemos suficiente información para saber cuáles son sus probabilidades e impactos) y de riesgos conocidos (de los que al menos sabemos a qué nos enfrentamos). Una vez que tengas una idea de los riesgos conocidos, puedes hacer una de estas cuatro cosas con ellos:
-
Evita el riesgo. En seguridad de la información, esto suele significar que apagas elsistema: no más riesgo, pero tampoco ninguno de los beneficios que obtuviste al poner en marcha el sistema en primer lugar.
-
Mitiga el riesgo. Sigue ahí, pero haces cosas adicionales para reducir la probabilidad de que ocurra lo malo o el impacto si ocurre. Por ejemplo, puedes optar por almacenar datos menos sensibles para que, si se produce una violación, el impacto no sea tan grave.
-
Transfiere el riesgo. Pagas a otro para que gestione las cosas, de modo que el riesgo sea su problema. Esto se hace mucho con la nube, donde transfieres muchos de los riesgos de gestionar los niveles inferiores del sistema al proveedor de la nube.
-
Acepta el riesgo. Tras analizar el nivel de riesgo global y los beneficios de continuar con la actividad, puedes decidir anotar que el riesgo existe, conseguir que todas las partes interesadas estén de acuerdo en que es un riesgo y seguir adelante.
Cualquiera de estas acciones puede ser razonable. Sin embargo, lo que no es aceptable es no tener ni idea de cuáles son tus riesgos, o tener una idea de cuáles son los riesgos y aceptarlos sin sopesar las consecuencias u obtener la aprobación de tus partes interesadas. Como mínimo, debes tener una lista en algún lugar de una hoja de cálculo o documento que detalle los riesgos que conoces, las acciones emprendidas y las aprobaciones necesarias.
Conclusión
Aunque a menudo no hay respuestas perfectas en el mundo real, comprender algunos conceptos básicos te ayudará a tomar mejores decisiones a la hora de proteger tus entornos en la nube.
El mínimo privilegio consiste básicamente en reconocer que dar acceso privilegiado a algo o a alguien es un riesgo, y no quieres correr más riesgos de los necesarios. Es un arte, por supuesto, porque a veces hay que elegir entre riesgo y productividad, pero el principio general es bueno: sólo hay que conceder el mínimo privilegio necesario. Esto a menudo se pasa por alto en la automatización, pero podría decirse que es aún más importante porque muchos ataques del mundo real se basan en engañar a un sistema o automatización para que realice acciones inesperadas.
La defensa en profundidad consiste en reconocer que no somos perfectos y que los sistemas que diseñamos no serán perfectos. También es un guiño a las leyes básicas de la probabilidad: si tienes dos cosas independientes que tienen que fallar ambas para que ocurra algo malo, es mucho menos probable que ocurra. Si tienes que lanzar una moneda al aire y sale cruz dos veces seguidas, tus probabilidades de que eso ocurra son sólo del 25%, en comparación con el 50% de probabilidades de que salga cruz al lanzar una moneda. Aspiramos a tener controles de seguridad mucho más eficaces que el lanzamiento de una moneda, pero el principio es el mismo. Si tienes dos controles superpuestos e independientes con una eficacia del 95%, ¡la combinación de ambos tendrá una eficacia del 99,75%! Sin embargo, este enfoque tiene rendimientos decrecientes, por lo que cinco o seis capas en la misma área probablemente no sean un buen uso de los recursos.
El modelado de amenazas es el proceso de comprender quién es probable que ataque tu sistema y por qué, y de comprender los componentes de tu sistema y cómo funcionan juntos. Con esas dos piezas de información, puedes mirar tu sistema a través de los ojos de los posibles atacantes, e intentar detectar las áreas en las que los atacantes podrían hacer algo indeseable. Luego, para cada una de esas áreas, puedes poner obstáculos (o, más formalmente, "controles" y "mitigaciones") para frustrar a los atacantes. En general, los lugares más eficaces para poner mitigaciones son los límites de confianza, que son los lugares donde una parte de tu sistema necesita confiar en otra.
Comprender los modelos de prestación de servicios en la nube puede ayudarte a centrarte en las partes del sistema general de las que eres responsable, para que no pierdas el tiempo intentando hacer el trabajo de tu proveedor de servicios en la nube, y para que no asumas que tu proveedor de servicios en la nube se está ocupando de algo que realmente es responsabilidad tuya. Aunque existen términos estandarizados para los distintos modelos de prestación de servicios en la nube, como IaaS, PaaS y SaaS, algunos servicios no encajan perfectamente en esos grupos. Sin embargo, son conceptualmente útiles, y lo más importante es entender dónde acaba la responsabilidad de tu proveedor y dónde empieza la tuya en el modelo de responsabilidad compartida en la nube. En un mundo local, la seguridad de todo el sistema será a menudo responsabilidad de una sola organización dentro de una empresa, mientras que en las Implementaciones en la nube, ¡casi siempre se divide entre al menos dos empresas diferentes!
Por último, aunque los humanos somos bastante buenos evaluando el riesgo en situaciones del tipo "¿me va a comer este depredador?", no somos naturalmente muy buenos en situaciones más abstractas. La gestión del riesgo es una disciplina que nos permite evaluar mejor el riesgo y averiguar qué hacer al respecto. La forma más sencilla de gestión del riesgo consiste en estimar la probabilidad de que ocurra algo malo y el impacto de lo malo que será si ocurre, y luego tomar decisiones basadas en la combinación de probabilidad e impacto. La gestión del riesgo puede reducir nuestro riesgo global permitiéndonos centrarnos primero en los riesgos mayores.
Ahora que tenemos estos conceptos y principios en nuestro kit de herramientas, pongámoslos en práctica para proteger los datos y otros activos de nuestros entornos en la nube.
Ejercicios
-
¿Cuáles de estos son buenos ejemplos del principio del menor privilegio en acción? Selecciona todos los que corresponda.
-
Tener diferentes niveles de acceso dentro de una aplicación, de forma que los usuarios sólo puedan acceder a las funciones que necesitan para su trabajo.
-
Exigir tanto una contraseña como un segundo factor para iniciar sesión
-
Dar a una herramienta de inventario acceso de sólo lectura en lugar de acceso de lectura/escritura
-
Uso de una herramienta como sudo para permitir que un usuario sólo ejecute determinados comandos
-
-
¿Cuáles de estos son buenos ejemplos del principio de defensa en profundidad? Selecciona todas las que correspondan.
-
Cifrar datos valiosos, y también impedir que la gente lea los datos cifrados a menos que necesiten verlos
-
Tener controles de cortafuegos muy estrictos
-
Asegurarte de que tus límites de confianza están bien definidos
-
Disponer de autenticación multifactor
-
-
¿Cuáles son algunas de las motivaciones habituales de los actores de amenazas? Selecciona todas las que correspondan.
-
Robar dinero
-
Robar secretos
-
Perturbar tu negocio
-
Avergonzarte
-
-
¿Cuál de estos elementos es siempre responsabilidad del proveedor de la nube?
-
Seguridad de las infraestructuras físicas
-
Seguridad de la red
-
Seguridad del sistema operativo
-
Seguridad de acceso a los datos
-
-
¿Cuáles son los factores más importantes para evaluar la gravedad de un riesgo? Selecciona los dos que correspondan.
-
Las posibilidades, o probabilidad, de que ocurra un acontecimiento
-
Cómo de grave será el impacto si se produce un suceso
-
Si puedes o no transferir el riesgo a otra persona
-
Si las acciones que causan el riesgo son legales o ilegales
-
1 Si esperas consejos sobre cómo elegir nombres de marketing pegadizos, ¡probablemente estés leyendo el libro equivocado!
2 El Informe de Verizon sobre investigaciones de violaciones de datos es un excelente recurso gratuito para comprender los distintos tipos de ataques con éxito, organizado por sectores y métodos, y el resumen ejecutivo es muy legible.
3 Recomiendo Modelado de amenazas: Designing for Security, de Adam Shostack (Wiley, 2014).
4 Concepto original del artículo de LinkedIn de Albert Barron de 2014, "La pizza como servicio".
5 Los riesgos también pueden interactuar, o agregarse. Puede haber dos riesgos que tengan cada uno una probabilidad relativamente baja e impactos limitados, pero es probable que ocurran juntos, y los impactos pueden combinarse para ser más graves. Por ejemplo, el impacto de la caída de cualquiera de las líneas eléctricas de un par redundante puede ser insignificante, pero el impacto de la caída de ambas puede ser realmente grave. Esto suele ser difícil de prever; el apagón del aeropuerto de Atlanta en 2017 es un buen ejemplo.
Get Seguridad práctica en la nube, 2ª edición now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.