Linux 7.2, 과거 시점의 타이머 설정을 통해 "어리석거나 악의적인" DoS 시도 방어
요약
Linux 7.2 커널은 과거 시점으로 타이머를 설정하여 시스템에 부하를 주는 DoS 공격 및 오류를 방지하는 보안 패치를 도입했습니다. 또한 20년 동안 존재했던 POSIX CPU 타이머의 PID 참조 횟수 누수 문제도 함께 해결되었습니다.
핵심 포인트
- 과거 시점 타이머 설정으로 인한 인터럽트 기아 및 DoS 방지
- HRTIMER 인터페이스의 보안 및 안정성 강화
- 20년 된 POSIX CPU 타이머의 PID 참조 횟수 누수 수정
Linux 7.2, 과거 시점의 타이머 설정을 통해 "어리석거나 악의적인" DoS 시도 방어

Linux 7.2 타이머 코드의 가장 흥미로운 변화 중 하나는, 권한이 없는 사용자가 과거 시점에 타이머를 설정함으로써 잠재적인 서비스 거부 (DoS) 문제를 일으킬 수 있는 HRTIMER 인터페이스의 "어리석거나 악의적인" 사용자 공간 (user-space) 행위를 막는 것입니다. 놀랍게도 지금까지 커널은 타이머를 인큐 (enqueue) 하는 시점에 해당 타이머가 이미 과거 시점인지 확인하지 않았으며, 이는 복잡한 문제와 시스템 이슈를 야기할 수 있었습니다.
Thomas Gleixner는 사용자가 사용자 공간에서 CPU가 잠긴 것에 대해 NMI watchdog 락업 (lock-up)을 보고한 이후, HRTIMER 인터럽트 기아 (interrupt starvation) 현상을 방지하기 위한 지난 4월의 패치 시리즈에서 다음과 같이 설명했습니다:
"만료 시간이 과거에 있기 때문에, 해당 타이머는 CPU별 hrtimer 베이스에서 가장 먼저 만료되는 타이머가 되고, clockevent 장치는 최소 델타 (delta) 값으로 프로그래밍됩니다. 만약 기계가 충분히 빠르다면, 타이머 인터럽트가 발생하기 전에 clock event 장치에 정의된 최소값으로 델타 값을 프로그래밍하는 무한 루프에 빠지게 되며, 이는 인터럽트를 기아 상태로 만들고 결과적으로 lockup 메커니즘의 hrtimer 콜백이 호출되지 않아 락업 탐지기 (lockup detector)를 트리거하게 됩니다.
...
백포트 (backporting) 범위에 대한 논의가 필요합니다. 스톨 (stall)을 방지하는 첫 번째 패치는 분명히 백포트 후보입니다. 나머지 시리즈에 대해서는 논쟁의 여지가 있을 수 있지만, 제 의견으로는 어리석거나 악의적인 사용자 공간이 수많은 무의미한 타이머 인터럽트를 생성하는 것을 방지하므로 이 역시 백포트되어야 합니다."
과거 시점의 타이머 설정 문제를 다루는 것 외에, 언급할 만한 또 다른 변화는 POSIX CPU 타이머 코드에서 PID 참조 횟수 (reference count) 누수 (leak)를 수정한 것입니다. 흥미로운 점은 이 누수가 Linux 커널에서 발견되어 수정되기 전까지 20년 이상 존재해 왔다는 사실입니다. POSIX CPU 타이머 오류 경로에서의 이 참조 누수는 Linux 2.6.12 커널 시절부터 존재해 왔습니다.
Linux 7.2의 타이머 변경 사항에 대한 더 자세한 내용은 이미 Git에 병합된 이 풀 리퀘스트 (pull request)를 통해 확인할 수 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Phoronix의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기