LinuxProgramaciónSecurización

Hackers use Bash II – Meeting users and groups

Colaborador: Hackbier

Una vez hemos tenido un primer contacto con Bash, vamos a continuar con la segunda entrada de la serie Hackers use Bash. Esta entrada no será tan básica como la anterior, aunque no será tan avanzada como el tema lo permitiría. El objetivo es dar una base para familiarizarnos con estos conocimientos y, a partir de ahí, soltarnos al ‘mundo real’.

Lo que uno aprende por sí mismo, no se olvidará nunca.

Tanto en GNU/Linux como otros sistemas operativos, es importante la correcta configuración y relación entre usuarios, grupos y permisos. Desde Bash podemos gestionar fácilmente todas estas opciones, tan importantes en seguridad que un atacante podría aprovechar una mala configuración para, por ejemplo, realizar una escalada de privilegios. En esta entrada nos centraremos primero en el conocimiento, pero no en sus posibles explotaciones, lo que dejaré para posteriores entradas de esta serie.

Usuarios y grupos

Parece muy obvia la pregunta sí, pero ¿qué es un usuario? ¿y un grupo de usuarios?.

Un usuario es cualquier persona que usa un ordenador. En este caso, estamos describiendo los nombres que representan a dichos usuarios. Esos nombres pueden ser María o Bill, y pueden ser tambien Dragonlady o Pirata en lugar de sus nombres reales. Lo único que importa es que el equipo tenga un nombre para cada cuenta, y es con este nombre a través del cual una persona adquiere los permisos para usar el sistema. No obstante, algunos servicios del sistema se ejecutan utilizando cuentas de usuario restringidas o privilegiadas.

La gestión de usuarios se realiza con el propósito de dar seguridad al sistema, limitando el acceso de ciertas maneras específicas.

Cualquier persona puede tener más de una cuenta, siempre y cuando se utilice un nombre diferente para cada cuenta que cree. Además, hay algunos nombres reservados, que no pueden ser utilizados, como «root».

Los usuarios pueden ser congregados en un «grupo», y, del mismo modo, pueden optar por unirse a un grupo ya existente para utilizar los privilegios de acceso que dicho grupo concede.

Arch Wiki – «Users and groups»

A continuación enumeraré algunos de los comandos más conocidos para la administración de usuarios y grupos de usuarios desde Bash. Ojo, algunos de estos comandos pueden variar o estar deshabilitados dependiendo de qué sistema operativo o distribución.

su [+usuario]

Permite iniciar una sesión con un usuario diferente. En el caso de no especificar usuario, se iniciará sesión al usuario root. Para salir de una sesión iniciada podemos tanto volver a usar su como usar el comando exit.

passwd [+usuario]

Permite crear o modificar la contraseña de un usuario. En el caso de no especificar usuario, se cambiará la contraseña del usuario iniciado. Ojo, el usuario root tiene el poder para utilizar este comando y cambiar las contraseñas de cualquier usuario.

useradd [+usuario]

Permite crear un usuario con el nombre dado. El usuario será creado sin contraseña, por lo que deberemos cambiarla manualmente con el comando passwd como hemos visto anterormente. Para correr este comando es necesario tener privilegios de administrador.

deluser [+usuario]

deluser nos permite eliminar un usuario.

groups [+usuario]

El comando groups nos permite identificar los grupos a los que pertenece un determinado usuario. Como viene siendo habitual, en el caso de omitir usuario, nos devolverá los grupos a los que pertenece el usuario desde el que se lanza la orden.

Como vemos en la anterior imagen nos muestra los grupos típicos del sistema, grupos predefinidos. Pero, ¿y si queremos crear nuestros propios grupos?

groupadd [+usuario] | gpasswd -a [+usuario] [+grupo]

Permite la creación de un grupo nuevo. Mediante este comando, añadiremos un usuario ya creado a un grupo también creado. Y corroboramos con groups que se ha añadido correctamente al grupo creado.

groupdel [+grupo]

Para eliminar un grupo creado, sencillamente usamos este comando.

Por supuesto recuerdo el uso del parámetro –help para aprender más como funciona cada comando.

Para la administración de usuarios y grupos, tenemos una serie de ficheros que almacenan información de ambos y que puede interesar tener presente tanto para securización como seguridad ofensiva. Recordamos el comando cat para devolver el contenido de un fichero sin necesidad de abrirlo.

/etc/passwd

Información general de los usuarios. Cuando usamos los comandos anteriormente mencionados, lo que hacemos realmente es añadirlos a esta línea. De esta forma también podremos eliminar y crear usuarios.

Esta información no es tan sensible, pero un posible atacante podría usar la información de aquí para el proceso de recolección de información, pudiendo numerar usuarios. Explico brevemente el contenido del fichero:

