Posts etiquetados ‘Hardening’

Actualmente mantener seguro un sistema se vuelve una necesidad mas que impecable.

Rara vez pasa un día sin noticias sobre un nuevo exploit para alguna vulnerabilidad, un método más eficaz de distribuir SPAM o algún robo de datos personales y/o confidenciales de una empresa y/o organismo gubernamental (vamos todos podemos recordar ahora que esta presente el caso de PSN-Sony, RSA, el RENAUT, etc).

La seguridad es un reto permanente (y seguramente imposible), no hay escasez de tecnología diseñada para frustrar los asaltos a la informática, y sin embargo se siguen poniendo en peligro (y con mucho éxito) los sistemas y las redes… y claro el factor común en todos es el “Error o descuido” humano… desde el propio código que se genera, hasta la administración que realizan los “Sysadmins”.

El parche que les presento es para el kernel de linux en su versión 2.6.38.5 y  combina las funcionalidad des dos grandes de la seguridad RSBac  y PAX. Para todos aquellos que no conozcan estos proyectos les doy una introducción, sin embargo los exhorto a conocerlos desde sus páginas.

RSBAC (Rule Set Based Access Control), es a grandes rasgos un framework para el control de acceso. Su característica principal es su modularidad y se puede decir que es una implementación de la Estructura Generalizada para el Control de Acceso (GFAC) de Abrams y LaPadula. Las decisiones para validar la operación que se solicita, se basan en el tipo de acceso, el motivo del mismo, los atributos del solicitante y el objetivo. Esto implica que hasta los accesos a la red pueden ser controlados por individuo y/o por aplicación.

PAX es un parche hacia el kernel que introduce mecanismos adicionales de protección contra bugs en el software protegiendonos de ataques de corrupción de memoria. Para realizar esta protección hace uso de dos “técnicas”:

  1. NOEXEC, que marca los segmentos de memoria donde residen la pila y el heap como no ejecutables, de forma de forma que aquellos exploits que se alojen en estás áreas simplemente fallarán.
  2. ASLR(Address Space Layout Randomization), que asigna de manera aleatoria las direcciones dadas a peticiones de accesos de memoria, haciendo inútiles los exploits que dependen del manejo contiguo de direcciones para saber donde están situadas las regiones de memoria de las tareas.

Es importante saber que el principal objetivo de PAX no es descubrir o arreglar bugs en los desarrollos, sino protegernos contra ataques hacia estas deficiencias de programación.

