01 agosto, 2019

Renovar certificados: Comprabar si el certificado, clave privada y el CSR coinciden (OpenSSL)

Al renovar los certificados de un servidor web podemos encontrarnos con errores en el momento de sustitución de los ficheros de certificados en los Virtual Host en el caso de Apache por ejemplo.
<VirtualHost *:443>
...
SSLEngine on
SSLCertificateFile /ruta/a/public.crt
SSLCertificateKeyFile /ruta/a/private.key
SSLCertificateChainFile /ruta/a/intermediate.crt
...
</VirtualHost>
Para comprobar la integridad de los ficheros de certificados, debemos verificar que la suma de verificación (checksum) calculada a través una función hash el certificado, la clave privada y el CSR (Certificate Signing Request) deberían ser los mismos resultados para todos.

Si se obtiene un valor MD5 o SHA256 diferente, significa que el certificado, la clave privada y el CSR no coinciden.

Para comprobar estos valores podemos hacer uso de las herramientas que nos proporciona OpenSSL.

Método 1: Usando OpenSSL y MD5

# openssl rsa -noout -modulus -in private.key | openssl md5
# openssl req -noout -modulus -in intermediate.csr | openssl md5
# openssl x509 -noout -modulus -in public.crt | openssl md5

Método 2: Usando OpenSSL y sha256sum

# openssl pkey -in private.key -pubout -outform pem | sha256sum
# openssl req -in intermediate.csr -pubkey -noout -outform pem | sha256sum
# openssl x509 -in public.crt -pubkey -noout -outform pem | sha256sum
Saludos!

29 julio, 2019

nping: Aplicando Reverse ARP de forma práctica (RARP)

Este es un pequeño tip de como se puede realizar de forma práctica un RARP (Reverse Address Resolution Protocol). Conociendo una dirección MAC y un rango de red específico, realizar peticiones ICMP (ping) de forma automática a un pool de direcciones de red para posetirormente consultar las tablas ARP y descubrir la dirección IP asiganada.

Del software nmap podemos hacer uso del script nping para poder escanear un rango de red determinado de forma automática y listar la tabla ARP local redireccionando la salida a un filtro por la dirección o direcciones MAC que queremos descubrir su IP.
nping --rate=5 <RangeIP> & arp -a | findstr "<MACAddress1> <MACAddress2> ..."

nping --rate=5 192.168.1.1-255 & arp -a | findstr "00-11-2c-3f-44-55 11-2b-3c-44-22-33"
nping ya dispone de un modo ARP aunque de las pruebas que he realizado en ninguna obtuve el resultado esperado.

Saludos!

17 julio, 2019

fail2ban: Control de ataques de fuerza bruta en servicios de sistemas Linux

fail2ban es una aplicación IDPS (Intrusion Detection and Prevention Systems) que supervisa las conexiones externas de direcciones IPs a servicios internos, se puede parametrizar para bloquear los intentos de accesos externos por fuerza bruta. En base al cumplimiento de las directivas definidas y asociadas a determinados servicios.

fail2ban detecta conexiones que puedan ser anómalas y bloquea la IP pública que intenta acceder a dichos servicios por lo que sería un sistema activo (analiza, detecta y actua al momento), lo hace añadiendo reglas iptables rechazado las conexiones procedentes de esa dirección IP pública.

fail2ban escanea los ficheros de logs de los servicios configurados como por ejemplo "/var/log/auth.log" (ssh) o "/var/log/apache/error_log" (apache), comprobando los criterios establecidos en las directivas de cada servicio y banenado aquellas direcciones IPs públicas que intentaron acceder a dicho servicio y baneando estas direcciones IPs.

En el fichero de configuración de servicios asociados a fail2ban, se refieren a estos servicios como "jails".
/etc/fail2ban/jail.conf
En el caso de configurar el servicio SSH se podría definir de la siguiente manera.
[sshd]
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
bantime = 86400
findtime = 600
maxretry = 3
Donde las directivas son:
  • bantime = Número de segundos en el cual una dirección IP permanecerá prohibida (10 min por defecto).
  • findtime = Cantidad de tiempo entre intentos de inicio de sesión, antes de que se elimine el host. (predeterminado 10 min).
  • maxretry = Número de intentos que deben realizarse antes de que se aplique una prohibición. (por defecto 3 intentos).

