7 Áreas de Auditoría
Una auditoría básica de Linux cubre estas áreas para revisar la configuración de usuarios y permisos, analizar logs y servicios activos, y verificar la seguridad básica.
ÁREA 01
Usuarios y Permisos
passwd, shadow, sudoers, SUID/SGID
ÁREA 02
Servicios y Procesos
systemctl, ss, puertos abiertos
ÁREA 03
Logs del Sistema
auth.log, syslog, journalctl, last
ÁREA 04
Seguridad Básica
UFW, iptables, SSH, shells no estándar
ÁREA 05
Integridad de Archivos
AIDE — hashes criptográficos
ÁREA 06
Rendimiento y Recursos
top, htop, ps aux, df, free
ÁREA 07
Buenas Prácticas
updates, Fail2Ban, backups, cuentas inactivas
1. Auditoría de Usuarios y Permisos
Revisa quién tiene acceso al sistema, qué privilegios posee y si existen configuraciones de permisos peligrosas en archivos críticos.
bash — usuarios, grupos y privilegios
# Listar todos los usuarios del sistema
cat /etc/passwd
# Listar todos los grupos
cat /etc/group
# Usuarios con privilegios sudo
getent group sudo
# Verificar permisos de archivos críticos
ls -l /etc/passwd /etc/shadow /etc/sudoers
# Buscar archivos SUID (ejecución como propietario)
find / -perm -4000 -type f 2>/dev/null
# Buscar archivos SGID (ejecución como grupo)
find / -perm -2000 -type f 2>/dev/null
Permisos de archivos críticos esperados
bash — permisos correctos en archivos sensibles
# /etc/passwd — debe ser legible por todos, pero solo root puede escribir
# -rw-r--r-- 1 root root (644)
# /etc/shadow — solo accesible por root y el grupo shadow
# -rw-r----- 1 root shadow (640)
# /etc/sudoers — solo root puede leer y escribir
# -r--r----- 1 root root (440)
# Si alguno tiene permisos más amplios, es una alerta de seguridad
SUID y SGID — Permisos Peligrosos
Los archivos con bits SUID/SGID son un vector primario para la escalada de privilegios. Un atacante que encuentre un binario SUID de root vulnerable puede obtener control total del sistema.
SUID 4000
Set User ID
El proceso se ejecuta con los permisos del dueño del archivo, no del usuario que lo lanza.
Peligro: Si el dueño es root, cualquiera puede ejecutarlo con privilegios de root.
Ejemplo legítimo:
passwd necesita SUID para escribir en /etc/shadow (solo root).Representación:
-rwsr-xr-x (4755) — la s sustituye a la x del dueño.
SGID 2000
Set Group ID
El proceso se ejecuta con los permisos del grupo propietario del archivo.
Peligro: Permite acceso a recursos restringidos a un grupo específico.
Menos crítico que SUID de root, pero sigue siendo un vector de escalada si el grupo tiene acceso a datos sensibles.
Representación:
-rwxr-sr-x (2755) — la s sustituye a la x del grupo.Proceso de escalada de privilegios con SUID
1
Acceso inicial de bajo privilegio
El atacante obtiene acceso como un usuario sin privilegios (ej: mediante phishing, vulnerabilidad web, contraseña débil).
2
Búsqueda de binarios SUID
Ejecuta
find / -perm -4000 -type f 2>/dev/null para listar todos los ejecutables con SUID.3
Explotación del binario vulnerable
Si encuentra un binario SUID de root con vulnerabilidades (buffer overflow, llamadas a shell sin ruta absoluta), lo explota para ejecutar comandos como root.
🔍 Defensa: Revisa periódicamente la lista de binarios SUID. Compara con un baseline conocido. Todo binario SUID que no reconozcas es una alerta crítica. Usa
ls -la $(find / -perm -4000 -type f 2>/dev/null) para ver propietarios.2. Auditoría de Servicios y Procesos
Cada servicio activo es un potencial punto de entrada. Solo deben ejecutarse los servicios estrictamente necesarios — principio del mínimo privilegio aplicado a servicios.
bash — servicios y puertos
# Listar servicios activos (running) — con systemd
systemctl list-units --type=service --state=running
# Listar solo los servicios en ejecución (forma abreviada)
systemctl list-units --type=service | grep running
# Ver servicios habilitados en el arranque
systemctl list-unit-files --type=service | grep enabled
# Ver servicios NO habilitados (para comparación)
systemctl list-unit-files --type=service | grep -v enabled
# Ver puertos abiertos (TCP y UDP, sin resolver nombres)
ss -tuln
# Deshabilitar un servicio innecesario
sudo systemctl disable <nombre-del-servicio.service>
📌 Qué buscar: Servicios desconocidos habilitados en arranque, puertos inesperados abiertos (especialmente en interfaces externas), servicios que no corresponden al rol del servidor. Un servidor web no debería tener Telnet o FTP habilitados.
3. Auditoría de Logs
Los logs son la memoria del sistema. Revelan intentos de acceso, errores y actividad sospechosa. El análisis regular es fundamental para detectar intrusiones tempranas.
bash — análisis de logs y accesos
# Ver los últimos inicios de sesión
last
# Intentos fallidos de autenticación SSH (fuerza bruta)
sudo grep "Failed password" /var/log/auth.log
# Ver errores críticos del sistema (journald)
sudo journalctl -p err
# Monitorizar logs en tiempo real
sudo tail -f /var/log/syslog
# Contar intentos fallidos por IP (requiere grep + sort + uniq)
sudo grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -rn | head
4. Auditoría de Seguridad Básica — Firewall
Revisión del estado del firewall. Diferencia clave: UFW es la interfaz simple (frontend) e iptables es el motor del kernel (backend). UFW traduce comandos simples en reglas iptables.
bash — revisar firewall
# Ver reglas activas con UFW (interfaz simplificada)
sudo ufw status verbose
# Ver reglas con iptables (motor del kernel)
sudo iptables -L -v -n
UFW vs iptables — El Control Remoto y el Televisor
UFW es el control remoto, iptables es el televisor. UFW permite cambiar de canal con botones simples, pero iptables hace el trabajo pesado en el interior.
UFW
Frontend · Alto nivel
Nivel
Alto nivel — utilidad de espacio de usuario
Función
Traduce comandos simples en reglas iptables
Sintaxis
Simple:
ufw allow 22/tcpControl
Fácil de usar, rápido y funcional
Uso ideal
Seguridad diaria, principiantes/intermedios, Ubuntu/Debian
iptables
Backend · Bajo nivel
Nivel
Bajo nivel — mecanismo del kernel de Linux
Función
Configura el framework Netfilter del núcleo
Sintaxis
Compleja:
iptables -A INPUT -p tcp --dport 22 -j ACCEPTControl
Máxima flexibilidad — NAT, enmascaramiento, reglas granulares
Uso ideal
Servidores, routers, administración avanzada, scripts
💡 En esencia: Si usas UFW, sigues usando la funcionalidad de iptables (o su sucesor, nftables) sin tener que aprender su sintaxis compleja. Son complementarios, no excluyentes.
Revisión SSH y Shells No Estándar
Dos de las comprobaciones más críticas: la configuración de SSH y las cuentas con shells interactivos inesperados.
bash — auditoría SSH y shells
# Revisar configuración SSH crítica
sudo grep -E "PermitRootLogin|PasswordAuthentication" /etc/ssh/sshd_config
# Si el archivo no está en la ruta por defecto, buscarlo
sudo find / -name sshd_config 2>/dev/null
# Ver dónde está el archivo de configuración de sshd
sudo systemctl cat sshd | grep "sshd_config"
# Verificar si SSH está instalado y activo
sudo systemctl status ssh
# Detectar cuentas con shells NO estándar
# (ni /bin/bash, ni /sbin/nologin, ni /bin/false)
awk -F: '($7 !~ "/bin/bash|/sbin/nologin|/bin/false") {print $1,$7}' /etc/passwd
Interpretación del comando awk en /etc/passwd
$1
Nombre de usuario
El primer campo de
/etc/passwd, separado por :.$7
Shell asignado
El séptimo campo — la ruta del shell del usuario (ej:
/bin/bash, /sbin/nologin).!~
Condición de filtro — NO coincide
Selecciona cuentas cuyo $7 NO sea ninguno de:
/bin/bash, /sbin/nologin, /bin/false. Cualquier otro shell es sospechoso.🔍 Qué buscar: Cuentas de sistema (
daemon, sys, mail) con /bin/sh o /bin/bash son alertas críticas. Si un atacante añade una cuenta oculta, suele asignarle un shell interactivo. PermitRootLogin yes y PasswordAuthentication yes en sshd_config también son riesgos altos.5. AIDE — Auditoría de Integridad de Archivos
Advanced Intrusion Detection Environment. Crea una instantánea criptográfica (hashes SHA256, MD5) del sistema en un estado limpio y detecta cualquier modificación posterior.
1
Instalación
Instala el paquete desde los repositorios. Asegúrate de que el sistema está limpio antes de comenzar.
2
Inicialización — Crear la "Base de Oro"
Escanea el sistema y calcula hashes de todos los archivos monitorizados. Puede tardar varios minutos — es normal. Genera
/var/lib/aide/aide.db.new.3
Activar la Base de Datos
Renombra el archivo
aide.db.new → aide.db para que AIDE lo use como referencia en futuras comprobaciones.4
Verificación de Integridad
Compara el estado actual del sistema con la base de datos. Si no hay diferencias: el sistema está íntegro. Si hay cambios: investigar cada uno.
5
Actualizar tras cambios legítimos
Después de actualizaciones de sistema verificadas, genera una nueva base de datos con
--update y actívala para establecer el nuevo estado de referencia.bash — ciclo completo de AIDE
# 1. Instalar AIDE
sudo apt install aide -y
# 2. Inicializar la base de datos (puede tardar varios minutos)
sudo aideinit
# O con ruta explícita si hay error de configuración:
sudo aide --config /etc/aide/aide.conf --init
# 3. Activar la base de datos (mover .new → .db)
sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db
# Verificar que la base de datos existe
sudo ls -l /var/lib/aide/aide.db
# 4. Ejecutar comprobación de integridad
sudo aide --check
# O con ruta explícita:
sudo aide --config /etc/aide/aide.conf --check
# 5. Tras cambios legítimos — actualizar la base de datos
sudo aide --config /etc/aide/aide.conf --update
sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db
Capturas del proceso AIDE
Proceso de inicialización de AIDE — escaneo del sistema y cálculo de hashes criptográficos
⏳ Es normal que tarde: AIDE calcula hashes criptográficos (SHA256) de potencialmente millones de archivos. Los mensajes "Permission denied" en
/run/user/1000/gvfs son normales — son directorios de sesión gráfica y no afectan la auditoría.🔒 Seguridad de la base de datos: En producción, mueve
aide.db a un medio de solo lectura (CD/DVD, USB desconectado) o servidor seguro tras la inicialización. Un atacante podría modificar la base de datos para ocultar sus cambios.Análisis del Reporte de AIDE
Cómo interpretar el informe de
--check. La mayoría de cambios en un sistema en uso son normales — hay que distinguir el ruido del sistema de verdaderas intrusiones.Secciones del reporte
| Sección | Descripción | Causa típica |
|---|---|---|
| Added entries | Archivos nuevos que no estaban en la base de datos original | Instalación de nuevos paquetes, creación manual de archivos |
| Removed entries | Archivos que desaparecieron desde la inicialización | Desinstalación de paquetes, eliminación de archivos de configuración |
| Changed entries | Archivos que existen pero fueron modificados (contenido, permisos, timestamps) | Actualizaciones del sistema, modificaciones de configs, o alteración por atacante |
Cambios normales (no preocupantes)
| Elemento | Causa (riesgo bajo) |
|---|---|
| /run/systemd/inhibit/* · /run/user/* | Archivos de sesión de systemd — se crean y eliminan constantemente cuando la pantalla se bloquea o una app se abre |
| /var/lib/aide/aide.db.new | Archivo temporal del paso mv — AIDE lo detecta como "removido", lo cual es lo esperado |
| /home/user/.cache/* · .config/dconf/* | Cachés de navegador y configuraciones GNOME — cambian constantemente con el uso del escritorio |
| /var/log/sysstat/sa* | Archivos de estadísticas del sistema — el sistema sigue escribiendo datos de actividad |
El hash criptográfico en acción
ejemplo — detalle de cambio en reporte AIDE
# Ejemplo de cambio detectado (archivo de caché de shaders GPU)
# /home/atu/.cache/mesa_shader_cache_db/...
# Valor anterior (Base de Datos):
MD5: DOzaL3KZ9nrW6IHSOmVimQ==
SHA256: 7L5kAjc...
# Valor nuevo (Sistema actual):
MD5: I3gPdvSb2xnUA8SAozX4Ag==
SHA256: 5qZBP4c...
# Un solo bit diferente → hash completamente distinto
# Esto confirma que el contenido del archivo fue alterado
# Atributos que pueden cambiar (ejemplo):
# /etc/hosts : p+i+n+u+g+s+acl+selinux+xattrs
# p=permiso i=inodo n=nlinks u=usuario g=grupo s=size
Reporte de AIDE mostrando diferencias entre la base de datos y el sistema de archivos tras uso normal del sistema
✅ Conclusión del reporte: Los cambios detectados son ruido del sistema operativo en funcionamiento. Si todos son de cachés, logs y archivos de sesión, actualiza la base de datos con
--update. Solo debes alarmarme si ves cambios en /bin, /sbin, /etc/passwd, /etc/sudoers o similares sin justificación.6. Auditoría de Recursos y Rendimiento
Un proceso desconocido consumiendo CPU o RAM puede indicar malware (minero de criptomonedas, backdoor) o simplemente una aplicación mal configurada.
bash — monitorizar CPU, RAM y disco
# Monitor interactivo de CPU y memoria
top
htop # versión mejorada con interfaz de colores
# Uso de disco por sistema de archivos
df -h
# Memoria disponible en MB
free -m
# Top 10 procesos que más CPU consumen
ps aux --sort=-%cpu | head -10
# Top 10 procesos que más RAM consumen
ps aux --sort=-%mem | head -10
🚨 Señales de alerta: Proceso desconocido usando >80% CPU constantemente (posible cryptominer), proceso con nombre genérico o confuso, disco lleno sin explicación, memoria en swap constante sin causa aparente.
7. Buenas Prácticas de Seguridad
Medidas preventivas que reducen drásticamente la superficie de ataque y facilitan la recuperación ante incidentes.
01
Mantener software actualizado: Los parches de seguridad cierran vulnerabilidades conocidas. Ejecutar regularmente
sudo apt update && sudo apt upgrade -y.02
Revisar cuentas inactivas o huérfanas: Eliminar usuarios que ya no necesitan acceso. Las cuentas abandonadas son vectores de ataque con credenciales conocidas.
03
Activar Fail2Ban: Bloquea automáticamente IPs con demasiados intentos fallidos de autenticación. Protección esencial contra ataques de fuerza bruta SSH.
04
Revisar permisos de archivos críticos: Verificar periódicamente
/etc/passwd, /etc/shadow, /etc/sudoers y binarios del sistema.05
Copias de seguridad periódicas: Sin backups, una intrusión puede ser catastrófica. Regla 3-2-1: 3 copias, 2 formatos distintos, 1 fuera del sitio.
Checklist Práctica de Auditoría Básica
Referencia rápida con todos los comandos, objetivos y alertas a buscar en cada área de la auditoría.
Usuarios y Grupos
▾
cat /etc/passwd
Listar todos los usuarios
Usuarios desconocidos, UID 0 sospechosos
cat /etc/group
Listar grupos
Grupos sospechosos o permisos excesivos
getent group sudo
Ver usuarios con sudo
Usuarios no autorizados en sudo
awk -F: '($7 !~ "...") {print $1,$7}' /etc/passwd
Shells no estándar
Cuentas de sistema con shell interactivo
Permisos Críticos
▾
ls -l /etc/passwd /etc/shadow /etc/sudoers
Permisos de archivos sensibles
Escritura permitida a usuarios no root
find / -perm -4000 -type f 2>/dev/null
Archivos SUID
Binarios SUID no reconocidos
find / -perm -2000 -type f 2>/dev/null
Archivos SGID
Binarios SGID peligrosos
Servicios y Procesos
▾
systemctl list-units --type=service --state=running
Servicios activos
Servicios innecesarios o desconocidos
systemctl list-unit-files --type=service | grep enabled
Servicios habilitados en arranque
Servicios inseguros habilitados
ss -tuln
Ver puertos abiertos
Puertos inesperados abiertos
SSH
▾
sudo grep -E "PermitRootLogin|PasswordAuthentication" /etc/ssh/sshd_config
Revisar seguridad SSH
PermitRootLogin yes · PasswordAuthentication yes
sudo grep "Failed password" /var/log/auth.log
Intentos fallidos de login
Fuerza bruta o ataques externos
Firewall y Red
▾
sudo ufw status verbose
Reglas activas UFW
Falta de reglas, puertos abiertos innecesarios
sudo iptables -L -v -n
Reglas iptables
Políticas laxas, INPUT ACCEPT general
Logs del Sistema
▾
last
Últimos logins
Logins sospechosos o inusuales
sudo journalctl -p err
Errores críticos
Mensajes de error persistentes
sudo tail -f /var/log/syslog
Monitorización en tiempo real
Eventos inusuales, fallos de servicios
Integridad de Archivos
▾
sudo apt install aide -y && sudo aideinit && sudo aide --check
Detectar cambios no autorizados
Archivos críticos modificados sin justificación
Rendimiento y Recursos
▾
top / htop
CPU y memoria
Procesos desconocidos con uso excesivo
df -h
Uso de disco
Discos casi llenos
free -m
Memoria disponible
Swap constante, memoria insuficiente
ps aux --sort=-%cpu | head -10
Procesos intensivos en CPU
Procesos sospechosos o no autorizados
ps aux --sort=-%mem | head -10
Procesos intensivos en RAM
Procesos sospechosos o no autorizados
Actualizaciones
▾
sudo apt update && sudo apt upgrade -y
Mantener sistema actualizado
Paquetes obsoletos o vulnerables
📌 Consejos finales: Ejecuta esta checklist completa periódicamente y registra cualquier alerta en un archivo de reporte. Elimina usuarios innecesarios, deshabilita servicios, ajusta permisos y firewall. La auditoría no es un evento único — es un proceso continuo.