Fundamentos de seguridad
La tríada CIA: confidencialidad, integridad y disponibilidad
La tríada CIA explicada: confidencialidad, integridad y disponibilidad, con ejemplos, comprobaciones de hash y firma, y diez incidentes.
Separa vulnerabilidad, amenaza, riesgo y exploit, mira cómo CWE y CVE nombran las fallas y entiende por qué las fallas inalcanzables pueden importar.
Buena parte de la confusión en seguridad empieza con cuatro palabras que la gente usa como si significaran lo mismo: vulnerabilidad, amenaza, riesgo y exploit. Una noticia dice "se explotó una vulnerabilidad crítica" y el lector entiende que pasó un solo evento. En la práctica son cuatro cosas distintas. Separarlas te dice qué corregir primero, qué vigilar y qué puede esperar.
Este artículo ofrece definiciones de trabajo, muestra cómo se conectan las cuatro en una sola cadena y luego explica dos sistemas de nombres que vas a encontrar en todas partes. CWE nombra tipos de debilidad. CVE nombra fallas concretas en productos concretos. Las últimas secciones tratan dos ideas que sorprenden a quien recién empieza: una vulnerabilidad sin ruta alcanzable suele ser de riesgo bajo, y una configuración incorrecta cuenta como vulnerabilidad aunque nadie haya escrito un error de código.
No necesitas laboratorio para este artículo. La parte práctica es un ejercicio en papel. Si leíste antes el artículo sobre la tríada CIA, el paso de impacto de más abajo te resultará conocido.
Empieza por la definición oficial. El glosario del Computer Security Resource Center del NIST define una vulnerabilidad como una debilidad en un sistema de información, en sus procedimientos de seguridad, en sus controles internos o en su implementación, que podría ser explotada o activada por una fuente de amenaza. La palabra clave es "debilidad". Una vulnerabilidad es una propiedad del sistema. Existe aunque nadie la esté buscando.
Una vulnerabilidad es una debilidad que podría usarse para causar daño. Algunos ejemplos:
Una vulnerabilidad no necesita un atacante para existir. Necesita existir en el sistema, y eso es lo primero que hay que comprobar al evaluar algo.
Una amenaza es una circunstancia, un actor o un evento que podría aprovechar una debilidad y causar daño. El NIST usa el término "fuente de amenaza" para referirse a la parte o al evento: un grupo criminal, un insider malintencionado, una inundación o un administrador que se equivoca en un archivo de configuración.
La diferencia con la vulnerabilidad está en la dirección. La vulnerabilidad describe lo que puede recibir una acción. La amenaza describe lo que puede actuar. La amenaza es potencial. No tiene que estar atacándote ahora mismo para importar.
El riesgo combina qué tan probable es un evento dañino con qué tan grave sería. La guía NIST SP 800-30 Revisión 1, para evaluación de riesgos, trata el riesgo como una función de la probabilidad y el impacto. En términos simples, el riesgo es cuán probable es que algo ocurra, ponderado por el daño si ocurre. Es un juicio, no un cálculo preciso.
Muchos equipos dibujan una matriz con probabilidad en un eje e impacto en el otro. La matriz es una herramienta para pensar. No es una medición. Dos hallazgos con la misma puntuación de severidad pueden tener riesgos muy distintos, porque la puntuación describe la falla y el riesgo describe tu entorno.
Un exploit es un método, un fragmento de código o una secuencia de pasos que usa una vulnerabilidad para producir un resultado que sus diseñadores no buscaban. La palabra puede referirse a la técnica en sí o a la herramienta que la ejecuta.
Hay dos relaciones que conviene recordar. Primero, un exploit necesita una vulnerabilidad contra la que funcionar. Segundo, una vulnerabilidad no necesita un exploit público para existir. Muchas vulnerabilidades son conocidas y nunca tienen un exploit público. Otras se activan con una entrada simple que cualquiera puede probar.
Las cuatro palabras describen una sola cadena. Aquí va en orden, usando un formulario de inicio de sesión genérico como ejemplo:
Puedes romper la cadena en varios puntos. Un límite de intentos elimina la debilidad. La autenticación de dos factores hace que un acierto sea mucho menos útil. Restringir el formulario a una red privada reduce el alcance de la amenaza. Cada control rompe un eslabón distinto, así que hay que saber en cuál estás trabajando.
En noticias de seguridad, avisos de fabricantes e informes de escáneres vas a ver dos identificadores constantemente. Responden preguntas distintas, y confundirlos es uno de los errores más comunes al empezar.
El sitio de CWE describe CWE como una lista de debilidades comunes de software y hardware, desarrollada por la comunidad. Define una debilidad como una condición en un componente de software, firmware, hardware o servicio que, bajo ciertas circunstancias, podría contribuir a la introducción de vulnerabilidades. CWE responde a la pregunta: ¿qué tipo de error es este?
Cada entrada de CWE tiene un número. La entrada para la inyección SQL es CWE-89, que trata de la neutralización inadecuada de elementos especiales en un comando SQL. La entrada para cross-site scripting es CWE-79. Estas entradas no nombran ningún producto. Describen un patrón que aparece en muchos productos y ayudan a los desarrolladores a reconocerlo antes de publicar el código.
CVE es una lista de vulnerabilidades de ciberseguridad divulgadas públicamente. Cada registro describe una falla en un producto, normalmente con las versiones afectadas y enlaces a los avisos. El identificador tiene esta forma:
CVE-AÑO-NUMEROUn ejemplo real es CVE-2021-44228, la falla de Apache Log4j 2 que se conoció como Log4Shell. El identificador dice qué falla es. El registro dice qué producto y qué versiones se ven afectados y dónde encontrar la corrección del fabricante.
CVE responde a otra pregunta: ¿qué falla concreta, en qué producto, es esta? Un mismo tipo de CWE puede tener muchos registros CVE en productos distintos, porque el mismo tipo de error se comete una y otra vez.
Al leer un registro CVE, busca el tipo de debilidad al que se asocia. Un registro asociado a CWE-89 indica que la falla es una inyección SQL, aunque el producto te resulte desconocido. Así puedes aplicar lo que sabes de la categoría a un caso nuevo. Lo inverso también ayuda: si un producto tiene un historial de un tipo de debilidad, sabes qué revisar primero.
Supón que un servicio tiene una falla conocida, pero solo escucha en la dirección de loopback de tu laptop. Ninguna otra máquina puede conectarse a él. ¿Es una vulnerabilidad? Sí. ¿El riesgo es alto? Normalmente no, porque la probabilidad es muy baja. Nadie fuera de tu laptop llega a la falla, así que ninguna fuente de amenaza puede usarla por la red.
Esta es la idea del riesgo en acción. Menos probabilidad da menos riesgo, incluso cuando el impacto sería grave. La severidad por sí sola no decide qué corregir primero.
Pero cuidado. "Hoy no hay ruta alcanzable" es una afirmación sobre un momento concreto. Algunas cosas cambian el panorama:
Así que riesgo bajo no es riesgo cero, y tampoco significa ignorar la falla. La corrección normalmente puede esperar detrás de los hallazgos que sí tienen rutas alcanzables, y conviene volver a comprobar la alcanzabilidad cada vez que cambie la red.
Muchos principiantes creen que una vulnerabilidad tiene que ser un error en el código. Esa idea es demasiado estrecha. La definición del glosario del NIST incluye la "implementación" del sistema y los "controles internos", y CWE también cubre debilidades de configuración. Un ajuste que expone datos o accesos es una debilidad, aunque ninguna línea de código esté mal.
Aquí hay un ejemplo sencillo. Este bloque de nginx activa el listado de directorios para una ruta:
location /backup/ {
autoindex on;
}No hay código roto. Nginx hace exactamente lo que dice esta línea. Pero cualquiera que pueda llegar a esa ruta ve la lista de archivos de esa carpeta, y algunos de esos archivos podrían ser copias de seguridad que nunca debieron ser públicas. La debilidad está en la configuración, y alguien puede usarla para averiguar cosas que no debería saber.
Otras configuraciones incorrectas comunes siguen la misma lógica:
Revisa tus propios sistemas de esta manera. Para cualquier ajuste que controle quién puede ver o cambiar algo, pregúntate si un desconocido podría usarlo. Si la respuesta es sí, tienes una vulnerabilidad, la haya escrito un desarrollador o la haya elegido un administrador.
No hace falta laboratorio. Toma una hoja de papel o un archivo de texto y resuelve cinco casos. Para cada uno, escribe cuatro respuestas breves: la debilidad, la fuente de amenaza probable, si hace falta un exploit para usarla y si es alcanzable desde internet o solo desde dentro de una red.
Para cada caso, escribe una frase que empiece con "El riesgo es" y añade la razón. Compara tus respuestas con el razonamiento de arriba. Los casos 1 y 4 dan las frases de riesgo más útiles, porque la alcanzabilidad y el segundo factor cambian la probabilidad del daño. El caso 5 es una configuración incorrecta que sigue siendo una vulnerabilidad aunque hoy no haya nada guardado en el bucket, porque los datos pueden llegar mañana.
Guarda tus respuestas. Cuando leas un aviso real más adelante, podrás aplicar las mismas cuatro preguntas.
Lee la entrada de vulnerabilidad en el glosario del NIST y las secciones de evaluación de riesgo de NIST SP 800-30 Revisión 1. Después abre cualquier registro CVE que te interese y localiza tres cosas: el producto y las versiones afectadas, la descripción de la falla y el mapeo CWE, si aparece. Este hábito convierte una lista de identificadores en un panorama claro, y es la habilidad central para leer avisos de seguridad.
Cuando tengas firmes los cuatro términos, la siguiente pregunta es cómo se podría alcanzar una debilidad a propósito. El artículo sobre modelado de amenazas con STRIDE muestra una forma estructurada de listar amenazas contra un sistema antes de que alguien lo ataque. Usa el mismo vocabulario que acabas de aprender, así que las distinciones de arriba te van a servir allí.
Cuando leas registros CVE con regularidad, notarás que la descripción suele nombrar la condición necesaria para activar la falla. Esa condición es tu primera comprobación de alcanzabilidad. Anótala junto a la versión afectada y tu propia exposición.
Fundamentos de seguridad
La tríada CIA explicada: confidencialidad, integridad y disponibilidad, con ejemplos, comprobaciones de hash y firma, y diez incidentes.
Fundamentos de seguridad
Aprende diagramas de flujo de datos, límites de confianza y las seis categorías STRIDE, y modela un Juice Shop local en Threat Dragon.
Fundamentos de seguridad
Qué cubre la ciberseguridad, la tríada CIA, formas comunes de falla y un primer ejercicio seguro con hashes en tu propia máquina.