Consultar las IPs que intentaron acceder y fueron baneadas o bloqueadas

Desde el cliente fail2ban-client indicando el tipo de jail (servicio sshd).
# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 1
|  |- Total failed:     4
|  `- File list:        /var/log/auth.log
`- Actions
   |- Currently banned: 1
   |- Total banned:     2
   `- Banned IP list:   67.10.125.108
A través de iptables.
# iptables -L -n
Chain f2b-sshd (1 references)
target     prot opt source               destination
REJECT     all  --  67.10.125.108        0.0.0.0/0            reject-with icmp-port-unreachable
RETURN     all  --  0.0.0.0/0            0.0.0.0/0
REJECT - reject-with icmp-port-unreachable: Conexión rechazada

Visualizar los registros de logs en el fichero de log de fail2ban.log.
# cat /var/log/fail2ban.log | grep Unban
2019-07-15 21:12:41,602 fail2ban.actions        [18533]: NOTICE  [sshd] Unban 67.10.125.108
2019-07-15 21:32:01,540 fail2ban.actions        [18705]: NOTICE  [sshd] Unban 74.15.62.217
2019-07-15 21:42:50,191 fail2ban.actions        [18705]: NOTICE  [sshd] Unban 49.80.215.108
...

Banear dirección IP manualmente

fail2ban-client set <JAIL-NAME> banip <IP-ADDRESS>

# fail2ban-client set sshd banip 37.10.145.208

Desbanear dirección IP manualmente

fail2ban-client set <JAIL-NAME> unbanip <IP-ADDRESS>

# fail2ban-client set sshd unbanip 37.10.145.208

Desbanear dirección IP manualmente a través de iptables indicando el número de regla.
# iptables -L f2b-sshd --line-numbers
Chain f2b-sshd (1 references)
num  target     prot opt source               destination
1    REJECT     all  --  67.10.125.108        0.0.0.0/0            reject-with icmp-port-unreachable
2    RETURN     all  --  anywhere             anywhere
# iptables -D f2b-sshd 1
Desbanear IP manualmente a través de iptables indicando directamente la dirección IP pública.
iptables -D f2b-sshd -s 67.10.125.108 -j REJECT

Configurar una Whitelist en fail2ban

Configurar un pool de IPs a ignorar de los baneos o bloqueos temporales. Se define con la directiva ignoreip en el fichero de configuración /etc/fail2ban/jail.conf.
ignoreip = 127.0.0.1/8 ::1 <IP interna o externa, rango de red a ignorar>
ignoreip = 127.0.0.1/8 ::1 192.168.10.0/24
Saludos!

21 mayo, 2019

Generar un fichero de log de la ejecución de las tareas de CRON con rsyslog

Cuando añadimos nuevas tareas programas a cron la única forma de que estas generen un log del proceso de las acciones que van realizando es redireccionarlas a un fichero de log, en la propia línea que ejecuta la tarea dentro de cron usando la redirección.

Un ejemplo podría ser:
01 14 * * * root /home/user/script.sh >> /logs/script.log 2>&1
Si no queremos ver las acciones de la tarea que se ejecuta y simplemente queremos comprobar si una tarea se está ejecutando y cuando. Podemos consultar el syslog del sistema buscando por la palabra CRON.
tail -f /var/log/syslog | grep CRON 
Si lo que queremos es obtener un fichero independiente con este filtro, es posible crear un fichero de log específico para la ejecución de tareas cron.

RSYSLOG (Rocket-fast system for log processing) es una utilidad que nos permite entre otras múltiples funcionalidades crear un filtro dentro del fichero syslog del sistema y exportar los resultados a un nuevo fichero.

Se creará un fichero cron.log que contendrá solamente las entradas CRON que se muestran en syslog. Hay que tener en cuenta que los trabajos de CRON seguirán apareciendo en syslog.

Por defecto rsyslog está instalado por defecto en Ubuntu, sino lo estuviese.
apt install -y rsyslog
Editamos el fichero
/etc/rsyslog.d/50-default.conf
Buscamos y descomentamos la línea:
#cron.*
Guardamos el fichero.

Habilitamos el servicio automáticamente en el inicio del sistema y reiniciarlo.
systemctl enable rsyslog
systemctl restart rsyslog
Ahora debería existir un fichero de registro cron en:
/var/log/cron.log
Saludos!
Entradas Relacionadas