Auditoría de sistemas UNIX. Parte 24. Usuarios y grupos

Buenas,

Retomamos nuestro cursillo de análisis de UNIX, entrando en la parte de usuarios y grupos. Nuestro esquema general sigue siendo el siguiente:

1) Generalidades del sistema operativo
2) Análisis de red

3) Análisis de usuarios y grupos
4) Análisis de sistema de ficheros
5) Varios – Miscelánea

En negrita está lo que hemos visto ya, en cursiva lo que estamos viendo y en letra normal lo que resta por ver.

Usuarios y grupos en UNIX

Aunque existe muchísima literatura sobre usuarios y grupos, vamos a hacer un pequeño repaso, para lo que recomendamos la lectura de Usuarios, grupos y grupos personales de usuario, donde podemos ver con mucho detalle cuál es el fundamento de la gestión de usuarios y grupos de usuario en prácticamente cualquier derivado de UNIX.

De modo muy resumido, la idea es poder asignar a cada usuario un identificador, lo que llamaremos UID, pudiéndose agrupar a distintos usuarios, con distintos UID (User ID), en distintos grupos. Los grupos de usuario tienen identificadores llamados GID (Group ID) para diferenciarlos.

Con ésto se consigue que un recurso del sistema pueda ser restringido según el propietario o según un grupo determinado, lo que hace bastante más fácil la administración según roles y privilegios.

La existencia de usuarios y grupos es también vital a la hora de ejecutar procesos, de modo que se limite claramente quién puede ejecutar, modificar o incluso detener un proceso.

El fichero de claves

El principal punto de análisis de usuarios se efectúa en el fichero de contraseñas, que habitualmente se denomina /etc/passwd. En otros sitemas, como AIX, habrá que inspeccionar /etc/security/passwd, y en derivados BSD, /etc/master.passwd. Veamos un ejemplo de este fichero:

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
dhcp:x:100:101::/nonexistent:/bin/false
syslog:x:101:102::/home/syslog:/bin/false
klog:x:102:103::/home/klog:/bin/false
messagebus:x:103:107::/var/run/dbus:/bin/false
avahi:x:104:108:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
cupsys:x:105:109::/home/cupsys:/bin/false
haldaemon:x:106:110:Hardware abstraction layer,,,:/var/run/hal:/bin/false
hplip:x:107:7:HPLIP system user,,,:/var/run/hplip:/bin/false
sshd:x:108:65534::/var/run/sshd:/usr/sbin/nologin
snmp:x:109:65534::/var/lib/snmp:/bin/false

Para cada usuario la estructura es siempre la misma:

usuario:clave_cifrada:UID:GID:nombre_completo:directorio_personal:shell

El fichero de grupos

Este fichero habitualmente está ubicado en /etc/group. Veamos un ejemplo:

root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:shernando
tty:x:5:
disk:x:6:
lp:x:7:cupsys
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:cupsys,shernando
fax:x:21:
voice:x:22:
cdrom:x:24:haldaemon,shernando
floppy:x:25:haldaemon,shernando

Para todos los grupos, al igual que sucede con /etc/passwd, la nomenclatura de definición de un grupo es siempre la misma:

nombre_grupo:clave_cifrada:GID:usuario1,usuario2 …, usuarioN

El concepto de claves shadow (shadow password)

El empleo de contraseñas shadow hace referencia a la aportación de un grado adicional de seguridad en los ficheros que contienen información sensible, como las claves cifradas de los ficheros de usuario y grupos.

Así, sin el empleo de shadow suite, cada entrada del fichero /etc/passwd sería similar a ésta:

shernando:Npge08pfz4wuk:503:100:Sergio Hernando:/home/shernando:/bin/sh

Con empleo de contraseñas shadow, el aspecto de esa línea pasa a ser el siguiente:

shernando:x:503:100:Sergio Hernando:/home/shernando:/bin/sh

Este método, muy extendido, permite reducir las probabilidades de ejecución de un ataque de fuerza bruta una vez conocido el hash de las claves. No obstante, estos ficheros deben ser siempre ficheros cuyo propietario y grupo sea el root de la máquina, lo que asegura que ojos ajenos no miren sus contenidos:

-rw-r–r– 1 root root 1267 2007-01-31 18:36 /etc/passwd
-rw-r–r– 1 root root 739 2007-01-16 09:56 /etc/group

El cifrado se realiza mediante la función crypt(), y en la amplia mayoría de ocasiones, se trata de sumas MD5 o derivados de DES.

Auditoría

El primer paso será verificar si se está empleando shadow o no, tal y como hemos explicado antes.

Una vez hayamos determinado si existe o no ocultación de claves cifradas, estudiaremos los ficheros de usuarios y grupos. Trataremos de identificar:

* Posibles UID repetidos
* Posibles GID repetidos
* Usuarios pertenecientes a grupos que no existen
* Usuarios de cada grupo
* Usuarios sin contraseña

Un script que nos puede ayudar a resolver esta tarea puede ser el siguiente:

# !/bin/bash
# Sergio Hernando
#
clear
echo
echo ——————————————————-
echo Usuarios con UID duplicada
echo ——————————————————-
echo
for i in $(awk -F: ‘{print $3}’ etcpasswd.txt | sort -n | uniq -d);do
echo Usuarios que comparten UID $i:
echo
grep :$i: etcpasswd.txt
echo
echo Total de usuarios que comparten ese UID:
echo
grep :$i: etcpasswd.txt |wc -l
echo
done
echo ——————————————————-
echo Usuarios con GID duplicada
echo ——————————————————-
echo
echo GID duplicada:
echo
awk -F: ‘{print $3}’ etcgroup.txt | sort | uniq -d
echo
echo ================================================
echo Script finalizado

El resultado de este script sería algo parecido a esto:

——————————————————-
Usuarios con UID duplicada
——————————————————-

Usuarios que comparten UID 0:

root:x:0:0:root:/root:/bin/bash
prueba::0:65534::/var/lib/snmp:/bin/false

Total de usuarios que comparten ese UID:

2

Usuarios que comparten UID 2:

bin:x:2:2:bin:/bin:/bin/sh
prueba:x:2:2:prueba:/bin:/bin/sh

Total de usuarios que comparten ese UID:

2

——————————————————-
Grupos con GID duplicada
——————————————————-

GID duplicada:

41

=======================================================
Script finalizado
lun abr 16 19:19:50 CEST 2007

Resumen

A la hora de analizar usuarios y grupos, debemos conocer perfectamente los ficheros que contienen las claves y los grupos, y estudiarlos para determinar el grado de protección que aportan al sistema.

Informaremos de las posibles anomalías (UID o GID repetidos) especialmente si el UID del root, el 0, está repetido. Localizaremos usuarios inscritos en grupos no existentes, y grupos con información de usuarios que no existan en el sistema.

Será siempre conveniente realizar un ataque de fortaleza de claves si no se emplean claves shadow, para determinar el grado de robustez del cifrado.

9 comentarios sobre “Auditoría de sistemas UNIX. Parte 24. Usuarios y grupos

  1. En el artículo se comenta que la estructura del fichero /etc/passwd es:

    usuario:clave_cifrada:UID:GID:nombre_completo:directorio_personal:shell

    En los sistemas UNIX modernos, el segundo campo ya no contiene la contraseña cifrada, sino que contiene normalmente un carácter «x». Antiguamente la contraseña se almacenaba en este campo pero tal y como comentas posteriormente en el artículo, la contraseña se almacena en el fichero /etc/shadow por razones de seguridad.

  2. Hola Felipe,

    Si, de hecho se habla de contraseñas shadow en el texto :)

    El concepto de claves shadow (shadow password)

    El empleo de contraseñas shadow hace referencia a la aportación de un grado adicional de seguridad en los ficheros que contienen información sensible, como las claves cifradas de los ficheros de usuario y grupos.

    Así, sin el empleo de shadow suite, cada entrada del fichero /etc/passwd sería similar a ésta:

    shernando:Npge08pfz4wuk:503:100:Sergio Hernando:/home/shernando:/bin/sh

    Con empleo de contraseñas shadow, el aspecto de esa línea pasa a ser el siguiente:

    shernando:x:503:100:Sergio Hernando:/home/shernando:/bin/sh

    Este método, muy extendido, permite reducir las probabilidades de ejecución de un ataque de fuerza bruta una vez conocido el hash de las claves. No obstante, estos ficheros deben ser siempre ficheros cuyo propietario y grupo sea el root de la máquina, lo que asegura que ojos ajenos no miren sus contenidos:

    De todos modos hay muchos sistemas en producción donde no se hace ocultación de hashes de claves, con lo que no viene de más contarlo :)

  3. Muy interesante, muchas gracias por esta nueva entrega, te está quedando redondo ;)

    Sería interesante que en la futura edición PDF, incluyeras sugerencias por los lectores en los comentarios y algún añadido interesante. Aunque no lo hicieras, seguirá siendo muy interesante todo este gran esfuerzo que estas haciendo sin pedir nada a cambio para ayudarnos a comprender la auditoría de entornos UNIX.

  4. timofonic,

    Sin duda alguna. Si de algo no me cabe duda es de que los lectores, al menos en este blog, enriquecen y superan las publicaciones. No te quepa duda de que irá todo en ese PDF que prometo tener algún día listo.

    Un saludo,

  5. Hola Sergio,

    Se que igual esto no se tendría que poner aquí pero…

    ¿Alguna forma para que avise a mi email cuando escribes un nueva nueva parte de esta serie de artículos? ¿Y cuando publiques el ansiado PDF?

    Resulta que quiero centrarme en otras cosas de momento y prefiero que me avisen de alguna forma automática para así no tener que mirar casi todos los días con el ansia ;)

    Saludos,
    timofonic

  6. Timofonic,

    Pues de momento te ahorro yo el ansia: no voy a publicar contenidos de estas materias hasta bien pasado un tiempo, ya que necesito una gran cantidad de tiempo para preparar cada entrada, y ahora mismo carezco por completo de tiempo.

    Si quieres recibir un mensaje de correo cada vez que se publique una nueva noticia, emplea este enlace:

    http://www.sahw.com/wp/archivos/2005/09/17/servicio-de-boletines-gratuitos/

    No sé si con esto te he contestado …

    Un saludo ;)

  7. qiero aprender hacking a traves de telnet, netsh progrmas como python paso por paso desde el inicio

Comentarios cerrados.