3. mitigation
Last updated
Last updated
Secure Boot 기술은 UEFI BIOS를 인가되지 않은 사람이 불법적으로 변경하지 못하도록 보호하기 위해 개발된 기술을 의미한다.
이는 OEM으로부터 신뢰하는 펌웨어만을 허가하기 위해서 Private-Key를 이용해서 서명된 이미지만 사용가능하게 한다. 만약 서명되지 않은 소프트웨어들이 포함되어 있으면 부팅이 되지 않는다.
위 그림은 Secure Boot가 이루어지는 과정이다. 컴퓨터가 Boot 되면(1) OEM으로부터 주어지는 환경 을 검증하기 위해 DXE 펌웨어 볼륨의 Image Verify 를 로드한다. Image Verify는 서명된 이미지를 검 하고(2A) 로드하여(2B) Authenticated Variable에서 이미지의 서명을 검증하는 과정을 거친다.(2C) 이 통해 해당 펌웨어가 OEM에서 실행을 허용하였는지, 인가되지 않은 수정이 발생하였는지를 검사하여 UEFI를 보호한다.
Authenticated Variable 내부에서는 검증을 위한 동작을 하기 위해서 Microsoft에서는 PK(Platform Key), KEK(Key Enrollment Key Database), db(Signature Database), dbx(Revoked Signature Database)라는 개념을 도입하였다.
db는 key를 통해 Sign된 white list이며 dbx는 이와 반대되는 개념인 black list이다. 추가적으로, db와 dbx에 모두 포함되어 있는 경우에는 dbx를 우선적으로 적용한다.
이러한 db와 dbx를 갱신하기 위해서는 KEK라는 것을 이용한다. Microsoft에서는 KEK 데이터베이스에 OS 업데이트를 db와 잘못된 이미지들을 dbx에 추가하기 위해서 지정된 키를 포함시킨다.
여러 과정을 거치고 나서는 최종적으로 펌웨어에 대한 검증과 테스트 후 OEM은 서명된 업데이트를 제외하고 펌웨어에 대한 편집을 잠금 처리와 이어서 PK를 생성한다. PK는 KEK에 대한 업데이트에 서명하거나 Secure Boot를 종료시키는 데 사용될 수 있다.
위와 같이 서명의 사용을 통해서 이전에 존재하던 Boot Manager, Boot Loader의 악의적인 수정이 불가능하고, 이로 인해 Root Kit 및 Boot Kit의 악용이 줄어들게 되었다. 그러므로 Secure Boot를 사용하도록 설정하면 잠재적인 위협이 컴퓨터를 공격하거나 감염시키기 이전에 컴퓨터에서 위협을 차단한다.
PCH의 레지스터인 BIOS_CNTL은 SPI memory에 write protection을 위해서 만들어졌으며, PCI를 통해서 접근이 가능하다.
해당 레지스터에는 몇가지의 기능을 갖는 bit들이 존재하는데 BIOSWE(BIOS Write Enable bit)는 위에서 설명한 것처럼 SPI Memory에 write권한에 대해서 설정한다.
이와 연관되어 BLE(BIOS Lock Enable bit)가 존재하는데 이는 BIOSWE을 설정하려는 시도가 존재하는 경우 SMI를 통해서 억제할 수 있다.
최신 UEFI는 일반적으로 BIOSWE bit를 0으로 설정하고 BLE bit를 1로 설정한다. 게다가 SMM_BWP bit를 통해서 SMM코드가 아닌 곳에서 SMRAM에 대한 쓰기를 차단할 수 있다.
해당 보호기법들의 적용을 확인하기 위해서는 Chipsec의 common.bios_wp 모듈을 사용하면 간편하게 확인이 가능하다.
flash write protection 메커니즘의 새로운 대안책이며 BIOS_CNTL와는 다르게 몇가지 장점들이 존재한다. flash chip에 특정 부분에 대해서 권한 설정이 가능하며 이는 펌웨어 코드 및 NVRAM에 단일 flash chip을 사용하려는 OEM들에게 유용하다.
추가적으로 PRx는 SMM코드와는 독립적이며 이론상 SMM권한을 갖고 있는 공격자들이 flash chip에 인가되지 않은 수정하는 것을 방지 할 수 있다.
PCH Chipsec에서 BIOS_CNTL의 다섯번째 bit를 확인하면 SMM_BWP의 유무를 확인할 수 있다. 해당 기능은 BIOSWE가 활성화된 상태에서 BIOS Region에 값을 SMM 권한의 존재 유무를 통해서 쓸 수 있다.
만약 해당 bit가 꺼져있으면 SMM권한이 아니더라도 BIOS Region에 값을 쓸 수 있으며, 해당 bit가 켜져있는 경우에는 SMM권한의 사용자만 값을 쓸 수 있다.