При текущем режиме интерпретации аргументов записей типа EXECVE в ряде случаев теряется информация. # auditctl -a always,exit -F arch=b64 -F uid=500 -S execve Заходим под пользователем (uid=500) и даём хитрую команду: $ ls abc "$(printf '\\037+\037')" Затем смотрим, что получилось в аудите: # grep 'a0="ls"' /var/log/audit/audit.log type=EXECVE msg=audit(1661517719.472:454): argc=4 a0="ls" a1="--color=auto" a2="abc" a3=5C3033372B1F В a3 коды символов, которые можно раскодировать в исходную строку. Та же самая запись в базе выглядит так: Row 1: ────── record_time: 2022-08-26 12:41:59 record_serial: 454 type: EXECVE uid_IntValue: ᴺᵁᴸᴸ arg_a_Value: ['ls','--color=auto','abc','\\037+\\037'] Как видно, аргумент уже раскодирован. Но эту строку нельзя интерпретировать так, чтобы только одна из кодовых последовательностей дала символ с кодом 037, а вторая осталась бы в виде цифр, поскольку обе последовательности теперь идентичны. P.S. Я понимаю, что пример экзотический. Однако, информация действительно теряется.
P.P.S. В libauparse есть режим AUPARSE_ESC_SHELL, который позволяет избежать указанной ошибки. Но не знаю, можно ли включить его для режима плагина.
Там всё исправлено уже. Изаиняюсь, что не закрыл сразу. 20221102.1.1-alt1