개발자 튜토리얼: 데비안 10 리눅스 커널 라이브 패치 적용하기-Kpatch

지원 종료(EOL)된 PHP용 php2shell 패치(CVE-2026-109618 및 CVE-2026-109619)가 출시되었습니다. 수요가 많아 평소보다 영업팀의 답변이 늦어지고 있으므로, 패치된 패키지를 가장 빠르게 확보하려면 온라인에서 Runtimes용 ELS를 구매하시기 바랍니다 (새 탭에서 열림). 패치 FAQ 읽어보기

이 블로그 글의 AI 요약으로 바로 가기

  • Perplexity를 사용하여 이 게시물을 요약해 주세요
  • Gemini로 이 게시물을 요약해 주세요

라이브 패치는 커널을 재시작하지 않고, 따라서 컴퓨터를 재부팅할 필요 없이 Linux 커널을 업데이트하는 방법입니다. 라이브 패치는 다음과 같은 이유로 심각한 Linux 커널 취약점을 지체 없이 패치하는 데 자주 사용됩니다. 라이브 패치는 운영 중단을 일으키지 않으며 유지 관리 기간이 필요하지 않습니다..

시중에는 몇 가지 라이브 패치 도구가 있으며, Debian 운영 체제 사용자는 라이브 패치를 구현하거나 커널을 조정하기 위해 kpatch를 사용하기도 합니다.

이 튜토리얼은 kpatch의 실제 데모입니다. 실행 중인 데비안 10 커널을 중지하지 않고 kpatch를 사용하여 실행 중인 커널의 동작을 변경하여 /proc/uptime (그리고 uptime 명령)의 내용을 변경하여 시스템의 보고된 가동 시간을 10년 더 늘리는 방법을 보여드리겠습니다.

kpatch는 Red Hat에서 만들었으며 Red Hat Enterprise Linux(RHEL) 및 그 파생 제품에서 작동합니다. Red Hat은 RHEL 고객을 위해 이 상용 라이브 패치 서비스를 제공합니다. TuxCare에서는 KernelCare Enterprise - 를 제공하며, 이 서비스는 RHEL뿐만 아니라 다른 모든 인기 있는 엔터프라이즈 Linux 배포판에 라이브 패치를 적용할 수 있습니다.

이 튜토리얼을 위해 kpatch를 선택했습니다. 소스 코드 를 무료로 사용할 수 있고 정기적으로 업데이트되기 때문입니다.

전제 조건

이 튜토리얼을 따르기 위한 시스템 사전 요구 사항은 다음과 같습니다:

  • x86_64/amd64 아키텍처에서 Debian Bullseye(이 데모에는 11.6이 사용됨)를 실행하는 테스트(비운영) 시스템
  • 20Gb의 디스크 여유 공간(Linux 커널 소스 코드는 디스크에서 약 909MB를 차지하며 컴파일 시 17GB로 증가)
  • 커널이 커스터마이징되지 않았으며, Debian에서 제공하는 표준 커널을 사용하고 있습니다.
  • 커널에는 라이브 패치가 내장되어 있습니다. 이 명령을 사용하면 두 개의 값이 다음과 같이 설정될 것으로 예상됩니다. y 로 설정된 config_have_livepatch 와 config_livepatch:
grep LIVEPATCH /boot/config-$(uname -r)
  • 설치된 gcc 버전이 원본 커널을 빌드하는 데 사용된 것과 일치합니다( kpatch-build 명령은 버전이 일치하지 않으면 실패합니다. 이 옵션은 다음 옵션을 사용하여 재정의할 수 있습니다. -skip-gcc-check사용은 권장하지 않습니다.)
    • 설치된 gcc 버전을 확인합니다: gcc -version
    • 현재 커널을 컴파일하는 데 사용된 gcc의 버전을 확인합니다: cat /proc/version
  1. 종속성 패키지 설치

  1. 설치 및 구성 sudo

