Linux 커널 락다운(Lockdown) 모드에서 레거시 I/O 및 메모리 핸들러가 실수로 열려 있었던 문제
요약
Linux 커널 락다운 모드에서도 sysfs를 통한 레거시 I/O 및 메모리 인터페이스가 루트 사용자에게 열려 있던 보안 취약점이 발견되었습니다. PCI 서브시스템의 핸들러에 락다운 체크 로직이 누락되어 발생한 문제로, 현재 수정 패치가 진행 중입니다.
핵심 포인트
- 락다운 모드에서도 legacy_io 및 legacy_mem 인터페이스가 보호되지 않음
- 루트 사용자가 임의의 I/O 포트에 쓰거나 메모리 공간을 매핑 가능
- 2019년 PCI BAR 접근 제한 패치 당시 레거시 핸들러 누락이 원인
- Linux 7.3 및 기존 안정 버전으로의 백포트 가능성 높음
Linux 커널 락다운(Lockdown) 모드에서 레거시 I/O 및 메모리 핸들러가 실수로 열려 있었던 문제

/dev/mem 및 기타 제한 사항들은 사용자 공간(user-space)이 실행 중인 커널을 수정하거나 민감한 커널 메모리에 접근할 수 없도록 하기 위한 것입니다. 한 가지 간과된 부분으로 인해 sysfs를 통한 레거시 I/O 및 메모리 인터페이스가 락다운(lockdown) 모드에서도 계속 열려 있었으나, 현재 수정 작업이 진행 중입니다.
지난 2022년에도 사소한 락다운 우회 버그가 있었으나, 커널 락다운 영역에서 발생한 최신 사고는 다음과 같습니다.
PCI 장치를 위한 legacy_io 및 legacy_mem sysfs 인터페이스가 커널 락다운 모드가 활성화된 상태에서도 (루트 사용자에 대해) 쓰기 권한이 열려 있는 상태로 유지되었습니다. legacy_io 파일은 레거시 포트 I/O(port I/O)를 읽고 쓰기 위해 사용되며, legacy_mem은 레거시 PCI 메모리 공간에 접근하는 데 사용됩니다.
Krzysztof Wilczyński는 Linux 7.3을 앞두고 PCI 서브시스템의 "next" Git 브랜치에 대기 중인 패치에서, 레거시 I/O 및 메모리 핸들러에 대한 락다운 체크가 전혀 추가되지 않았다고 설명했습니다. 이는 커널이 락다운 모드일 때 PCI BAR 접근을 제한하기 위해 해당 코드가 처음 추가되었던 2019년부터 지속되어 온 상태입니다.
"현재 legacy I/O 및 메모리 sysfs 핸들러는 security_locked_down(LOCKDOWN_PCI_ACCESS)를 확인하지 않으므로, 커널이 락다운되었을 때 legacy_io 및 legacy_mem 파일이 보호되지 않은 상태로 남게 됩니다."
커밋 eb627e17727e("PCI: Lock down BAR access when the kernel is locked down")는 사용자 공간이 커널 코드를 수정하는 데 사용될 수 있는 DMA 가능 하드웨어를 프로그래밍하는 것을 방지하기 위해 pci_write_config(), pci_mmap_resource(), 그리고 pci_write_resource_io()에 체크 로직을 추가했지만, 레거시 핸들러까지는 포함하지 않았습니다.
그 결과, 루트(root) 사용자는 커널이 락다운된 상태에서도 임의의 I/O 포트에 쓸 수 있고 레거시 I/O 및 메모리 공간을 매핑할 수 있으며, 이는 락다운이 제거하고자 했던 바로 그 권한입니다."
이 패치는 다가오는 Linux 7.3 병합 윈도우(merge window)를 위한 PCI의 next Git 브랜치에 포함되어 있습니다. 2019년의 원래 PCI BAR 패치에 대한 수정 사항으로 표시되어 있으므로, 기존의 안정적인(stable) Linux 커널 버전에도 백포트(back-port)될 가능성이 높습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Phoronix의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기