Как стать автором
Обновить

Аудит системных вызовов в Linux

Время на прочтение3 мин
Количество просмотров6.7K

Теория


Для работы auditd, необходимо что бы ядро было собрано с опциями AUDIT и AUDITSYSCALL
$ grep AUDIT /boot/config-`uname -r`
# CONFIG_AUDIT_ARCH is not set
CONFIG_AUDIT=y
CONFIG_AUDITSYSCALL=y
CONFIG_AUDIT_TREE=y
CONFIG_AUDIT_GENERIC=y

AUDIT отвечает за общую подсистему аудита в ядре Linux, которую также использует SELinux. AUDITSYSCALL отвечает за инфраструктуру аудита системных вызовов, которая также используется в SELinux.
Основные особенности системы аудита в ядре Linux:
  • Минимальный оверхед, как при активированном, так и при отключенном аудите
  • Фильтрация на уровня ядра, что бы обеспечить наименьшие издержки
  • Использование Netlink в пользовательских приложений


Установка


Установка auditd довольно просто, для Debian/Ubuntu:
$sudo apt-get install auditd
для CentOS:
#yum install audit
Домашняя страница проекта: people.redhat.com/sgrubb/audit

Настройка


Конфигурационный файл auditd /etc/audit/auditd.conf. На каждой строке может быть определена не более чем одна директива. Название директы и значение разделяет знак равно. Большинство директив отвечают за настройку логирования и не требуют изменения. Для подробного ознакомления можно почитать man auditd.conf.

Правила аудита


Правила аудита содержатся в файле /etc/audit/audit.rules.
auditctl -l просмотреть список правил и auditctl -D для удаления всех правил

Аудит доступа к файлам

Основные аргументы для правил аудита доступа к файлам:
  • -p [r|w|x|a] — фильтр по характеру доступа
  • -w path — путь до наблюдаемых файлов

Добавим правила в runtime для директории /sys
sudo auditctl -w /sys/ -p ra
Запустим skype и посмотрем результат:
sudo aureport -f
/sbin/audispd permissions should be 0750

File Report
===============================================
# date time file syscall success exe auid event
===============================================
1. 16.01.2011 22:42:04 /sys/class/video4linux/video0/dev 5 yes /usr/bin/skype -1 23
2. 16.01.2011 22:42:03 /sys/devices/system/cpu 5 yes /usr/bin/skype -1 22
3. 16.01.2011 22:42:04 /sys/class/video4linux/video0/device/modalias 5 yes /usr/bin/skype -1 24
4. 16.01.2011 22:42:04 /sys/class/dmi/id/sys_vendor 5 yes /usr/bin/skype -1 25
5. 16.01.2011 22:42:04 /sys/class/dmi/id/product_name 5 yes /usr/bin/skype -1 26
6. 16.01.2011 22:42:04 /sys/class/dmi/id/product_version 5 yes /usr/bin/skype -1 27
7. 16.01.2011 22:42:04 /sys/class/dmi/id/board_vendor 5 yes /usr/bin/skype -1 28
8. 16.01.2011 22:42:04 /sys/class/dmi/id/board_name 5 yes /usr/bin/skype -1 29
9. 16.01.2011 22:42:04 /sys/class/dmi/id/board_version 5 yes /usr/bin/skype -1 30


Аудит системных вызовов

Основные атрибуты:
  • -a list,action и -A list,action добавляет правило action в конец(-A в начало) списка list. О доступных list можно прочитать в man auditctl. actions never не генерирует событие, а always создает событие.
  • -S [Syscall name or number|all] — наблюдаемые вызовы
  • -F [n=v | n!=v | n<v | n>v | n<=v | n>=v | n&v | n&=v] всевозможные фильтры

auditctl -a exit,always -S open -F success=0 активирует аудит всех вызовов open() c кодом возврата больше меньше 0 и генерацией события во время выхода из системного вызова.
#auditctl -a exit,always -S open -F success=0
# touch /tmp/foo
# tail -1 /var/log/audit/audit.log
type=SYSCALL msg=audit(1295200915.069:14977): arch=c000003e syscall=2 success=no exit=-2 a0=7ff2f0ad4f60 a1=0 a2=7ff2f0d05010 a3=7fff56687650 items=1 ppid=1915 pid=16551 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=4294967295 comm="tail" exe="/usr/bin/tail" key=(null)

Узнать имя системного вызова по номеру можно из include/linux/unistd.h.
Теги:
Хабы:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

Публикации

Истории

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
28 – 29 сентября
Конференция E-CODE
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн