Herramientas de usuario

Herramientas del sitio


informatica:certificaciones:lpic:lpic-1:110_security:110.1_perform_security_administration_tasks

110.1 Perform security administration tasks

Pertenece a Topic 110: Security

  • Weight: 3
  • Description: Candidates should know how to review system configuration to ensure host security in accordance with local security policies.
  • Key Knowledge Areas:
    • Audit a system to find files with the suid/sgid bit set.
    • Set or change user passwords and password aging information.
    • Being able to use nmap and netstat to discover open ports on a system.
    • Set up limits on user logins, processes and memory usage.
    • Determine which users have logged in to the system or are currently logged in.
    • Basic sudo configuration and usage.
  • The following is a partial list of the used files, terms and utilities:
    • find
    • passwd
    • fuser
    • lsof
    • nmap
    • chage
    • netstat
    • sudo
    • /etc/sudoers
    • su
    • usermod
    • ulimit
    • who, w, last

Auditar acceso de los usuarios al sistema

Privilegios Especiales

Los privilegios especiales de ejecución (bits SUID y SGID) suelen ser causa de inseguridad en el sistema. En efecto, un usuario malintencionado, aprovechando la falta de atención o la ausencia de un compañero o un administrador que no está desconectado de su consola, puede modificar los permisos de ciertos comandos a su favor.

El ejemplo más habitual es el de reescribir un shell como un programa poco usado (por ejemplo sx) y darle los privilegios SUID. Al iniciar este comando, se puede convertir en root.

Un fichero ejecutable con privilegio SUID o SGID podrá ejecutarse por cualquier usuario como si fuese el propio creador/propietario del mismo

El comando siguiente permite buscar todos los ficheros que disponen de los bits SUID o SGID:

find / -type f \( -perm -4000 -o -perm -2000 \)

Una medida de seguridad podría ser guardar el listado obtenido con el comando anterior e ir comparándolo habitualmente con nuevas ejecuciones para ver si ha habido cambios.

  • Añade permisos SUID a un binario de ejemplo (usuario): chmod u+s /home/user/ejecutable
  • Elimina permiso SUID a un binario de ejemplo (usuario):chmod u-s /bin/user/ejecutable
  • Añade elimina permisos SGID a un binario de ejemplo (grupo): chmod g+s /home/user/ejecutable
  • Elimina permisos SGID a un binario de ejemplo (grupo): chmod g-s /home/user/ejecutable

Por ejemplo:

  • Obtener el permiso de listar todos los ficheros: chmod u+s /bin/cat
  • Quitar el permiso de ejecutar el comando ping: chmod u-s /bin/ping

Política de Contraseñas

Las contraseñas son la base de la autenticación de un usuario. Deben ser seguras.

Los usuarios deben elegir una buena contraseña, evitando la sencillez o lo más bien lo evidente: nombres de los hijos, de la esposa, de lugares, fecha de nacimiento y, en general, todo lo que importa y que es conocido del entorno profesional o personal.

En Linux, por defecto, no pueden existir cuentas de usuario sin contraseña.

El comando chage nos permite definir parámetros de caducidad de contraseñas. Ejemplo:

# chage -l tempwin
Minimum: 7
Maximum: 40
Warning: 10
Inactive: 5
Last Change: abr 10, 2008
Password Expires: may 20, 2008
Password Inactive: may 25, 2008
Account Expires: ene 01, 2010

Para configurar todos esos valores de forma interactiva, lanzamos el comando sin parámetros:

chage tempwin

Por defecto, las contraseñas no caducan

chage también lo podemos utilizar para obligar al usuario a cambiar la contraseña en el próximo inicio de sesión:

chage -d 0 tempwin

Los módulos PAM influyen en la política de gestión de las contraseñas, obligando en algunos casos a elegir una más o menos compleja.

