Linux 로그 경로 정리 · 24/50 · Part 3. Ubuntu / Debian 로그 경로
선행 학습 → 23. /var/log/syslog 분석
이번 글 → /var/log/kern.log 분석
이어서 → 25. /var/log/daemon.log 분석
커널 로그는 사용자 공간 프로그램이 숨기기 어려운 시스템 최하단의 기록입니다. 루트킷의 커널 모듈 로딩, 익스플로잇 시도로 인한 세그폴트, 방화벽 차단, 자원 고갈(채굴) 같은 흔적이 여기 남습니다.
핵심 요약
- 소스는 하나(커널 링 버퍼), 보는 창은 셋:
dmesg·journalctl -k·/var/log/kern.log- Ubuntu는
kern.*→kern.log(+syslog중복), RHEL은messages에 포함- 보안 키워드:
module,taint,segfault,Out of memory,[UFW BLOCK],audit:
| 창 | 범위 | 특징 |
|---|---|---|
dmesg | 현재 부팅의 링 버퍼 | 크기 제한으로 오래된 메시지 밀려남, 일반 사용자 제한(kernel.dmesg_restrict) |
journalctl -k [-b -1] | 저널에 저장된 커널 메시지 | 영구 저널이면 과거 부팅도 조회 |
/var/log/kern.log | rsyslog가 기록한 파일 | 순환·압축, grep 용이 |
| 커널 이벤트 | 예시 문자열 | 보안 의미 |
|---|---|---|
| 모듈 로딩 | loading out-of-tree module taints kernel | 서명 없는/외부 모듈 → 루트킷 가능성 |
| 세그폴트 | segfault at 0 ip ... error 4 in libc... | 익스플로잇 실패, 불안정한 악성코드 |
| OOM | Out of memory: Killed process 1234 (xmrig) | 채굴 등 자원 남용 |
| 방화벽 | [UFW BLOCK] ... SRC= DST= DPT= | 스캐닝, 차단된 연결 |
| 감사 | audit: type=1400 ... apparmor="DENIED" | AppArmor/SELinux 차단 |

Kernel (printk) ──▶ ring buffer (/dev/kmsg)
├──▶ dmesg (직접 읽기)
└──▶ journald (_TRANSPORT=kernel)
├──▶ journalctl -k
└──▶ rsyslog kern.* ──▶ /var/log/kern.log (Ubuntu)
└─▶ /var/log/messages (RHEL, *.info 규칙)
| 배포판 | 파일 | 명령 |
|---|---|---|
| Ubuntu / Debian | /var/log/kern.log, kern.log.1, kern.log.N.gz | journalctl -k |
| Rocky / RHEL | /var/log/messages 안의 kernel: 태그 | journalctl -k |
| 공통 | — | dmesg -T (사람이 읽는 시간, 정확도 주의) |
# 커널 로그 창 3개 비교
dmesg -T | tail -5
journalctl -k -b --no-pager | tail -5
tail -5 /var/log/kern.log 2>/dev/null || grep 'kernel:' /var/log/messages | tail -5
# 커널 오염(taint) 상태: 0 이면 깨끗
cat /proc/sys/kernel/tainted
# 모듈 로딩 흔적과 현재 모듈 대조
journalctl -k --since "-7d" | grep -Ei 'module|taint'
lsmod | head -20
# 세그폴트 / OOM
journalctl -k --since "-7d" | grep -Ei 'segfault|Out of memory|Killed process'
# 방화벽 (UFW 로깅이 켜져 있을 때)
grep -h 'UFW BLOCK' /var/log/kern.log* 2>/dev/null | grep -oE 'SRC=[0-9.]+ DST=[0-9.]+.*DPT=[0-9]+' | awk '{print $1,$NF}' | sort | uniq -c | sort -rn | head

위 이미지는 Ubuntu 24.04 실습 환경의 실제 커널 메시지 조회 결과입니다.
아래는 판단 설명용 예시 로그입니다.
[예시 로그]
2026-09-20T02:19:07.100200+09:00 web02 kernel: syshelper: loading out-of-tree module taints kernel.
2026-09-20T02:19:07.100300+09:00 web02 kernel: syshelper: module verification failed: signature and/or required key missing - tainting kernel
2026-09-20T03:40:12.882100+09:00 web02 kernel: Out of memory: Killed process 6120 (kworkerd) total-vm:2458100kB
| 로그 | 필드 | 해석 |
|---|---|---|
| out-of-tree module | 모듈명 syshelper | 배포판 커널에 포함되지 않은 모듈 |
| verification failed | 서명 없음 | Secure Boot 환경이 아니면 로딩됨 → 루트킷 의심 |
| OOM Killed | 프로세스명 kworkerd | 커널 스레드 이름(kworker) 흉내 — 사용자 공간 프로세스라면 위장 |
| 정상 | 의심 |
|---|---|
| DKMS 드라이버(VirtualBox, NVIDIA)로 인한 taint | 알 수 없는 모듈명, 로그인 세션 직후 로딩 |
| 드문 세그폴트 (앱 버그) | 같은 서비스의 반복 세그폴트 (익스플로잇 시도) |
| 메모리 부족 시 OOM | 이름 위장 프로세스의 반복 OOM |
| 방화벽 차단 산발 | 한 IP의 순차 포트 차단 |
주의: 루트킷이 로드되면 이후 커널 로그 자체를 숨길 수 있습니다. 로딩 시점의 로그를 중앙 수집본에서 확인하는 것이 중요합니다.
-a always,exit -F arch=b64 -S init_module,finit_module -k modules 로 주체까지 기록.[ ] dmesg / journalctl -k / kern.log 차이 설명
[ ] /proc/sys/kernel/tainted 확인
[ ] 모듈 로딩 흔적과 lsmod 대조
[ ] 세그폴트 / OOM 검색
[ ] UFW 차단 출발지 집계
[ ] 모듈 로딩 audit 룰 이해
kern.log, RHEL은 messages 에서 커널 메시지를 찾는다.| 구분 | 글 |
|---|---|
| ◀ 이전 글 | 23. /var/log/syslog 분석 |
| ▶ 다음 글 | 25. /var/log/daemon.log 분석 |
| 시리즈 | Linux 로그 경로 정리 전체 보기 |
| 선행 시리즈 | 리눅스 시스템 기초 · 파일 · 권한 · 사용자 관리 · 서비스 · 프로세스 관리 · Linux 시스템 보안 기초 |