osquery не проверяет kill syscall в правилах аудита - PullRequest
0 голосов
/ 11 апреля 2020

Я использую 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.

...