Robustecimiento de sistemas operativos Linux (Parte I)

Etiquetas: Linux, Seguridad

Introducción

El objetivo de este material es el de establecer los primeros pasos que sirvan como guía en este campo tan apasionante de la seguridad informática. Ciertamente, existe un fuerte y riguroso fundamento teórico sobre este tema (sobre todo basado en muchos campos), sin embargo, el presente documento, tiene la intención de que la gente que lo lea, no solamente le genere un fundamento teórico, sino también pueda desarrollar su aplicabilidad.

Así que, para que una persona que inicia en esta área pueda tener una idea general de lo que esta conlleva su estudio y práctica, además de que, si decide quedarse en ella, pueda desarrollar un nivel de especialización elevado, si así lo desea.

Se hace de nuevo hincapié en que el material que actualmente se está leyendo, cuenta con un desglose teórico y práctico por cada tema explicado, se complementará con referencias bibliográficas y mesográficas con la finalidad de ampliar tus conocimientos sobre el tema estudiado. Adicionalmente, su fin es absolutamente didáctico, por lo que se hace uso de la licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional no permitiéndose la divulgación comercial.

  1. Revisión previa del sistema operativo

Dentro de las labores de un administrador de sistemas (aka
sysadmin), es la de mantener un monitoreo de los eventos dentro de la infraestructura, así como también, su aseguramiento. Para sistemas GNU/Linux, es importante revisar varios puntos, desde el estado inicial del equipo, pasando por la identificación de usuarios y procesos no autorizados, la revisión de bitácoras del sistema operativo, hasta verificar el espacio disponible en disco duro.

A manera de síntesis, se recomienda cubrir los siguientes puntos en la revisión de un sistema, considerando puntos de vista de la seguridad, y la administración:

  • Identificar usuarios y procesos autorizados.
  • Analizar las bitácoras del sistema (revisión de instalación de paquetes, revisión de bitácoras de servicio, revisión de errores de hardware, etc.).
  • Revisar el espacio utilizado y libre del disco duro.

Antes de robustecer un equipo, se recomienda revisar estos puntos, así como contar con la práctica de que los sistemas administrados, cumplan con un monitoreó básico. El no tener en cuenta esto, se estaría corriendo el riesgo de afectar la funcionalidad del sistema, así como un riesgo en la infraestructura de una organización. El realizar el robustecimiento, no tiene la finalidad de revocar el acceso a usuarios o interrumpir la ejecución de procesos válidos, si no elevar los controles que hacen que el sistema sea seguro.

  1. Tipos de usuario en sistemas UNIX y Linux

Antes de entrar de lleno a el robustecimiento de un sistema, es importante contar con una panorámica del funcionamiento del mismo. Para ello, una parte fundamental son los usuarios. Mientras los usuarios en un sistema pueden ser personas (lo que significa que las cuentas se asocian a un usuario físico), también existen cuentas que se asocian a servicios o aplicaciones específicas. Para un mejor entendimiento, en esta sección, nos centraremos dejar claro los tipos de usuario que existen dentro de un sistema GNU/Linux:

  • root (super-usuario): Todo sistema operativo compatible con UNIX (incluyendo GNU/Linux) cuenta con un super-usuario, mismo que tiene todos los privilegios sobre todo el sistema (archivos, directorios y recursos del equipo en general). El tener acceso como super-usuario, esto quiere decir, que con este usuario se permite efectuar CUALQUIER operación sobre el sistema, inclusive operaciones destructivas. Aunque actualmente se pueden delegar actividades administrativas con un usuario que sea diferente a root, lo cierto es que su existencia es imprescindible, ya que, con este, se puede gestionar cambios sobre archivos de configuración para diferentes servicios, grupos, usuarios, etc. Para diferenciar un usuario normal con el usuario root, podemos poner atención al prompt, mismo que para el primero, se identifica con el símbolo “$“, mientras que para el segundo con el símbolo “#“.
  • Usuarios de sistema: Simple, estos son usuarios especiales vinculados a los servicios (demonios) que debe brindar el sistema operativo, es decir, este tipo de usuarios no pueden firmarse al sistema con un nombre de usuario y contraseña. Los usuarios de sistema por defecto en GNU/Linux, tal es el caso de bin, daemon, adm, lp, mail, operator, games,
    ftp, nobody, apache, avahi, rpc, colord, saslauth, gdm, entre otros.
  • Usuario normal: Es un usuario asignado a una persona para llevar a cabo ciertas actividades, entre las actividades a realizar, son la de poder autenticarse en el sistema y hacer uso de los recursos de acuerdo a los privilegios que tenga establecidos. Como mencionamos anteriormente, una persona se puede dar cuenta de que tipo de usuario se tiene, es el símbolo del prompt utilizado, que es el “$“.
  1. Archivos relacionados a las cuentas de usuari

