Назад | Перейти на главную страницу

Как предотвратить спуфинг системного журнала «kernel. *»?

Я нахожу случаи, когда syslog-ng записывает мусор, за которым следует пустой kernel.emerg линия в одной из наших производственных сред. Пример одного:

Dec 21 00:14:56 someserver [syslog-ng.err] Error processing log message: <Q▒b
+\c 21 00:14:56 someserver [syslog-ng.err] Error processing log message: <;E0
Dec 21 00:14:56 someserver [syslog-ng.err] Error processing log message: <▒"▒l
Dec 21 00:14:57 someserver [syslog-ng.err] Error processing log message: <▒▒▒▒e▒F
Dec 21 00:14:57 someserver [syslog-ng.err] Error processing log message: <▒▒
Dec 21 00:14:58 someserver [kernel.emerg]

В kernel.emerg линия меня особенно беспокоит. В соответствии с man 3 syslog:

       LOG_KERN
              kernel messages (these can’t be generated from user processes)

Похоже, это наводит на мысль, что средство ядра нельзя подделать. Я вижу, где сами системные вызовы могут предотвратить такую ​​подделку, но правильно ли я полагаю, что нет ничего, что могло бы остановить процесс от записи прямо к /dev/log и подделка объекта kernel? Я хочу сказать, что единственное, что действительно могло бы остановить такой спуфинг, - это демон syslog, который различает, получил ли он сообщение от /proc/kmsg по сравнению с другими источниками.

Сообщения не приходят из сети. Это единственный определенный источник:

source s_syslog {
# message generated by Syslog-NG
internal();
# standard Linux log source (this is the default place for the syslog()
# function to send logs to)
unix-stream("/dev/log");
# messages from the kernel
file("/proc/kmsg" program_override("kernel: "));
};

Согласно руководству администратора syslog-ng ( http://www.balabit.com/sites/default/files/documents/syslog-ng-ose-3.3-guides/en/syslog-ng-ose-v3.3-guide-admin-en/html-single/ index.html # kernel-messages ), средство ядра (по крайней мере, как определено по умолчанию) читает непосредственно из / proc / kmsg, что не может быть записано из пользовательского пространства.

(Это из памяти, но я почти уверен, что RHEL 5.5 не нуждается в klogd или даже ksymoops для вывода символа в адрес; тем не менее, проверьте свою документацию на это ..)

Если вас беспокоит (см. Мой комментарий выше), что какой-то мошеннический процесс добавляет буквальную строку "kernel:" к своему сообщению, вы всегда можете добавить фильтр, который удалит строку "kernel:" в начале любого сообщения, полученного на быть уверенным. Либо определите / proc / kmsg как отдельный источник с отдельным местом назначения.

РЕДАКТИРОВАТЬ: при просмотре этого раздела:

"Заметка

Если сообщение не имеет надлежащего заголовка системного журнала, syslog-ng обрабатывает сообщения, полученные из файлов, как отправленные средством kern. Используйте опции default-feature и default-priority в определении источника, чтобы при необходимости назначить другое средство ».