피드로 돌아가기
Dev.toSecurity
원문 읽기
Docker와 QEMU를 활용한 레거시 커널 디버깅 환경 구축
Building a comfortable workflow for debugging an old version of the Linux kernel
AI 요약
Context
최신 컴파일러(GCC 13+) 사용 시 C 표준 및 보안 속성 변경으로 인한 레거시 커널 빌드 오류 발생. 구버전 커널 소스와 호환되는 특정 툴체인 및 라이브러리 환경을 독립적으로 격리하여 구성할 필요성 대두.
Technical Solution
- 커널 버전별 Ubuntu LTS 이미지 기반 Docker 컨테이너를 사용하여 GCC 및 LD 버전 일치화
- Dockerfile을 통한 build-essential, bison, flex 등 필수 빌드 의존성 패키지 정적 정의
- git clone --depth 1 옵션을 통한 전체 히스토리 제외 특정 태그 기반의 소스 코드 경량 수집
- BusyBox 기반의 최소화된 initramfs.cpio.gz를 생성하여 런타임 메모리 및 부팅 속도 최적화
- QEMU-system-x86_64의 -s -S 옵션을 통한 GDB 연결 및 커널 부팅 전 제어권 확보
- KASLR 비활성화(nokaslr) 및 loglevel=7 설정을 통한 커널 패닉 및 디버깅 메시지 가시성 확보
실천 포인트
- 타겟 커널 버전과 매칭되는 Ubuntu LTS 버전의 GCC/LD 툴체인 맵 확인 - Docker를 활용해 호스트 환경 오염 없이 컴파일러 버전 격리 - initramfs에 BusyBox를 통합하여 가벼운 런타임 환경 구축 - QEMU 부팅 옵션에서 nokaslr 설정을 통한 메모리 주소 고정 및 분석 효율화