Seguridad en Linux


Contenido

 

Introducción

Conceptos

Políticas de Seguridad

Planificación de las necesidades de seguridad

Análisis de Riesgo

Análisis de Costo-Beneficio

Políticas de Seguridad

Implementación

Auditoria y respuesta ante incidentes          

Grupos y usuarios en Sistemas tipo UNIX

Cuentas de Usuario

El fichero “/etc/passwd”

Identificador de usuario (UID, User IDentificator)

Grupos

El fichero “/etc/group”

Identificador de grupo (GID, Group IDentificator)

Contraseñas

Usuarios especiales: el superusuario

El comando su

Seguridad en los sistemas de ficheros

El árbol de directorios

Permisos

Permisos de Ficheros y directorios

Permisos en Sistemas tipo UNÍS

SUID Shell Scripts

Enlaces

Verificar la integridad con tripwire

Seguridad en Red

         Inetd

         Nmap

 

 

 

 

INTRODUCCIÓN

 

Conceptos

 

Las dos definiciones de seguridad informática más conocidas y utilizadas son:


"Un ordenador es seguro si podemos contar con que su hardware y su software se comporten como se espera de ellos."

Se dice que un sistema se encuentra en optimas condiciones para operar cuando se cumplen los siguientes tres puntos fundamentales:

Þ    Confidencialidad

Þ    Integridad

Þ     Disponibilidad

 

 

La Seguridad de Sistemas se divide en varios campos de aplicación, los más destacados son:

Técnicas de Seguridad (Firewalls, routers, proxys, DMZ, backups etc.)

Þ    Actualización de vulnerabilidades.

Þ     Seguridad Física.

Þ     Políticas de Seguridad y Plan de Contingencia (Factor Humano)

Þ     Virus Informáticos

Þ     Criptografía

Þ     Seguridad Informática Forense.

 

 

 Políticas de seguridad

 

Es importante considerar el establecimiento de políticas de seguridad a la hora de estudiar la seguridad de un sistema informático. Debido a esto, resumiremos los conceptos más relevantes de las políticas de seguridad.

La planificación de las políticas de seguridad se dividen en seis etapas diferentes:

 

Ø      Planificación de las necesidades de seguridad:

Existen diferentes clases de seguridad, por lo que, dependiendo del tipo de sistema, habrá que dar mayor o menor importancia a las que tengan más relevancia:

Confidencialidad: Impedir el acceso a la información a usuarios no autorizados.

Integridad de los datos: Evitar el borrado o alteración indeseados de la información, incluidos los programas.

Disponibilidad: Asegurar que los servicios estén siempre disponibles para un usuario autorizado.

Consistencia: Asegurar que el sistema se comporta como esperan los usuarios autorizados; imagine lo que ocurriría si el comando ls borrara archivos de vez en cuando en lugar de listarlos.

Control: Reglamentar el acceso al sistema, de forma que programas e individuos no autorizados y desconocidos no alteren el normal funcionamiento del sistema.

Auditoria: Determinar qué se hizo, quién lo hizo y qué fue afectado. Para esto es necesario llevar un registro inexpugnable de todas las actividades realizadas en el sistema y que identifica de forma no ambigua a los usuarios que las llevaron a cabo.

 

Ø      Análisis de riesgos:

Trata de responder a tres preguntas: ¿qué se debe proteger?, ¿contra qué debe protegerse?, ¿cuánto se está dispuesto a invertir para obtener una protección adecuada?. Para responder a estas preguntas, el análisis de riesgos se divide en tres etapas:

Þ    Identificación de los activos.

Þ    Identificación de las amenazas.

Þ    Cálculo de los riesgos.

 

Ø      Análisis de costo-beneficio:

Consiste en asignar un costo a cada riesgo, y determinar el costo de defenderse. De esta manera se puede decidir qué medidas hay que adoptar para proteger los activos. Este aspecto no lo desarrollaremos por que no entra en el ámbito de este estudio.

 

Ø      Políticas de seguridad.

Las políticas sirven para definir qué se considera valioso y especifican qué medidas hay que tomar para proteger esos activos.

Deben aclarar qué se está protegiendo, establecer la responsabilidad de la protección y poner las bases para resolver e interpretar conflictos posteriores. No se debe hacer una lista de riesgos específicos, computadoras o individuos por nombre. Deben ser generales y no variar mucho a lo largo del tiempo.

 

Ø      Implementación:

Consiste en aplicar lo antes mencionado conjuntamente con las herramientas provistas por cada plataforma para proteger el sistema que se desea proteger.

 

Ø      Auditoría y respuesta ante incidentes:

Se trata de saber, en un momento cualquiera; quién, cuándo y cómo intentaron acceder o accedieron a parte o a toda nuestra información contenida en la computadora, en el caso en que hayan accedido se pretenderá saber que cambios sufrió la información y los datos supuestamente protegidos además se establecerá en que punto falló nuestro sistema o en qué punto es vulnerable para posteriormente reparar ese error.

 

Usuarios y grupos en Sistemas tipo UNIX

 

Las cuentas de usuario son el primer objetivo de cualquier atacante, su finalidad suele ser casi siempre esta, penetrar en el sistema consiguiendo apoderarse de una cuenta de usuario (preferentemente la del root). Después pueden robar, destruir o falsificar datos o simplemente dejar una nota, pero el daño ya está hecho, la seguridad del sistema se ha visto comprometida.

 

Ø      Cuentas de usuario

 

La identificación en los sistemas UNIX se realiza mediante un nombre de usuario (login) y la autentificación mediante contraseñas (password). Los nombres de usuario se conocen también como nombres de cuenta. Para iniciar una sesión en un sistema tipo UNIX, es necesario conocer tanto el nombre de usuario como la contraseña correspondiente.

De esta manera, el usuario queda totalmente autentificado y obtendrá un interprete de comandos (shell) desde el que podrá realizar diferentes tareas. Otra posibilidad es que el servidor disponga de un entorno de trabajo en modo gráfico (X-Window), en ese caso el proceso de autentificación se realiza de idéntica manera, con la única diferencia de que el usuario obtendrá un entorno gráfico de trabajo en lugar del shell habitual.

Los nombres de usuario estándar en UNIX tienen una longitud que puede ir de 1 a 8 caracteres. Estos nombres deben ser únicos en una misma computadora, puesto que deben identificar al usuario de forma inequívoca Las contraseñas en sistemas tipo UNIX tradicionalmente tenían una longitud de entre 1 y 8 caracteres, aunque algunas versiones comerciales permiten contraseñas mas largas. El uso de contraseñas mas largas implica una mayor seguridad, por que son más difíciles de adivinar. La contraseña no debe ser obligatoriamente única para cada usuario, varios usuarios pueden tener, de hecho, la misma contraseña, aunque de ser así, esto indicaría que estos usuarios han elegido una mala contraseña.

La elección de las contraseñas, así como las posibles restricciones que se pueden establecer sobre ellas, es de vital importancia a la hora de evitar intrusiones en el sistema

 

 

Ø      El archivo /etc/passwd

 

En los sistemas tipo UNIX, la información sobre las cuentas de usuario se almacenan en una base de datos localizada en el archivo /etc/passwd. Esta es un fichero de texto en el que los diferentes registros se encuentran separados por el carácter dos puntos (:).

Se puede emplear el comando cat para visualizar el contenido del fichero passwd. A continuación se puede ver una muestra de un archivo típico como ejemplo:

 

root:o8o7aSVh13nLD:0:0:root:/root:/bin/bash

bin:*:1:1:bin:/bin:

daemon:*:2:2:daemon:/sbin:

adm:*:3:4:adm:/var/adm:

lp:*:4:7:lp:/var/spool/lpd:

mail:*:8:12:mail:/var/spool/mail:

news:*:9:13:news:/var/spool/news:

uucp:*:10:14:uucp:/var/spool/uucp:

operator:*:11:0:operator:/root:

ftp:*:14:50:FTP User:/home/ftp:

nobody:*:99:99:Nobody:/:

manurod:EH5/.mj7J5dFh:501:100:Manuel Rodríguez:/home/alumnos/manurod:/bin/bash

maripet:aCq87MCñ03c9e:502:100:Mario Petru:/home/alumnos/maripet:/bin/bash

javitup:md0mHM86yn3aW:503:100:Javier Tup:/home/alumnos/javitup:/bin/bash

 

Algunas de las cuentas del ejemplo son cuentas del sistema como root, daemon o apm. El resto son cuentas de usuario regulares del sistema como manurod, javitup, maripet.

Las cuentas que tienen un * en al campo de la contraseña no pueden ser utilizadas para iniciar una sesión desde un terminal, es necesario utilizar la orden su. Son cuentas de sistema (en ocasiones usuarios 'castigados'), que poseen archivos, a veces muy importantes, que realizan tares administrativas o dan servicios.

Cada campo individual del archivo passwd posee un significado directo. En la siguiente tabla se explica el significado de una de las líneas del ejemplo:

 

Campo

Contenido

Manurod

Nombre de usuario

EH5/. mj7J5dFh

Contraseña cifrada del usuario

501

Numero de identificación del usuario (UID)

500

Numero de identificación de grupo del usuario (GID)

Manuel Rodríguez

Nombre completo del usuario

/home/alumnos/manurod/

Directorio base del usuario

/bin/bash

Interprete de comandos del usuario

 

La contraseña se guarda cifrada.

En la actualidad, muchas organizaciones poseen grandes redes de tipo cliente-servidor que contienen muchos servidores y una gran cantidad de estaciones de trabajo. Normalmente es deseable que los usuarios entren en cualquiera de estas computadoras, y que lo hagan con el mismo nombre de usuario y la misma contraseña. Esto conlleva que cada usuario tenga una cuenta en cada estación de trabajo.

Este requisito hace que sea extremadamente difícil mantener la coherencia entre las bases de datos de usuarios de todas las computadoras. Para lograr esto se utilizan diversos paquetes de software que proporcionan el contenido del fichero /etc/passwd a toda la red.

 

Algunos de estos sistemas son:

Þ    Network Information System (NIS:Sistema de Información para la Red) de Sun Microsystems.

Þ    NIS+ de Sun Microsystems

Þ    Distributed Computing Environment (DCE: Ambiente de Computación Distribuido) de Open Software Foundation.

Þ    NetInfo de NeXT Computers

 

Todos estos sistemas toman la información, que por lo general, está almacenada en cada estación de trabajo y la ponen en una o más computadoras que se usan como servidores de red. Al usar estos sistemas, ya no se puede usar simplemente el comando cat, sino que hay que utilizar una instrucción especifica para cada sistema para ver el contenido del archivo /etc/passwd.

El servicio NIS de Sun complementa la información almacenada en los archivos de las estaciones de trabajo. Por lo tanto, para ver la lista completa de las cuentas de usuario, es necesario listar el contenido del archivo passwd local y además utilizar la siguiente instrucción:

% ypcat passwd

El servicio NIS+, también de Sun, se puede configurar para complementar y sustituir sus entradas sobre cuentas de usuario en lugar de las que están en el archivo passwd local, dependiendo del contenido del archivo /etc/nsswitch.conf. Para ver la lista de usuarios bajo NIS+ hay que utilizar el comando niscat y especificar el dominio de NIS+. Por ejemplo: % niscat -o passwd.dominio

En las computadoras que ejecutan NetInfo, el archivo local no se toma en cuenta y en su lugar se usa la versión de red. Por ejemplo, para ver las cuentas de usuario, si se usa NetInfo, hay que escribir: % nidump passwd /.

Las computadoras que usan DCE emplean una base de datos de red cifrada como alternativa a las contraseñas cifradas y al archivo /etc/passwd.

Muchos administradores no utilizan sistemas de administración de bases de datos en red porque temen que la seguridad se vea comprometida. Estos temores provienen del hecho de que la configuración de estos sistemas es, en ocasiones, muy complicada y los protocolos que utilizan pueden no ser particularmente resistentes a ataques. Es una práctica habitual entre los administradores mantener simplemente un archivo central con la información de los usuarios y copiarlo de forma periódica en las computadoras remotas. El inconveniente que se presenta es que con frecuencia el administrador tiene que cambiar manualmente contraseñas de usuarios. En general, es preferible aprender a dominar la configuración de estos sistemas y luego colocar otras medidas defensivas como es el caso del cortafuegos (firewall).

 

Ø      Identificador de usuario (UID, User Identificación)

 

El UID es un número entero real de 16 bits (de 0 a 65535). Los primeros UID se usan principalmente para funciones del sistema. Para las personas, normalmente empiezan en el 20, el 100 o el 500. Es habitual asignar el UID dependiendo del grupo primario del usuario: los usuarios del grupo 500 tendrán los UID 501, 502, 503, y así sucesivamente. Algunas versiones de UNIX permiten ahora UID de 32 bits. En las versiones antiguas de UNIX los UID son enteros de 16 bits con signo (de -32768 a 32767).

UNIX utiliza el archivo /etc/passwd para almacenar la correspondencia entre el nombre de cada usuario y su UID. El UID de cada usuario se guarda en el tercer campo, después de la contraseña cifrada. Esta es una línea del ejemplo anterior:

manurod: EH5/.mj7J5dFh:501:100:Manuel Rodríguez:/home/alumnos/manurod:/bin/bash

Aquí se puede ver que el UID de manurod es 501.

El UID es la información real que utiliza el sistema operativo para identificar al usuario. Los nombre de usuario son solo una comodidad para nosotros. Si dos usuarios tienen el mismo UID, UNIX los trata como si fueran el mismo usuario, aunque tengan nombres y contraseñas distintos. Dos usuarios con el mismo UID pueden leerse y borrarse archivos libremente el uno al otro, así como suspenderse los programas que ejecuten. Asignar a dos usuarios el mismo UID es, por lo general, una mala idea, salvo algunas excepciones.

 

Ø      Grupos

 

Todos los usuarios de UNIX pertenecen a uno o más grupos. El administrador del sistema puede utilizar los grupos para definir conjuntos de usuarios que tendrán permiso de leer, escribir y/o ejecutar ciertos archivos, directorios o dispositivos.

Cada usuario pertenece a un grupo primario, que se anota en el archivo /etc/passwd. El GID del grupo primario de un usuario aparece después del UID del usuario.

Los grupos permiten manejar cómodamente a varios usuarios de alguna manera. Por ejemplo, tal vez se quiera abrir un grupo para un equipo de estudiantes que trabajan en un proyecto y permitirles a ellos y sólo a ellos leer y modificar los archivos del equipo.

Los grupos también se usan para restringir el acceso a la información confidencial o aplicaciones con licencias especificas. Por ejemplo, en muchas computadoras que usan UNIX, solamente se permite examinar el contenido de la memoria del kernel del sistema a ls usuarios que pertenecen al grupo kmem. El grupo ingres se usa normalmente para quienes están registrados como usuarios del programa comercial del manejo de bases de datos Ingres.

Algunas versiones especiales de UNIX permiten usar CAO o Controles de Acceso Obligatorio (MAC: Mandatory Access Controls), los cuales controlan el acceso mediante etiquetas en los datos, además o en lugar de los controles tradicionales CAV o Controles de Acceso Voluntario (DAC: Discretionary Access Controls) de UNIX . Los sistemas que se basan en CAO/CAV (MAC/DAC) no emplean los grupos tradicionales de UNIX. En su lugar, los valores de los GID y el archivo /etc/group se pueden usar para especificar etiquetas de seguridad para el control de acceso o bien para apuntar a listas de capacidades.

 

Ø      El archivo /etc/group

 

El archivo /etc/group contiene la base de datos con todos los grupos que hay en la computadora y sus GID correspondientes. Su formato es similar al archivo /etc/passwd.

He aquí una muestra de archivo /etc/group que pertenece a un sistema típico:

root:*:0:root

bin:*:1:root,bin,daemon

daemon:*:2:root,bin,daemon

sys:*:3:root,bin,adm

adm:*:4:root,adm,daemon

lp:*:7:daemon,lp

kmem:*:9:

wheel:*:10:root,javitup

mail:*:12:mail

news:*:13:news

uucp:*:14:uucp

ftp:*:50:

users:*:100:

floppy:*:19:

cdwriter:*:500:manurod

pppusers:*:44:maripet

 

La primera línea define el grupo root. Los campos se detallan en la siguiente tabla:

 

 

Campo

Contenido

Root

Nombre de grupo

*

Contraseña de grupo (cifrada)

0

Numero de identificación del grupo (GID)

Root

Lista de usuarios miembros del grupo

 

Los usuarios que aparecen en el archivo /etc/group pertenecen a los grupos que se indican, además de pertenecer a sus grupos primarios los cuales se indican en el archivo /etc/passwd. Por ejemplo, manurod, maripet y javitup pertenecen al grupo users a pesar de no aparecer explícitamente en el archivo /etc/group porque su grupo primario es el 100. En algunas versiones de UNIX, se puede ejecutar el comando groups o id para ver la lista de grupos a los que se pertenece.

 

Ø      Identificador de grupo (GID)

 

Todos los usuarios de UNIX pertenecen a uno o más grupos. Al igual que las cuentas de usuario, los grupos tienen un nombre de grupo y un número de identificación de grupo (GID). Usualmente, los valores de los GID también son enteros de 16 bits.

Análogamente al UID, el GID representa al grupo en el sistema, y no su nombre. Los grupos permiten agrupar a varios usuario que posean el mismo grupo primario (campo GID del archivo /etc/passwd) o que aparezcan en el archivo /etc/group.

Las versiones de UNIX de AT&T anteriores a SVR4 sólo permitían que un usuario estuviera en un grupo a la vez. Para cambiar de grupo había que usar el comando newgrp. Cuando un usuario intentaba acceder a un archivo sobre el que tenía permiso por pertenecer al mismo grupo, se le denegaba el acceso si, en ese instante, el usuario no estaba en ese mismo grupo. Por eso debía usar el comando newgrp.

En la actualidad, los usuarios pertenecen a todos los grupos en los que aparecen en el archivo /etc/group a la vez. El sistema operativo chequea todos los grupos a los que pertenece el usuario para comprobar sus derechos de acceso. Aun así, el comando newgrp sigue teniendo cierta importancia. Si un usuario quiere que sus archivos tengan un grupo (GID) en especial de entre los que posee, debe utilizar el comando newgrp en cada archivo para cambiarlos de grupo. Esto puede ser un poco pesado, si está generando muchos archivos, así que puede cambiar de grupo con newgrp, de forma que todos los archivos que genere tengan el nuevo GID.

 

Ø      Contraseñas

 

Para autentificar a un usuario, este debe demostrar su identidad. Existen tres maneras por la que un usuario puede autentificarse ante el sistema. Puede usarse una o varias de estas a la vez:

 

Þ    Se puede indicar algo que se sabe (por ejemplo, una contraseña)

Þ    Se puede mostrar algo que se tiene (por ejemplo, una tarjeta)

Þ    La computadora puede considerar alguna característica personal (por ejemplo, una huella dactilar).

 

Ninguno de estos sistemas es infalible. Alguien puede robar la contraseña 'husmeando' la línea de un terminal, puede robar la tarjeta en un atraco, y si tiene un cuchillo, quizás pueda obtener una huella dactilar. En general, cuanto más confiable sea la forma de identificación, más complicada será de usar, y más agresivo deberá ser el agresor para violarla.

Las contraseñas son el sistema de autentificación más simple: son un secreto que se comparte con la computadora. Al iniciar la sesión, se escribe la contraseña para demostrar a la computadora de quién se trata. La computadora  asegura  que la contraseña corresponde al nombre de usuario que se ha especificado. Si corresponde, se puede continuar.

En el sistema UNIX no se despliega la contraseña, es decir, no se escribe en el terminal a medida que se teclea. Esto proporciona protección adicional si alguien está mirando por encima del hombro del que escribe. Esto puede parecer trivial, pero constituye la primera medida de seguridad.

Las contraseñas son la primera línea de defensa de UNIX contra los extraños que quieren penetrar en el sistema. Aunque se puede penetrar en el sistema o robar información a través de la red sin abrir una sesión, muchas intrusiones se deben a contraseñas mal elegidas y mal protegidas.

En los sistemas personales de escritorio no se usan contraseñas. La seguridad se basa en métodos físicos como paredes, puertas y cerraduras. En algunos ambientes de confianza tampoco se usan contraseñas, la confianza y el respeto pueden ser suficientes como medida de seguridad.

Pero cuando una computadora está conectada a un modem y se puede acceder desde casi cualquier parte del mundo, o cuando está conectada a una red, sobre todo Internet, entonces las contraseñas son absolutamente necesarias. Si una cuenta de una computadora que pertenece a una red se ve comprometida, puede poner en peligro a toda la red.

Las contraseñas convencionales han sido parte de UNIX desde sus primeros años. La ventaja de las contraseñas es que funcionan sin un equipo especial (como lectores de tarjeta y de huellas digitales).

En la actualidad las contraseñas convencionales en sistemas de red (la mayoría) no son suficiente. Es necesario usar contraseñas descartables o criptografía, o ambas.

En algunas versiones de UNIX, si alguien intenta iniciar una sesión varias veces seguidas de forma inválida se bloquea la cuenta. Sólo el administrador puede desbloquearla. El bloqueo protege al sistema de quienes intentan adivinar una contraseña y avisa  que alguien ha intentado penetrar en la cuenta.

