Я использую osquery для аудита системных вызовов, чтобы отслеживать активность пользователей с помощью --audit_allow_config=false
, то есть используя мои собственные правила аудита.
Правила настройки аудита выглядят так:
-a always,exit -F arch=b64 -S execve
-a always,exit -F arch=b64 -S execveat
-a always,exit -F arch=b64 -S kill
И я запускаю osquery как
osqueryd --flagfile osquery.flags --config_path osquery.conf --verbose --audit_debug=true
с содержимым файла флага
--disable_audit=false
--audit_allow_config=false
--audit_persist=true
--audit_allow_process_events=true
--events_expiry=1000
--events_max=500000
--watchdog_memory_limit=350
Наблюдение:
- При запуске вышеуказанной конфигурации не выводятся необработанные события аудита на стандартный вывод или в журналы
- При запуске вышеуказанной конфигурации без
-a always,exit -F arch=b64 -S kill
, работает как ожидалось.
Я что-то здесь упускаю?
МО для этого эксперимента должна быть в состоянии обнаружить kill <pid>
, который, я считаю, встроенная оболочка и, следовательно, не проверяется. Я могу видеть события для /bin/kill <pid>
, что понятно для меня, потому что двоичный файл явно вызывается, поэтому execve
.
PS: я не понимаю вывод strace
для kill <pid>
, он вызывает execve
и kill
так же, как /bin/kill
. Возможно, потому что strace
вызывает встроенный kill
вместо встроенного.
$ strace kill 100000
execve("/usr/bin/kill", ["kill", "100000"], [/* 44 vars */]) = 0
...
kill(100000, SIGTERM) = -1 ESRCH (No such process)
...
$ strace /bin/kill 10000
execve("/bin/kill", ["/bin/kill", "10000"], [/* 36 vars */]) = 0
...
kill(10000, SIGTERM) = -1 ESRCH (No such process)
...
Информация о версии
osqueryi --line "SELECT version, build, platform FROM os_version;"
version = CentOS Linux release 7.5.1804 (Core)
build =
platform = rhel
osqueryi --line "SELECT version from osquery_info;"
version = 4.1.1
Как Auditd ведет себя с kill
После некоторого тестирования на Audit мне удалось получить системный вызов kill в журнале аудита, хотя его немного сложно расшифровать
# auditctl -l
-a always,exit -F arch=b64 -S execve
-a always,exit -F arch=b64 -S execveat
-a always,exit -F arch=b64 -S kill -F key=kill_syscall
# ausearch -a 1322495
----
time->Sat Apr 11 14:11:14 2020
type=PROCTITLE msg=audit(1586614274.294:1322495): proctitle="-bash"
type=OBJ_PID msg=audit(1586614274.294:1322495): opid=15151 oauid=1002 ouid=0 oses=2856 ocomm="python"
type=SYSCALL msg=audit(1586614274.294:1322495): arch=c000003e syscall=62 success=yes exit=0 a0=3b2f a1=f a2=0 a3=7ffe2ffe9d60 items=0 ppid=14692 pid=14693 auid=1002 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=2856 comm="bash" exe="/usr/bin/bash" key="kill_syscall"
Это означает, что конфиг что-то напутал с osquery.