Toda la información de los usuarios y grupos se guarda en los siguientes archivos (en forma general):

  • /etc/passwd: Tiene información de todos los usuarios registrados en el sistema, es decir, este archivo es usado para dar seguimiento de cada usuario registrado que tiene acceso al sistema. La información que contiene este archivo es:
    • Nombre de usuario
    • Campo donde antiguamente se almacenaba la contraseña de forma cifrada, sin embargo, hoy en día es obsoleto, ya que esta información se guarda en el archivo /etc/shadow
    • Identificador de Usuario (User ID number, UID)
    • Identificador de grupo del usuario, (User’s group ID number, GID)
    • Nombre completo del usuario o descripción (GECOS)
    • Directorio hogar del usuario
    • Shell del usuario (Login Shell)

Ilustración 1 Anatomía de un usuario registrado en /etc/passwd. Basado en gráfico recuperado de https://commons.wikimedia.org/wiki/File:Etc-passwd.svg [IMAGEN]

El contenido común de un archivo /etc/passwd, se ve de la siguiente forma:

  • /etc/group: Almacena la información sobre los grupos existentes en el sistema, como el nombre del grupo, GID y la lista de usuarios que pertenecen al grupo.

  • /etc/shadow: Contiene los hashes de las contraseñas de los usuarios, además de otros datos para su validación.


Ilustración 2 Estructura del archivo /etc/shadow. Basado en [IMAGEN] https://www.cyberciti.biz/faq/understanding-etcshadow-file/

El contenido de este archivo es similar al siguiente:

  • Otros archivos: Existen otros archivos como /etc/passwd- y el /etc/shadow- que son un respaldo de los archivos /etc/passwd y /etc/shadow, respectivamente; y que son mantenidos por algunas herramientas.

Cada distribución de GNU/Linux y de UNIX tiene un grupo de números que son reservados, por ejemplo, la distribución Debian, reserva del 1 al 999, mientras que Red Hat Enterprise Linux en versiones 5 & 6, cuentan con números reservados del 1 al 499, y para Red Hat Enterprise Linux 7, van del 1 al 999. De esta manera en dos de las distribuciones con más alcance en la internet, inician la asignación de los usuarios creados a partir del UID 1000.

Para el caso de Red Hat Enterprise Linux, se puede obtener mayor referencia sobre datos de usuarios y grupos, con el comando setup; su documentación se puede encontrar en:

Las buenas prácticas, recomiendan el asignar identificadores de grupo y usuario a partir del 5000. Numero a partir del cual no están reservados, aunque no se descarta que se usen en un futuro.

Con la utilería id, se puede visualizar el UID y los GID, además de los grupos a que el usuario pertenece. Con la opción -g se visualiza el GID primario. Donde el grupo primario es el grupo que se crea al mismo tiempo que se crea un usuario en el sistema.

Ilustración 3 Ejemplificación de la utilería id

  1. Identificar usuarios no autorizados

En entornos UNIX, aunque no muchos lo saben, se maneja una filosofía, la cual se puede consolidar en los siguientes puntos:

  • Todo es un archivo,
  • Toda utilería creada, hace lo que tiene que hacer,
  • Todo puesto en conjunto, tiene una mayor funcionalidad

Y por que mencionamos esto, simple, debido a esto, existen un sinfín de utilerías dentro de los sistemas UNIX y GNU/Linux. Por ejemplo, contamos con la utilería who, que básicamente, lo que se puede hacer con esta, es mostrar información acerca de los usuarios que están conectados en el sistema y que es lo que están haciendo


Ilustración 4 Salida de la utilería who, en este caso para la identificación de usuarios, de donde se conecta y que es lo que se hace

La información que muestra la salida de dicha utilería es la ubicación del usuario (local o remoto) y qué comando está ejecutando al momento de la consulta. Para el caso de la Ilustración 3, el usuario laboratorio está conectado al sistema de forma remota desde la IP 192.168.1.10 en la consola virtual pts/5, mientras que el usuario ricardo.carrillo está conectado en el sistema de forma local y también de forma remota, a través de las terminales pts/6 y tty2 (:0), por último, el super-usuario, tiene una sesión activa en pts/4.

En este punto, vale la pena hacer la diferencia entre tty y pts; mientras la primera es un dispositivo nativo que funge como terminal y que se crea mediante la asociación del hardware, la segunda (pty, pseudo dispositivo de terminal), es un dispositivo o terminal que es emulado por otro programa (por ejemplo: xterm, screen, script, tmux o ssh) y que provee un canal de comunicación bidireccional.

Otra utilería para la identificación de usuarios es w, que, así como who, nos muestra quien está firmado al sistema, que está haciendo y desde dónde.


Ilustración 5 Salida de la ejecución de la utilería w

Los usuarios normales del sistema, sea Debian o Red Hat, como mencionamos, empiezan a partir del UID 1000. Si el sistema es de uso personal, se debe identificar solo al usuario propio, pero si se trata de un equipo compartido, es posible identificar a los usuarios con los que se comparte el sistema. Las mismas reglas aplican para el caso de servidores, ya que se puede identificar a los usuarios que tienen una cuenta en el equipo al examinar el archivo /etc/passwd. Si se llega a identificar cuentas de usuarios que no son conocidas con UID mayores a 1000, se puede decir que son usuarios (cuentas) no autorizadas.


Ilustración 6 Búsqueda de usuarios con UID mayor o igual a 1000

Para el caso de este sistema se identifican a 4 usuarios, pero ¿Qué pasaría si de antemano se sabe que solo había 2 usuarios?, se puede sospechar que algo está mal ya que se identificaron 2 usuarios de más. Pero ¿Qué pasaría si solo se revisa rápidamente?, seguramente se pensaría que todo está normal, ya que, ya que la lista de usuarios son normales, sin embargo, cuentas como “laboratorio” y “vncuser” no.

Es por ello, que cuando se estén realizando actividades de monitoreo básico, se debe observar con detalle. En caso de identificar una de las soluciones rápidas sería cambiar el shell asignado o bloquear a los usuarios que no se reconozcan, de esta manera el usuario ya no podría conectarse o autenticarse nuevamente en el sistema.

Para bloquear al usuario se realiza lo siguiente el comando passwd de la siguiente forma:

 

Teniendo como resultado lo siguiente:

Ilustración 7 Bloqueo de usuarios no desconocidos

Mientras que la modificación del shell se puede realizar la utilería usermod:

Ilustración 8 Utilización de la utilería usermod para el cambio de shell de usuarios no identificados

Otra utilería de sistema muy utilizada para el cambio del shell
de un usuario, es
chsh, que tiene el mismo efecto que la utilería usermod, por lo que si ahora se visualiza la imagen se nota que el campo de donde se encuentra definido el shell, fue cambiado a /bin/false para aquellos usuarios no autorizados. A diferencia de bloquear una cuenta que no deja autenticar con el sistema, el cambio de shell no deja al usuario interactuar con el mismo, pero si puede autenticar.

Adicionalmente, también se puede eliminar el usuario no identificado con el comando “userdel“, de la siguiente forma:

#userdel laboratorio

La cual solamente borrará al usuario de los archivos “passwd“, “shadow” y “group“, pero mantendrá el contenido de su directorio “home“, en caso de no indicarle en el comando que también elimine este directorio.

Bibliografía

  1. Red Hat Inc. (October 10, 2016). Why do new users added in RHEL 7 start at UID of 1000, and not 500? Consultado en junio 12 del 20128. Recuperado de https://access.redhat.com/solutions/2683411
  2. Wikimedia Commons, (S.F.). The free media repository. Esquema del archivo /etc/passwd [IMAGEN]. Consultado en junio 12 del 2018. Recuperado de https://commons.wikimedia.org/wiki/File:Etc-passwd.svg
  3. Red Hat Inc. – Red Hat Consumer Portal, (May 22 2014). What are the reserved uids/gids in Red Hat Enterprise Linux 6? Consultado en junio 12 del 2018. Recuperado de https://access.redhat.com/solutions/420023
  4. Red Hat Inc. – Red Hat Consumer Portal, (S.F.). /etc/shadow. Consultado en junio 12 del 2018. Recuperado de https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/4/html/Introduction_To_System_Administration/s3-acctsgrps-shadow.html
  5. Sheikh Wasiu Al Hasib, (April 26, 2015) – Linux password file. Consultado en junio 18 del 2018. Recuperado de http://topicsfeedback.net/linux-password-file/
  6. Sheikh Wasiu Al Hasib, (April 26, 2015 ) – Linux password file. [Imagen]. Consultado en junio 18 del 2018. Recuperado de http://topicsfeedback.net/wp-content/uploads/2015/04/shadow.jpg
  7. nixCraft, (August 2, 2017). Understanding /etc/passwd File Format. Consultado en junio 12 del 2018 Recuperado de https://www.cyberciti.biz/faq/understanding-etcpasswd-file-format/
  8. IBM Inc. (S.F.). Using the /etc/passwd file. Consultado en junio 12 del 2018. Recuperado de https://www.ibm.com/support/knowledgecenter/en/ssw_aix_72/com.ibm.aix.security/passwords_etc_passwd_file.htm
  9. Unix & Linux, (Oct 28, 2012). Difference between passwd and passwd- file [duplicate]. Consultado en junio 12 del 2018. Recuperado de https://unix.stackexchange.com/questions/53128/difference-between-passwd-and-passwd-file
  10. Linux: Recovering Deleted /etc/shadow Password File. (December 21, 2005). Consultado en junio del 2018. Recuperado de https://www.cyberciti.biz/tips/recovering-deleted-etcshadow-password-file.html
  11. nixCraft, Linux and Unix tutorials for new and seasoned sysadmin (Ago. 2, 2017). Understanding /etc/shadow file [IMAGEN]. Consultado en junio 20 del 2018. Recuperado de https://www.cyberciti.biz/media/new/uploaded_images/shadow-file-795497.png
  12. nixCraft, Linux and Unix tutorials for new and seasoned sysadmin (ago. 2, 2017). Understanding /etc/shadow file. Consultado en junio 20 del 2018. Recuperado de https://www.cyberciti.biz/faq/understanding-etcshadow-file/
  13. ShellHacks – Linux Hacks and Guides, (dic. 27, 2016). /etc/shadow – HowTo: Generate Password Hash in Linux. Consultado en junio 20 del 2018. Recuperado de https://www.shellhacks.com/linux-generate-password-hash/
  14. ShellHacks – Linux Hacks and Guides, (dic. 27, 2016). /etc/shadow – HowTo: Identify Hash Type. Consultado en junio 20 del 2018. Recuperado de https://www.shellhacks.com/identify-hash-type/

 

Deja un comentario