Esta táctica puede ser utilizada en ataques de negación de servicio, para bloquear a ciertos usuarios del sistema, o simplemente para fastidiar. En lugar del bloqueo, algunos sistemas (como Linux) introducen un retardo mayor cada vez que se falla una conexión desde un terminal, lo que limita los ataques de negación del servicio, cumpliendo el mismo efecto que el bloqueo.

El cambio de contraseña es otro momento crítico. El comando passwd, que sirve para cambiar la contraseña, solicita primero la contraseña anterior antes de la nueva. Así se evita que alguien se siente en un terminal abierto y cambie la contraseña. Dejar un terminal abierto sin protección, es un fallo de seguridad bastante grave, pero, por lo general, bastante común.

El comando passwd, también requiere que se repita la contraseña. Esto evita que, por un error tipográfico, se cambie la contraseña por una desconocida.

Si se recibe un correo del administrador pidiendo que se cambie la contraseña a una determinada, se debe ignorar y avisar al administrador. Este tipo de mensajes se envía con frecuencia a usuarios novatos. Si se cumple la orden, puede tener consecuencias devastadoras.

Si se comete un error, o se olvida la contraseña y se pierde el acceso a la cuenta, hay que recurrir al administrador. Este no puede descifrar la contraseña de ningún usuario. Pero puede eliminar la contraseña o cambiarla, (esta parece la mejor opción) sin dar la contraseña vigente.

Uno de los fallos más habituales es asignar como contraseña el nombre de usuario. Esta es en algunos sistemas una práctica habitual cuando se crea un usuario. Se debe obligar al usuario a cambiar la contraseña en la primera sesión. Si no lo hace, es probable que cualquiera que intente entrar en la computadora no tarde más de diez minutos en conseguirlo.

 

En general, se deben evitar las siguientes contraseñas:

Þ    El nombre propio, el de la esposa o del socio

Þ    El nombre de la mascota o del hijo

Þ    Los nombre de amigos o compañeros de trabajo

Þ    Los nombres de los personajes favoritos

Þ    El nombre del jefe

Þ    El nombre de cualquier persona

Þ    El nombre del sistema operativo que se está utilizando

Þ    El nombre de la computadora que se usa

Þ    El número de teléfono o el de la matricula del coche

Þ    Cualquier parte del DNI o número de la Seguridad Social

Þ    Cualquier cumpleaños

Þ    Cualquier otra información que sea fácil de averiguar (dirección, universidad, etc.)

Þ    Cualquier forma del nombre de usuario (por ejemplo, en mayúsculas o con letras dobles)

Þ    Cualquier palabra que aparezca en un diccionario en cualquier idioma

Þ    Nombre propios de lugares o personas

Þ    Contraseñas que sean una repetición de la misma letra

Þ    Patrones simples de letras del teclado: por ejemplo, qwerty

Þ    Cualquiera de éstos escrito al revés

Þ    Cualquiera de éstos con un dígito al principio o al final

Þ    En general, cualquier combinación de cualquiera de las anteriores.

 

El motivo de estas recomendaciones, es que uno de los ataques más habituales consiste en conseguir el archivo /etc/passwd de la computadora, y utilizar después un generador de contraseñas. Estos programas (como el programa Crack) utilizan un diccionario y un archivo de normas. En el archivo de normas se encuentran reglas para combinar las palabras del diccionario. Así se genera una lista de posibles contraseñas que se encriptan (el algoritmo es público) y se comparan con las contenidas en el archivo /etc/passwd.

 

 

Ø      Usuarios especiales: el superusuario

 

Además de los usuarios normales, UNIX tiene varios usuarios especiales para propósitos administrativos y contables. Ya se han mencionado algunos. El más importante es el root, el superusuario.

Todos los sistemas UNIX tienen un usuario especial en el archivo /etc/passwd cuyo UID es 0. Este es realmente el único usuario realmente especial del sistema, los demás son especiales porque son propietarios de determinados archivos o pertenecen a determinados grupos (que a su vez tienen archivos importantes).

La cuenta root es la identidad que usa el sistema operativo para llevar a cabo sus funciones básicas, tales como el inicio y la terminación de sesiones de usuario, el registro de la información contable y la administración de dispositivos de entrada / salida. Por esta razón, el superusuario tiene el control de casi todo el sistema operativo: cualquier programa ejecutado por root puede eludir casi todas las restricciones de seguridad y se desactivan casi todas las verificaciones y advertencias.

Como se indicó en la sección sobre el identificador de usuario (UID), dos cuentas que tengan el mismo UID son la misma para el sistema operativo. De esta manera, cualquier cuenta que tenga el UID 0 tiene los privilegios del superusuario. El nombre de usuario root es simplemente convencional.

Hay que sospechar inmediatamente de cualquier cuenta que aparezca en el sistema con UID 0 que no haya sido creada por el administrador. Estas cuentas se añaden con frecuencia por personas que penetran en las computadoras como una manera sencilla de obtener privilegios de superusuario en el futuro.

La cuenta root no se ha diseñado para que el administrador la use como cuenta personal. Debido a que se inhabilitan todas las pruebas de seguridad para el superusuario, un error tipográfico fácilmente puede destruir todo el sistema.

Con frecuencia el administrador de un sistema UNIX tendrá que convertirse en superusuario para llevar a cabo funciones administrativas. Este cambio de estado se puede lograr mediante el comando su para crear un intérprete de comandos privilegiado. Cuando de tiene la capacidad del superusuario se deben tomar precauciones extremas. Cuando cese la necesidad de tener este tipo de acceso, el administrador debe cerrar el intérprete de comandos privilegiado.

Cualquier proceso que tiene UID efectivo 0 se ejecuta como si fuera el superusuario, es decir, cualquier proceso con UID 0 se ejecuta sin verificaciones de seguridad y puede hacer prácticamente lo que sea. Las verificaciones y controles de seguridad se ignoran en el caso del superusuario aunque la mayor parte de los sistemas sí registran en las bitácoras y auditan algunas de las acciones del superusuario.

El usuario es la principal debilidad de seguridad del sistema operativo UNIX. Dado el privilegio del superusuario, las personas que penetran en un sistema UNIX tratan de convertirse en el superusuario.

Para evitar este problema con el superusuario, se ha intentado varias veces diseñar un sistema UNIX seguro (que cumpla todos los requisitos para un sistema altamente confiable) adoptando la estrategia de dividir los privilegios del superusuario en muchas categorías. Lamentablemente estos intentos a menudo fallan. Casi siempre, muchos de los privilegios en los que se divide el superusuario pueden usarse para obtener los demás. Se cambia un gran fallo de seguridad por otros más pequeños que llevan al mismo final.

 

 

Ø      El comando su

 

A veces un usuario debe tomar la identidad de otro. Pos ejemplo si se desea acceder a archivos propios estando sentado delante el terminal de un amigo. En lugar de cerrar la sesión del amigo e iniciar una propia, UNIX permite cambiar temporalmente el número de identificación de usuario. El comando que lo permite se llama su, que son las iniciales de “substitute user” (sustituir usuario). su requiere que se use la contraseña del usuario al que se está cambiando.

Los procesos en sistemas UNIX tienen al menos dos identidades en cada momento. Normalmente estas dos identidades son la misma. La primera identidad es el UID real. El UID real es la identidad verdadera y coincide, normalmente con el nombre de usuario con el que se inició la sesión. A veces se quiere asumir la identidad de otro usuario para acceder a algunos archivos o ejecutar algunos comandos. Esto se puede lograr iniciando una sesión con el otro nombre y obteniendo de esa forma un intérprete de comandos cuyo proceso subyacente tenga un UID igual al del usuario.

Como alternativa, si sólo se desea ejecutar algunos comandos con la identidad de otro usuario, se puede emplear el comando su para crear nuevos procesos. Esto ejecutará otra copia del intérprete de comandos que tendrá la identidad (UID real) del otro usuario. Para emplear el comando su es necesario conocer la contraseña del otro usuario o ser en ese momento el superusuario.

Si se escribe su sin un nombre de usuario, se indica a UNIX que se quiere convertir en superusuario. Entonces se solicita la contraseña del superusuario. Si la contraseña de root se escribe correctamente, se ejecuta un intérprete de comandos con UID 0. Al convertirse en superusuario, el prompt cambiará por defecto al carácter '#', lo que recordará los nuevos poderes que se han adquirido.

Cuando se usa en comando su para convertirse en superusuario, siempre debe usarse la trayectoria completa del comando /bin/su. Al hacerlo así, se asegura la ejecución del comando su auténtico y de que no se ha ejecutado algún otro comando su que se encuentre en la trayectoria de búsqueda. Esto es una manera importante de protegerse y proteger la contraseña del superusuario contra algún caballo de Troya.

Es recomendable invocar al comando su con un argumento simple en forma de guión cuando se quiere convertir en superusuario: $ /bin/su -

De esta forma, su invoca al intérprete de comandos de forma que este lea todos loa archivos de configuración necesarios y simule un inicio de sesión. Esto es importante porque así se evita que la trayectoria de búsqueda (PATH) sea la del usuario que invoco su y no la del superusuario.

Algunas versiones del UNIX de tipo Berkeley no permiten usar su a ninguna cuenta que no sea miembro del grupo wheel. Sin embargo la versión de su de GNU no utiliza esta característica.

Muchas versiones registran los intentos fallidos del comando su. Las versiones más viejas de UNIX enviaban explícitamente a la consola los avisos de los intentos fallidos de su y también los colocaban en el archivo /var/adm/messages. Las versiones más modernas registran los intentos fallidos de usar su a través del programa syslog, el cual permite enviar los mensajes que se quieran a un archivo específico o anotarlos en bitácoras que estén en computadoras remotas a través de la red.


Seguridad de sistema de ficheros

 

Una norma básica de seguridad radica en la asignación a cada usuario sólo de los permisos necesarios para poder cubrir las necesidades de su trabajo sin poner en riesgo el trabajo de los demás.

 

 

 

 

 

Ø      El árbol de directorios

 

Los sistemas tipo Unix se organizan en un único árbol de directorios. Cada soporte, disco, partición, disquete o CD tiene su propia organización lógica, un sistema de ficheros. Para usar uno de estos soportes se necesita  "montarlo" en un directorio existente. El contenido de la partición  aparecerá como el contenido del directorio.

Un primer criterio para mantener un sistema seguro seria hacer una correcta distribución del espacio de almacenamiento. Esto limita el riesgo de que el deterioro de una partición afecte a todo el sistema, la pérdida se limitaría al contenido de esa partición.

Las bases de la decisión adecuada son el uso al que vaya destinado el sistema y la experiencia.

 

Ø      Permisos

 