La instalación del parche es muy sencilla, solo debemos descargar la versión del kernel 2.6.38.5 desde aquí y seguidamente obtener el parche desde aquí o desde aquí. Ahora bien la aplicación del parche, configuración del kernel y la instalación (a la debian), la describo a continuación:

  • Descomprimimos el kernel en una ruta, digamos $KERNEL_SOURCE_DIR
  • Copiamos el parche dentro de $KERNEL_SOURCE_DIR
  • Aplicamos el parche: patch -p0 < patch_linux2.6.38.5_pax_rsbac_1.4.5.patch
  • Entramos a la carpeta que tiene los fuentes del kernel, carpeta que denominaremos $KERNEL_SOURCE.
  • Limpiamos el kernel, para ello podemos hacer un make clean o make-kpkg clean, este último lo podemos encontrar en los repositorios de Debian y es la herramienta que usaremos para instalar el kernel. Si desean mas información sobre este comando pueden consultar su manual o este excelente tutorial
  • Hacemos un make menuconfig para configurar las opciones del kernel. Si poseen un kernel anterior pueden copiar el .config. La configuración de PAX y RSbac se encuentran en la sección Security, y pueden tomar como base las siguientes configuraciones, para PAX:

    # PaX Control
    #
    CONFIG_PAX_SOFTMODE=y
    CONFIG_PAX_EI_PAX=y
    CONFIG_PAX_PT_PAX_FLAGS=y
    # CONFIG_PAX_NO_ACL_FLAGS is not set
    CONFIG_PAX_HAVE_ACL_FLAGS=y
    # CONFIG_PAX_HOOK_ACL_FLAGS is not set
    #
    # Non-executable pages
    #
    CONFIG_PAX_NOEXEC=y
    CONFIG_PAX_PAGEEXEC=y
    CONFIG_PAX_SEGMEXEC=y
    CONFIG_PAX_EMUTRAMP=y
    CONFIG_PAX_MPROTECT=y
    CONFIG_PAX_ELFRELOCS=y
    #
    # Address Space Layout Randomization
    #
    CONFIG_PAX_ASLR=y
    CONFIG_PAX_RANDKSTACK=y
    CONFIG_PAX_RANDUSTACK=y
    CONFIG_PAX_RANDMMAP=y
    #
    # Miscellaneous hardening features
    #
    CONFIG_PAX_MEMORY_SANITIZE=y
    # CONFIG_PAX_MEMORY_STACKLEAK is not set
    CONFIG_PAX_REFCOUNT=y

    Y para RSbac:

    # Security options
    #
    CONFIG_RSBAC=y
    #
    # General RSBAC options
    #
    # CONFIG_RSBAC_INIT_THREAD is not set
    CONFIG_RSBAC_PROC=y
    CONFIG_RSBAC_INIT_CHECK=y
    # CONFIG_RSBAC_NO_WRITE is not set
    # CONFIG_RSBAC_MSDOS_WRITE is not set
    CONFIG_RSBAC_AUTO_WRITE=5
    CONFIG_RSBAC_RCU_RATE=1000
    CONFIG_RSBAC_LIST_MAX_HASHES=128
    CONFIG_RSBAC_LIST_CHECK_INTERVAL=1800
    CONFIG_RSBAC_LIST_STATS=y
    CONFIG_RSBAC_LIST_TRANS=y
    CONFIG_RSBAC_LIST_TRANS_MAX_TTL=3600
    CONFIG_RSBAC_LIST_TRANS_RANDOM_TA=y
    # CONFIG_RSBAC_FD_CACHE is not set
    CONFIG_RSBAC_DEBUG=y
    # CONFIG_RSBAC_DEV_USER_BACKUP is not set
    CONFIG_RSBAC_SECOFF_UID=666
    # CONFIG_RSBAC_INIT_DELAY is not set
    CONFIG_RSBAC_GEN_NR_P_LISTS=4
    CONFIG_RSBAC_UM=y
    CONFIG_RSBAC_UM_DIGEST=y
    CONFIG_RSBAC_UM_USER_MIN=2000
    CONFIG_RSBAC_UM_GROUP_MIN=2000
    CONFIG_RSBAC_UM_EXCL=y
    CONFIG_RSBAC_UM_MIN_PASS_LEN=6
    CONFIG_RSBAC_UM_NON_ALPHA=y
    CONFIG_RSBAC_UM_PWHISTORY=y
    CONFIG_RSBAC_UM_PWHISTORY_MAX=8
    CONFIG_RSBAC_UM_ONETIME=y
    CONFIG_RSBAC_UM_ONETIME_MAX=100
    CONFIG_RSBAC_UM_VIRTUAL=y
    CONFIG_RSBAC_UM_VIRTUAL_ISOLATE=y

    #
    # RSBAC networking options
    #
    CONFIG_RSBAC_NET=y
    CONFIG_RSBAC_NET_DEV=y
    # CONFIG_RSBAC_NET_DEV_VIRT is not set
    CONFIG_RSBAC_IND_NETDEV_LOG=y
    CONFIG_RSBAC_NET_OBJ=y
    # CONFIG_RSBAC_NET_OBJ_RW is not set
    CONFIG_RSBAC_IND_NETOBJ_LOG=y
    # CONFIG_RSBAC_MAINT is not set
    #
    # Decision modules (policy) options
    #
    CONFIG_RSBAC_REG=y
    CONFIG_RSBAC_REG_SAMPLES=y
    CONFIG_RSBAC_AUTH=y
    CONFIG_RSBAC_AUTH_AUTH_PROT=y
    CONFIG_RSBAC_AUTH_OTHER_PROT=y
    CONFIG_RSBAC_AUTH_UM_PROT=y
    # CONFIG_RSBAC_AUTH_DAC_OWNER is not set
    # CONFIG_RSBAC_AUTH_ALLOW_SAME is not set
    # CONFIG_RSBAC_AUTH_GROUP is not set
    # CONFIG_RSBAC_AUTH_LEARN is not set
    CONFIG_RSBAC_RC=y
    CONFIG_RSBAC_RC_AUTH_PROT=y
    CONFIG_RSBAC_RC_UM_PROT=y
    CONFIG_RSBAC_RC_GEN_PROT=y
    # CONFIG_RSBAC_RC_BACKUP is not set
    CONFIG_RSBAC_RC_NET_DEV_PROT=y
    CONFIG_RSBAC_RC_NET_OBJ_PROT=y
    CONFIG_RSBAC_RC_NET_OBJ_UNIX_PROCESS=y
    CONFIG_RSBAC_RC_LEARN=y
    CONFIG_RSBAC_RC_LEARN_TA=0
    CONFIG_RSBAC_RC_NR_P_LISTS=8
    CONFIG_RSBAC_RC_KERNEL_PROCESS_TYPE=999999
    CONFIG_RSBAC_ACL=y
    # CONFIG_RSBAC_ACL_SUPER_FILTER is not set
    CONFIG_RSBAC_ACL_AUTH_PROT=y
    CONFIG_RSBAC_ACL_UM_PROT=y
    CONFIG_RSBAC_ACL_GEN_PROT=y
    # CONFIG_RSBAC_ACL_BACKUP is not set
    CONFIG_RSBAC_ACL_LEARN=y
    CONFIG_RSBAC_ACL_LEARN_TA=0
    CONFIG_RSBAC_ACL_NET_DEV_PROT=y
    CONFIG_RSBAC_ACL_NET_OBJ_PROT=y
    CONFIG_RSBAC_MAC=y
    CONFIG_RSBAC_MAC_DEF_INHERIT=y
    CONFIG_RSBAC_MAC_SMART_INHERIT=y
    CONFIG_RSBAC_MAC_AUTH_PROT=y
    CONFIG_RSBAC_MAC_UM_PROT=y
    CONFIG_RSBAC_MAC_GEN_PROT=y
    # CONFIG_RSBAC_MAC_LIGHT is not set
    CONFIG_RSBAC_MAC_TRUSTED_READ=y
    # CONFIG_RSBAC_MAC_RESET_CURR is not set
    CONFIG_RSBAC_MAC_LOG_LEVEL_CHANGE=y
    CONFIG_RSBAC_MAC_NET_DEV_PROT=y
    CONFIG_RSBAC_MAC_NET_OBJ_PROT=y
    CONFIG_RSBAC_MAC_NR_P_LISTS=4
    CONFIG_RSBAC_PAX=y
    CONFIG_RSBAC_PAX_DEFAULT=y
    CONFIG_RSBAC_PAX_PAGEEXEC=y
    CONFIG_RSBAC_PAX_EMUTRAMP=y
    CONFIG_RSBAC_PAX_MPROTECT=y
    CONFIG_RSBAC_PAX_RANDMMAP=y
    CONFIG_RSBAC_PAX_RANDEXEC=y
    CONFIG_RSBAC_PAX_SEGMEXEC=y
    CONFIG_RSBAC_DAZ=y
    CONFIG_RSBAC_DAZ_SELECT=y
    CONFIG_RSBAC_DAZ_CACHE=y
    CONFIG_RSBAC_DAZ_TTL=86400
    # CONFIG_RSBAC_DAZ_PERSIST is not set
    CONFIG_RSBAC_DAZ_DEV_MAJOR=250
    CONFIG_RSBAC_CAP=y
    CONFIG_RSBAC_CAP_PROC_HIDE=y
    CONFIG_RSBAC_CAP_AUTH_PROT=y
    CONFIG_RSBAC_CAP_LOG_MISSING=y
    CONFIG_RSBAC_CAP_LEARN=y
    CONFIG_RSBAC_CAP_LEARN_TA=0
    CONFIG_RSBAC_JAIL=y
    CONFIG_RSBAC_JAIL_NET_ADJUST=y
    CONFIG_RSBAC_JAIL_NET_DEV_PROT=y
    CONFIG_RSBAC_JAIL_NR_P_LISTS=4
    CONFIG_RSBAC_JAIL_LOG_MISSING=y
    CONFIG_RSBAC_RES=y
    CONFIG_RSBAC_FF=y
    CONFIG_RSBAC_FF_AUTH_PROT=y
    CONFIG_RSBAC_FF_UM_PROT=y
    CONFIG_RSBAC_FF_GEN_PROT=y
    CONFIG_RSBAC_PM=y
    CONFIG_RSBAC_PM_AUTH_PROT=y
    CONFIG_RSBAC_PM_GEN_PROT=y
    #
    # Softmode and switching
    #
    CONFIG_RSBAC_SOFTMODE=y
    CONFIG_RSBAC_SOFTMODE_SYSRQ=y
    CONFIG_RSBAC_SOFTMODE_IND=y
    CONFIG_RSBAC_SWITCH=y
    # CONFIG_RSBAC_SWITCH_ON is not set
    CONFIG_RSBAC_SWITCH_BOOT_OFF=y
    CONFIG_RSBAC_SWITCH_REG=y
    CONFIG_RSBAC_SWITCH_AUTH=y
    CONFIG_RSBAC_SWITCH_RC=y
    CONFIG_RSBAC_SWITCH_ACL=y
    CONFIG_RSBAC_SWITCH_MAC=y
    CONFIG_RSBAC_SWITCH_PAX=y
    CONFIG_RSBAC_SWITCH_DAZ=y
    CONFIG_RSBAC_SWITCH_CAP=y
    CONFIG_RSBAC_SWITCH_JAIL=y
    CONFIG_RSBAC_SWITCH_RES=y
    CONFIG_RSBAC_SWITCH_FF=y
    CONFIG_RSBAC_SWITCH_PM=y
    #
    # Logging
    #
    CONFIG_RSBAC_IND_LOG=y
    CONFIG_RSBAC_IND_USER_LOG=y
    CONFIG_RSBAC_IND_PROG_LOG=y
    CONFIG_RSBAC_LOG_PROGRAM_FILE=y
    CONFIG_RSBAC_LOG_FULL_PATH=y
    CONFIG_RSBAC_MAX_PATH_LEN=512
    # CONFIG_RSBAC_LOG_PSEUDO is not set
    CONFIG_RSBAC_SYSLOG_RATE=y
    CONFIG_RSBAC_SYSLOG_RATE_DEF=1000
    CONFIG_RSBAC_RMSG=y
    CONFIG_RSBAC_RMSG_MAXENTRIES=200
    CONFIG_RSBAC_RMSG_NOSYSLOG=y
    # CONFIG_RSBAC_LOG_REMOTE is not set
    # CONFIG_RSBAC_SYM_REDIR is not set
    # CONFIG_RSBAC_ALLOW_DAC_DISABLE is not set
    #
    # Other RSBAC options
    #
    # CONFIG_RSBAC_SECDEL is not set
    CONFIG_RSBAC_RW=y
    CONFIG_RSBAC_IPC_SEM=y
    CONFIG_RSBAC_DAC_OWNER=y
    CONFIG_RSBAC_DAC_GROUP=y
    CONFIG_RSBAC_PROC_HIDE=y
    CONFIG_RSBAC_FSOBJ_HIDE=y
    CONFIG_RSBAC_FREEZE=y
    CONFIG_RSBAC_FREEZE_UM=y
    # CONFIG_RSBAC_SYSLOG is not set
    CONFIG_RSBAC_IOCTL=y
    CONFIG_RSBAC_USER_CHOWN=y
    CONFIG_RSBAC_DAT_VISIBLE=y
    # CONFIG_RSBAC_NO_DECISION_ON_NETMOUNT is not set
    # CONFIG_RSBAC_ENFORCE_CLOSE is not set
    CONFIG_RSBAC_USER_MOD_IOPERM=y
    CONFIG_RSBAC_FAKE_ROOT_UID=y
    CONFIG_RSBAC_XSTATS=y

  • Una vez configurado solo resta compilarlo, que en el caso de hacerlo sobre debian la forma más sencilla es: make-kpkg --initrd kernel_image kernel_headers kernel_source kernel_doc o si poseen varios procesadores pueden subir el número de trabajos concurrentes siendo el máximo (N*2) donde N es el número de procesadores que poseen, de forma que la linea seria: make-kpkg -j N --initrd kernel_image kernel_headers kernel_source kernel_doc , lo cual genera los correspondientes archivos .deb para su instalación con dpkg

Happy Hacking… y buena suerte… todos la necesitamos 😉

Entrada generada originalmente para InsecureMX

—–
Entrada generada por:
NataS::: The Lord of Chaos
Marcos Ricardo Schejtman Rubio <mschejtman@nekasys.com> <natashell@esdebian.org>

Anuncios