S-uid-daemons: (0.06) (potato) *EN DESARROLLO* El "usuario efectivo" que corre los servicios no debe ser root ***Mucho de esta chuleta son ideas y está casi todo en experimentación*** Cambios: 0.05 19/10/00 +postfix, +idea puertos altos y NAT 0.06 29/10/00 +Antes de empezar Asegurarse de que los servicios que utilizamos no corren como "root", deben correr con los permisos de un usuario sin privilegios. ANTES DE EMPEZAR: Esto puede significar: - Escoger un servidor en lugar de otro (LPRng en lugar de lpr) - Algunos servidores solo funcionan si corren como root (samba, pop3) quizas no sea conveninete tenerlos en marcha en la máquina que hace de cortafuegos... ESTO ES LO QUE CREO UTIL PARA EL INTENTO: 1) Hay servicios que por configuración o con un parámetro al lanzar el demonio renuncian a los privilegios root haciendo un chuid, tras hacer el "bind" al puerto bajo donde prestan el servicio, por ejemplo el servidor DNS named (bind) Mirar el man del archivo de config y el del demonio (y mi chuleta I-dns por ejemplo...) 2) Desde inetd/xinetd se puede especificar con que identidad de usuario se presta un servicio lanzado por ellos, ejemplos: ---inetd--- smtp stream tcp nowait mail /usr/sbin/tcpd /usr/sbin/exim -bs # ^^^^ ---xinetd--- service smtp { socket_type = stream protocol = tcp wait = no user = mail # ^^^^ server = /usr/sbin/exim server_args = -bs interface = 192.168.0.1 } ------------ 3) Hay servicios que se lanzan en el arranque como demonios independientes. El lanzador de demonios "start-stop-daemon" que se utiliza desde los scripts en /etc/init.d/* tiene unas opciones interesantes: --chuid user:group --chroot /directorio-a-chroot Si forzamos así un usuario, tendremos que vigilar que el nuevo usuario tenga permisos para todos los archivos que utiliza normalmente... Si el demonio hace un bind (a un puerto bajo?) fallará y abortará ejemplo: demonio de impresión "lpr" 4) Usar demonios en puertos altos y NAT Jaume Sabater (y a él ICEFIRE) me ha dado la idea de usar los demonio en puertos altos, así no hace falta que empiecen corriendo como root Esto elimina la posibilidad de cualquier exploit ANTES de que el demonio haga el cambio a usuario no root Generalmente será necesario redirigir el puerto bajo "esperado" al puerto alto real PROBLEMAS: Permisos El demonio debe de tener permisos sobre los archivos que necesita y de entrada (r-x) en los directorios donde los archivos residen También pueden haber archivos que precisen permisos de escritura ¿logging? Cambios de usuario efectivo Todas las llamadas del demonio para cambiar el usuario efectivo devolverán error (ya que no tiene privilegios) lo que generalmente significa que abortará la ejecución RODEO: Intentar eliminar toda referencia a cambio de usuario en la config (esto en circunstancias normales haría que el demonio corriera como root) Contraseñas e implementación del PAM Si el demonio necesita acceso a las contraseñas debe tener permisos para ello... Esto en Potato se complica por la integración PAM de las contraseñas (Plugable Autentication Module) ¿Como solucionarlo? Yo he fracasado de momento con el servidor POP3 y con el samba lanzados desde xinetd como usuarios no root... La "redirección" al puerto bajo debe ser ABSOLUTAMENTE transparente Para evitar cualquier complicación cuando el demonio debe aceptar o iniciar nuevas conexiones la "redirección" debe ser transparente. Yo sugiero el uso del ipchains y el tarjet -j REDIRECT a_puerto, aunque aun no lo he probado... probablemente tendrás que hacer dos uno de 0.0.0.0:80 a 1080 y otro de IPLOCAL:1080 a 0.0.0.0:80 Logging Si el demonio hace logging ¿que pasa? 5) ¿Eliminar el shell de esos usuarios si es posible? (leer S-login) MOTIVO: Si una vulnerabilidad permite acceso a nuestro sistema a un intruso a través de un servicio, mejor si el "usuario que corre ese servicio" no es root Anexo-I TABLA DE DEMONIOS (SERVIDORES) Servicio Posibilidad de Usuario por Comentario usuario no root defecto ---Servicios en inetd/xinetd--- inetd - root Demonio de demonios xinetd - root Sustituto de inetd time SI? root Servidor de hora ftp ? root!!! ---No instalar--- Servidor FTP telnet ? root ---mejor openssh (probar)--- pop-3 - root!!! Buzones de correo POP3 imap2 ? root!!! Buzones de correo IMAP4 exim SI [1] mail Servidor SMTP postfix SI [1] postfix Servidor SMTP ---Servicios como demonios--- samba SI? [2] root!!! Servidor de recursos Netbios named SI root!!! Servidor DNS apache SI [1] www-data Servidor web X ? root!!! Servidor de entorno gráfico lpr - root!!! Servicio de impresión lprng SI [1] daemon Sustituto de lpr wwwoffle SI [1] proxy Cache-web de uso personal SI = si - = no ? = por investigar [1] Ya viene hecho "de serie" en Debian Potato [2] Parece que se puede pero yo no lo he conseguido :-( teóricamente los "home" dejaran de funcionar ya que requieren un chuid al usuario propietario del home. También es precisa una planificación para que todos los recursos compartidos pertenezcan y sean accedidos por el mismo "usuario" NOTA: Para saber como cambiar el usuario efectivo de los demonios mira mis chuletas de los servicios (I-nombre), o las de seguridad (S-nombre) POR HACER: Documentar mis chuletas I-nombre S-nombre con el chuid MAS INFO: ?