Puedes utilizar Workload Protection para identificar si en tus sistemas informáticos se están ejecutando o se ejecutan procesos no autorizadas o anómalas.

Por ejemplo, puedes crear una lista de procesos permitidos y buscar procesos que se ejecuten en hosts y contenedores fuera de la lista de permitidos.

En Workload Protection, puedes definir reglas personalizadas para vigilar ejecuciones de procesos en busca de actividad maliciosa en hosts o contenedores en tiempo real. Puedes definir un lista de nombres y/o argumentos de procesos que generarán una señal de seguridad que puede utilizarse para notificar a los usuarios.

Esta guía te muestra cómo consultar procesos no autorizados y anómalos utilizando listas de permisos estáticas y dinámicas como ejemplos.

Detección de procesos que no están en una lista de permitidos

Puedes crear una detección para procesos que no estén en una lista de permitidos conocida.

El siguiente es un ejemplo para un host:

exec.file.name not in [ "0anacron", "agent", "aide", "airflow", "anacron", "appstart.sh", "appstop.sh", "arping", "aws", "awslogs-nanny.sh", "basename", "bash", "blkid", "bounce", "capsh", "cat", "certwatch", "chcon", "chmod", "chown", ~"*chrony", "chronyc", ~"*chrony-dhcp", "chrony-helper", ~"*chrony-onoffline", "classification_move_archive.sh", "cleanup", "clear", "consoletype", "consul", "cp", "curl", "cut", "date", "dbus-send", "df", ~"*dhclient", "dhclient-script", "dircolors", "dirname", "dmidecode", "dnf-3", "du", "echo", "embedded_logrotate.sh", "ethtool", "file", "find", "findmnt", "flock", "gawk", "getconf", "git", "gpg", "gpg2", "gpgconf", "gpgsm", "grep", "grepconf.sh", "groupadd", "grub2-set-bootflag", "gzip", "head", "hostname", "hostnamectl", "httpd", "httpd_daily_logs_gzip.sh", "iconv", "id", "ionice", "ip", "ipcalc", "java", "java_version.sh", "jboss_66_log_rotate.sh", "ldconfig", "less", "ln", "local", "locale", "logger", "logrotate", "ls", "lsattr", "lsblk", "lscpu", "lspci", "mandb", "man-db.cron", "md5sum", "mkdir", "mktemp", "mlocate", "mon-put-instance-data.pl", "more", "moveFilesFromSourceToTarget.sh", "mv", ~"*netreport", "nice", "nm-cloud-setup", ~"*nm-cloud-setup.sh", "nm-dhcp-helper", "nm-dispatcher", "nohup", "on_ac_power", "oracle", "perl", "pickup", "pip", "postdrop", "printenv", "proxymap", "ps", "psql", "pyenv", ~"pyenv-*", ~"python*", "python2.7", "python3.9", "readlink", "renice", "rhn_check-2.7", "rhsmcertd-worker", "rm", "rmdir", "rpm", "rsync", "run-parts", "sa1", "sa2", "sadc", "sar", "_script.sh", "sed", ~"*sendmail", "sendmail.postfix", "setup-policy-routes", "sftp-server", "sg_inq", "sleep", "smtp", "smtpd", "snowsql", "sort", "sqlite3", "ssh", "sshd", "ssm-document-worker", "ssm-session-worker", "stat", "su", "sudo", "systemctl", "systemd", "systemd-coredump", ~"*systemd-environment-d-generator", "systemd-hostnamed", "systemd-networkd-wait-online", "systemd-tmpfiles", "systemd-tty-ask-password-agent", "systemd-user-runtime-dir", "systemd-userwork", "systemd-xdg-autostart-generator", "tail", "tar", "time", "tlsmgr", "touch", "tput", "tr", "trivial-rewrite", "tty", "udevadm", "uname", "unbound-anchor", "unix_chkpwd", "unzip_rename_files.sh", "updatedb", "updater", "urlgrabber-ext-down", "useradd", "usermod", "vault", "vi", "wc", "which", "wkhtmltoimage", "xargs", "yum", "ping", "get_latest_version.sh", ~"rbenv*", "uniq", "diff", "ruby", "get_hosts_for_app_component.sh", "update_health_status.rb", "check.pl", "check_all_pool_db_version.rb", ~"gitaly-git-v*", ~"gitlab-*", "upload_host_info.rb", "sshpass", ~"splunk*", "killall5", "php", "run", "env", "chpst", ~"jenkins*" ]

El siguiente es un ejemplo para un contenedor:

exec.file.name not in ["vault"] && container.id == "ca5534a51dd04bbcebe9b23ba05f389466cf0c190f1f8f182d7eea92a9671d00"

El id de contenedor de este ejemplo genera eventos para ese contenedor solamente.

Si deseas generar un evento para cualquier contenedor que ejecute un proceso que no sea vault, la expresión sería:

exec.file.name not in ["vault"] && container.id == ""

Detección de anomalías dinámica

La detección de anomalías dinámica sólo es compatible con los contenedores.

Si no deseas crear una lista de permitidos al consultar procesos, puedes crear una regla personalizada para consultar los eventos que se desvían de forma dinámica.

La consulta de la regla personalizada es @agent.rule_id:anomaly_detection.

Si deseas consultar anomalías en una imagen de contenedor concreta, puedes utilizar la etiqueta image_name. Por ejemplo, @agent.rule_id:anomaly_detection image_name:IMAGE_NAME.

consulta de anomalías en una imagen de contenedor concreta

Referencias adicionales

Más enlaces, artículos y documentación útiles: