Seguridad unix
Seguridad Unix se refiere a los medios para asegurar un sistema operativo Unix o similar a Unix. Un entorno seguro se logra no solo mediante los conceptos de diseño de estos sistemas operativos, sino también a través de prácticas administrativas y de usuarios vigilantes.
Conceptos de diseño
Permisos
Una función de seguridad central en estos sistemas son los permisos del sistema de archivos. Todos los archivos en un sistema de archivos típico de Unix tienen permisos establecidos que permiten diferentes accesos a un archivo.
Los permisos en un archivo se establecen comúnmente mediante el comando chmod y se ven a través del comando ls. Por ejemplo:
-r-xr-xr-x 1 rueda raíz 745720 Sep 8 2002 /bin/sh
Los permisos de Unix permiten que diferentes usuarios accedan a un archivo. Diferentes grupos de usuarios tienen diferentes permisos en un archivo.
Los sistemas de archivos Unix más avanzados incluyen el concepto Lista de control de acceso que permite otorgar permisos a múltiples usuarios o grupos. Se puede usar una Lista de control de acceso para otorgar permisos a usuarios individuales o grupos adicionales. Por ejemplo:
/pvr [u:rwx,g::r-x,o::r-x/u::rwx,u:sue:rwx,g::r-x,m:rwx,o:r-x]
En este ejemplo, que es del comando chacl en el sistema operativo Linux, el usuario sue tiene permiso de escritura para /pvr directorio.
Grupos de usuarios
Los usuarios con sistemas operativos estilo Unix a menudo pertenecen a grupos administrados con permisos de acceso específicos. Esto permite agrupar a los usuarios por el nivel de acceso que tienen a este sistema. Muchas implementaciones de Unix agregan una capa adicional de seguridad al requerir que un usuario sea miembro del grupo de privilegios de usuario wheel para poder acceder al comando su
.
Acceso raíz
La mayoría de los sistemas Unix y similares a Unix tienen una cuenta o grupo que permite a un usuario ejercer un control completo sobre el sistema, a menudo conocido como cuenta raíz. Si un usuario no deseado obtiene acceso a esta cuenta, esto resulta en una violación completa del sistema. Sin embargo, una cuenta raíz es necesaria para fines administrativos y, por las razones de seguridad anteriores, la cuenta raíz se usa rara vez para fines cotidianos (el programa sudo se usa más comúnmente), por lo que el uso de la cuenta raíz puede ser monitoreado más de cerca.
Acceso raíz "como debería ser" puede ser visualizado por aquellos familiarizados con las historias de Superman usando la siguiente analogía:
- Usar una cuenta de raíz es como ser Superman; el usuario regular de un administrador es más como Clark Kent. Clark Kent se convierte en Superman sólo durante todo el tiempo necesario, para salvar a la gente. Luego se revierte a su "disculpa". El acceso a raíz debe utilizarse de la misma manera. Sin embargo, el disfraz de Clark Kent no lo restringe, ya que todavía es capaz de usar sus súper poderes. Esto es análogo al uso del programa sudo.
Usuario y técnicas administrativas
Unix tiene muchas herramientas que pueden mejorar la seguridad si los usuarios y administradores las usan correctamente.
Contraseñas
Seleccionar una contraseña segura y protegerla adecuadamente son probablemente las cosas más importantes que un usuario puede hacer para mejorar la seguridad de Unix.
En los sistemas Unix, la información esencial sobre los usuarios se almacena en el archivo /etc/passwd
. Este archivo realiza un seguimiento de los usuarios registrados en el sistema y sus principales definiciones. Las contraseñas, o más correctamente, el hash de la contraseña, también se pueden almacenar en el mismo lugar. Las entradas en /etc/passwd
ocupan exactamente una línea cada una y tienen la siguiente forma:
nickname:password_hash:UserID:GroupID:Complete_Name:home_dir:shell_bin
Un ejemplo sería:
xfze:$$1zuW2nX3slp3qJm9MYDdglEApAc36r/:1000:100:Daniel Ernesto Ortiz Costa:/home/xfze:/bin/bash
Dado que todos los usuarios deben tener acceso de lectura al archivo /etc/passwd
para realizar muchas tareas comunes (ls -l /home
utilizará /etc/ passwd
para asignar UID a nombres de inicio de sesión, por ejemplo), cualquiera podría leer los hashes de contraseña de otros usuarios. Para resolver este problema, se creó el archivo /etc/shadow
para almacenar los hash de las contraseñas, y solo el root tiene acceso de lectura. En la sombra de contraseña, el segundo campo (hash de contraseña) se reemplaza por una 'x' que le dice al sistema que recupere la contraseña del usuario correspondiente a través del archivo /etc/shadow
.
El archivo /etc/shadow
a menudo solo contiene valores para los dos primeros campos:
xfze:$$1zuW2nX3slp3qJm9MYDdglEApAc36r/:::
Los campos restantes en el archivo /etc/shadow
incluyen:
- El número mínimo de días entre cambios de contraseña
- El número máximo de días hasta que se cambie la contraseña
- El número de días de advertencia dados antes de la contraseña debe ser cambiado
- El número de días después de la contraseña debe cambiarse cuando la cuenta se hace inutilizable
- La fecha (expresada como el número de días desde el 1 de enero de 1970) cuando la cuenta está caducada
Estos campos se pueden utilizar para mejorar la seguridad de Unix mediante la aplicación de una política de seguridad de contraseñas.
Usuarios y cuentas
Los administradores deben eliminar las cuentas antiguas de inmediato.
- su, sudo, ssh only, no root logins remotos
Mantenimiento de software
Parches
Los sistemas operativos, como todo el software, pueden contener errores que necesitan corrección o pueden mejorarse con la adición de nuevas funciones. Parchear el sistema operativo de manera segura requiere que el software provenga de una fuente confiable y que no haya sido alterado desde que se empaquetó. Los métodos comunes para verificar que los parches del sistema operativo no se hayan alterado incluyen el uso de la firma digital de un hash criptográfico, como una suma de verificación basada en SHA-256, o el uso de medios de solo lectura.
Desde el punto de vista de la seguridad, el método de empaquetado específico, como el administrador de paquetes dpkg o el formato RPM Package Manager originalmente de Debian y Red Hat Linux, respectivamente, no es tan importante como el uso de funciones que garantizan la integridad del parche. sí mismo.
Distribuciones de origen
Las distribuciones de origen incluyen la capacidad de examinar el código en busca de contenido sospechoso. El inconveniente, en ausencia de un valor hash criptográfico adjunto, es que el usuario debe poder realizar un análisis de seguridad del código por sí mismo.
Paquetes RPM
Las distribuciones de Linux que utilizan el formato RPM Package Manager para proporcionar funcionalidad básica y actualizaciones de software utilizan hash criptográfico y GPG para garantizar la integridad del contenido. Los valores hash se empaquetan con el archivo RPM y se verifican cuando se instala el paquete.
Paquetes Debian
Las distribuciones de Linux que utilizan el formato de paquete Debian.deb para proporcionar funcionalidad básica y actualizaciones de software utilizan firmas GPG para garantizar la integridad del contenido. Se calcula una firma cuando se construye el paquete y se verifica más tarde cuando se instala el paquete.
Otros proveedores y distribuciones
Independientemente del proveedor o la distribución, todas las distribuciones de software deben proporcionar un mecanismo para verificar que el software es legítimo y no ha sido modificado desde que se empaquetó originalmente.
Servicios
El software del sistema innecesario no debe instalarse ni configurarse en un sistema. El software que ya no sea necesario debe eliminarse por completo, si es posible.
- Identificar qué servicios están funcionando
netstat -na
lsof
nmap
sockstat -4
(FreeBSD)
Los comandos inetd y xinetd actúan como súper servidores para una variedad de protocolos de red como rlogin, telnet y ftp.
Desactivar servicios innecesarios
- utilizando update-rc.d sobre Debian
- utilizando chkconfig en Red Hat Linux
- utilizando /etc/rc.conf y /usr/local/etc/rc.d on FreeBSD (mention /etc/rc.local)
- utilizando rc-update en Gentoo Linux
Este enfoque suele denominarse seguridad proactiva. Hay algunos sistemas operativos que son seguros por defecto. Entre otras, las versiones gratuitas de BSD (FreeBSD, NetBSD y OpenBSD) son proactivamente seguras. Por ejemplo, la salida de netstat en una estación de trabajo NetBSD 3.0 describe claramente esta técnica:
$ netstat -a
Conexión de Internet activa (incluyendo servidores)Proto Recv-Q Send-Q Local Address Foreign Address Statetcp 0 localhost.smtp *.* LISTENtcp 0 *.ssh *.* LISTENConexión de Internet6 activa (incluyendo servidores)Proto Recv-Q Send-Q Local Address Foreign Address (state)tcp6 0 localhost.smtp *.* LISTENtcp6 0 0 *.ssh *.* LISTENEnchufes de dominio Active UNIXDirección Tipo Recv-Q Send-Q Inode Conn Refs Nextref Addrc0d10d80 dgram 0 0 0 c0cd8680 0 c0cb7000 /var/run/logc0cb7000 dgram 0 0 0 c0cd8680 0 0 - confianza /var/run/logc0cd8680 dgram 0 0 cb9639e8 0 c0d10d80 0 /var/run/log
El siguiente ejemplo de un sistema BSD
$ sockstat -4
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESSroot sendmail 569 4 tcp localhost.smtp *.*root sshd 593 4 tcp *.ssh *.*
muestra que en esta máquina solo el servicio SSH escucha todas las interfaces de red pública de la computadora. sendmail solo escucha la interfaz de loopback. El acceso a un servicio puede restringirse aún más mediante el uso de un firewall.
Sistemas de archivos
Seguridad del sistema de archivos
La seguridad del sistema de archivos dentro de UNIX y sistemas similares a Unix se basa en 9 bits de permiso, establecer bits de ID de usuario y grupo, y el bit adhesivo, para un total de 12 bits. Estos permisos se aplican casi por igual a todos los objetos del sistema de archivos, como archivos, directorios y dispositivos.
Los 9 bits de permiso se dividen en tres grupos de tres bits cada uno. El primer grupo describe los permisos del propietario del archivo, el segundo grupo describe los permisos del GID asignado al archivo, que por defecto es el grupo asociado con el propietario del archivo o el directorio que contiene el archivo cuando se establece. GID, y el tercer grupo describe los permisos asociados con cualquier proceso que no tenga el mismo ID de usuario que el archivo. Cada grupo de tres bits contiene un bit que indica que se otorga el acceso de lectura, escritura o ejecución. En el caso de los directorios, el acceso de ejecución se interpreta como el permiso para realizar una búsqueda de nombre de archivo dentro del directorio.
Los bits establecer ID de usuario y establecer ID de grupo, comúnmente abreviados set-UID y set-GID respectivamente, se utilizan para cambiar la identidad del proceso que ejecuta un archivo que tiene uno o ambos bits establecidos. Un archivo que tiene establecido el bit de permiso set-UID hará que un proceso que ejecuta ese archivo cambie temporalmente la ID de usuario efectiva a la del propietario del archivo. Un archivo que tenga establecido el bit de permiso set-GID hará que un proceso que ejecuta ese archivo cambie temporalmente el ID de grupo efectivo al del grupo de archivos. Entonces, un proceso puede alternar entre el ID de usuario o grupo efectivo que heredó del archivo y el ID de usuario o grupo real que heredó cuando el usuario inició sesión en el sistema. Esto proporciona un mecanismo por el cual un proceso puede limitar los derechos de acceso que posee a aquellas regiones de código que requieren esos derechos de acceso. Esta es una forma de técnica de seguridad conocida como separación de privilegios y mejora la seguridad del programa al limitar las acciones no deseadas o no deseadas de un proceso.
Un directorio que tenga establecido el bit de permiso set-GID hará que un archivo recién creado tenga un valor de grupo de archivos inicial igual al grupo de archivos del directorio. Esto proporciona un mecanismo mediante el cual un subsistema, como el subsistema de correo del sistema, puede crear archivos que tienen un valor de grupo de archivos común para que los procesos set-GID dentro de ese subsistema puedan leer o escribir el archivo.
El bit pegajoso, conocido formalmente como el bit guardar texto al intercambiar, deriva su nombre de su propósito original. Originalmente, el sticky bit hacía que la imagen de memoria inicial de un proceso se almacenara como una imagen contigua en la unidad de disco que se usaba para almacenar páginas de memoria reales cuando no estaban en uso. Esto mejoró el rendimiento de los comandos comúnmente ejecutados al hacer que la imagen de memoria inicial estuviera fácilmente disponible. Los sistemas UNIX modernos ya no realizan esa función cuando se establece el bit, pero el nombre se ha conservado de todos modos. En el caso de los archivos, el sticky-bit puede ser utilizado por el sistema para indicar el estilo de bloqueo de archivos que se realizará. En el caso de los directorios, el sticky bit evita que cualquier proceso, excepto uno que tenga privilegios de superusuario o uno que tenga una identificación de usuario efectiva del propietario del archivo, elimine un archivo dentro de ese directorio. El sticky bit se usa más comúnmente en directorios de escritura pública, como los varios directorios de espacios de trabajo temporales en el sistema.
Raíz de calabaza
Root squash es un mapeo especial de la identidad del superusuario remoto (raíz) cuando se utiliza la autenticación de identidad (el usuario local es lo mismo que el usuario remoto). Bajo root squash, el uid 0 (raíz) de un cliente se asigna a 65534 (nadie). Es principalmente una función de NFS, pero también puede estar disponible en otros sistemas.
Root squash es una técnica para evitar la escalada de privilegios en la máquina cliente a través de los ejecutables suid Setuid. Sin root squash, un atacante puede generar binarios suid en el servidor que se ejecutan como root en otro cliente, incluso si el usuario del cliente no tiene privilegios de superusuario. Por lo tanto, protege las máquinas cliente contra otros clientes maliciosos. No protege a los clientes contra un servidor malicioso (donde root puede generar binarios suid), ni protege los archivos de ningún usuario que no sea root (ya que los clientes maliciosos pueden hacerse pasar por cualquier usuario).
SELinux
SELinux es el conjunto de extensiones del kernel para controlar el acceso de manera más precisa, definiendo estrictamente si el proceso confinado puede acceder a archivos, carpetas, puertos de red y otros recursos y cómo hacerlo. Este sistema se usa principalmente para restringir procesos (base de datos, servidor) en lugar de usuarios humanos. También puede limitar los procesos que se ejecutan como root. Otras distribuciones usan alternativas comparables como AppArmor.
Virus y detectores de virus
Los sistemas operativos similares a Unix son inmunes a la mayoría de los virus de Microsoft Windows porque los archivos binarios creados para ejecutarse en Windows generalmente no se ejecutarán en otras plataformas. Sin embargo, muchas instalaciones similares a Unix brindan servicios de almacenamiento de archivos a clientes de Microsoft Windows, como mediante el uso del software Samba, y pueden convertirse involuntariamente en un depósito de virus almacenados por los usuarios. Es común que los servidores Unix actúen como agentes de transferencia de correo y, como consecuencia, a menudo se instala el análisis de virus de correo electrónico. El escáner de virus ClamAV está disponible en forma de código fuente y puede usarse para escanear sistemas de archivos Unix en busca de virus que infecten otros sistemas operativos.
Hay virus y gusanos que tienen como objetivo los sistemas operativos similares a Unix. De hecho, el primer gusano informático, el gusano Morris, apuntó a los sistemas Unix.
Cortafuegos
El cortafuegos de red protege los sistemas y las redes de las amenazas de red que existen en el lado opuesto del cortafuegos. Los cortafuegos pueden bloquear el acceso a servicios estrictamente internos, usuarios no deseados y, en algunos casos, filtrar el tráfico de red por contenido.
Iptables
iptables es la interfaz de usuario actual para interactuar con la funcionalidad netfilter del kernel de Linux. Reemplazó a ipchains. Otros sistemas operativos similares a Unix pueden proporcionar su propia funcionalidad nativa y existen otros productos de firewall de código abierto. En otro lugar se incluye información más detallada sobre iptables. Aquí se incluye una breve discusión para describir cómo se pueden usar iptables para configurar un firewall de Linux.
netfilter proporciona un filtro de paquetes de estado completo que se puede configurar de acuerdo con la interfaz de red, el protocolo, la dirección de origen y/o destino, el puerto de origen y/o destino y el estado del paquete. Un paquete de red atraviesa varias cadenas entre el momento en que lo recibe una interfaz de red y el momento en que el host lo acepta o lo reenvía a otro host. Las cadenas comunes son INPUT, OUTPUT y FORWARD. La INPUT cadena se recorre para todos los paquetes a medida que los recibe una interfaz de red, independientemente de si el host los aceptará o los reenviará a otro anfitrión. La OUTPUT cadena es atravesada por todos los paquetes a medida que son transmitidos por una interfaz de red. La cadena FORWARD se recorre para aquellos paquetes que se enrutan a través del host desde una interfaz de red a otra, como es el caso de un sistema multi-homed (un sistema con más de una interfaz de red física).
Cada una de las cadenas integradas tiene una política predeterminada que define qué acción se toma para un paquete que llega al final de la cadena. El recorrido del paquete finaliza cuando una regla coincide con el paquete y tiene una acción de ACCEPT, DROP, REJECT o RETURN.
El cortafuegos de iptables más simple consta de reglas para cada servicio deseado, seguidas de una regla que indica que cualquier paquete que alcance esta regla se eliminará. Un sistema que solo permitiera, por ejemplo, el tráfico de correo electrónico entrante tendría una regla que aceptaría conexiones en el puerto SMTP y luego descartaría otras. Se requeriría una regla que indicara que todas las conexiones establecidas también estaban permitidas para que las conexiones salientes recibieran respuestas de otros sistemas.
Cadena de ENTRADA
El siguiente ejemplo muestra un filtro de paquetes simple para la cadena INPUT para el ejemplo descrito anteriormente:
Chain INPUT (policy DROP 0 packets, 0 bytes) pkt bytes target prot opt in out source destination 0 ACCEPT all -any anywhere state ESTABLISH 0 0 ACCEPT tcp —cualquier lugar donde sea tcp dpt:smtp 0 LOG todo, cualquier lugar en cualquier lugar LOG nivel warning 0 DROP all—any anywhere
La adición de una acción DROP explícita garantiza que los paquetes se descarten en caso de que la política predeterminada de la cadena INPUT sea accidentalmente cambiado a ACEPTAR.
Cadena de SALIDA
Hay menos necesidad de una cadena OUTPUT y la política predeterminada de la cadena OUTPUT se puede establecer de forma segura en ACCEPT. En algunos casos, puede ser deseable que un firewall limite ciertas conexiones salientes a un determinado conjunto de sistemas aprobados. Esto se conoce como filtrado de salida y se puede usar para evitar que los virus dentro del firewall se escapen a otros sistemas. Por ejemplo, puede ser la política de una red limitar las conexiones de correo electrónico saliente a un solo servidor de correo electrónico autorizado como una forma de combatir el correo no deseado. Esto podría lograrse con el siguiente ejemplo:
Chain OUTPUT (policy ACCEPT) pkt bytes target prot opt in out source destination ¡Cualquier cosa! servidor en cualquier lugar tcp dpt:smtp
No es necesario incluir ninguna otra regla en este ejemplo, ya que la política predeterminada para la cadena OUTPUT es ACCEPT. Esta regla supone que el host que actúa como cortafuegos no enviará correo electrónico por sí mismo, como al servidor de correo electrónico. Esta es una buena suposición ya que, por lo general, un sistema de firewall contiene la cantidad mínima de código del sistema necesaria para actuar como un firewall.
Una cadena OUTPUT más restrictiva contendría entradas permisivas (ACCEPT) para aquellos servicios a los que se puede acceder fuera del firewall y luego una política restrictiva (DROP) para la propia cadena.
Generales
Comunicación de red segura:
- Capa 7:
- GPG
- PGP
- Capas 4,5:
- SSL/TLS
- Stunnel
- S/MIME
- Capa 3:
- VPN
- IPsec
- Capa 2: PPTP
Detección de paquetes:
- tcpdump, Wireshark
Ataques:
- Hombre en el ataque medio
- LAND, ping of death, Christmas tree packet, Denial of service et al.
- Herramientas de software basada contraseña / contraseña / contraseña / llave robo ataques en el sistema. Como estrados/truss/tusc/dtrace/SystemTap basado en.
Avanzada
(feminine)- rootkits, módulos de núcleo, chkrootkit
- explotar detalles, desbordamientos de amortiguadores, local vs remoto
Detalles del servicio
- banners
- SMTP - spam
- Sendmail - banners help header version etc.
- Sistema de nombres de dominio - dnssec cartografía inversa
Contenido relacionado
Archivo de computadora
BÁSICO
Señal analoga