Separados por ‘:’ podemos encontrar los siguientes elementos:

  1. Nombre de cuenta de usuario. Ojo, corresponde al nombre de la cuenta, el de inicio de sesión. No al nombre «completo» que podemos asignar.CCC
  2. Campo de contraseña. Una x indica que la contraseña del usuario se encuentra almacenada y cifrada en /etc/shadow.
  3. UID o User IDentifier. Identifica al usuario en el sistema.
  4. GID o Group IDentifier. Identifica al grupo en el sistema.
  5. Campo para comentario o descripción. Por ejemplo, para el usuario jjgar, en este campo podríamos encontrar Juan José García.
  6. Directorio personal ($home) del usuario.
  7. La Shell que utiliza el usuario. En este caso y como no podría ser de otra forma, /bin/bash.

/etc/shadow

El archivo /etc/shadow almacena información segura o sensible de los usuarios. Al igual que antes describiremos los elementos que lo componen (separado por comillas).

  1. Nombre de la cuenta de usuario.
  2. Contraseña cifrada.
  3. Lastchanged o último cambio de contraseña en días transcurridos desde el 1 de enero de 1970.
  4. El mínimo número de días entre cambios de contraseña.
  5. El máximo número de días de validez de la cuenta.
  6. Días que avisa antes de caducar la cuenta.
  7. Días desde que caduca una contraseña para deshabilitar la cuenta.
  8. Fecha de caducidad de la cuenta en días transcurridos desde el 1 de enero de 1970.

/etc/group y /etc/gshadow

De la misma forma que se organiza y componen los ficheros anteriores sobre los usuarios, tenemos los ficheros /etc/group (similar a /etc/passwd) y /etc/gshadow (similar a /etc/shadow); ambos con la diferencia que no se centran en los usuarios, sino en los grupos.

Un poquito de hacking

Todo esto esta muy bien, hay que conocer las bases y el funcionamiento de las cosas. Pero, ¿a qué hemos venido aquí? ¡A HACKEAR!. Supongamos que hemos obtenido acceso físico a un sistema GNU/Linux, o acceso remoto, o los archivos /etc/passwd y /etc/shadow por la forma que sea. Como hemos visto estos archivos están cifrados, podríamos hacer una recolección de información sí, pero queremos más; queremos las contraseñas. Por supuesto esto no es magia. Y mediante esta técnica no obtendremos todas las contraseñas por ciencia infusa. Será un ataque por diccionario al conjunto de ambos archivos. Obviamente, cuanto más grande sea el diccionario, más posibilidades de ‘cracked’ con éxito habrá.

Para realizar este ataque de ‘cracking password‘ usaremos la veterana herramienta John The Ripper, un clásico. Existen dos desventajas para este ataque:

  1. Tenemos que tener acceso a los archivos /etc/passwd y /etc/shadow, algo que puede ser dificil ya que para tener acceso a /etc/shadow necesitamos privilegios root.
  2. Si los usuarios del equipo tienen buenas contraseñas, puede ser muy dificil dar con ella. De ahí la necesidad de tener buenas contraseñas consideradas seguras.

El primer paso será unificar ambos ficheros en uno. Para ello usaremos la utilidad unshadow, que pertenece a John The Ripper. El funcionamiento es muy sencillo, usamos el comando anteriormente mencionado seguido de ambos directorios, además de establecer un fichero nuevo de salida:

El siguiente paso es, una vez creado el archivo ‘crackingpass’ pasarle el diccionario. Utilizaremos uno de los diccionarios propios de John, pero podemos usar el que queramos. Por supuesto cuanto más amplios y variados sean los diccionarios, más posibilidades de éxito tendremos.

Una vez terminado, debemos comprobar si ha ‘pillado algo’, ¿cómo? simple. Con una simple línea de comandos:

Y ¡BINGO!. Hemos capturado la contraseña -nada segura, por cierto- del usuario newuser. Por supuesto esto es sólo una prueba, y nadie usa a día de hoy este tipo de contraseña… ¿o sí?. Cuanta más información recopilemos de nuestras víctimas con técnicas de reconocimiento, recolección de información, OSINT, etc. Más posibilidades tendremos de obtener éxito. Podríamos incluso realizar nuestros propios diccionarios personalizados para cada persona-usuario, usando por ejemplo YOW: herramienta creada por nuestro compañero @juanvelasc0 para crear diccionarios personalizados.

Supongamos que nuestra víctima se llama Alejandro y mediante una breve recolección de información descubrimos que es del Real Madrid, nació en 1992 y su gato se llama Misifú.

Esto generará un diccionario con los datos dados:

Verificando la integridad de los ficheros

El uso de la utilidad ‘pwck’ comprueba la integridad y la información de autenticación. Comprueba que todas las entradas en /etc/passwd y /etc/shadow tienen el formato adecuado y que los datos sean válidos. Su sintáxis es:

Esto podría alertarnos de un posible usuario malicioso que pretenda atentar a la integridad de estos archivos, eliminando o editando entradas.

 

Un comentario en “Hackers use Bash II – Meeting users and groups

Los comentarios están cerrados.