As root:

  apt-get install sudo 

  (sudo should already be installed, but this makes sure of it)

  adduser <user> sudo
  where <user> is the username for a normal user (all subsequent commands should be done as this user)

     2. 패키지 설치

  3.sudo apt-get -y update

  4.sudo apt-get -y 업그레이드

  5.sudo apt-get -y install build-essential devscripts ccache gawk libelf-dev libssl-dev linux-source linux-image-$(uname -r)-dbg 

  1. kpatch 설치

데비안의 패키지에서 흔히 볼 수 있듯이, 현재 버전과 일반 apt를 통해 업데이트로 제공되는 버전 사이에는 지연이 있습니다. 가장 최신의 kpatch 코드를 가져와 소스에서 빌드해 보겠습니다.

git clone https://github.com/dynup/kpatch.git
cd kpatch && make && sudo make install
  1. Linux 커널 소스 코드 사본 받기

  1. (선택 사항) 작업 디렉터리를 만들어서 이동합니다.
mkdir 커널 && cd $_
  1. Linux 커널 소스 코드 추출
tar xaf /usr/src/linux-source-5.10.tar.xz

참고: 5.10은 이 글을 작성하는 시점의 Debian 11.6용 Linux 커널 버전입니다. 가장 최신 버전을 확인하여 대체해야 합니다. /usr/src에 있는 최신 버전(예: 시스템에 따라 Debian 11.7의 경우 5.10, Debian 12의 경우 6.1)을 확인해야 합니다.

  1. Linux 커널 구성 파일 만들기

  1. Linux 커널은 배포와 함께 제공된 구성 파일의 설정을 사용하여 컴파일됩니다. 복사본을 가져와서 일부 설정을 변경하여 kpatch-build 가 실행 중인 커널과 동일한 설정으로 Linux 커널을 컴파일할 수 있도록 일부 설정을 변경합니다.
  2. CD 리눅스 소스 -5.10

cp /boot/config-$(uname -r) .config

  1. kpatch를 사용하기 위해 필요한 커널 설정이 활성화되어 있는지 확인합니다. 모두 'y'를 반환해야 합니다.
  2. scripts/config -s DYNAMIC_FTRACE_WITH_REGS
  3. scripts/config -s FUNCTION_TRACER
  4. scripts/config -s HAVE_DYNAMIC_FTRACE_WITH_REGS
  5. scripts/config -s HAVE_FENTRY
  6. 스크립트/설정 -s HAVE_LIVEPATCH
  7. scripts/config -s KALLSYMS_ALL
  8. scripts/config -s KALLSYMS_ALL
  9. 스크립트/설정 -s 라이브패치
  10. 스크립트/설정 -s 모듈
  11. scripts/config -s MODULE_SIG
  12. 스크립트/설정 -s SYSFS
scripts/config -s SYSTEM_TRUSTED_KEYRING
  1. 커널 구성 항목의 값을 변경합니다.
scripts/config --set-str SYSTEM_TRUSTED_KEYS ""
  1. 소스 디렉토리를 그대로 둡니다.
cd .
  1. 패치 만들기

패치 소스 파일은 명령줄의 diff 명령이 원본과 변경된 소스 코드 파일에서 실행된 결과입니다.

'빠른 시작' 섹션에 표시된 패치 예제는 kpatch 깃허브 페이지 의 출력을 변경하면 /proc/meminfo. 다른 많은 kpatch 문서에서 이 예제를 재현하고 있기 때문에 저는 조금 더 흥미롭고 안전하면서도 다른 것을 원했습니다.

이 예제는 uptime 명령의 출력을 변경하여 서버의 가동 시간이 10년 증가한 것처럼 보이게 합니다.

  1. 아직 작업 디렉터리에 있는 파일을 복사합니다.
cp linux-source-4.19/fs/proc/uptime.c .
  1. 수정합니다. 33줄에서 변경합니다:
(서명되지 않은 긴) uptime.tv_sec,

에

(서명되지 않은 긴) uptime.tv_sec + 315576000,

파일 저장
  1. 패치 파일 만들기
