
Лучший набор правил Linux Auditd с 14 956 правилами, сопоставленными с MITRE ATT&CK, ролью развёртывания Ansible и инструментами линтинга/тестирования для мониторинга безопасности и аудита соответствия.
Этот репозиторий содержит исчерпывающие лучшие практики для настройки и развёртывания Linux Audit Daemon (Auditd), включая обширный набор правил аудита, ориентированных на безопасность, роль Ansible для автоматизированного развёртывания и инструменты, которые тестируют правила на реальных ядрах.
Изменения в наборе правил, роли и тестах перечислены в CHANGELOG.md.
Auditd — это мощная система аудита Linux, обеспечивающая комплексный мониторинг и журналирование системы. Она предназначена для отслеживания событий, значимых для безопасности, и необходима для:
Наши комплексные правила аудита (/ndaal/audit_best_practices.rules или /dataset/audit_best_practices.rules) разработаны для соответствия различным стандартам безопасности и лучшим практикам, включая:
| Файл | Содержимое |
|---|---|
dataset/audit_best_practices.rules | Основной набор правил: 14 956 активных правил с 903 ключами, записанных в виде пар arch=b32/arch=b64. Именно этот файл загружает роль Ansible. |
dataset/audit_best_practices_high_volume.rules | Дополнительный файл с нефильтрованной коллекцией: каждый execve несистемного пользователя, kill/tkill/tgkill и исходящий connect. Каждое правило в нём закомментировано, поэтому по умолчанию файл отключён. Его заголовок объясняет, как включать по одному блоку за раз. |
ndaal/ | Побайтово идентичные копии обоих файлов. |
*.rules.sha-256 | Сопутствующие файлы SHA-256 в формате sha256sum. Роль Ansible проверяет каждую загрузку по ним. После редактирования файла правил запустите tools/update_rules_checksums.sh, чтобы перегенерировать их. |
tools/key-decisions.tsv | Одно решение на каждую пару коллизий ключей, применяется tools/resolve_key_collisions.py. |
Правило, ошибочность которого была доказана измерением, закомментировано с датированной заметкой, указывающей причину. Ничего не удаляется, поэтому файл сохраняет историю каждого решения.
Ключ, начинающийся с идентификатора техники, следует за MITRE ATT&CK Enterprise 19.2. ATT&CK v19 отозвал шесть идентификаторов, которые использовал файл. 2026-09-27 их ключи были переименованы в преемников, которые MITRE указывает для них. Измените каждый запрос SIEM и оповещение, использующие старый ключ:
| Старый ключ | Новый ключ |
|---|---|
T1562.001_Impair_Defenses_Disable_or_Modify_Tools | T1685_Disable_or_Modify_Tools |
T1562.004_Impair_Defenses_Disable_or_Modify_System_Firewall | T1686_Disable_or_Modify_System_Firewall |
T1070.002_Indicator_Removal_Clear_Linux_or_Mac_System_Logs | T1685.006_Disable_or_Modify_Tools_Clear_Linux_or_Mac_System_Logs |
T1107_File_Deletion | T1070.004_Indicator_Removal_File_Deletion |
T1169_Sudo | T1548.003_Abuse_Elevation_Control_Mechanism_Sudo_and_Sudo_Caching |
T1079_Multilayer_Encryption | T1573_Encrypted_Channel |
Наблюдение за /var/log/audit/ несёт T1685.004_Disable_or_Modify_Tools_Disable_or_Modify_Linux_Audit_System_Log, подтехнику v19 для самого журнала аудита, вместо T1685.006. Датированные заметки, написанные до переименования, и закомментированные правила, которые они объясняют, сохраняют старые имена.
Также 2026-09-27 были исправлены ключи, называвшие неверную технику. Измените запросы SIEM и оповещения для этих правил тоже:
| Правило | Старый ключ | Новый ключ |
|---|---|---|
Записи и изменения атрибутов на /etc/passwd (новая пара; чтения сохраняют T1087) | T1087_Account_Discovery | T1098_Account_Manipulation |
Записи и изменения атрибутов на /etc/shadow | T1087_Account_Discovery | T1098_Account_Manipulation |
Человек, читающий /etc/shadow | T1087_Account_Discovery | T1003.008_OS_Credential_Dumping_etc_passwd_and_etc_shadow |
/etc/ssh/sshd_config | T1021_Remote_Services | T1021.004_Remote_Services_SSH |
/root/.ssh/authorized_keys | T1021_Remote_Services | T1098.004_Account_Manipulation_SSH_Authorized_Keys |
/etc/systemd/system/ | T1053.006_Scheduled_Task_Systemd_Timers | T1543.002_Create_or_Modify_System_Process_Systemd_Service |
date | T1083_File_and_Directory_Discovery | T1124_System_Time_Discovery |
| Интерпретаторы Python (pip, pipx, conda и npm сохраняют T1072) | T1072_Software_Deployment_Tools | T1059.006_Command_and_Scripting_Interpreter_Python |
| mysql и psql, запущенные человеком | T1213_002_database_access | T1213.006_Data_from_Information_Repositories_Databases |
Записи и изменения атрибутов на /etc/group | T1087_Account_Discovery | T1098_Account_Manipulation |
Записи и изменения атрибутов на /etc/gshadow (новая пара; чтения сохраняют T1087) | T1087_Account_Discovery | T1098_Account_Manipulation |
/usr/lib/systemd/system/ (/run/systemd/transient/ сохраняет T1053.006) | T1053.006_Scheduled_Task_Systemd_Timers | T1543.002_Create_or_Modify_System_Process_Systemd_Service |
/home/vagrant/.ssh/authorized_keys | T1021_Remote_Services | T1098.004_Account_Manipulation_SSH_Authorized_Keys |
Записи в /var/log/tomcat10/, 64-битные (опечатка) | tomcattomcat | tomcat |
Записи в /etc/mandiant/, 32-битные (опечатка) | mmandiant_config | mandiant_config |
unix_chkpwd, проверка пароля sudo и блокировщиков экрана, читает /etc/shadow с audit ID человека, поэтому каждая проверка пароля теперь приходит как T1003.008. Фильтруйте exe=/usr/sbin/unix_chkpwd в правиле SIEM для дампа учётных данных. Остальные 34 правила с ключом в написании T1234_567 никогда не помечали запись, потому что более раннее правило соответствует тем же событиям. Они закомментированы с заметкой, называющей это правило.
32-битные вызовы kexec_load, capset, perf_event_open и semtimedop_time64 теперь несут KEXEC, capability_change_ebpf, perf_event_ebpf и T1559_Inter-Process_Communication вместо 32bit_abi. Наблюдение elasticsearch-data за всем каталогом данных отключено на обоих ABI: его предупреждение делает его опциональным. На 64-битных хостах ключи elasticsearch-nodes и elasticsearch-data-deletion, которые оно до тех пор забирало, появляются снова.
Ядро прикрепляет ключ самого раннего загруженного правила, которое соответствует событию. Это справедливо как для правил системных вызовов, так и для наблюдений за путями (kernel/auditfilter.c, kernel/auditsc.c). Поэтому широкое правило, размещённое рано, забирает ключ у каждого конкретного правила после него. До 2026-09-20 нефильтрованное правило procmon для execve стояло на строке 1 575, и 368 ключей никогда не появлялись в записи.
Теперь правила-ловушки закрывают файл, в таком порядке:
user_exec: каждый execve сессии входа (auid>=500, auid!=-1), который не был заявлен ни наблюдением, ни правилом повышения привилегийprocmon: каждый оставшийся execve (демоны, cron, загрузка)setres*/setfs*, stime и 32-битные правила umountnetwork_changes (каждый socket и setsockopt) и elasticsearch-bind-success (каждый успешный bind)32bit_abi: -S all для arch=b32, всегда последнее правило -a в файле