대상 OS: Ubuntu Server 24.04 LTS

서버 침해사고에서 자주 나오는 단어가 ‘커널 모듈’입니다.
루트 권한을 얻은 공격자는 네트워크 패킷을 숨기거나, 파일을 은폐하거나, 보안 훅을 우회하기 위해 커널 영역을 건드리려 합니다.
그 경로 중 하나가 “원하는 모듈을 로딩하는 것”이고, 또 하나는 “불필요한 모듈이 이미 로딩되어 있는 것”입니다.
물론 커널 모듈 통제만으로 루트킷을 완벽히 막을 수는 없지만, 공격 표면을 줄이고 ‘이상 징후’를 더 빨리 발견하게 만드는 강력한 기본기입니다.

이 글은 Ubuntu Server 24.04 LTS에서 커널 모듈 로딩을 통제하는 실전 방법(블랙리스트, install /bin/false, 부팅 시 고정 로드, 상태 점검, 감사 로그 추적)을 정리합니다.

---

## 1) 커널 모듈 통제가 의미 있는 이유

1) 불필요한 기능을 꺼서 공격면을 줄인다

2) “모듈 로딩” 자체를 이벤트로 만들면 침해 징후를 더 빨리 잡을 수 있다

3) USB/블루투스/파일시스템/네트워크 드라이버 등 불필요한 모듈이 사고 통로가 되는 걸 줄인다

4) 운영 표준을 만들면 서버 타입별로 일관성이 생긴다

주의
- 이미 루트 권한을 얻은 공격자는 통제를 우회하려고 할 수 있습니다.
- 따라서 모듈 통제는 “계층 방어”의 한 층이며, Secure Boot, 최소권한, 감사 로깅과 함께 써야 가치가 커집니다.

---

2) 변경 전 점검: 지금 어떤 모듈이 올라와 있나

1) 현재 로드된 모듈 목록(상위 일부)

lsmod | head -n 40

2) 특정 모듈이 로드됐는지 확인(예: usb_storage)

lsmod | grep -E '^usb_storage\b' || true

3) 모듈이 왜 로드됐는지(의존성) 확인

modinfo usb_storage 2>/dev/null | sed -n '1,80p'

4) 부팅 시 자동 로드 목록 확인

ls -la /etc/modules-load.d
cat /etc/modules 2>/dev/null || true

---

3) 1차 통제: modprobe 블랙리스트 + install /bin/false

가장 실용적인 기본기입니다.

1) (예시) USB 저장장치 모듈 차단

sudo tee /etc/modprobe.d/usb-storage-block.conf >/dev/null /dev/null