update(rules): Directory traversal monitored file read - include failed open attempts w/ new macro open_file_failed

Signed-off-by: Melissa Kilby <melissa.kilby.oss@gmail.com>
This commit is contained in:
Melissa Kilby 2022-08-21 23:44:49 -07:00 committed by poiana
parent dd49038b0d
commit a6137e9475

View File

@ -29,13 +29,20 @@
# condition: (syscall.type=read and evt.dir=> and fd.type in (file, directory)) # condition: (syscall.type=read and evt.dir=> and fd.type in (file, directory))
- macro: open_write - macro: open_write
condition: evt.type in (open,openat,openat2) and evt.is_open_write=true and fd.typechar='f' and fd.num>=0 condition: (evt.type in (open,openat,openat2) and evt.is_open_write=true and fd.typechar='f' and fd.num>=0)
- macro: open_read - macro: open_read
condition: evt.type in (open,openat,openat2) and evt.is_open_read=true and fd.typechar='f' and fd.num>=0 condition: (evt.type in (open,openat,openat2) and evt.is_open_read=true and fd.typechar='f' and fd.num>=0)
- macro: open_directory - macro: open_directory
condition: evt.type in (open,openat,openat2) and evt.is_open_read=true and fd.typechar='d' and fd.num>=0 condition: (evt.type in (open,openat,openat2) and evt.is_open_read=true and fd.typechar='d' and fd.num>=0)
# Failed file open attempts, useful to detect threat actors making mistakes
# https://man7.org/linux/man-pages/man3/errno.3.html
# evt.res=ENOENT - No such file or directory
# evt.res=EACCESS - Permission denied
- macro: open_file_failed
condition: (evt.type in (open,openat,openat2) and fd.typechar='f' and fd.num=-1 and evt.res startswith E)
- macro: never_true - macro: never_true
condition: (evt.num=0) condition: (evt.num=0)
@ -51,32 +58,32 @@
condition: (proc.name!="<NA>") condition: (proc.name!="<NA>")
- macro: rename - macro: rename
condition: evt.type in (rename, renameat, renameat2) condition: (evt.type in (rename, renameat, renameat2))
- macro: mkdir - macro: mkdir
condition: evt.type in (mkdir, mkdirat) condition: (evt.type in (mkdir, mkdirat))
- macro: remove - macro: remove
condition: evt.type in (rmdir, unlink, unlinkat) condition: (evt.type in (rmdir, unlink, unlinkat))
- macro: modify - macro: modify
condition: rename or remove condition: (rename or remove)
- macro: spawned_process - macro: spawned_process
condition: evt.type in (execve, execveat) and evt.dir=< condition: (evt.type in (execve, execveat) and evt.dir=<)
- macro: create_symlink - macro: create_symlink
condition: evt.type in (symlink, symlinkat) and evt.dir=< condition: (evt.type in (symlink, symlinkat) and evt.dir=<)
- macro: create_hardlink - macro: create_hardlink
condition: evt.type in (link, linkat) and evt.dir=< condition: (evt.type in (link, linkat) and evt.dir=<)
- macro: chmod - macro: chmod
condition: (evt.type in (chmod, fchmod, fchmodat) and evt.dir=<) condition: (evt.type in (chmod, fchmod, fchmodat) and evt.dir=<)
# File categories # File categories
- macro: bin_dir - macro: bin_dir
condition: fd.directory in (/bin, /sbin, /usr/bin, /usr/sbin) condition: (fd.directory in (/bin, /sbin, /usr/bin, /usr/sbin))
- macro: bin_dir_mkdir - macro: bin_dir_mkdir
condition: > condition: >
@ -105,7 +112,7 @@
evt.arg.newpath startswith /usr/sbin/) evt.arg.newpath startswith /usr/sbin/)
- macro: etc_dir - macro: etc_dir
condition: fd.name startswith /etc/ condition: (fd.name startswith /etc/)
# This detects writes immediately below / or any write anywhere below /root # This detects writes immediately below / or any write anywhere below /root
- macro: root_dir - macro: root_dir
@ -964,7 +971,8 @@
desc: > desc: >
Web applications can be vulnerable to directory traversal attacks that allow accessing files outside of the web app's root directory (e.g. Arbitrary File Read bugs). Web applications can be vulnerable to directory traversal attacks that allow accessing files outside of the web app's root directory (e.g. Arbitrary File Read bugs).
System directories like /etc are typically accessed via absolute paths. Access patterns outside of this (here path traversal) can be regarded as suspicious. System directories like /etc are typically accessed via absolute paths. Access patterns outside of this (here path traversal) can be regarded as suspicious.
condition: open_read and (etc_dir or user_ssh_directory or fd.name startswith /root/.ssh or fd.name contains "id_rsa") and directory_traversal and not proc.pname in (shell_binaries) This rule includes failed file open attempts.
condition: (open_read or open_file_failed) and (etc_dir or user_ssh_directory or fd.name startswith /root/.ssh or fd.name contains "id_rsa") and directory_traversal and not proc.pname in (shell_binaries)
enabled: true enabled: true
output: > output: >
Read monitored file via directory traversal (username=%user.name useruid=%user.uid user_loginuid=%user.loginuid program=%proc.name exe=%proc.exepath Read monitored file via directory traversal (username=%user.name useruid=%user.uid user_loginuid=%user.loginuid program=%proc.name exe=%proc.exepath