Linux, como sistema multiusuario, asigna un propietario y un grupo a cada fichero (y directorio), y unos permisos al propietario, al grupo y al resto de los usuarios. La forma más rápida de comprobar esta característica es usar el comando Is –la, este muestra el tipo de fichero, el propietario, el grupo, los permisos e información adicional. En los sistemas de ficheros pensados para entornos monousuario, como msdoso vfat, no se tiene esta característica, por lo que son inseguros y su uso no es aconsejable bajo Linux.

Es conveniente tener claros los permisos que se pueden asignar a un fichero o directorio. Puede que algunas aplicaciones no funcionen bien si algún fichero no tiene el permiso o el propietario correctos, bien por falta de permisos o bien por exceso.

 

Ø      Permisos de ficheros y directorios

 

Es necesario asegurarse que los ficheros del sistema y los de cada usuario sólo sean accesibles por quienes tienen que hacerlo y de la forma que deben. No sólo hay que protegerse de ataques o miradas Indiscretas, también hay que protegerse de acciones accidentales. En general, cualquier sistema UNIX divide el control de acceso a ficheros y directorios en tres elementos: propietario, grupo y otros. Tanto el propietario como el grupo son únicos para cada fichero o directorio, y en cada grupo puede haber  múltiples usuarios. Otros hace referencia a los usuarios que ni son el propietarios ni pertenecen al grupo. Todas estas características se almacenan en el sistema de ficheros, en particular en un i-nodo, que es un elemento que describe las características de un fichero en disco (excepto el nombre).

 

 

Ø      Permisos en sistemas tipo Unix:

 

Propiedad: Qué usuario y grupo posee el control de los permisos del i-nodo. Se almacenan como dos valores numéricos, el uid (user id) y gid (group id)

 

Permisos: Bits individuales que definen el acceso a un fichero o directorio. Los permisos para directorio tienen un sentido diferente a los permisos para ficheros.

Þ    Lectura (r)

 Fichero: Poder acceder a los contenidos de un fichero

                         Directorio Poder leer un directorio, ver qué ficheros contiene

Þ    Escritura (w)

   Fichero Poder modificar o añadir contenido a un fichero.

   Directorio Poder borrar o mover ficheros en un directorio

Þ    Ejecución(x)

   Fichero: Poder ejecutar un programa binario o guión de shell.

   Directorio: Poder entrar en n directorio

 

 

 

Estos permisos se pueden aplicar a:

 

Þ    usuario (u) El propietario del fichero

Þ    grupo (g) El grupo al que pertenece el fichero

Þ    otros (o) El resto de los usuarios del sistema

 

Otros bits de permisos indispensables para la seguridad:

 

Þ        Sticky bit: Si está activo en un directorio, entonces un usuario sólo puede borrar ficheros que son de su propiedad o para los que tiene permiso explícito de escritura, incluso cuando tiene acceso de

escritura al directorio

 

Þ        Atributo SUID: (Para Ficheros):  bit que describe permisos al identificador de usuario del fichero. Cuando el modo de acceso de ID de usuario está activo en los permisos del propietario, y ese fichero es ejecutable, los procesos que lo ejecutan obtienen acceso a los recursos del sistema basados en el usuario que crea el proceso (no el usuario que lo lanza)

 

Þ        Atributo SGID: (Para ficheros) Si está activo en los permisos de grupo, este bit controla el estado de "poner id de grupo" de un fichero. Actúa de la misma forma que SUID, salvo que afecta al grupo. El fichero tiene que ser ejecutable para que  tenga  efecto.

 

Þ        Atributo SGID: (Para directorios) Si activa el bit SGID en un directorio ( con "chmod g+s directorio"), los ficheros creados en ese directorio tendrán puesto su grupo como el grupo del directorio.

 

Permisos de acceso individuales para un fichero: ( Normalmente un fichero tendrá una combinación):

 

-r——   Permite acceso de lectura al propietario

-w------ Permite modificar o borrar el fichero al propietario

—x——Permite ejecutar este programa al propietario, (los guiones de shell también requieren permisos de lectura al propietario)

—s—— Se ejecutará con usuario efectivo ID = propietario

-——s-- Se ejecutará con usuario efectivo ID = grupo

-rw—-TNo actualiza "instante de última modificación". Normalmente usado para ficheros de intercambio (swap)

--.t—— No tiene efecto (antes sticky bit)

 

Permisos de acceso individuales para un directorio: ( Normalmente un directorio tendrá una combinación)

 

 dr-—-— Permite listar el contenido pero no se pueden leer los atributos.

d-x—---.  Permite entrar en el directorio y usar en las rutas de ejecución completas.

dr-x--—- Permite leer los atributos del fichero por el propietario.

d-wx——Permite crear / borrar ficheros.

d——x-t  Previene el borrado de ficheros por otros con acceso de escritura. Usado en /tmp

d—s-s-     No tiene efecto

 

Los ficheros de configuración del sistema (normalmente en /etc. son habituales que tengan el modo 640 (-rw-r—--), y que sean propiedad del root Dependiendo de los requisitos de seguridad del sistema, esto se puede modificar. Nunca deje un fichero del sistema con permiso de escritura para un grupo o para otros. Algunos ficheros de configuración, incluyendo /etc/shadow, sólo deberían tener permiso de lectura por root, y los directorios de /etc. no deberían ser accesibles, al menos por otros.

 

 

Ø      SUID Shell Scripts

 

Los scripts de shell SUID son un serio riesgo de seguridad, y por esta razón el núcleo no los

acepta. Sin importar lo seguro que piense que es su script de shell, puede ser utilizado para que un cracker pueda obtener acceso a una shell de root.

 

Ø      Enlaces

 

Los sistemas de ficheros de tipo Unix permiten crear enlaces entre ficheros.

Þ    Enlaces Duro: consiste en asignar más de un nombre a los mismos datos en disco. No consume más espacio adicional que el que pueda representar el nuevo nombre que le damos a unos datos y sólo es válido para ficheros que estén en el mismo sistema de ficheros, es decir, la misma partición.

Þ    Enlaces simbólicos: son ficheros que apuntan a otro fichero o directorio. Crean un nuevo fichero pequeño que contiene la ruta del fichero destino.

 

Ø      Verificar la integridad con Tripwire

 

Una forma cómoda de detectar ataques locales (y también de red) en su sistema es ejecutar un programa que verifique la integridad de la información almacenada en los ficheros, tal como Tripwire. El programa Tripwire ejecuta varios cheksums de todos los binarios importantes y ficheros de configuración y los compara con una base de datos con valores de referencia aceptados como buenos. Así se detecta cualquier cambio en los ficheros. Es buena idea instalar tripwire un disquete y protegerlo físicamente. De esta forma no se puede alterar trípwire modificar su base de datos. Una vez que (trpwire ha configurado, es buena idea ejecutarlo como parte de los deberes habituales de administración para ver sí algo ha cambiado. Tripwire puede ser una de las mejores herramientas para detectar intrusos antes de que tenga otro tipo de noticias de ellos. Como son muchos los ficheros que se modifican en su sistema, debería tener cuidado para discernir lo que es la actividad de un cracker y lo que es la actividad normal del sistema.

 

 

Seguridad en Red 

 

Ø      Inetd

 

 Para atender las solicitudes de conexión que llegan a nuestro equipo existe un demonio llamado inetd que está a la escucha de todos los intentos de conexión que se realicen a su máquina. Cuando le llega una solicitud de conexión irá dirigida a un puerto (número de servicio, quizás sea más claro que puerto), por ejemplo, el 80 sería una solicitud al servidor de páginas web. Los servicios de red que presta su máquina están descritos en /etc/inetd.conf (y en /etc/services los números de puertos). Por ejemplo, en /etc/inetd.conf podemos encontrar las siguientes líneas:

       (...)

       pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d

       # imap stream tcp nowait root /usr/sbin/tcpd imapd

       (...)

  Esto quiere decir que, cuando llegue una solicitud de conexión al puerto 110 (pop3) se ejecutará el programa /usr/sbin/tcpd ipop3d. Sin embargo, el servicio imap está deshabilitado (para deshabilitar se comenta, al inicio de la línea correspondiente, con #), por lo que el sistema no le responde.

 

Ø      Nmap

 

Según el manual, Nmap “(...) está diseñado para permitirle a los administradores de sitema e individuales curiosos, ‘escaneara’[analizar] grandes redes para determinar que hosts se encuentran funcionando, y que servicios (ftp,http, ssh, telnet, MySQL,etc) están ofreciendo”.

Este portscanner es la herramienta más utilizada por toda la comunidad en internet por la razón de que soporta muchas técnicas de análisis, a saber:

ü      TCP connect (éste es el método utilizado por defecto)

ü      UDP

ü      TCP SYN (medio abierto)

ü      ftp proxy (ataque de rebote)

ü      ident-reverso

ü      ICMP (barrido de ping – ECHO_REQUEST)

ü      FIN

ü      Barrido ACK

ü      Xmas Tree (literalmente, ‘árbol de navidad’)

ü      Barrido SYN

ü      Protocolo IP

ü      Null Scan (Escaneo/Análisis nulo)

 

Nmap tiene un gran número de utilidades adicionales que son usadas por los administradores de Redes, por auditores de seguridad o por hackers. Éstas utilidades son:

ü      Detección del Sistema Operativo del host a través del escaneado de huellas TPC/IP

ü      Análisis Stealth (Furtivo)

ü      Calculo de esperas y retransmisión dinámico

ü      Análisis paralelo

ü      Detección de hosts que no funcionan a través de pings paralelos

ü      Análisis por decoys (hosts intermedios)

ü      Detección de puertos a través de filtrados (por el hosts final o uno intermedio)

ü      Análisis RPC directo (no por mapeo de puertos)

ü      Análisis de fragmentación

ü      Especificación flexible de objetivos y puertos

 

Al ejecutar Nmap se obtendrá un lista de puertos abiertos y según las opciones especificadas en la linea de comandos informará las siguientes características del hosts: el SO que utiliza, los nombres de los usuarios que estén ejecutando los programas de cada puerto, el nombre DNS, y algunas otras cosas. Otra funcionalidad interesante que trae el Nmap es que informa el numero de versión de los programas que se están ejecutando en los puertos abiertos del hosts. Aunque esta función es muy útil es necesario prestar atención ya que los programas pueden estar preparados para informar un numero falso de versión para despistar a los crackers.

                       

   Anterior          Índice          Siguiente

Para mayor información, seleccione una opción:

Número de visitas efectuadas desde el 17/12/2001: 
 
Estadísticas diarias desde el 10/07/2002:    

Número de visitantes actuales disponible desde el 14/07/2002:

 

AddFreeStats.com Free Web Stats in real-time !  

 

 

 

Autor: lrmdavid@exa.unne.edu.ar

Ó FACENA - http://exa.unne.edu.ar

Servicios WEB: webmaster@exa.unne.edu.ar