Ubuntu 서버를 운영하다 보면 apt upgrade 알림이나 MOTD에서 “N개의 보안 업데이트가 있습니다” 같은 문구를 자주 보게 된다. 그런데 막상 그 N개가 어떤 취약점(CVE)을 고치는 건지, 커널 패치라 재부팅이 꼭 필요한지, 재부팅 없이 넘어갈 방법은 없는지는 명령 한 줄로 바로 알기 어렵다. Ubuntu는 이런 보안 패치를 Ubuntu Security Notice(USN)라는 형태로 정리해서 공개하는데, 이 글에서는 USN이 뭔지, 그리고 실제로 어떤 패치가 밀려 있는지 확인하고 적용하는 방법을 정리한다.
USN이란
Ubuntu Security Team은 아카이브에 있는 패키지에 보안 수정이 반영될 때마다 Ubuntu Security Notice(USN)를 발행한다. USN 하나에는 관련된 CVE 여러 개와 영향받는 패키지, 수정된 버전 정보가 함께 담긴다. 예를 들어 커널 취약점 여러 건이 한꺼번에 발견되면 USN-8493-1 같은 번호로 묶여 공개되는 식이다. 전체 목록은 ubuntu.com/security/notices에서 검색할 수 있고, 특정 CVE 번호로도 조회가 가능하다.
이 패치들은 배포판의 일반 저장소와 별도인 security 포켓을 통해 배포된다. /etc/apt/sources.list.d/ubuntu.sources(또는 예전 방식의 sources.list)를 보면 버전마다 <코드네임>-security 형태의 스위트가 별도로 등록돼 있는 걸 볼 수 있다.
$ grep -A2 "noble-security" /etc/apt/sources.list.d/ubuntu.sources
Types: deb
URIs: http://security.ubuntu.com/ubuntu/
Suites: noble-security
밀려 있는 보안 패치 확인하기
가장 기본적인 방법은 apt update 이후 업그레이드 가능한 패키지 중 security 포켓에서 온 것만 걸러보는 것이다.
sudo apt update
apt list --upgradable 2>/dev/null | grep -i security
Ubuntu Pro 클라이언트(ubuntu-advantage-tools, 최신 배포판에는 기본 설치돼 있다)가 있다면 pro security-status로 훨씬 자세한 현황을 볼 수 있다. Pro 구독에 연결(attach)하지 않은 상태에서도 명령 자체는 실행되지만, 아래처럼 esm-infra/esm-apps로 받은 보안 업데이트 개수까지 나오는 건 Pro에 연결된 머신의 출력이다.
$ pro security-status
559 packages installed:
554 packages from Ubuntu Main/Restricted repository
5 packages from Ubuntu Universe/Multiverse repository
This machine is attached to an Ubuntu Pro subscription.
Main/Restricted packages are receiving security updates from
Ubuntu Pro with 'esm-infra' enabled until 2028. You have received 121 security
updates.
Universe/Multiverse packages are receiving security updates from
Ubuntu Pro with 'esm-apps' enabled until 2028. You have received 1 security
update.
Main/Restricted가 아닌 Universe/Multiverse 패키지의 보안 업데이트는 esm-apps 서비스가 활성화돼 있어야 받을 수 있다는 점이 이 출력에서 드러난다. Ubuntu Pro는 개인·소규모 용도로는 5대까지 무료로 붙일 수 있다.
특정 CVE/USN 확인 및 적용
특정 CVE나 USN 번호를 알고 있다면 pro fix로 현재 시스템이 그 취약점에 영향을 받는지, 패치가 이미 적용됐는지 바로 확인할 수 있다. --dry-run을 붙이면 실제로 아무것도 설치하지 않고 상태만 보여준다.
$ sudo pro fix CVE-2023-5764 --dry-run
WARNING: The option --dry-run is being used.
No packages will be installed when running this command.
CVE-2023-5764: Ansible vulnerabilities
- https://ubuntu.com/security/CVE-2023-5764
1 affected source package is installed: ansible
(1/1) ansible:
A fix is available in Ubuntu Pro: ESM Apps.
The update is already installed.
✔ CVE-2023-5764 is resolved.
패치가 아직 적용되지 않았다면 --dry-run 없이 실행해 바로 적용한다. USN 번호로도 동일하게 쓸 수 있다(pro fix USN-8493-1).
sudo pro fix CVE-2023-5764
Ubuntu Pro 클라이언트 없이 그냥 알려진 패키지 전체를 최신 보안 버전으로 올리고 싶다면 평범한 apt upgrade로도 충분하다. security 포켓과 일반 업데이트를 구분하지 않고 한 번에 처리된다.
sudo apt update && sudo apt upgrade -y
자동 적용과 재부팅 없는 커널 패치
Ubuntu 18.04부터는 unattended-upgrades가 기본 설치돼 있어, 별도 설정 없이도 보안 업데이트는 하루 단위로 자동 적용된다. 실제로 어떤 패키지가 대상인지 미리 보고 싶다면 dry-run 모드로 확인할 수 있다.
sudo unattended-upgrade --dry-run --debug
실제 적용 이력은 /var/log/unattended-upgrades/unattended-upgrades.log에 남는다. 문제는 커널 패키지다. 커널 보안 패치는 설치는 되지만 실제로 반영되려면 재부팅이 필요하고, 재부팅이 필요한 상태인지는 다음 파일로 확인한다.
$ cat /var/run/reboot-required
*** System restart required ***
$ cat /var/run/reboot-required.pkgs
linux-image-6.14.0-29-generic
서비스 중단 없이 커널 보안 패치를 반영하고 싶다면 Canonical Livepatch를 쓴다. 실행 중인 커널에 패치를 즉시 적용해 대부분의 커널 취약점을 재부팅 없이 막아주는 서비스로, Ubuntu Pro에 포함돼 있고 이 역시 최대 5대까지 무료다.
sudo pro enable livepatch
canonical-livepatch status --verbose
주의사항
Livepatch가 모든 커널 취약점을 커버하진 않는다: 커널 자료구조를 크게 바꾸는 패치나 하드웨어 드라이버 관련 수정 등은 라이브 패치로 적용할 수 없어, canonical-livepatch status에 “적용 대기 중”으로 표시되면서도 실제로는 재부팅이 필요한 경우가 있다.
Universe/Multiverse 패키지는 esm-apps 활성화가 필요하다: pro security-status 출력에서 Universe/Multiverse 쪽 보안 업데이트 개수가 0으로 나온다면, Pro 구독은 붙어 있어도 esm-apps 서비스 자체가 꺼져 있는 경우가 많다. sudo pro enable esm-apps로 켤 수 있다.
unattended-upgrades는 기본적으로 보안 업데이트만 자동 적용한다: 일반 기능 업데이트까지 자동화하려면 /etc/apt/apt.conf.d/50unattended-upgrades의 Unattended-Upgrade::Allowed-Origins에 해당 스위트를 추가해야 한다. 프로덕션 서버라면 보안 패치만 자동화하고 일반 업데이트는 수동으로 검증 후 적용하는 편이 안전하다.
pro fix는 정확한 CVE/USN 번호가 있어야 동작한다: 번호를 모른 채 막연히 “커널 보안 문제”라고 넘겨줄 수는 없다. ubuntu.com/security/notices에서 영향받는 패키지나 커널 버전으로 먼저 검색해 번호를 확인해야 한다.
마무리
Ubuntu의 보안 패치 체계는 USN이라는 공지 단위로 정리돼 있고, apt upgrade 한 줄로도 대부분 해결되지만 어떤 CVE가 왜 고쳐졌는지 확인하고 싶을 때는 pro security-status와 pro fix가 훨씬 명확한 답을 준다. 커널 패치는 재부팅이 기본이지만, 서비스 중단이 부담스러운 서버라면 Livepatch로 상당 부분을 재부팅 없이 넘길 수 있다는 점도 기억해 둘 만하다.
참고
Security updates – Ubuntu security documentation
Exploring your system’s security with Pro – Ubuntu Pro Client documentation