U.A.G.R.M. SCHOOL OF ENGINEERING FACULTAD DE INGENIERÍA EN CIENCIAS DE LA COMPUTACIÓN Y TELECOMUNICACIONES “Investigación de la seguridad en los Sistemas Operativos UNIX” Grupo: 4 Estudiantes: - Angélica - Cinthia - Bruno - Ronald - Gabriel - Maikol B - Lemuel R Docente : Módulo: 5 Fecha: 3 de octubre de 2022 Santa Cruz - Bolivia “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” Contenido I. INTRODUCCIÓN A LA INVESTIGACIÓN .................................................................................................. 1 1.1. Antecedentes ................................................................................................................................ 1 1.2. Situación Problemática ................................................................................................................. 1 1.3. Situación Deseada ......................................................................................................................... 1 1.4. Objeto de la Investigación ............................................................................................................ 1 II. OBJETIVOS ............................................................................................................................................. 2 2.1. Objetivo General ........................................................................................................................... 2 2.2. Objetivo Específicos ...................................................................................................................... 2 III. MARCO TEÓRICO .............................................................................................................................. 2 3.1. Mecanismos de seguridad de Unix ............................................................................................... 2 3.2. Sistema de Ficheros de Unix ....................................................................................................... 18 3.2.1. Concepto ............................................................................................................................. 18 3.2.2. Directorios y estructura ...................................................................................................... 18 3.2.3 Niveles de acceso a la información............................................................................................... 21 3.3. Mantenimiento de sistemas confiables ...................................................................................... 24 3.3.1. Criptografía ......................................................................................................................... 24 3.3.2. Protección de cuentas......................................................................................................... 27 3.4. Auditoría en UNIX ....................................................................................................................... 28 3.5. Amenazas .................................................................................................................................... 30 3.5.1. Amenazas naturales ............................................................................................................ 30 3.5.2. Amenazas no intencionales ................................................................................................ 31 3.5.3. Amenazas intencionales...................................................................................................... 31 3.6. Funcionalidades e Implementaciones de Unix con referencia a la seguridad ............................ 34 3.6.1. TCP Wrappers...................................................................................................................... 35 3.6.2. Kerberos en Unix ................................................................................................................. 36 3.7. Consejos sobre seguridad en Unix .......................................................................................... 37 IV. DESARROLLO DEL LABORATORIO ................................................................................................... 37 V. CONCLUSIONES Y RECOMENDACIONES.............................................................................................. 42 VI. REFERENCIAS................................................................................................................................... 44 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” Tabla de Figuras Figura 1: Características de Seguridad en un SO Unix .................................................................................. 1 Figura 2: Estructura del sistema de archivos en UNIX .................................................................................. 3 Figura 3: Login del usuario arodriguez .......................................................................................................... 4 Figura 4: visualización del contenido de un archivo de texto passwd .......................................................... 5 Figura 4: Visualización del UID del usuario lromero ..................................................................................... 8 Figura 5: visualización del contenido de un archivo de texto group ......................................................... 10 Figura 7: TCP Wrappers............................................................................................................................... 36 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” I. INTRODUCCIÓN A LA INVESTIGACIÓN 1.1. Antecedentes A medida que pasa el tiempo los sistemas operativos Open Source se van haciendo populares debido a su flexibilidad y sus utilidades. Existen comunidades que se dedican exclusivamente a desarrollar y dar soporte a estos sistemas operativos. Los sistemas operativos Unix han sido una principal fuente de funcionalidades para diversos objetivos en el mundo de la tecnología, como por ejemplo la base de un Sistema Operativo para un equipo de seguridad. 1.2. Situación Problemática Para la utilidad de un sistema operativo siempre se debe prever la seguridad, y cómo puede resguardar la información que se almacena internamente. Ver si la configuración por defecto y la actualización del sistema operativo protege la información como debería. 1.3. Situación Deseada El propósito de esta investigación es conocer la seguridad en sistemas operativos Unix, las características y funcionalidades que ofrece para proteger la información dentro de una empresa, o en un hardware que tenga la instalado un SO en base a Unix. 1.4. Objeto de la Investigación Archivos de Seguridad Autenticación Encriptación Amenazas Figura 1: Características de Seguridad en un SO Unix 1 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” II. OBJETIVOS 2.1. Objetivo General Analizar la seguridad en el Sistema Operativo Unix, mediante la investigación de sus características principales. 2.2. Objetivo Específicos ❖ Identificar las principales características y mecanismos de seguridad del Sistema Operativo Unix. ❖ Definir el tipo de autenticación que utiliza el SO Unix. ❖ Identificar y explicar la manera en cómo se autentica y se encriptan los usuarios y contraseñas. ❖ Definir los tipos de ataques que afectan a las vulnerabilidades de SO Unix. ❖ Explicar los tipos de mitigación ante las amenazas que existe en un SO Unix. ❖ Identificar las funcionalidades implementaciones de Unix con referencia a la seguridad ❖ Realizar un Laboratorio donde se vea al SO UNIX en funcionamiento. ❖ Definir las principales funcionalidades e implementaciones del SO Unix. III. MARCO TEÓRICO 3.1. Mecanismos de seguridad de Unix 3.1.1. Introducción En este capítulo se destacan los principales mecanismos de seguridad de UNIX, es decir, aquellos recursos que el sistema operativo proporciona y que conforman la base sobre la que se establece la seguridad. El conocimiento de estos mecanismos por parte del administrador de seguridad es completamente imprescindible, puesto que, bien utilizados permiten que el sistema se muestre robusto ante cualquier ataque o fallo. Por 2 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” otro lado, mal utilizados proporcionarán una puerta abierta a cualquier atacante o convertirán un programa inocente en un auténtico agujero de seguridad. La estructura del sistema de archivos en UNIX Figura 2: Estructura del sistema de archivos en UNIX 3.1.2. Usuarios y grupos en 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. Hay cuatro archivos principales de administración de usuarios: /etc/passwd- Mantiene la información de cuenta de usuario y contraseña. Este archivo contiene la mayor parte de la información sobre cuentas en el sistema Unix. /etc/shadow- Contiene la contraseña encriptada de la cuenta correspondiente. No todos los sistemas admiten este archivo. /etc/group - Este archivo contiene la información del grupo para cada cuenta. /etc/gshadow - Este archivo contiene información segura de la cuenta del grupo. 3 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” 3.1.2.1. Cuentas de usuario La identificación en los sistemas UNIX se realiza mediante un nombre de usuarios (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 UNIX, es necesario conocer tanto el nombre de usuario como la contraseña correspondiente. Por ejemplo, Angelica Rodríguez Rivero posee una cuenta. Su nombre de usuario es arodriguez y su contraseña es"12345arr". Cuando Angelica desee iniciar una sesión en el servidor, deberá autentificarse como usuario autorizado ante la máquina de la siguiente manera. Figura 3: Login del usuario arodriguez De esta manera, el usuario queda totalmente autentificado y obtendrá un intérprete 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 (después se verá que esto no es estrictamente cierto, puesto que dos usuarios pueden compartir el mismo UID). Las contraseñas en UNIX tradicionalmente tenían una longitud de entre 1 y 8 caracteres, aunque algunas versiones comerciales permiten contraseñas más largas. El uso de contraseñas más largas implica una mayor seguridad, porque son más difíciles de 4 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” 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, por ello, se dedicará a esto otro apartado. 3.1.2.2. El archivo /etc/passwd En los sistemas tipo UNIX, la información sobre las cuentas de usuario se almacena 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: Figura 4: visualización del contenido de un archivo de texto passwd 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 arodriguez, grosado, csaavedra. Las cuentas que tienen un * en al campo de la contraseña no pueden ser utilizadas para iniciar 5 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” 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 tareas 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 arodriguez Nombre de usuario * Contraseña cifrada del usuario 101 Número de identificación del usuario (UID) 101 Número de identificación de grupo del usuario (GID) Angelica Rodríguez Nombre completo de usuario Rivero home/arodriguez Directorio del usuario /bin/bash Interprete de comandos del usuarioa Tabla 1 : Explicación de las características del usuario arodriguez La contraseña se guarda cifrada. La contraseña en sí no se guarda tal cual, en el sistema, si así se hiciera, esto representaría un grave riesgo. para la seguridad, y solo es aceptable cuando la política de seguridad lo admita por razones particulares. En la actualidad, muchas organizaciones poseen grandes redes de tipo clienteservidor 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 todos los computadores. Para lograr esto se utilizan diversos paquetes software que proporcionan el contenido del fichero /etc/passwd a toda la red. Algunos de estos sistemas son: 6 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” 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 específica 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 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 7 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” 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, luego colocar otras medidas defensivas como es el caso del cortafuegos (firewall). 3.1.2.3. Identificador de usuario (UID) 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 de32 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: Figura 5: Visualización del UID del usuario lromero Aquí se puede ver que el UID de lromero es 1006. El UID es la información real que utiliza el sistema operativo para identificar al usuario. Los nombres 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 8 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” 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. 3.1.2.4. El archivo /etc/group 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, talvez 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 específicas. Por ejemplo, en muchas computadoras que usan UNIX, solamente se permite examinar el contenido de la memoria del kernel del sistema al usuario que pertenecen al grupo grupoB. El grupo grupoA 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. 3.1.2.5. El archivo /etc/group 9 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” 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 del del archivo /etc/passwd. He aquí una muestra de archivo /etc/group que pertenece a un sistema típico: Figura 6: visualización del contenido de un archivo de texto group La primera línea define el grupo root. Los campos se detallan en la siguiente tabla: Campos Contenido root Nombre de grupo * Contraseña grupo (Cifrada) 0 Número de identificación del grupo (GID) root Lista de usuarios miembros del grupo Tabla 2 : Explicación de las características del grupo root cuales se indican en el archivo/etc/passwd. Por ejemplo, arodriguez, lromero que pertenecen al grupo grupoA 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. 3.1.2.6. 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. 10 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” Análogamente al UID, el GID representa al grupo en el sistema, y no su nombre. Los grupos permiten agrupar a varios usuarios 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. 3.1.2.7. 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 linea de un terminal, puede robar la tarjeta en un atraco, y si tiene un cuchillo, quizás pueda 11 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” 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 se asegura de 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). 12 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” 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 administrados puede desbloquearla. El bloqueo protege al sistema de quienes intentan adivinar una contraseña y avisa de 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 es 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. 13 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” 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 En nombre de la mascota o del hijo Los nombres 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 matrícula del coche Cualquier parte del c.i. 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. Nombres 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 14 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” 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. 3.1.2.8. 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 se tiene la 15 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” 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. 3.1.2.9. El comando su A veces un usuario debe tomar la identidad de otro. Po 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 encada 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 16 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” 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 guion cuando se quiere convertir en superusuario: $ /bin/su De esta forma, su invoca al intérprete de comandos de forma que este lea todos lo a 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. 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 17 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” 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. 3.2. Sistema de Ficheros de Unix 3.2.1. Concepto Mecanismo software que permite crear, almacenar, recuperar, proteger y gestionar ficheros. A los ficheros se le asocia información adicional como ser, permisos de acceso, atributos, etc (metadatos) Los archivos pueden contener textos, documentos, código fuente, ejecutables, directorios, páginas web, etc. UNIX no impone estructura ni interpretación a la información contenida en un fichero. Estas dependen de la aplicación que la utilizan. 3.2.2. Directorios y estructura Son nodos del sistema de archivos y contienen otros nodos del sistema. 18 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” Descripción Elemento /etc Contiene archivos de configuración que varían según la máquina. Estos son algunos ejemplos: /etc/hosts /etc/passwd El directorio /etc contiene los archivos que generalmente se utilizan en la administración del sistema. La mayoría de mandatos que residían previamente en el directorio /etc residen ahora en el directorio /usr/sbin. Sin embargo, por compatibilidad, el directorio /usr/sbin contiene enlaces simbólicos con las ubicaciones de algunos archivos ejecutables. Estos son algunos ejemplos: /etc/chown es un enlace simbólico con /usr/bin/chown. /etc/exportvg es un enlace simbólico con /usr/sbin/exportvg. /bin El enlace simbólico con el directorio /usr/bin. En sistemas de archivos UNIX anteriores, el directorio /bin contenía mandatos del usuario que ahora residen en el directorio /usr/bin. /sbin Contiene los archivos necesarios para arrancar la máquina y montar el sistema de archivos /usr. La mayoría de mandatos utilizados durante el arranque provienen del sistema de archivos de disco RAM de la imagen de arranque; por tanto, muy pocos mandatos residen en el directorio /sbin. 19 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” /dev Contiene nodos de dispositivos para archivos especiales de dispositivos locales. El directorio /dev contiene archivos especiales para unidades de cintas, impresoras, particiones de disco y terminales. /tmp Sirve como punto de montaje para un sistema de archivos que contiene archivos temporales generados por el sistema. El sistema de archivos /tmp es un directorio vacío. /var Sirve como punto de montaje para archivos que varían en cada máquina. El sistema de archivos /var está configurado como un sistema de archivos porque los archivos que contiene tienden a crecer. Consulte el apartado Sistema de archivos /var para obtener más información. /u Enlace simbólico para el directorio /home. /usr Contiene archivos que no cambian y que las máquinas pueden compartir, por ejemplo, ejecutables y documentación ASCII. Las máquinas autónomas montan la raíz de un sistema de archivos local independiente en el directorio /usr. Las máquinas sin discos y las máquinas con recursos de disco limitados montan un directorio desde un servidor remoto en el sistema de archivos /usr. Consulte el apartado Sistema de archivos /usr para obtener información acerca del árbol de archivos montado en el directorio /usr. 20 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” /home Sirve como punto de montaje para un sistema de archivos que contiene directorios iniciales de usuario. El sistema de archivos /home contiene archivos y directorios organizados por usuario. En una máquina independiente, el directorio /home está contenido en un sistema de archivos independiente cuya raíz está montada en el sistema de archivos raíz del directorio /home. En una red, un servidor puede contener archivos de usuario que se pueden acceder desde varias máquinas. En este caso, la copia del servidor del directorio /home se monta remotamente en un sistema de archivos /home local. /export Contiene los directorios y archivos de un servidor destinados a clientes remotos. Consulte el apartado Directorio /export para obtener más información acerca del árbol de archivos que reside bajo el directorio /export. /lib Enlace simbólico con el directorio /usr/lib. Consulte el apartado Sistema de archivos /usr para obtener más información. /tftpboot Contiene imágenes de arranque e información de arranque para clientes sin disco. 3.2.3 Niveles de acceso a la información Todo usuario tiene la posibilidad de crear, modificar y borrar archivos. Cada archivo tiene tres modos de acceso diferentes: ❖ Acceso para lectura "r". Se permite acceder para consultar el contenido del archivo sin modificarlo. ❖ Acceso para escritura "w". Se permite modificar el contenido del archivo. ❖ Acceso para ejecución "x". El archivo puede ser ejecutado (por ejemplo, un programa compilado). 21 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” En los sistemas multiusuario se hace necesario controlar el acceso a la información asegurando su privacidad. Como ya se ha visto anteriormente, cada usuario del sistema tiene un número identificador (UID) único dentro del sistema y también pertenece a un grupo de usuarios identificado unívocamente dentro del sistema por un número (GID). A estos números se les asocia unos nombres lógicos que se denominan login en el caso del UID y nombre de grupo en el caso del GID. Por lo tanto, una manera de identificar la información perteneciente a un usuario (el caso que nos ocupa son sus archivos), es que cada archivo lleva asociado el identificador de usuario propietario de la información y la del grupo a que este usuario pertenece. De la combinación de los tres modos de acceso explicados anteriormente rwx y los atributos propietarios de un archivo y grupo al que pertenece dicho propietario, surgen los denominados niveles de acceso a la información. Estos son tres: ❖ Nivel de usuario. Son los modos de acceso a la información permitidos para el propietario del archivo. ❖ Nivel de grupo. Modos de acceso a la información permitidos para cualquier usuario que pertenezca al mismo grupo que el del propietario del archivo. ❖ Nivel de otros. Modos de acceso a la información permitidos para los usuarios del sistema que ni son el propietario del archivo ni pertenecen a su mismo grupo. ❖ Permisos: Como se explicó anteriormente, el usuario puede establecer a voluntad que otros usuarios tengan permiso de lectura (r) escritura (w) y de ejecución (x) de cada archivo y directorio (modos de acceso a la información). Para ello, cada archivo lleva asociada una cadena de 10 caracteres de la siguiente forma: 22 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” donde el carácter - en el campo del tipo de archivo indica que es un archivo ordinario, y en cualquiera de los otros campos supone que el permiso (rwx) NO está habilitado. ❖ Número de enlaces (links): un enlace es un mecanismo que permite hacer referencia a un archivo a través de diferentes nombres. Con ello se logra un aprovechamiento del espacio en disco. ❖ Nombre del propietario (usuario): Es el código que identifica al usuario propietario del archivo o directorio en el sistema. Coincide con el login de la cuenta. ❖ Nombre del grupo. Indica el nombre del grupo al que está adscrito el propietario del archivo. ❖ Tamaño del archivo: Indica el número de bytes que contiene el archivo. En el caso de los archivos especiales, aquí aparecerán dos valores que se denominan major number y minor number. ❖ Fecha y hora de la última modificación. ❖ Nombre del archivo. 23 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” 3.3. Mantenimiento de sistemas confiables El mantenimiento de sistemas confiables se refiere a las técnicas utilizadas para evitar la pérdida de datos y para responder a los ataques de los intrusos, así como el trabajo que tendrá que realizar el administrador para mantener el sistema seguro. 3.3.1. Criptografía Mantener la información confidencial es uno de los principales objetivos de seguridad en los sistemas informáticos, pero en la mayoría de los casos no solo se puede confiar en la seguridad del sistema. Uno de esos casos es al enviar información a través de medios de comunicación no confiable, esto obliga al usuario a hacer uso de la criptografía. En la actualidad existen muchos métodos y aplicaciones de criptografía. Pero no siempre fue así, hasta la década de los 70, todos los sistemas de criptografía conocidos funcionaban con una clave de cifrado igual a la de descifrado (cifrado simétrico) y si eran diferentes una podía obtenerse de la otra en un tiempo y con unos recursos razonables. La seguridad de estos sistemas dependía del mantenimiento en secreto de la clave. Posteriormente debía transmitirse del emisor al receptor por medio de un canal seguro diferente del canal del sistema criptográfico. Sin embargo, en 1976 de desarrollo sistemas de criptografía que no requerían transferir una clave secreta entre el transmisor y el receptor, esto ayudaba a no estar buscando un canal seguro para transmitir una clave secreta. En estos nuevos sistemas la clave de denominaba Publica, sin embargo, la clave de descifrado se denominaba como clave Privada. Otro sistema de cifrado es el denominado Irreversible, en estos sistemas no es posible obtener el mensaje en claro, es decir que solo trabajan en un solo sentido, el que lleva el texto en claro, pero no al contrario. Este tipo de cifrado es utilizado en aplicaciones que no necesiten descifrar el criptograma. Por lo anteriormente observado para el almacenamiento de contraseñas de usuario en aplicaciones se utiliza mucho el cifrado irreversible, cuando el usuario introduce su contraseña, este se cifra y se compara con la contraseña almacenada. 3.3.1.1. Función de cifrado en UNIX En UNIX existe la función crypt() que realiza el hashing de contraseñas agregando código adicional para disuadir los intentos de búsqueda clave (ataque por Fuerza Bruta). 24 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” char * crypt(const char *key, const char *salt); Esta función nos permite utilizar diferentes algoritmos para el cifrado. Actualmente, estos incluyen el estándar de cifrado de datos NBS (DES), Hash MD5, NT-Hash (compatible con el esquema NT de Microsoft) y Blowfish. El algoritmo utilizado dependerá del valor en el parámetro de la función *Salt (siguiendo el estándar de encriptado Modular Crypt Format (MCF)), si DES y/o Blowfish están instalados o no. El primer argumento para encriptar son los datos para hash (generalmente una contraseña), en una cadena terminada en NULL. El segundo es la *salt, en una de tres formas: Extendido Si comienza con un guion bajo ("_") entonces el DES Extendido se utiliza para interpretar tanto la clave como el parámetro *salt. Modular Si comienza con la cadena "$digit$", se utiliza el formato de encriptación modular. Tradicional Si nada de lo anterior es cierto, asume el formato tradicional, utilizando la cadena de texto completo como valor en salt. Todas las rutinas están diseñadas para consumir mucho tiempo. I. Formato extendido DES La clave se divide en grupos de 8 caracteres (el último grupo es rellenado con NULL) y los 7 bits de orden inferior de cada carácter (56 bits por grupo) se utilizan para formar la clave DES de la siguiente manera: El primer grupo de 56 bits se convierte en la clave DES inicial. Para cada grupo adicional, el XOR del cifrado de la clave DES actual se aplica en los siguientes grupos de bits para sus claves DES. El parámetro salt es una matriz de 9 caracteres, esta matriz está formado de un guion bajo (_) seguido de 4 bytes de recuento de iteraciones y 4 bytes para el parámetro salt. La función principal de salt es introducir desorden en el algoritmo DES en uno de 16.777.216 o 4096 formas posibles (por ejemplo, con 24 o 12 bits: si el bit i del parámetro salt es establecido, entonces los bits i e i+24 se intercambian en la salida de DES). La clave DES se usa para encriptar una constante de 64 bits usando iteraciones de conteo. El valor devuelto es una cadena terminada en NULL, 20 o 13 bytes (más NULL) de longitud, que consta de la sal seguida del codificado Cifrado de 64 bits. 25 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” II. Encriptación Modular Si el parámetro salt comienza con la cadena $dígit$, entonces el formato de Encriptación Modular es usado, El valor de dígit representa qué algoritmo se usa en el cifrado. El valor del parámetro salt debe terminar con el carácter de cadena (NULL) o el signo de dólar ($). Los algoritmos soportados actualmente son: 1. MD5 2. Blowfish (pez globo) 3. NT-Hash 4. (sin usar) 5. SHA-256 6. SHA-512 Se pueden agregar fácilmente otros formatos de encriptado. III. Encriptación tradicional El algoritmo utilizado dependerá si la función crypt_set_format() ha sido llamado y si se ha especificado un formato predeterminado global. A menos que se haya especificado un valor predeterminado global o establecido el formato en crypt_set_format(), se utiliza el formato predeterminado incorporado. La forma en que el parámetro salt es usado dependerá del algoritmo para el hash. int crypt_set_format(const char *string); La función crypt_get_format() devuelve una cadena constante que representa el nombre del algoritmo utilizado actualmente. Algunos de los valores devueltos son 'des', 'blf', 'md5', 'sha256', 'sha512' y 'nth'. const char* crypt_get_format(void); La función crypt_r() se comporta de manera idéntica a crypt(), excepto que el valor resultante se almacena en datos, lo que la hace segura para subprocesos. char * crypt_r(const char *key, const char *salt, struct crypt_data *data); 26 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” 3.3.2. Protección de cuentas Las cuentas de usuario en una computadora son la parte más importante que tiene un sistema informático, una de sus funciones es conectar al usuario con el mundo exterior, algunas cuentas están bien protegidas, pero otras pueden no estarlo. El administrador de sistemas es el encargado de buscar puntos débiles y corregirlos. 3.3.2.1. Cuentas sin contraseñas Para las cuentas de usuario, las contraseñas son la primera línea de defensa de un sistema. En una cuenta sin contraseña cualquiera puede que cualquiera que conozca el nombre de la cuenta puede ingresar. Muchos de los ataques que han tenido éxito, fue solo porque las cuentas de sus víctimas no tenían contraseñas o eran fáciles de adivinar. En la versión SVR4 de UNIX, se pueden rastrear cuentas sin contraseña usando la instrucción: # logins -p También se pueden rastrear las cuentas sin contraseña usando la instrucción: % cat-passwd | awk -F: 'length($2)<1 {print $1}' manurod maripet 3.3.2.2. Cuentas predeterminadas La mayoría de los sistemas entregan a los usuarios este tipo que cuentas. Estas cuentas tienen contraseñas estándar, como ser los antiguos sistemas basados en UNIX tenían una cuenta Root sin contraseña. En la actualidad para solucionar este problema muchos distribuidores hicieron que el sistema operativo solicite contraseñas para cuentas especiales como Root cuando se instala por primera vez. 3.3.2.3. Cuentas que ejecutan servicios UNIX permite crear cuentas que solo ejecuten un programa o servicio en lugar del intérprete de comandos. Si el sistema tiene este tipo de cuenta instalada, alguien puede usarlas para encontrar la hora o determinar quién está conectado a la computadora al teclear simplemente el nombre de la instrucción en el indicador login. Si el administrador 27 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” decide configurar una cuenta de este tipo, se debe asegurar de que la instrucción o programa que se ejecuta no reciba ninguna entrada desde teclado. Específicamente, estos programas no deben tener escapes al intérprete de comandos. 3.3.2.4. Cuentas abiertas En algunos negocios de atención al cliente los sistemas proporcionan cuentas en las cuales los visitantes acceden a ciertos tipos de servicios (juegos, internet, red). Estas cuentas son definidas con los nombres de: Play, Open o Guest y no suelen necesitar de contraseña. El riesgo es que debido a que los nombres de estas cuentas son conocidos o fáciles de adivinar, representan potencialmente violaciones a la seguridad, ya que un atacante puede entrar inicialmente a una de estas cuentas para rastrear desde allí fallos de seguridad de mayor índole. 3.4. Auditoría en UNIX El sistema de log en UNIX La localización de ficheros y ciertas ordenes relativas a la auditoría varían de unas máquinas a otras, por lo que es muy recomendable consultar las páginas del manual antes de ponerse a configurar el sistema de auditoría en un equipo concreto. La principal diferencia entre los diferentes sistemas es el denominado process accounting o simplemente accounting, consistente en registrar todos los programas ejecutados por cada usuario; evidentemente, los informes generados en este proceso pueden llegar a ocupar muchísimo espacio en disco (dependiendo del número de usuarios en nuestro sistema) por lo que solo es recomendable en situaciones muy concretas, por ejemplo para detectar actividades sospechosas en una maquina o para cobrar por el tiempo de CPU consumido. En los sistemas System V el process accounting esta desactivado por defecto; se puede iniciar mediante /usr/lib/acct/startup, y para visualizar los informes se utiliza la orden acctcom. En la familia BSD los equivalentes a estas órdenes son accton y lastcomm; en este caso el process accounting esta inicializado por defecto. El demonio syslogd El demonio syslogd (Syslog Daemon) se lanza automáticamente al arrancar un sistema UNIX, y es el encargado de guardar informes sobre el funcionamiento de la máquina. Recibe mensajes de las diferentes partes del sistema (núcleo, programas) y los envía y/o almacena en diferentes 28 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” localizaciones, tanto locales como remotas, siguiendo un criterio definido en el fichero de configuración /etc/syslog.conf, donde especificamos las reglas a seguir para gestionar el almacenamiento de mensajes del sistema. Algunos archivos de log En función de la configuración del sistema de auditoría de cada equipo UNIX los eventos que sucedan en la maquina se registraran en determinados ficheros; aunque podemos loggear en cualquier fichero (incluso a través de la red o en dispositivos, como veremos luego), existen ciertos archivos de registro habituales en los que se almacena información. A continuación, comentamos los más comunes y la información que almacenan. - syslog El archivo syslog (guardado en /var/adm/ o /var/log/) es quizás el fichero de log más importante del sistema; en él se guardan, en texto claro, mensajes relativos a la seguridad de la máquina, como los accesos o los intentos de acceso a ciertos servicios. - messages En este archivo de texto se almacenan datos informativos de ciertos programas, mensajes de baja o media prioridad destinados más a informar que a avisar de sucesos importantes, como información relativa al arranque de la maquina; no obstante, como sucedÍa con el fichero syslog, en función de /etc/syslog.conf podremos guardar todo tipo de datos. - wtmp Este archivo es un fichero binario (no se puede leer su contenido directamente volcándolo con cat o similares) que almacena información relativa a cada conexión y desconexión al sistema. - utmp El archivo utmp es un fichero binario con información de cada usuario que está conectado en un momento dado; el programa /bin/login genera un registro en este fichero cuando un usuario conecta, mientras que init lo elimina cuando desconecta. - lastlog El archivo lastlog es un fichero binario guardado generalmente en /var/adm/, y que contiene un registro para cada usuario con la fecha y hora de su última conexión. - faillog Este fichero es equivalente al anterior, pero en lugar de guardar información sobre la fecha y hora del último acceso al sistema lo hace del último intento de acceso de cada usuario; una conexión es fallida si el usuario (o alguien en su lugar) teclea incorrectamente su contraseña. 29 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” - loginlog Si en algunas versiones de UNIX (como Solaris) creamos el archivo /var/adm/loginlog (que originalmente no existe), se registraran en él los intentos fallidos de login, siempre y cuando se produzcan cinco o más de ellos seguidos. - btmp En algunas distribuciones de UNIX, como Linux o HP-UX, el fichero btmp se utiliza para registrar las conexiones fallidas al sistema, con un formato similar al que wtmp utiliza para las conexiones que han tenido éxito. - sulog Este es un fichero de texto donde se registran las ejecuciones de la orden su, indicando fecha, hora, usuario que lanza el programa y usuario cuya identidad adopta, terminal asociada y éxito ('+') o fracaso ('-') de la operación. - debug En este archivo de texto se registra información de depuración (de debug) de los programas que se ejecutan en la maquina; esta información puede ser enviada por las propias aplicaciones o por el núcleo del sistema operativo. 3.5. Amenazas Las amenazas y vulnerabilidades son los puntos débiles del sistema, a través de los cuales la seguridad se puede ver afectada. Se clasifican principalmente en tres tipos: naturales, no intencionales e intencionales. 3.5.1. Amenazas naturales Son las amenazas a las que todo elemento físico está expuesto: incendios, temblores, terremotos, rayos, fallas de energía eléctrica, ect. Casi nunca es posible prever este tipo de desastre, pero es posible detectarlos rápidamente (mediante alarmas y detectores, por ejemplo), minimizar los daños causados (utilizando mecanismos automáticos) y tratar de evitar sus ocurrencias en lo posible (implementando políticas de uso que reduzcan los riesgos). 30 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” 3.5.2. Amenazas no intencionales Son los peligros causados por la ignorancia. Por ejemplo, un usuario que por error borra sus propios archivos, o un administrador sin la capacitación necesaria que hace cambios erróneos en un archivo de configuración del sistema. Estas amenazas también se presentan por descuido: dejar caer una cinta magnética, poner un disco cerca de un imán, etc. A pesar de que no tienen nada de atractivo para la opinión pública, son mayores y mucho más frecuentes los daños causados por acciones no intencionales que por malicia. 3.5.3. Amenazas intencionales Estas son las amenazas que llaman la atención, las que acaparan las primeras planas de los periódicos cuando se conocen y las que cautivan la imaginación del público. Sin embargo (y afortunadamente) son las menos frecuentes. Los ataques intencionales pueden ser realizados por dos tipos de personas: Externos. Pueden ser intrusos ocasionales, que por suerte o por un poco de habilidad pudieron obtener acceso al sistema. También pueden ser intrusos decididos que atacan el sistema con un objetivo específico, que puede ser la obtención de dinero, el chantaje a la empresa, la obtención de información clasificada, etc. También el objetivo puede ser únicamente la diversión, el reto de vencer los mecanismos de seguridad y la fama que ello puede crear en el bajo mundo de la computación. Vale la pena en este punto definir a los atacantes mediante un término. A continuación, se presenta esta definición. Normalmente se utiliza la palabra hacker para referirse a las personas que hacen uso no autorizado de un sistema de cómputo. Sin embargo, este término tiene una larga y honorable historia, pues surgió inicialmente para referirse a una persona con un gran interés en las computadoras, en explorarlas al máximo y llevarlas hasta sus límites. Esto significa que existen muchas personas que se consideran a sí mismos como hackers, y a quienes no les agrada su utilización para denotar a un criminal. Es por ello que se ha acuñado el término cracker para denotar a quienes utilizan los sistemas de cómputo de forma ilegal. Con este término o con la palabra intruso se hará referencia en este texto a los “criminales del cómputo”. Internos. A pesar de que normalmente se les tiene más miedo a los atacantes externos, las estadísticas muestran que alrededor del 80% de los ataques exitosos son llevados a cabo por personal interno, usuarios legales del sistema, pero que hacen uso del acceso con el que cuentan para llevar a cabo actividades ilícitas. En algunas ocasiones, se trata de empleados inconformes o demasiado ambiciosos, que hacen uso de sus privilegios para causar 31 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” algún daño. Los ejemplos clásicos son el del encargado de la nómina que hace cambios para que todos los datos sean borrados en caso de que él sea despedido, o el encargado de los datos financieros que desvía unos pocos centavos mensuales a su cuenta personal. En los más de los casos, sin embargo, se trata tan solo de empleados distraídos, que olvidan cambiar su clave de acceso, o la anotan en un papel y lo dejan sobre su escritorio, o dejan los impresos confidenciales en una pila en el suelo. Cualquiera de estos detalles puede ser aprovechado por gente malintencionada casi siempre también internos a la empresa para hacer mal uso del sistema o de la información. 3.5.3.1. Tipos de amenazas programadas Virus. - Un virus es una secuencia de código que se inserta en un fichero ejecutable, denominado host, de forma que, al ejecutar el programa, también se ejecuta el virus. Generalmente esta ejecución implica la copia del código del virus, en otros programas. El virus necesita un programa donde insertarse para ejecutarse, por lo que no puede ser considerado como un programa o proceso independiente. Durante años, se ha discutido sobre la existencia de virus en el entorno UNIX. Real mente, existen virus que infectan tanto binarios ELF como shellscripts. Sin embargo, la existencia de virus no tiene mucho interés en sistemas UNIX, ya que generalmente sus efectos no suelen ser muy perjudiciales en los sistemas UNIX de hoy en día. Gusanos. - Un gusano es un programa capaz de viajar por sí mismo a través de redes de ordenadores para realizar cualquier actividad una vez alcanzada la máquina. Aunque esta actividad no tiene porqué entrañar peligro, un gusano puede instalar en el sistema alcanzado un virus, atacar este sistema como haría un intruso o simplemente consumir excesivas cantidades de ancho de banda en la red afectada. Conejos. - Los conejos o bacterias son programas que de forma directa no dañan al sistema, sino que se limitan a reproducirse, generalmente de forma exponencial, hasta que la cantidad de recursos consumidos (procesador, memoria, disco) se convierte en una negación de servicio para el sistema afectado. La mejor forma de prevenir ataques de conejos (o simples errores en los programas, que hagan que estos consuman excesivos recursos) es utilizar las facilidades de los núcleos de cualquier UNIX moderno ofrecen para limitar los recursos que un determinado proceso o usuario puede llegar a consumir. 32 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” Caballos de troya. - Un caballo de Troya actual (al igual que el de la mitología griega) es un programa que aparentemente realiza una función útil para quién lo ejecuta, pero que, en realidad, o aparte, realiza una función que el usuario desconoce, generalmente dañina. La forma más fácil de descubrir caballos de Troya (aparte de sufrir sus efectos una vez ejecutado) es comparar los ficheros bajo sospecha con una copia de los originales. También es recomendable realizar resúmenes MD5 de nuestros programas y compararlos con los resúmenes originales. Applets hostiles. - En los últimos años, con la proliferación de la web, Java y Javascript, han aparecido los denominados applets hostiles, que al ser descargados intentan monopolizar o explotar los recursos del sistema de forma inapropiada. Esto incluye desde ataques clásicos como negación de servicio o ejecución remota de programas en la máquina cliente hasta amenazas mucho más elaboradas, como difusión de virus, ruptura lógica de cortafuegos o uso de recursos remotos para grandes cálculos científicos. La propia Sun Microsystems ha reconocido el problema y está trabajando para minimizar los potenciales efectos de estos applets. No obstante, aunque se solucionen los problemas de seguridad del código, es probable que se puedan seguir usando applets como una forma de ataque a los sistemas: mientras que estos programas puedan realizar conexiones por red, no habrán desaparecido los problemas. Bombas lógicas. - Las bombas lógicas funcionan de manera similar a los troyanos, la diferencia entre ellos es que, así como un troyano se ejecuta cada vez que se ejecuta el programa que lo contiene (o al que sustituye), una bomba lógica sólo se activa bajo ciertas condiciones, como una determinada fecha, la existencia de un cierto fichero, o el alcance de cierto número de ejecuciones. De esta manera, una bomba lógica puede permanecer en el sistema inactiva y sin ser detectada durante mucho tiempo y sin que nadie note nada anormal hasta que el daño producido por la bomba ya esté hecho. 33 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” Puertas traseras. - Las puertas traseras son trozos de código en un programa que permiten a quién conoce su funcionamiento saltarse los métodos usuales de autentificación para realizar cierta tarea. Los programadores suelen usarlas para probar su código durante el desarrollo, pero pueden mantenerlas en el programa final, ya sea deliberada o involuntariamente. Pensemos por ejemplo en un programa que solicita cinco claves para realizar cierta tarea, es muy probable que el programador instale una puerta trasera una vez que ha comprobado el funcionamiento de dichas claves. A parte de puertas traseras en los programas, también existen otros tipos de puertas traseras. Son las que instalan los intrusos para garantizarse el futuro acceso al sistema, como añadir un usuario con UID 0, añadir un nuevo servicio en un puerto no utilizado o incluso utilizar cron para reinstalar periódicamente dichas puertas en caso de que hayan sido eliminadas. 3.6. Funcionalidades e Implementaciones de Unix con referencia a la seguridad Por sus características técnicas existen diversos sistemas operativos que se conocen como sistemas de la familia Unix. Entre estos están FreeBSD y GNU/Linux; macOS también es un sistema Unix al igual que Android (derivado de Linux) e iOS (derivado de Mac OS X). así que se puede encontrar código BSD en sistemas comerciales como macOS de Apple y en las consolas PlayStation 3 y PlayStation 4 de Sony. (Internetpasoapaso.com, s.f.) Principales Sistemas Operativos y funcionalidades: 1. FreeBSD Servicios Internet FreeBSD es una plataforma ideal para ofrecer servicios de Internet como: www, FTP, Email. Con la potencia de networking de FreeBSD, los usuarios disfrutan de alta velocidad y servicios fiables. Networking Security Desde filtrado de paquetes hasta rutas o servicios de resolución de nombres, FreeBSD puede convertir cualquier PC en un excelente Firewall de Internet, servidor de correo, servidor de impresión y mucho más. 34 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” Y otras funcionalidades como Desarrollo de software, Navegación por la red, Educación e investigación. (Delgado, 2021) 2. OpenBSD Se centra principalmente en seguridad y temas relacionados. La estrecha integración de la seguridad, la auditabilidad, la criptografía y los problemas relacionados son su objetivo principal. (Fuller, 2022) 3. NetBSD Tiene como objetivo ejecutarse en tantas plataformas como sea posible. Su objetivo es ser el sistema operativo más portátil del planeta, y parece hacer un trabajo bastante justo en ello. (Cid, 2022) 3.6.1. TCP Wrappers TCP Wrappers (también conocido como tcp_wrappers) es un sistema ACL de red basado en host, utilizado para filtrar el acceso de red a los servidores de Protocolo de Internet en sistemas operativos (similares a Unix) como Linux o BSD. Permite que las direcciones IP de host o subred, nombres y / o respuestas de consulta ident, se utilicen como tokens en los que filtrar para fines de control de acceso. Un TCP Wrapper es una biblioteca que provee un control de acceso simple y administración de logs estandarizada para aplicaciones que lo soporten, y reciban conexiones de red. Las opciones avanzadas de TCP Wrappers le permiten un mayor control sobre la gestión de conexiones. El único requisito para usar TCP Wrappers en FreeBSD es que el servidor inetd se inicie desde rc.conf con la opción -Ww (es la configuración por defecto). Si soportan TCP Wrappers, vamos a poder realizar algunos controles y logs adicionales con las conexiones entrantes. Los TCP Wrappers son listas de control de acceso (ACL – access control list) basadas en hosts, y utilizadas para filtrar accesos de red a los servicios locales. 35 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” Figura 7: TCP Wrappers Es posible lanzar un ataque de denegación de servicio al servidor TCP Wrappers si un atacante o grupo de atacantes pueden llegar a sobrecargar estos daemons con peticiones de conexión. los TCP/Wrappers presentan una gran ventaja sobre los firewalls comunes: trabajan en capa 7 (App), por lo que pueden, entre otras cosas, filtrar consultas aun cuando se utilice cifrado. Logging: las conexiones monitoreadas con TCP wrappers son reportadas por medio del syslog del sistema Control de acceso: soportan un control de acceso simple basado en patrones de comparación. Verificación del hostname: verifican el nombre del hostname del cliente utilizando los servicios DNS. Poseen protección contra spoofing. (Córdoba, 2017) 3.6.2. Kerberos en Unix Kerberos es un sistema/protocolo de red agregado que permite a los usuarios identificarse a través de los servicios de un servidor seguro. Los servicios como login remoto, copia remota, copias de ficheros de un sistema a otro y otras tantas tareas arriesgadas pasan a ser considerablemente seguras y más controlables. 36 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” 3.7. Consejos sobre seguridad en Unix Inhabilitar todo software potencialmente peligroso Reparar el software con errores que afecten a la seguridad Copias de seguridad. Repare su sistema si una violación de la seguridad llegara a ocurrir. Instala software pare vigilar el estado del sistema Educa a la gente que trabaja en el sistema Si se detecta que la seguridad ha sido comprometida: Determinar el alcance de la violación de seguridad: ¿Qué privilegios consiguió el atacante? ¿Consiguió acceso de root? ¿Consiguió acceso sólo en el nivel de usuario? Determina si se ha alterado el estado del sistema (ámbito del kernel o de usuario): ¿Qué software ha sido alterado? ¿Se instaló un nuevo kernel? ¿Ha sido modificado alguno de los archivos binarios del sistema (tales como telnetd, login, etc.)? Si sospechas que un atacante puede haber causado cualquier alteración en un sistema operativo, podrías considerar conveniente reinstalar el sistema operativo desde un medio seguro. Averigua cómo se logró la irrupción: ¿Ocurrió por medio de un error de seguridad bien conocido? Si este es el caso, asegúrate de instalar los patches correctos. ¿Tuvo éxito la irrupción debido a una mala configuración? ¿Fue el resultado de un error desconocido hasta el momento? Si sospechas que la irrupción ocurrió por medio de un error nuevo, deberías advertir al FreeBSD Security Officer. Repara el defecto de seguridad: Instala nuevo software o aplica parches al antiguo para reparar los problemas. Inhabilita las cuentas que ya han sido comprometidas. (Delgado, 2021) IV. DESARROLLO DEL LABORATORIO Los sistemas UNIX son capaces de ejecutar una gran cantidad de procesos simultáneamente, muchos de los cuales son servidores, lo que significa que las entidades externas pueden conectarse y hablar con ellos. Los problemas de seguridad pueden dividirse en diferentes categorías: 37 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” Ataques de denegación de servicios DoS Comprometer cuentas de usuarios Comprometer root a través de servidores accesibles Comprometer root desde cuentas de usuario Creación de puertas traseras Las medidas de seguridad se implementan en un modelo multicapa que puede categorizarse: Asegurar root y cuentas administrativas Asegurar los servidores que se ejecuten como root los binarios suid/sgid Asegurar cuentas de usuarios Asegurar el fichero de password Asegurar el núcleo del Kernel, los dispositivos en bruto y el sistema de ficheros Detección rápida de cambios hechos al sistema Asegurar la cuenta root y las cuentas administrativas Si utiliza otro tipo de login como sshd asegurar que los accesos al sistema mediante root esten deshabilitados, editar /etc/ssh/sshd_config asegurarse que “PermitRootLogin” este puesto en NO. Servicios como FTP son origen de grietas en la estructura del sistema, el acceso como usuario root solo debe permitirse a través de consola. Utilizar vipw para reemplazar cada contraseña cifrada por un solo carácter. Antes 38 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” Después Políticas de seguridad contraseña Para crear Políticas de seguridad a la contraseña debemos acceder a /etc/pam.d/passwd y configuraremos sus políticas 39 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” Desactivar Protocolos y servicios Para poder deshabilitar protocolos innecesarios debemos de acceder a /etc/protocols y comentamos los protocolos que no usaremos. Para desactivar un servicio debemos detenerlo con el comando: Service NombreServicio stop Ejemplo: 40 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” Activar la Auditoria El sistema operativo de Unix incluye soporte para auditoría de eventos de seguridad. La auditoría de eventos admite el registro confiable, detallado y configurable de una variedad de eventos del sistema relevantes para la seguridad, incluidos inicios de sesión, cambios de configuración y acceso a archivos y redes. Estos registros pueden ser invaluables para el monitoreo del sistema en vivo, la detección de intrusiones y el análisis post-mortem. Para poder activarlo debemos configurar el archivo /etc/rc.conf Añadimos auditd_enable=”YES” Luego inicializamos la auditoria 41 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” V. CONCLUSIONES Y RECOMENDACIONES - Los sistemas operativos de la familia de Unix han sido la base para crear numerosos proyectos. - En la actualidad la encriptación informática además de seguir realizando la misma función de que cuando se lo empezó a utilizar, donde realizaba la encriptación de información que viajaba de un punto a otro a través de un medio de comunicación, ahora se lo utiliza como una medida de seguridad en la autenticación de usuario encriptando contraseñas hasta archivos almacenados en las carpetas de usuario. - La importancia de brindar seguridad del login de usuarios y grupos es muy importante al utilizar UNIX como sistema operativo, por ese motivo se llego a conocer las configuraciones correctas para brindar seguridad. - Es de gran importancia que antes de la instalación de los servidores realizar previas configuraciones para cambiar configuraciones por defecto además de habilitar las políticas de contraseña para las contraseñas que se les asignaran a los grupos e usuarios. - Gracias a que UNIX intenta monitorizar todo, hace que exista un gran universo de datos permitiendo la posibilidad de detectar actividades sospechosas, pero trae consigo la desventaja que, al tener una mayor cantidad de datos, el análisis se hace lento por el gran volumen. - Dado lo complejo y peculiar que puede ser la configuración del sistema de auditoria en UNIX es recomendable consultar el manual. 42 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” - Existen muchos tipos de ataques hacia el ordenador por lo que es recomendado realizar algunas configuraciones al ordenador con el fin de disminuir o eliminar el riesgo de ser atacado, mas hoy en día que muchos trabajos se realizan de forma remota. - Se identificó las principales funcionalidades e implementaciones de algunos SO con Base de Unix, como ser FreeBSD. - Para poder asegurar nuestros SO con base Unix se debe seguir una serie de pasos o dejar la configuración por defecto si en todo caso viene con una configuración de seguridad activada como es en OpenBSD. 43 “Seguridad en Sistemas Operativos y Aplicaciones - DSIV1E1” (IBM, 2021) VI. REFERENCIAS Castellanos, L. M. (04 de octubre de 2022). https://docplayer.e. Obtenido de https://docplayer.e: https://docplayer.es/1267668-Problemas-de-seguridad-en-el-mundo-unix-linux.html Cid, C. G. (Marzo de 2022). La seguridad en UNIX. Recuperado el 29 de Septiembre de 2022, de http://penta.ufrgs.br/gereseg/node7.htm Córdoba, D. (24 de enero de 2017). TCP Wrappers: qué son y cómo se utilizan en Linux. Recuperado el 30 de Septiembre de 2022, de https://juncotic.com/tcp-wrappers-se-utilizan-linux/ Delgado, S. C. (26 de enero de 2021). Recuperado el 29 de Septiembre de 2022, de https://www.freebsd.org/es/applications/ Fuller, M. D. (2022). Who are the characters? Recuperado el 29 de septiembre de 2022, de http://www.over-yonder.net/~fullermd/rants/bsd4linux/02 IBM. (12 de 04 de 2021). Sistema De Archivos Raiz. Obtenido de https://www.ibm.com/docs/es/aix/7.2?topic=tree-root-file-system Internetpasoapaso.com. (s.f.). UNIX: ¿Qué es este sistema operativo y en que se diferencia con Linux? Recuperado el 30 de septiembre de 2022, de https://internetpasoapaso.com/unix/ Red Iris. (15 de 07 de 2002). Obtenido de Auditoria del sistema : https://www.rediris.es/cert/doc/unixsec/node12.html The FreeBSD Project. (29 de Mayo de 2014). Obtenido de The FreeBSD Project: https://www.freebsd.org/cgi/man.cgi?query=passwd&sektion=5 The FreeBSD Project. (26 de Mayo de 2019). Obtenido de The FreeBSD Project: https://www.freebsd.org/cgi/man.cgi?query=crypt&sektion=3&apropos=0&manpath=FreeBSD+ 13.1-RELEASE+and+Ports IBM (2021-04-12): https://www.ibm.com/docs/es/aix/7.2?topic=tree-root-file-system Universidad de Almeira: https://w3.ual.es/~jjfdez/SOA/pract2.html (Castellanos, 2022) 44