대상 OS: Ubuntu Server 24.04 LTS

침해사고 관점에서 “root를 뺏기면 끝”이라는 말은 절반만 맞습니다.
root 이후에도 공격자는 커널 메모리 접근, 임의 커널 로딩, kexec로 다른 커널 부팅, 디버그 인터페이스를 통해 더 깊은 지속성/은닉을 만들려고 합니다.
Ubuntu 24.04에서는 Secure Boot가 켜진 환경에서 커널 Lockdown 모드를 통해 이런 ‘루트 이후(post-root)’ 공격면을 줄일 수 있습니다.
오늘은 Lockdown을 실제 운영에 적용하는 방법을, 부팅 파라미터/검증/호환성 트러블슈팅 순서로 정리합니다.
추가로 kexec 차단, debugfs 정리 같은 “주변부 하드닝”도 함께 넣어 커널 레벨 방어선을 한 단계 올립니다.

---

# 0) 이 글의 전제와 목표

1) 전제

- 가능하면 UEFI + Secure Boot 환경(클라우드/온프렘 모두 가능)
- 커널/부트로더를 건드리므로, 콘솔 접근(클라우드 콘솔/시리얼/iDRAC/iLO 등) 확보 권장

2) 목표

- Lockdown을 켜서 커널 무결성/기밀성을 지키는 방향으로 정책을 강제
- “운영을 망치지 않게” 단계적으로 적용

---

# 1) 빠른 개념 정리: Lockdown 모드가 막는 것

1) Integrity 모드(무결성)

- 커널을 런타임에 바꾸거나(커널 메모리/레지스터 조작), 신뢰되지 않은 코드를 주입하려는 시도를 제한
- 보통 Secure Boot와 함께 “커널 무결성”을 강하게 가져가고 싶을 때 선택

2) Confidentiality 모드(기밀성)

- 무결성 + 추가로 “커널/하드웨어의 민감 정보 추출” 성격을 더 강하게 제한
- 디버그/관측 계열 기능이 더 많이 막힐 수 있어, 운영 호환성 점검이 더 중요

---

# 2) 현재 상태 점검: Secure Boot와 Lockdown 확인

1) Secure Boot 상태 확인

sudo mokutil --sb-state

2) 현재 Lockdown 상태 확인(지원 커널에서)

cat /sys/kernel/security/lockdown 2>/dev/null || true

- 출력 예시: `none [integrity] confidentiality` 처럼 현재 모드가 대괄호로 표시됩니다.

3) 커널 커맨드라인 확인

cat /proc/cmdline

---

# 3) 적용 전략: ‘부팅 파라미터’로 강제하기

1) 언제 부팅 파라미터를 쓰나

- 배포 표준(이미지/골든 AMI)로 강제하고 싶을 때
- 특정 부팅 상황에서 항상 같은 정책을 유지하고 싶을 때

2) GRUB 설정 파일 백업

sudo cp -a /etc/default/grub /etc/default/grub.bak.$(date +%F)

3) Lockdown=integrity 추가(권장: 1단계)

- `GRUB_CMDLINE_LINUX_DEFAULT` 또는 `GRUB_CMDLINE_LINUX`에 추가합니다.
- 서버라면 보통 DEFAULT 쪽에 넣는 편이 많습니다.

sudo sed -n '1,200p' /etc/default/grub
sudo bash -lc 'grep -q "lockdown=" /etc/default/grub || true'
sudo bash -lc 'perl -i -pe '"'"'s/^(GRUB_CMDLINE_LINUX_DEFAULT=")([^"]*)"/$1$2 lockdown=integrity"/ if /^GRUB_CMDLINE_LINUX_DEFAULT="/"'"' /etc/default/grub'

4) GRUB 재생성

sudo update-grub

5) 재부팅

sudo reboot

---

# 4) 적용 검증: 부팅 후 반드시 확인할 것

1) Lockdown이 실제로 적용됐는지

cat /sys/kernel/security/lockdown

2) 커맨드라인에 파라미터가 들어갔는지

cat /proc/cmdline | tr ' ' '\n' | grep -E '^lockdown='

3) 거부 로그/증상 체크

sudo journalctl -k -b --no-pager | egrep -i 'lockdown|denied|security' | tail -n 80

---

# 5) 주변부 하드닝 1: kexec 차단으로 ‘다른 커널로 점프’ 줄이기

1) 왜 필요한가

- 공격자가 root를 얻은 뒤 kexec를 통해 다른 커널로 부팅하거나, 메모리 기반 공격/은닉을 강화할 수 있습니다.
- 정상 운영에서 kexec를 쓰지 않는 서버라면 차단이 단순하고 효과적입니다.

2) 즉시 적용(런타임)

cat /proc/sys/kernel/kexec_load_disabled
sudo sysctl -w kernel.kexec_load_disabled=1
cat /proc/sys/kernel/kexec_load_disabled

3) 영구 적용

sudo bash -lc 'cat >/etc/sysctl.d/99-kexec-disable.conf