"kernel.*" syslog 스푸핑은 어떻게 방지됩니까?

"kernel.*" syslog 스푸핑은 어떻게 방지됩니까?

kernel.emerg프로덕션 환경 중 하나에서 syslog-ng가 쓰레기를 기록하고 그 뒤에 빈 줄이 나오는 인스턴스를 발견했습니다 . 그 중 하나의 예:

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다른 소스 로부터 메시지를 얻었는지 여부를 구별하는 것이라고 말하고 싶습니다 .

  • 배포판은 RHEL5.5입니다. 커널 버전은 2.6.18-194.8.1.el5. 이것들은 아직 제가 통제할 수 있는 요소가 아닙니다. 나를 꾸짖었다고 생각해주세요.
  • syslog 데몬은 회사에서 만든 syslog-ng3.1.4 패키지입니다(32비트이며 64비트 커널에서 실행되지만 이것이 관련이 있다고는 예상하지 않습니다).
  • 커널 3.5 의 변경으로 인해 이와 같은 출력 오류가 발생할 수 있다고 제안하는 Google을 통해 찾은 메일링 리스트 게시물이 있지만 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: "));
};

답변1

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), 커널 기능(적어도 기본적으로 정의된 대로)은 userland에서 쓸 수 없는 /proc/kmsg에서 직접 읽습니다.

(이것은 메모리에서 나온 것이지만 RHEL 5.5에는 기호-주소 출력을 위해 klogd나 ksymoops가 필요하지 않다고 확신합니다. 이에 대한 문서를 확인하세요..)

메시지 앞에 리터럴 문자열 "kernel: "을 추가하는 일부 악성 프로세스에 대해 걱정된다면(위의 내 설명 참조) 수신된 메시지 시작 부분에서 문자열 "kernel: "을 제거하는 필터를 언제든지 추가할 수 있습니다. 확실히하다. 또는 /proc/kmsg를 별도의 대상이 있는 별도의 소스로 정의하세요.

편집: 해당 섹션을 자세히 살펴보면 다음과 같습니다.

"메모

메시지에 적절한 syslog 헤더가 없으면 syslog-ng는 파일에서 받은 메시지를 kern 기능에서 보낸 것으로 처리합니다. 필요한 경우 소스 정의에서 기본 기능 및 기본 우선 순위 옵션을 사용하여 다른 기능을 할당하세요."

관련 정보