리눅스 Kernel Panic 크래시 덤프 분석: kdump를 이용한 커널 모드 널 포인터 참조 버그 해부
백엔드 시스템이 며칠에 한 번씩 아무런 어플리케이션 로그도 남기지 않은 채 돌연사(Reboot)하는 기괴한 현상을 마주했습니다. dmesg에도 남지 않는 죽음의 원인을 캐기 위해, 운영체제 자체의 부검 시스템인 kdump(Kernel Dump) 서비스를 전격 활성화시켰습니다.
kdump의 원리는 놀랍습니다. 메인 커널이 치명적인 버그(Panic)를 감지하여 죽음을 직감하는 찰나의 순간, 미리 메인 브레인의 격리된 메모리 구석에 잠들어 있던 또 다른 '구급차 커널(Crash Kernel)'을 긴급 부팅시킵니다. 이 구급차 커널은 쓰러진 메인 커널의 램(RAM) 메모리를 건드리지 않고 그대로 파일(vmcore)로 덤프(Dump)를 떠서 하드디스크에 저장한 뒤 서버를 재부팅 시킵니다. 즉, 기계가 죽기 직전 0.1초의 메모리 스냅샷을 박제해 내는 것입니다.
재부팅 후 crash 유틸리티 도구로 이 시체(vmcore)를 열어부 보았습니다. 수십 만 줄의 커널 스택 메모리 덤프를 파고들어간 끝에, 써드파티 보안 모듈의 특정 네트워크 훅(Hook) 함수가 해제된 메모리 영역을 다시 접근하려는 널 포인터 역참조(Null Pointer Dereference) 버그를 범하고 있음을 커널 어셈블리어 레벨에서 정확히 지목해 냈습니다. 유저 스페이스를 벗어나 운영체제 그 자체의 피와 뼈를 직접 메스로 가르고 들어가 원인을 적발해 낸 커널 해킹의 카타르시스는 압도적이었습니다.
Related Posts
JVM JIT 컴파일러의 극단적 런타임 최적화: 탈출 분석(Escape Analysis)과 스칼라 치환의 마법
정적 컴파일 언어를 압도하는 자바 머신의 동적 스크립트 프로파일링 및 객체 힙 버림 최적화 기법.
리눅스 eBPF와 XDP를 활용한 커널 바이패스(Kernel Bypass) 초저지연 패킷 필터링 아키텍처
운영체제 네트워크 스택의 병목을 우회하여 디바이스 드라이버 레벨에서 직접 샌드박스 코드를 주입하는 eBPF의 혁명.
스플릿 브레인(Split-Brain) 붕괴를 막는 분산 락(Distributed Lock) 시스템과 펜싱(Fencing) 토큰의 도입
Zookeeper, Redis Redlock의 시계 위임 맹점을 찌르는 가비지 컬렉션 시간 정지(Stop-the-World) 현상 롤백 설계.