Introducción

En el ámbito de la ciberseguridad, la autenticación y la autorización son dos conceptos fundamentales que garantizan que solo los usuarios legítimos puedan acceder a los recursos y que solo puedan realizar las acciones para las que están autorizados. Este módulo cubrirá los conceptos básicos, métodos comunes y mejores prácticas para implementar autenticación y autorización en sistemas de información.

Conceptos Clave

Autenticación

La autenticación es el proceso de verificar la identidad de un usuario o sistema. Este proceso asegura que el usuario es quien dice ser.

Métodos Comunes de Autenticación

  1. Contraseñas:

    • Ventajas: Simples y fáciles de implementar.
    • Desventajas: Vulnerables a ataques de fuerza bruta, phishing y robo de contraseñas.
  2. Autenticación de Dos Factores (2FA):

    • Ventajas: Añade una capa adicional de seguridad.
    • Desventajas: Puede ser incómodo para los usuarios.
  3. Biometría:

    • Ventajas: Difícil de falsificar.
    • Desventajas: Problemas de privacidad y costo.
  4. Certificados Digitales:

    • Ventajas: Alta seguridad.
    • Desventajas: Requiere infraestructura de clave pública (PKI).

Autorización

La autorización es el proceso de determinar si un usuario tiene permiso para realizar una acción específica o acceder a un recurso. Este proceso ocurre después de la autenticación.

Modelos Comunes de Autorización

  1. Control de Acceso Basado en Roles (RBAC):

    • Ventajas: Fácil de gestionar en organizaciones grandes.
    • Desventajas: Puede ser inflexible.
  2. Control de Acceso Basado en Atributos (ABAC):

    • Ventajas: Muy flexible y granular.
    • Desventajas: Complejo de implementar y gestionar.
  3. Listas de Control de Acceso (ACL):

    • Ventajas: Simples y directas.
    • Desventajas: Difíciles de gestionar en sistemas grandes.

Ejemplos Prácticos

Ejemplo de Autenticación con Contraseña

# Ejemplo básico de autenticación con contraseña en Python

# Diccionario de usuarios y contraseñas
usuarios = {
    "usuario1": "contrasena123",
    "usuario2": "contrasena456"
}

def autenticar(usuario, contrasena):
    if usuario in usuarios and usuarios[usuario] == contrasena:
        return True
    else:
        return False

# Prueba de autenticación
usuario = input("Nombre de usuario: ")
contrasena = input("Contraseña: ")

if autenticar(usuario, contrasena):
    print("Autenticación exitosa")
else:
    print("Autenticación fallida")

Ejemplo de Autorización con RBAC

# Ejemplo básico de autorización RBAC en Python

# Diccionario de roles y permisos
roles_permisos = {
    "admin": ["leer", "escribir", "borrar"],
    "usuario": ["leer"]
}

# Diccionario de usuarios y roles
usuarios_roles = {
    "usuario1": "admin",
    "usuario2": "usuario"
}

def autorizar(usuario, accion):
    rol = usuarios_roles.get(usuario)
    if rol and accion in roles_permisos.get(rol, []):
        return True
    else:
        return False

# Prueba de autorización
usuario = input("Nombre de usuario: ")
accion = input("Acción (leer, escribir, borrar): ")

if autorizar(usuario, accion):
    print("Autorización concedida")
else:
    print("Autorización denegada")

Ejercicios Prácticos

Ejercicio 1: Implementar Autenticación de Dos Factores

Descripción: Modifica el ejemplo de autenticación con contraseña para incluir un segundo factor de autenticación, como un código enviado por correo electrónico.

Solución:

import random

# Diccionario de usuarios y contraseñas
usuarios = {
    "usuario1": "contrasena123",
    "usuario2": "contrasena456"
}

# Función para enviar código de verificación (simulado)
def enviar_codigo_verificacion():
    return random.randint(100000, 999999)

def autenticar(usuario, contrasena):
    if usuario in usuarios and usuarios[usuario] == contrasena:
        codigo = enviar_codigo_verificacion()
        print(f"Código de verificación enviado: {codigo}")
        codigo_ingresado = int(input("Ingrese el código de verificación: "))
        if codigo == codigo_ingresado:
            return True
    return False

# Prueba de autenticación
usuario = input("Nombre de usuario: ")
contrasena = input("Contraseña: ")

if autenticar(usuario, contrasena):
    print("Autenticación exitosa")
else:
    print("Autenticación fallida")

Ejercicio 2: Implementar Control de Acceso Basado en Atributos (ABAC)

Descripción: Implementa un sistema de autorización basado en atributos donde los permisos dependen de atributos como la hora del día o la ubicación del usuario.

Solución:

from datetime import datetime

# Diccionario de usuarios y atributos
usuarios_atributos = {
    "usuario1": {"rol": "admin", "ubicacion": "oficina"},
    "usuario2": {"rol": "usuario", "ubicacion": "remoto"}
}

# Diccionario de roles y permisos
roles_permisos = {
    "admin": ["leer", "escribir", "borrar"],
    "usuario": ["leer"]
}

def autorizar(usuario, accion):
    atributos = usuarios_atributos.get(usuario)
    if atributos:
        rol = atributos.get("rol")
        ubicacion = atributos.get("ubicacion")
        hora_actual = datetime.now().hour
        
        # Ejemplo de regla ABAC: los usuarios solo pueden escribir durante el horario laboral y desde la oficina
        if accion == "escribir" and (hora_actual < 9 or hora_actual > 17 or ubicacion != "oficina"):
            return False
        
        if rol and accion in roles_permisos.get(rol, []):
            return True
    return False

# Prueba de autorización
usuario = input("Nombre de usuario: ")
accion = input("Acción (leer, escribir, borrar): ")

if autorizar(usuario, accion):
    print("Autorización concedida")
else:
    print("Autorización denegada")

Resumen

En esta sección, hemos cubierto los conceptos fundamentales de autenticación y autorización, incluyendo métodos comunes y ejemplos prácticos. La autenticación asegura que los usuarios son quienes dicen ser, mientras que la autorización determina qué acciones pueden realizar. Ambos procesos son esenciales para proteger los sistemas y datos contra accesos no autorizados.

Puntos Clave

  • Autenticación: Verificación de identidad mediante contraseñas, 2FA, biometría y certificados digitales.
  • Autorización: Control de acceso basado en roles (RBAC), atributos (ABAC) y listas de control de acceso (ACL).
  • Ejemplos Prácticos: Implementación de autenticación con contraseña y 2FA, y autorización con RBAC y ABAC.

Con estos conocimientos, estás preparado para implementar y gestionar sistemas de autenticación y autorización en tus proyectos de ciberseguridad. En el próximo módulo, exploraremos los fundamentos de la criptografía básica.

© Copyright 2024. Todos los derechos reservados