Joven hacker sonriendo

Hackeamos su software

cero falsos positivos

Atacando Aplicaciones, APIs, Apps Móviles, Servidores Redes, Dispositivos IoT
SCI: Sistemas de Control Industrial
COS: Centro de Operaciones de Seguridad

Conocer los Privilegios RBAC de un Proceso

Nuestros ethical hackers explican cómo evitar vulnerabilidades de seguridad mediante la asignación segura de privilegios root a usuarios no privilegiados. Es importante establecer privilegios para restringir el acceso a partes críticas de la aplicación a usuarios sin permisos.

Necesidad

Conocer los privilegios RBAC de un proceso y/o del sistema en AIX.

Contexto

A continuación se describen las circunstancias bajo las cuales la siguiente solución tiene sentido:

  1. Se dispone de un sistema operativo AIX versión 6 o superior.

  2. Se dispone de acceso a la interfaz de comandos (CLI) del sistema anterior.

Solución

  1. Un sistema Unix tradicional realiza múltiples verificaciones de seguridad dentro de las llamadas al sistema, por ejemplo:

    • Si el EUID (UID efectivo) del proceso tiene los privilegios para invocar dicha llamada al sistema.

    • Si el EUID (UID efectivo) del proceso es 0 (root).

  2. Por ejemplo, el código fuente de una llamada al sistema tendría la siguiente verificación para permitir que dicha llamada al sistema solo fuera ejecutada por el usuario root:

    test.sh
    1
    ... if (getuid() == 0) { /* acción privilegiada */ } ...
    
  3. Con este mecanismo de control, un usuario que requiera ejecutar dicha llamada al sistema o acción privilegiada, requiere:

    • Permisos de ejecución en el comando que ejecuta la llamada al sistema.

    • Conocer la contraseña de root para iniciar una shell y ejecutar el comando.

    • O el comando en cuestión debe tener habilitado el bit SUID.

  4. Debido a esta situación, y a la necesidad permanente de estar otorgando privilegios de root a usuarios no privilegiados para que puedan ejecutar tareas administrativas[1], AIX ha definido un sistema de control de acceso llamado RBAC o Role Based Access Control.

  5. En este tipo de sistema de control de acceso, las verificaciones de acceso a las llamadas al sistema ocurren dentro del núcleo así:

    1
    ... if ("getprivs() == PV_XXX") { /* acción privilegiada */ } ...
    
  6. Esto significa que las acciones privilegiadas del núcleo no ocurrirán dependiendo del EUID del proceso, sino dependiendo de los privilegios que tenga asignado el proceso.

  7. Esto implica que el sistema operativo AIX define unos privilegios específicos (estándar, fijos, aproximadamente 100) que se pueden asignar a un proceso y con los cuales se harán las verificaciones correspondientes dentro de las llamadas al sistema.

  8. Los privilegios definidos para un sistema AIX pueden verse mediante la orden:

    1
    2
    3
    4
    5
    6
    7
    % lspriv
    PV_ROOT
    PV_AU_
    PV_AU_ADD
    PV_AU_ADMIN
    PV_AU_READ
    ...
    
  9. La orden anterior al ser ejecutada y acompañada del parámetro -v muestra el significado de cada privilegio:

    1
    2
    3
    4
    5
    6
    7
    % lspriv -v
    PV_ROOT Allows a process to pass any non-SU privilege check.
    PV_AU_ Equivalent to all Auditing privileges (PV_AU_*) combined.
    PV_AU_ADD Allows a process to record/add an audit record.
    PV_AU_ADMIN Allows a process to configure and query the audit system.
    PV_AU_READ Allows a process to read a file marked as an audit file.
    ...
    
  10. Como puede observarse a partir de los nombres de los privilegios, estos forman una jerarquía, de forma que pueda asignarse privilegios a un proceso con granularidad fina (detallada) o gruesa (agrupada).

  11. La jerarquía de privilegios es la siguiente[2]:

    Tabla 1. Jerarquía de nombres de privilegios.
    Privilegio Significado Número de Privilegios

    PV_NET_.

    Privilegios sobre las llamadas al sistema relacionadas con la red.

    4.

    PV_FS_.

    Privilegios sobre las llamadas al sistema relacionadas con sistemas de archivos.

    9.

    PV_AU_.

    Privilegios sobre las llamadas al sistema relacionadas con auditoria.

    5.

    PV_KER_.

    Privilegios sobre las llamadas al sistema relacionadas con el núcleo (kernel).

    21.

    PV_PROC_.

    Privilegios sobre las llamadas al sistema relacionadas con los procesos.

    13.

    PV_DAC_.

    Privilegios sobre las llamadas al sistema relacionadas con los autorización.

    7.

    PV_SU_.

    Todos los privilegios propios del super-administrador.

    3.

    PV_ROOT.

    Todos los privilegios excepto los de PV_SU_.

    -.

  12. Finalmente puede observarse los privilegios que un programa requiere para ejecutarse mediante la siguiente orden:

    1
    # tracepriv -ef {comando}
    
  13. Por ejemplo, para conocer los privilegios necesarios para ejecutar el comando /usr/bin/chgrp se realizará:

    1
    2
    # touch /tmp/file # cp /usr/bin/chgrp /usr/bin/chgrpr # tracepriv -ef /usr/bin/chgrpr security /tmp/file
    557304: Used privileges for /usr/bin/chgrpr: PV_DAC_O PV_FS_CHOWN
    
  14. Indicando que para ejecutar el comando /usr/bin/chgrpr los privilegios requeridos para ejecutar el mismo en modo RBAC (verificación a partir de privilegios y no verificación a partir de credenciales DAC) son: PV_DAC_O y PV_FS_CHOWN.




Haz un comentario

Estado de los servicios - Términos de Uso