Una buena configuración de PAM puede ayudarnos a ser más o menos estrictos en temas de contraseñas.

  • /etc/pam.conf
  • /etc/pam.d/*

En estos ficheros se definen reglas con el siguiente formato:

servicio tipo control modulo argumentos

Podemos apilar reglas para crear sistemas de autenticación que tengan que ir cumpliendo condiciones

Ejemplo: Regla para endurecer contraseñas. Editamos /etc/pam.d/common-password:

password requisite pam_cracklib.so try_first_pass retry=3 minlength=12 lcredit=1 ucredit=1 dcredit=1 ocredit=1 difok=4
  • try_first_pass: número de intentos fallidos de contraseña.
  • minlength: longitud mínima de la contraseña
  • lcredit: número mínimo de minúsculas que debe contener la contraseña
  • ucredit: número mínimo de mayúsculas que debe contener la contraseña
  • dcredit: número mínimo de dígitos que debe contener la contraseña
  • ocredit: número mínimo de otros caracteres que debe contener la contraseña
  • difok: números de caracteres en los que debe ser distinta la contraseña de la anterior

Seguimiento del login de usuarios

  • who: muestra los usuarios logueados en el sistema
  • last: muestra los ultimos usuarios logueados
  • lastb: muestra los intentos de login incorrectos
  • lsof: muestra ficheros abiertos por un usuario o proceso

Usuarios:

lsof -u tempwin

Si queremos limitarlo a una ruta:

lsof -u -a +D /bin tempwin

Ficheros:

lsof /dev/sda1

Esto último es útil para saber quién está usando la partición /dev/sda1.

Si quisiésemos ver todos los puertos en escucha (LISTEN):

lsof -i -P -n

Visualizar los puertos TCP y UDP así como las conexiones activas en el sistema:

lsof -i | grep sshd

Buscar los procesos que usan un determinado puerto:

lsof -i :80

Ver archivos abiertos por un proceso o programa concreto:

lsof -c httpd

Mostrar procesos que usan IPv4 o IPv6:

lsof -i 4
lsof -i 6

Ver archivos abiertos por un rango de puertos:

lsof -i TCP:1-1024

Bloquear el usuario

Además de usermod, también podemos bloquear una cuenta con passwd:

passwd -l usuario

Para desbloquearla:

passwd -u usuario

Para ver la política de un usuario (y ver si está bloqueada, por ejemplo):

passwd -S usuario

sudo

El comando sudo permite asignar el derecho a ejecutar comandos de administrador (root) a uno o varios usuarios, en una o varias máquinas.

Para que un usuario pueda ejecutar un comando que, en principio, solo puede ejecutar root, debe añadirse un derecho sudo a este usuario para este comando.

En Debian, para tener sudo hay que instalar el paquete sudo

El fichero de configuración de sudo es /etc/sudoers. Es posible editarlo a mano o con el comando visudo. Este último comando comprueba la sintaxis del fichero en el momento de guardar.

La sintaxis queda algo tal que así:

user machine = (user2:group) command

Dónde:

  • user: el usuario (o alias) al cual se aplica la regla.
  • machine: la máquina (o el alias) en la cual se aplica la regla.
  • user2: la cuenta con la cual el usuario ejecutará el comando
  • group: el grupo con la cual el usuario ejecutará el comando.
  • command: el comando que se va a ejecutar.

Si no indicamos algo se supone ALL

Ejemplo:

john ALL=(ALL:ALL) NOPAWSSD:ALL
 |    |    |   |             |
 |    |    |   |             |
 |    |    |   |          todos los comandos
 |    |  todos los usuarios
 |    |        |
 |    |        |
 |    |    todos los grupos
 |   host
 |
usuario

Más ejemplos:

tempwin ALL= (ALL) /bin/vi /etc/http/conf/httpd.conf, /usr/bin/systemctl restart httpd, /usr/bin/passwd [A-z]*, !/usr/bin/passwd root

Ver el riesgo de la línea anterior más adelante

Le decimos que al usuario tempwin desde cualquier máquina y con cualquier grupo podrá editar el fichero /etc/http/conf/httpd.conf, reiniciar el servidor web Apache y cambiarle la contraseña a todo el mundo salvo a root.

Otro ejemplo:

tempwin ALL = /sbin/fsck

Estamos dando al usuario tempwin permisos para ejecutar un fsck.

Para dar permisos a todo un grupo (en lugar de ir usuario a usuario), anteponemos el signo del porcentaje (%):

%sudo ALL=(ALL:ALL) ALL

Configurando el archivo /etc/sudoers podemos:

  • Crear grupos de usuarios.
  • Crear grupos de máquinas.
  • Crear grupos de comandos.
  • Forzar o no el uso de una contraseña.
  • Forzar la ejecución de un comando bajo un usuario distinto de root.

Ejemplo de posibilidades en /etc/sudoers:

Alias

User_Alias OPERATORS = joe, mike, jude
User_Alias OP = root, operator
Host_Alias SERVERS = 10.1.2.0/255.255.255.0
Cmnd_Alias PRINTING = /usr/sbin/cupsenable, /usr/bin/lpadmin

Reglas:

OPERATORS ALL = ALL
pepito ALL = (OP) PRINTING
%tecnicos SERVERS = ALL
menganito ALL = /bin/ifconfig, /bin/ifup, /bin/ifdown

Un fichero con permisos especiales lo podremos ejecutar (si tenemos permisos) anteponiendo sudo:

sudo ls /root

Pediría la contraseña del usuario que está ejecutando el comando, no la del administrador.

Al ejecutar sudo, se queda registrado en el sistema su uso.

Es muy importante una configuración correcta del fichero /etc/sudoers para evitar que un usuario no administrativo logre permisos de root. Por ejemplo, si permitimos que un usuario pueda abrir un fichero , podríamos salir al shell desde el editor (vi) con :shell y nos convertiríamos en root. Los comandos vi, cat, more, less… tienen también escape de shell. Corrección:

tempwin ALL = (ALL) NOEXEC: /bin/vi /etc/http/conf/httpd.conf, /usr/bin/systemctl restart httpd, /usr/bin/less, /bin/rm

Si queremos ver los permisos o prohibiciones que tenemos aplicadas por sudo:

sudo -l

Si en el fichero /etc/sudoers habilitamos la línea:

Defaults log_output

Podremos usar el comando sudoreplay para ver todo lo que ha ido haciendo cada usuario al utilizar sudo:

sudoreplay <TSID>

Podríamos ver lo que escribió ese usuario en tiempo real.

Si queremos ver quién ha borrado ficheros usando sudo:

sudoreplay -l commando rm

También se puede filtrar por fecha:

sudoreplay -l fromdate 03/11/2021
sudoreplay -l todate 03/11/2021

Opor usuario y comando:

sudoreplay -l user <USUARIO> command <COMANDO>

loginctl

Este comando de systemd que permite listar e interactuar con usuarios y sesiones.

Acciones sobre sesiones:

  • list-sessions: lista las sesiones (el número de sesión es el ID de la sesión)
  • session-status
  • show-session
  • terminate-session
  • kill-session

Acciones sobre usuarios:

  • list-users
  • user-status
  • show-user
  • terminate-user
  • kill-user

Auditar conexiones de red

Algunas cuentas no deben ser interactivas: se deben prohibir las conexiones desde una consola. Se pueden asignar estas cuentas a una aplicación, a un servicio, a una conexión FTP, etc., pero se debería rechazar la conexión (¡no shell!)

Dentro del archivo /etc/shells podremos encontrar las shells más habituales. El shell /bin/false no es realmente un shell. Prohíbe las conexiones interactivas.

Si echamos un vistazo a /etc/passwd, veremos que las cuentas de sistema tiene asociada la shell /bin/false o /usr/sbin/nologin.

Si queremos cambiar la shell de un usuario: usermod -s /usr/sbin/nologin pepito. Con el ejemplo anterior, el usuario pepito no podrá iniciar sesión en el sistema, lo echará.

Antes de pasar por un pseudoshell de conexión, los módulos PAM permiten aplicar numerosas limitaciones. Entre ellas, el módulo pam_nologin, que le permite prohibir la conexión de los usuarios excepto root. Este módulo monitoriza si un usuario intenta conectarse al fichero /etc/nologin

nmap

Herramienta de exploración de red y de control de seguridad.

Permite probar las conexiones de red de una máquina determinada y obtener mucha información.

nmap host

En Debian se instala a través del paquete nmap

En particular, analizando tramas, logra determinar el tipo y la versión del sistema operativo remoto: nmap –A host

  • nmap -sP 192.168.1.*: barrido equipos activos.
  • nmap <IP>: escaneo de puertos.
  • nmap -A <IP>: escaneo completo.
  • nmap -O <IP>: escaneo de SO.
  • nmap -p<Puerto> <IP>: escaneo de puerto específico

netstat

Permite obtener información y estatísticas de red sobre una máquina local. En particular se puede comprobar cuáles son los puertos a la escucha en su máquina, quién ha establecido una conexión y qué procesos locales (servicios) están a la escucha.

netstat -putan
  • -p: PID y programa
  • -u: UDP
  • -t: TCP
  • -a: ALL
  • -n: Direcciones IP en vez de hosts

Límites

El comando ulimit permite modificar los límites de recursos disponibles para la shell.

Con ulimit -a podemos ver los límites que tiene establecido un usuario

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 24728
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 24728
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Se pueden definir en el fichero /etc/security/limits.conf. Los límites se pueden establecer por usuarios o grupos. Ejemplo:

* hard nproc 200
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
@oracleinstall hard nproc 6384

El nombre de los grupos lleva el signo @ delante.

Los límites blandos (soft) lanzan un aviso y los duros (hard) establecen el límite máximo

Ejemplo de la utilidad de los límites con una bomba fork Bash GNU/Linux:

:(){ :|:& };:
  • :(): define la función : y la ejecuta
  • {: primera instrucción de la función
  • :: carga otra copia de la función : en memoria
  • |: envía la salida a …
  • :: … otra copia de la función :, la cual debe cargarse en memoria
  • &: hace un disown de las funciones.. Si la primera : es finalizada, todas las funciones que dicha función ha empezado deberían cerrarse automáticamente.
  • }: fun de la función :
  • ;: una vez definida :, debemos…
  • :: … llamar a : iniciando una reacción en cadena. Cada : arrancará 2 más.

Para prevenir este ataque, si editamos el fichero /etc/security/limits.conf

* hard nproc 200

Estamos diciendo que ningún usuario podrá crear más de 200 procesos.

informatica/certificaciones/lpic/lpic-1/110_security/110.1_perform_security_administration_tasks.txt · Última modificación: por tempwin