diff -u linux-source-5.10/fs/proc/uptime.c ./uptime.c > uptime.patch
  1. 패치 모듈을 생성합니다. (처음 이 작업을 수행할 때는 커널 소스 코드를 컴파일해야 하므로 시간이 다소 걸립니다. 이후 빌드는 몇 분 단위로 훨씬 더 빠릅니다. 이 작업은 문제에 더 많은 (가상) CPU를 투입하면 프로세스 속도를 높이는 데 도움이 되는 작업 중 하나입니다. CPU를 사용하는 작업입니다).
kpatch-build -s linux-source-5.10 -v /usr/lib/debug/lib/modules/$(uname -r)/vmlinux uptime.patch
  1. 완료되면 Linux 로드 가능한 커널 모듈 파일(.ko) 패치를 위한
ls -l *.ko
  1. 패치 테스트

  1. 패치 모듈을 로드하기 전에 현재 가동 시간을 확인하세요.
cat /proc/uptime && uptime -p
  1. 패치 모듈 로드
sudo kpatch load livepatch-uptime.ko
  1. 가동 시간 다시 확인
cat /proc/uptime && uptime -p

가동 시간이 10년 이상 개선된 것을 확인할 수 있습니다(내부 값은 변경되지 않았으며 인쇄된 값만 변경됨).

  1. 패치 모듈 언로드
sudo kpatch unload livepatch-uptime.ko
  1. 가동 시간이 이전 값으로 돌아갔는지 확인합니다.
cat /proc/uptime && uptime -p

결론

kpatch로Linux 커널에 실시간 패치를 적용하는 것은 어렵지 않습니다. 어려운 점은 시스템을 다운시키지 않고 나중에 제공되는 다른 패치와 함께 작동할 수 있는 패치를 작성하는 것입니다. 대부분의 패치는 단순한 diff 이상으로 만들어지며 다양한 배포판에서 실행되는 여러 커널 버전에서 철저한 테스트가 필요합니다.

패치 작성자는 숙련된 C 프로그래머이자 숙련된 Linux 커널 개발자여야 합니다. 커널을 컴파일하고 모든 커널 버전에 대한 패치를 테스트하려면 하드웨어와 자동화 도구에 많은 투자가 필요합니다. 

기술의 희귀성과 인프라 비용으로 인해 공급업체는 고가의 유지보수 프로그램을 통해 제공되는 실시간 패치 서비스에 대한 비용을 청구해야 합니다.

이러한 요금은 큰 금액이 될 수 있지만, Linux의 경우 서버당 연간 $49.50부터 시작하는 TuxCare의 라이브 패치 서비스는 그렇지 않습니다. 자세히 알아보려면 여기를 클릭하세요. 에서 Linux 커널, 데이터베이스, 공유 라이브러리, IoT 디바이스 및 가상화 시스템을 위한 TuxCare의 다양한 라이브 패치 서비스에 대해 자세히 알아보세요.

또한, ‘리눅스 커널 보안 패치 적용 방법: 3가지 다른 방법’이라는 상세한 가이드도 꼭 읽어보시기 바랍니다. 이 글에서는 재부팅 없이 리눅스 커널을 업데이트하는 방법을 설명하며, 가장 널리 사용되는 리눅스 커널 몇 가지에 대한 세 가지 다른 방법을 다루고 있습니다.

요약
개발자 튜토리얼: 데비안 10 리눅스 커널 라이브 패치 적용하기-Kpatch
기사 이름
개발자 튜토리얼: 데비안 10 리눅스 커널 라이브 패치 적용하기-Kpatch
설명
이 튜토리얼은 kpatch의 실제 데모입니다. 이를 사용하여 실행 중인 데비안 10 커널의 동작을 변경하는 방법을 보여드리겠습니다.
작성자
게시자 이름
TuxCare
게시자 로고

4,500명 이상의 Linux 및 오픈 소스 전문가와 함께하세요!

한 달에 두 번. 스팸이 없습니다.

목차
필요한 오픈 소스 보안에 대한 답변 얻기

4,500명 이상의 Linux 및 오픈 소스 전문가와 함께하세요!

한 달에 두 번. 스팸이 없습니다.