Hay muchas opciones para loguear todos los comandos de un usuario o todos los usuarios en Linux hacia Wazuh, en este artículo mostraremos como hacerlo con rsyslog que esta instalado por defecto en muchas distros de Linux.
- Agrega al final del archivo /etc/bash.bashrc (Ubuntu/Debian) o /etc/bashrc (RedHat/CentOS) lo siguiente:
export PROMPT_COMMAND='RETRN_VAL=$?;logger -t LinuxCommandsWazuh -p local6.debug "User $(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" )"'
- Crea un nuevo archivo para rsyslog: /etc/rsyslog.d/bash.conf
- Configura «local6» para loguear en el archivo bash.conf:
local6.* /var/log/commands.log
.
Nota: otros números locales se pueden usar y pueden ser especificados en la opción export del paso 1 - Encuentra la línea
*.*;auth,authpriv.none -/var/log/syslog
en el archivo /etc/rsyslog.d/50-default.conf y cámbialo a:*.*;auth,authpriv.none,local6.none -/var/log/syslog
Estamos excluyendo a local6 para que no loguee avar/log/syslog
, si omitimos este paso tendremos los comandos en ambos archivos /var/log/commands.log y var/log/syslog.
Nota: este procedimiento aplica para Ubuntu 22.04 y puede variar por distro - Reinicia rsyslog:
systemctl restart rsyslog
- Configura la rotación del archivo “/var/log/commands.log” agregandolo en el archivo correspondiente de ryslog: /etc/logrotate.d/rsyslog (Ubuntu/Debian) o /etc/logrotate.d/syslog (RedHat/CentOS).
- Vuelve a ingresar al sistema Linux y ya debería estar funcionando.
En este punto ya podremos loguear todos los comando ejecutados por todos los usuarios al archivo /var/log/commands.log
Configuración en Wazuh:
Ahora tenemos que especificar al agente de Wazuh que lea ese archivo, la mejor manera es desde la configuración de grupos, creamos un grupo llamado linux-ubuntu y agregamos lo siguiente:
<agent_config>
<localfile>
<location>/var/log/commands.log</location>
<log_format>syslog</log_format>
</localfile>
</agent_config>
Ahora tenemos que crear decoders y reglas en Wazuh que reconozcan todos los eventos, agregamos en el paso uno LinuxCommandsWazuh lo que hará este proceso más fácil.
Decoders:
<decoder name="Linux-commands">
<program_name>^LinuxCommandsWazuh</program_name>
</decoder>
<decoder name="Linux-commands1">
<parent>Linux-commands</parent>
<regex>User (\w+) [\d+]: (\.+)</regex>
<order>User, Command</order>
</decoder>
Regla:
<group name=”Linux-commands,”>
<rule id="100002" level="3">
<program_name>LinuxCommandsWazuh</program_name>
<description>Command: “$(Command)” executed by $(User) in $(hostname)</description>
<group>syslog, local</group>
</rule>
</group>