리눅스 x86, KVM 없는 커널에서 빠지던 BHI 자동 완화 수정
리눅스 커널 x86의 BHI 자동 완화 선택 로직을 고쳐, KVM이 없거나 `no_guest_host`로 게스트-호스트 경로를 끈 경우에도 사용자 공간-커널 경로를 반영합니다. 해당 경로가 활성화된 취약 CPU에서는 BHI 완화를 선택하며, 관리자가 명시한 설정은 유지합니다. 수정은 2026년 11월 8일 메인라인 커널에 병합됐습니다.
리눅스 커널 x86의 BHI 완화 자동 선택이 KVM을 지원하지 않는 커널에서도 사용자 공간-커널 공격 경로를 반영하도록 수정됐습니다. 기존 로직은 게스트-호스트 경로가 꺼져 있으면 사용자 공간-커널 완화가 활성화돼 있어도 BHI 완화를 끄는 경우가 있었습니다. 새 로직은 사용자 공간-커널 경로를 먼저 확인합니다. 이 변경은 자동 선택에 적용되며 관리자가 명시한 BHI 설정은 유지됩니다.
BHI(Branch History Injection)는 공격자가 CPU의 분기 이력 버퍼(BHB)에 영향을 줘 간접 분기 예측이 공격자가 노린 분기 대상으로 향하게 하는 추측 실행 공격입니다. 공격자는 추측 실행이 남긴 캐시 흔적을 측정해 권한이 높은 코드가 다룬 데이터를 추론할 수 있습니다. 리눅스 커널 문서는 BHI 완화 대상 공격 경로로 악성 사용자 프로그램의 커널 공격과 악성 가상머신의 호스트 공격을 모두 듭니다.
리눅스의 공격 경로 설정은 시스템에서 고려할 위협에 맞춰 CPU 취약점 완화를 선택합니다. mitigations=auto에서는 사용자 공간-커널 완화가 기본 활성화됩니다. 게스트-호스트 완화는 KVM 지원이 있을 때 기본 활성화되므로 KVM 없이 빌드한 커널에서는 꺼집니다. mitigations=auto,no_guest_host로 같은 경로를 명시적으로 끈 경우에도 같은 선택 오류가 발생했습니다.
이전 bhi_select_mitigation() 함수는 자동 선택 상태에서 게스트-호스트 경로부터 검사했습니다. 이 경로가 켜져 있으면 사용자 공간-커널 경로의 활성화 여부에 따라 일반 BHI 완화 또는 VM-exit 전용 완화를 골랐습니다. 반면 게스트-호스트 경로가 꺼져 있으면 사용자 공간-커널 경로를 확인하지 않고 완화를 껐습니다. 그 결과 영향을 받는 인텔 CPU에서는 BHI_DIS_S 설정이나 BHB 비우기 루프가 기본 적용되지 않을 수 있었습니다.
수정된 함수는 먼저 bhi_mitigation이 자동 선택 상태인지 확인하고, 관리자가 BHI 완화 방식을 명시했다면 그대로 반환합니다. 자동 선택에서는 사용자 공간-커널 경로가 켜져 있으면 BHI 완화를 고르고, 꺼져 있을 때만 게스트-호스트 경로에 따라 VM-exit 전용 완화나 비활성화를 택합니다. 이로써 KVM이 없거나 게스트-호스트 경로를 꺼도 사용자 공간-커널 경로가 켜진 취약 CPU에서는 BHI 완화가 유지됩니다.
Breno Leitao가 작성한 수정은 Ingo Molnar의 x86 수정 요청에 포함됐고, Linus Torvalds의 메인라인 커널 트리에 2026년 11월 8일 병합됐습니다.
참고 자료
- Linux Fixes Faulty Mitigation Selection For BHI Vulnerability
- [GIT PULL] x86 fixes - Ingo Molnar
- Re: [GIT PULL] x86 fixes - pr-tracker-bot
- Merge tag 'x86-urgent-2026-11-08' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip - kernel/git/torvalds/linux.git - Linux kernel source tree
- attack_vector_controls.rst « hw-vuln « admin-guide « Documentation - kernel/git/torvalds/linux.git - Linux kernel source tree
- spectre.rst « hw-vuln « admin-guide « Documentation - kernel/git/torvalds/linux.git - Linux kernel source tree