UEFI 스터디 3차 - 프로토콜 취약점 예시
Published:
취약점이 발견되었던 프로토콜 예시이다. 지난 주에 서웅이가 진행한 부분의 이슈를 좀더 로우한 프로토콜 측면에서 바라본다.
SMM, 취약점
EFI_SMM_COMMUNICATION_PROTOCOL
출처 및 참고 자료: Intel White Paper: A Tour Beyond BIOS: Secure SMM Communication in the EFI Developer Kit II (Jiewen Yao, Vincent Zimmer)
과거 백서 내용을 참고한 것으로 현재는 UEFI PI spec에서 EFI_MM_COMMUNICATION_PROTOCOL으로 찾아볼 수 있다.
용도
-> SMM 내부의 SMM 인터럽트 핸들러에 SMM 외부의 드라이버가 접근하는 수단.

구성함수
Communicate -> 등록된 핸들러와 communicate한다.
인수(처음 this 제외) : CommBuffer 구조체 주소, CommBuffer size(optional)

사용 예시 edk2 참조구현의 SMM 접근

SMM 에이전트 드라이버가 초기화할때 VariableServiceInitialize() 함수의 핸들을 등록해둠 DXE 단계에서 이를 사용하고픈 드라이버가 이를 활용해 commbuffer를 초기화함 SendCommunicateBuffer()를 호출 -> 내부의 EFI_SMM_COMMUNICATION_PROTOCOL.communicate가 호출.
취약점: CommBuffer 공격
잘못된 commbuffer 주소 (SMRAM 내부)를 데이터로 넘김 -> SMI 핸들러 선에서 컷 실패 -> SMRAM 오염 OR SMRAM 내부 데이터 유출

VMM(= OS 하이퍼바이저)의 주소를 데이터로 넘김 -> SMM 이 더 낮은 링 레벨이므로 VMM을 해킹하는 또다른 경로 (이 경우에는 포멧해도 소용없음)

만약 프로젝트에서 활용한다면
해당 백서는 2016년 작성. 그리고 SMM 권한탈취의 주요 루트이므로 spec 차원의 강화 및 검사용 툴들이 나왔다고 함. 실제 활용 시 이미 해결된 문제는 제하고 보완하자.
