Системные вызовы Unix
Основные системные вызовы для обнаружения атак
Системные вызовы (syscalls) — это интерфейс между пользовательскими программами и ядром операционной системы. Они позволяют программам запрашивать услуги ядра, такие как работа с файлами, управление процессами, взаимодействие с сетью и т.д. Анализ системных вызовов является важным инструментом для обнаружения подозрительной активности, так как многие атаки на уровне ОС используют их для выполнения вредоносных действий.
execve/execveat
execve/execveat
Системный вызов execve
отвечает за выполнение новой программы. Он загружает в процесс другую программу и передает ей безвозвратное управление.
execveat
аналогично execve
, но с дополнительной возможностью указывать файловый дескриптор (dirfd
) для относительных путей. Это позволяет выполнять программы относительно каталога, на который ссылается dirfd
, а не относительно текущего рабочего каталога вызывающего процесса.
Что обнаруживает:
Выполнение любых команд из RedTeam Cheat Sheets, включая команды разведки, скачивания и запуска подозриетльных файлов.
Использование GTFObins.
Запуск процессов из нестандартных директорий (например,
/tmp/)
Подозрительная последовательность запуска процессов. По умолчанию
execve
пишет только PID родительского процесса, поэтому надо коррелировать два события запуска процессов, чтобы обнаружить подозрительные последовательности:Запуск процессов через GTFObins
Потенциальная эксплуатация RCE
fork
/ clone
fork
/ clone
Создает новый процесс (потомок) как копию текущего процесса.
open/openat
open/openat
Открывает файл для чтения, записи или выполнения. Системный вызов openat
аналогичен open
, но он позволяет указывать файловый дескриптор директории (dirfd
), относительно которой будет открыт файл.
Значение a1
в логах auditd
представляет собой набор флагов, которые были использованы при открытии файла.
Эти флаги определяются константами могут включать:
O_RDONLY
(0x0000): Открытие файла только для чтения.O_WRONLY
(0x0001): Открытие файла только для записи.O_RDWR
(0x0002): Открытие файла для чтения и записи.O_CREAT
(0x0040): Создание файла, если он не существует.O_TRUNC
(0x0200): Обрезка файла до нулевой длины при открытии для записи.
Чтобы определить режим открытия файла по значению a1
, необходимо расшифровать его как битовый флаг. Например, если a1
равно 0x0002
, это означает, что файл был открыт для чтения и записи (O_RDWR
).
Примеры значений a1
:
a1 = 0x0000
(0): Файл открыт только для чтения (O_RDONLY
).a1 = 0x0001
(1): Файл открыт только для записи (O_WRONLY
).a1 = 0x0002
(2): Файл открыт для чтения и записи (O_RDWR
).a1 = 0x0041
(65): Файл открыт для записи и создания (O_WRONLY | O_CREAT
).
Что обнаруживает:
Чтение конфиденциальных файлов (например,
/etc/shadow
) - разведка.
Запись данных в системные файлы: cronjob, timers, daemons, ключей SSH и всего, что может использоваться дял закрепления в системе.
Изменение конфигураций служб логирования или безопасности (
apparmor
)
socket/connect/accept
socket/connect/accept
Системный вызов socket
отвечает за создание нового сокета, который является конечной точкой для сетевого соединения. Он позволяет программам общаться друг с другом через сеть.
Системный вызов connect
устанавливает соединение между сокетом и удаленным адресом.
Системный вызов accept
используется на стороне сервера для принятия входящих соединений от клиентов.
Что обнаруживает:
Сетевые соединения из подозрительный каталогов (
/tmp/
, пользовательские домашние директории).Bind и Reverse соединений на управляющие сервера.
Потенциальные RCE (принятие сететвого соединения веб-демоном и последующий запуск дочернего процесса).
Сканирование портов.
symlink
symlink
Создает символическую ссылку (symlink).
Auditd может отслеживать вызовы symlink
и записывать, кто и когда создал символическую ссылку.
Auditd может отслеживать вызовы open
, openat
и другие, но он не различает, был ли доступ к файлу напрямую или через symlink.
Если программа использует symlink для доступа к файлу, auditd зафиксирует это как обычный доступ к файлу, но не укажет, что доступ был через symlink. Что позволяет избежать обнаружения.
Что обнаруживает:
Создание symlink для обхода проверок безопасности.
Перенаправление доступа к файлам - подозрительные имена ссылок (например, указывающие на
/etc/passwd
).
chmod
/ chown
chmod
/ chown
Изменяет права доступа или владельца файла.
Что обнаруживает:
Повышение привилегий через изменение прав на системные файлы.
Скрытие вредоносных файлов (например, установка атрибута "скрытый").
Частые вызовы
chmod
с подозрительными параметрами (например,777
).
kill
kill
Отправляет сигнал процессу (например, для завершения процесса).
Что обнаруживает::
Завершение процессов безопасности (например, антивирусов или IDS).
Скрытие активности через завершение процессов-логгеров.
setuid
/ setgid
setuid
/ setgid
Изменяет идентификатор пользователя или группы процесса.
Если бит
setuid
установлен на исполняемом файле, то при запуске этого файла процесс выполняется с правами владельца файла, а не пользователя, который его запустил.Пример: Файл
/usr/bin/passwd
имеет битsetuid
, чтобы обычные пользователи могли изменять свой пароль в/etc/shadow
, который доступен только root.Аналогично, если бит
setgid
установлен на исполняемом файле, процесс выполняется с правами группы, владеющей файлом.В файловой системе это выглдяит так:
Повышение привилегий через setuid и setgid — это классический метод, используемый злоумышленниками для получения более высоких прав в системе, чем те, которые у них есть изначально.
Злоумышленник ищет файлы с установленными битами
setuid
/setgid
:Злоумышленник анализирует найденные файлы на наличие уязвимостей, таких как небезопасное использование системных вызовов (например,
system
,exec
).Если уязвимость найдена, злоумышленник использует её для выполнения произвольного кода с правами владельца файла (например, root).
Что обнаруживает::
Повышение привилегий через выполнение программ с правами root.
Использование уязвимостей в SUID/SGID-файлах.
capset
capset
Устанавливает capabilities (возможности) для процесса. Хорошей практикой считается вместо setuid использовать Linux capabilities, чтобы предоставить процессам только необходимые привилегии.=
Что обнаруживает:
Повышение привилегий через манипуляцию с capabilities.
setxattr
setxattr
Устанавливает расширенные атрибуты файла (например, метаданные).
Что обнаруживает:
Сокрытие данных в расширенных атрибутах.
Установка подозрительных атрибутов.
unlink/rmdir
unlink/rmdir
Удаляет файл или директорию из файловой системы.
Что обнаруживает:
Удаление логов или других файлов для сокрытия следов.
Удаление системных файлов для нарушения работы ОС.
Заключение
Анализ системных вызовов позволяет обнаруживать аномальное поведение процессов, которое может указывать на атаки. Для этого используются инструменты вроде auditd, strace, sysdig или eBPF. Важно настраивать мониторинг вызовов, которые связаны с критическими операциями (например, выполнение кода, работа с файлами и сетью), и анализировать их контекст.
Last updated