Fundamentos de Ciberseguridad: Control de Acceso, Protocolos y Vulnerabilidades
Clasificado en Informática
Escrito el en
español con un tamaño de 21,88 KB
DAC (Discretionary Access Control): modelo de control de acceso en el que el propietario del objeto determina la política de acceso, decidiendo qué sujetos pueden acceder y con qué permisos. Los usuarios pueden conceder o revocar permisos sobre sus propios recursos. Es un modelo muy flexible y sencillo de administrar, utilizado en la mayoría de sistemas operativos, aunque presenta como inconvenientes la posibilidad de conceder permisos incorrectamente, la propagación incontrolada de información y la vulnerabilidad frente al Trojan Horse. MAC (Mandatory Access Control): modelo de control de acceso en el que la política de seguridad es impuesta por el sistema mediante etiquetas de seguridad asignadas a sujetos y objetos, impidiendo que los usuarios modifiquen dicha política. Proporciona un mayor nivel de seguridad y evita fugas de información, siendo adecuado para entornos militares o con información clasificada, aunque resulta menos flexible y más complejo de administrar. Diferencia principal: en DAC decide el propietario del recurso, mientras que en MAC decide el sistema operativo mediante una política de seguridad basada en etiquetas.
Sistema tradicional de permisos UNIX: controla el acceso mediante tres categorías de usuarios (User, Group y Other) y tres permisos (Read, Write y Execute). Cada fichero o directorio posee un propietario y un grupo asociados, y los permisos se representan mediante la combinación de los bits rwx. Su principal ventaja es la simplicidad, rapidez y bajo coste de administración, mientras que su principal limitación es la escasa granularidad, ya que únicamente permite asignar permisos a tres categorías, sin poder definir permisos específicos para usuarios o grupos concretos.
POSIX ACL (Access Control Lists): extiende el sistema tradicional de permisos UNIX permitiendo asignar permisos específicos a usuarios y grupos individuales, proporcionando un control de acceso mucho más flexible. Una ACL mínima contiene únicamente las entradas user::, group:: y other::, siendo equivalente al sistema tradicional UNIX. Una ACL extendida incorpora además entradas user:usuario, group:grupo y la entrada mask::, que limita el permiso efectivo de todos los usuarios y grupos definidos en la ACL, excepto el propietario (owner) y other. La Access ACL define los permisos efectivos del propio fichero o directorio, mientras que la Default ACL, disponible únicamente en directorios, define los permisos que heredarán automáticamente los nuevos archivos y subdirectorios creados en él. Las ACL proporcionan una gran flexibilidad y un control mucho más preciso que los permisos UNIX tradicionales, aunque incrementan la complejidad de administración y mantenimiento.
Linux Security Modules (LSM): infraestructura del kernel Linux que permite implementar diferentes mecanismos de seguridad sin modificar el núcleo del sistema operativo. Su objetivo es proporcionar un marco común para implementar políticas de Mandatory Access Control. Las implementaciones más importantes son SELinux, AppArmor y Smack. SELinux implementa un modelo MAC basado en etiquetas (labels), asignando un contexto de seguridad a cada proceso y objeto del sistema. Dispone de tres modos de funcionamiento: Enforcing, que aplica la política bloqueando accesos no autorizados; Permissive, que únicamente registra las violaciones de la política sin bloquearlas; y Disabled, que desactiva completamente SELinux. Proporciona un control muy granular y un alto nivel de seguridad, aunque su configuración y administración resultan complejas. AppArmor implementa un modelo MAC basado en perfiles asociados a rutas de archivos, siendo considerablemente más sencillo de configurar y administrar que SELinux, aunque también menos potente y flexible. Funciona principalmente en los modos Enforce y Complain, este último utilizado para registrar violaciones sin impedir el acceso. Smack (Simplified Mandatory Access Control Kernel) implementa un modelo MAC simplificado basado igualmente en etiquetas de seguridad, diseñado para facilitar la administración del sistema y ampliamente utilizado en sistemas embebidos e IoT.
IP: protocolo de nivel de red encargado del direccionamiento y encaminamiento de paquetes entre diferentes redes. Proporciona un servicio no orientado a conexión y de mejor esfuerzo (best effort), por lo que no garantiza la entrega, el orden de los paquetes ni la ausencia de duplicados. Su única función es transportar paquetes desde el origen hasta el destino utilizando direcciones IP.
TCP : protocolo de transporte orientado a conexión, fiable y full-dúplex. Antes de transmitir datos establece una conexión mediante el Three-Way Handshake (SYN → SYN/ACK → ACK) y garantiza la entrega correcta de los datos mediante numeración de secuencia, confirmaciones (ACK), retransmisiones y control de flujo. Es utilizado por protocolos como HTTP, HTTPS, FTP o SSH. Su principal ventaja es la fiabilidad, mientras que su principal inconveniente es la mayor sobrecarga y latencia respecto a UDP.
UDP protocolo de transporte no orientado a conexión, muy ligero y rápido, que no garantiza la entrega, el orden de los paquetes ni la ausencia de duplicados. No realiza control de errores ni retransmisiones, por lo que presenta menor sobrecarga que TCP. Es utilizado en aplicaciones donde prima la velocidad frente a la fiabilidad, como DNS, VoIP, streaming o videojuegos online.
Descubrimiento de hosts (Host Discovery): conjunto de técnicas utilizadas para determinar qué equipos se encuentran activos en una red antes de realizar un escaneo de puertos. Su objetivo es identificar direcciones IP activas, reducir el tiempo de escaneo y limitar el tráfico innecesario. ICMP Ping envía mensajes ICMP Echo Request esperando recibir un Echo Reply del host. TCP Ping envía normalmente un paquete SYN a un puerto conocido; si recibe un SYN/ACK o incluso un RST, el host está activo. UDP Ping envía un datagrama UDP a un puerto normalmente cerrado; si el host responde con ICMP Port Unreachable, significa que el host está activo aunque el puerto esté cerrado.
Escaneo de puertos (Port Scanning): técnica utilizada para determinar el estado de los puertos de un sistema (abiertos, cerrados o filtrados), identificar servicios y versiones, detectar el sistema operativo y localizar posibles vulnerabilidades. TCP Connect Scan completa el Three-Way Handshake utilizando la llamada connect(), por lo que no requiere privilegios de administrador, aunque resulta fácilmente detectable. TCP SYN Scan envía un SYN y, tras recibir el SYN/ACK, responde con un RST sin completar la conexión, siendo más rápido y discreto, aunque requiere privilegios elevados. TCP FIN Scan envía un segmento FIN; según RFC 793, los puertos cerrados responden con RST y los abiertos ignoran el paquete. TCP NULL Scan envía un segmento sin flags activados, siguiendo el mismo comportamiento que FIN Scan. TCP Xmas Scan activa simultáneamente las banderas FIN, PSH y URG, utilizando igualmente la diferencia de comportamiento entre puertos abiertos y cerrados. TCP Idle Scan utiliza un tercer host (zombie) para realizar un escaneo completamente anónimo aprovechando el campo IP ID, permitiendo ocultar la dirección IP real del atacante.
Objetivos del descubrimiento de hosts: identificar qué máquinas están activas, reducir el tiempo de exploración, evitar escanear equipos apagados y obtener una visión inicial de la red objetivo.
Objetivos del escaneo de puertos: identificar puertos abiertos, servicios disponibles, versiones de software, sistema operativo del objetivo, posibles vulnerabilidades y preparar fases posteriores de explotación.
Smurf Attack: ataque de denegación de servicio distribuido que utiliza mensajes ICMP Echo Request enviados a una dirección de broadcast, falsificando la dirección IP de origen con la dirección de la víctima. Todos los equipos de la red responden simultáneamente mediante ICMP Echo Reply, provocando una amplificación del tráfico y saturando a la víctima. RIP Attack: ataque dirigido contra el protocolo Routing Information Protocol (RIP) en el que un atacante envía anuncios de rutas falsas para modificar las tablas de encaminamiento de los routers, pudiendo redirigir tráfico, provocar ataques Man-in-the-Middle o causar denegaciones de servicio.
ICMP Attack (ICMP Flood): ataque de denegación de servicio basado en el envío masivo de paquetes ICMP (habitualmente Echo Request) con el objetivo de consumir el ancho de banda y los recursos de procesamiento de la víctima, impidiendo el acceso legítimo al servicio.
UDP Amplification Attack: ataque de reflexión y amplificación que aprovecha servidores UDP abiertos (como DNS, NTP, SSDP o Memcached). El atacante falsifica la dirección IP de origen con la dirección de la víctima y envía pequeñas peticiones UDP; los servidores responden con mensajes mucho mayores dirigidos a la víctima, amplificando considerablemente el volumen del ataque.
HTTP (HyperText Transfer Protocol): protocolo de nivel de aplicación utilizado para la comunicación entre clientes y servidores web. Sigue un modelo cliente-servidor, es un protocolo sin estado (stateless), ya que cada petición es independiente de las anteriores, y funciona normalmente sobre TCP (puerto 80). Se basa en un intercambio de peticiones (request) y respuestas (response). Los métodos más importantes son GET (solicita recursos), POST (envía datos al servidor), PUT (actualiza recursos), DELETE (elimina recursos), HEAD (obtiene únicamente las cabeceras) y OPTIONS (consulta los métodos soportados por el servidor). Los códigos de estado más importantes son 200 OK, 301/302 Redirect, 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found y 500 Internal Server Error. Al ser un protocolo sin estado, utiliza mecanismos como las cookies para mantener la sesíón del usuario entre diferentes peticiones.
HTTPS (HTTP Secure): versión segura de HTTP que encapsula la comunicación dentro de un canal TLS, proporcionando confidencialidad, integridad y autenticación mediante certificados digitales. Utiliza normalmente el puerto 443 y evita que terceros puedan leer o modificar la información intercambiada durante la comunicación.
Ataques de inyección (Injection Attacks): vulnerabilidades que aparecen cuando una aplicación incorpora directamente datos proporcionados por el usuario dentro de un intérprete (SQL, sistema operativo, LDAP, XML, etc.) sin validarlos adecuadamente, permitiendo que el atacante introduzca instrucciones maliciosas que serán ejecutadas por dicho intérprete. Pasos generales: el atacante introduce una entrada manipulada → la aplicación no valida ni sanitiza los datos → el intérprete ejecuta la entrada como parte del comando → el atacante obtiene acceso, modifica información o ejecuta acciones no autorizadas. Mitigaciones: validar todas las entradas, utilizar listas blancas, emplear consultas preparadas (Prepared Statements) o parametrizadas, aplicar el principio de mínimo privilegio y escapar correctamente los caracteres especiales.
SQL Injection: vulnerabilidad que permite modificar la consulta SQL original introduciendo instrucciones SQL a través de los datos de entrada de la aplicación. Puede permitir autenticarse sin conocer la contraseña, leer información confidencial, modificar registros, eliminar tablas o incluso ejecutar comandos sobre el servidor si existen vulnerabilidades adicionales. Pasos: localizar un parámetro vulnerable → introducir código SQL malicioso → la aplicación concatena la entrada con la consulta → el servidor ejecuta la consulta modificada → el atacante obtiene acceso o información. Mitigaciones: consultas preparadas (Prepared Statements), validación de entradas, escape de caracteres especiales, cuentas de base de datos con privilegios mínimos y mensajes de error no informativos.
Cross-Site Scripting (XSS): vulnerabilidad que permite al atacante inyectar código JavaScript malicioso que será ejecutado en el navegador de la víctima debido a una validación insuficiente de los datos de entrada o salida. El código no se ejecuta en el servidor, sino en el navegador del usuario, pudiendo robar cookies de sesíón, modificar el contenido de la página, redirigir al usuario o capturar información introducida en formularios. XSS Reflejado: el código malicioso viaja dentro de la petición HTTP y el servidor lo refleja inmediatamente en la respuesta sin almacenarlo; normalmente requiere que la víctima acceda a un enlace manipulado. XSS Almacenado: el código malicioso se almacena permanentemente en el servidor (comentarios, foros, perfiles de usuario, etc.) y se ejecuta automáticamente cada vez que otros usuarios acceden al contenido comprometido. Pasos: el atacante introduce un script → la aplicación no valida ni escapa correctamente la entrada → el script llega al navegador → el navegador lo ejecuta con los privilegios del sitio web. Mitigaciones: validar entradas, escapar la salida (output encoding), utilizar Content Security Policy (CSP), marcar las cookies como HttpOnly y Secure, y evitar insertar directamente datos del usuario dentro del HTML.
File Inclusión: vulnerabilidad que permite a un atacante conseguir que la aplicación cargue archivos distintos de los previstos inicialmente. Local File Inclusión (LFI): permite incluir archivos existentes en el propio servidor, pudiendo acceder a ficheros sensibles como /etc/passwd, archivos de configuración o registros del sistema. Remote File Inclusión (RFI): permite incluir archivos ubicados en servidores remotos controlados por el atacante, posibilitando en muchos casos la ejecución remota de código. Pasos: localizar un parámetro que carga archivos → modificar la ruta del archivo → la aplicación no valida correctamente la entrada → se carga un archivo local o remoto no autorizado → el atacante obtiene acceso a información o ejecuta código. Mitigaciones: utilizar listas blancas de archivos permitidos, validar estrictamente las rutas, impedir secuencias de recorrido de directorios (../), deshabilitar las inclusiones remotas cuando sea posible y evitar construir rutas directamente a partir de la entrada del usuario.
DNS Cache Poisoning: ataque que consiste en introducir registros DNS falsificados en la memoria caché de un servidor DNS para que las futuras consultas devuelvan una dirección IP controlada por el atacante en lugar de la dirección legítima. Funcionamiento: el atacante envía respuestas DNS falsas antes que el servidor legítimo; si el resolvedor acepta la respuesta fraudulenta, almacena el registro en caché y todos los clientes que consulten ese dominio serán redirigidos al servidor del atacante hasta que expire el TTL. Las consecuencias principales son la suplantación de páginas web, el robo de credenciales, ataques Man-in-the-Middle y la distribución de malware. Mitigaciones: utilización de DNSSEC, aleatorización del Transaction ID y del puerto origen, reducción del TTL y validación de las respuestas DNS. Principio de Saltzer y Schroeder vulnerado: Complete Mediation, ya que el acceso se decide utilizando información almacenada en caché sin volver a comprobar su validez.
Buffer Overflow: vulnerabilidad que aparece cuando una aplicación escribe más datos de los que puede almacenar un buffer, sobrescribiendo posiciones de memoria adyacentes. Generalmente se produce por no validar correctamente la longitud de los datos introducidos por el usuario o por utilizar funciones inseguras como gets(), strcpy(), strcat() o sprintf(). Sus consecuencias pueden ser la corrupción de memoria, la caída de la aplicación, la modificación del flujo de ejecución o la ejecución arbitraria de código con los privilegios del proceso vulnerable. Mitigaciones: validar siempre el tamaño de las entradas, utilizar funciones seguras (fgets(), strncpy(), snprintf()), emplear mecanismos de protección como Stack Canaries, ASLR (Address Space Layout Randomization), DEP/NX (Data Execution Prevention) y realizar una correcta comprobación de los límites de los buffers. Si en el examen te dan un código vulnerable, normalmente bastará con indicar que no valida la longitud de la entrada, explicar las consecuencias del desbordamiento y proponer la sustitución de funciones inseguras por alternativas seguras.
TLS (Transport Layer Security): protocolo criptográfico diseñado para proporcionar confidencialidad, integridad y autenticación en las comunicaciones entre cliente y servidor. Sustituye a SSL y se utiliza principalmente para proteger protocolos como HTTPS, SMTP o IMAP. Durante el TLS Handshake, cliente y servidor negocian la versión del protocolo, el algoritmo criptográfico, intercambian certificados digitales y establecen las claves de sesíón que protegerán la comunicación.
TLS 1.2: permite múltiples algoritmos de intercambio de claves y cifrado, utiliza un handshake más largo y mantiene compatibilidad con algoritmos considerados actualmente inseguros, por lo que ofrece una mayor compatibilidad pero una menor seguridad y rendimiento.TLS 1.3: simplifica el handshake reduciendo el número de mensajes intercambiados, elimina algoritmos inseguros, obliga al uso de algoritmos modernos y proporciona Forward Secrecy de forma obligatoria mediante intercambios efímeros (ECDHE), mejorando tanto el rendimiento como la seguridad frente a TLS 1.2.
Diferencias entre TLS 1.2 y TLS 1.3: TLS 1.3 reduce el tiempo de establecimiento de la conexión, elimina algoritmos criptográficos obsoletos, simplifica la negociación, mejora el rendimiento y proporciona un mayor nivel de seguridad. TLS 1.2 mantiene una mayor compatibilidad con sistemas antiguos, aunque permite el uso de algoritmos actualmente considerados débiles.
Validación del certificado: durante el establecimiento de la conexión TLS el cliente comprueba que el certificado ha sido emitido por una Autoridad de Certificación (CA) de confianza, que el nombre del dominio coincide con el certificado, que el certificado no ha expirado y que no ha sido revocado mediante mecanismos como CRL (Certificate Revocation List) u OCSP (Online Certificate Status Protocol). Si cualquiera de estas comprobaciones falla, la conexión no debe considerarse segura.
HPKP (HTTP Public Key Pinning): mecanismo que permitía a un servidor indicar al navegador qué claves públicas eran válidas para ese dominio, evitando ataques basados en certificados fraudulentos emitidos por Autoridades de Certificación comprometidas. Aunque mejoraba la seguridad frente a determinados ataques Man-in-the-Middle, fue retirado debido a problemas de administración y al riesgo de dejar inaccesible un sitio web por una configuración incorrecta.
Interceptación TLS (TLS Interception): técnica utilizada por algunos proxies corporativos y dispositivos de seguridad para inspeccionar tráfico HTTPS. El proxy termina la conexión TLS del cliente, descifra el contenido, inspecciona el tráfico y establece una segunda conexión TLS con el servidor de destino. Para que el navegador no detecte el ataque es necesario instalar previamente en el cliente el certificado de la Autoridad de Certificación del proxy. Aunque permite inspeccionar el tráfico cifrado, rompe el cifrado extremo a extremo y aumenta la superficie de confianza del sistema.