리눅스를 사용한다면 대부분 secure boot를 끄고 사용할 것이다. 하지만 보안에 편집증일 정도로 신경을 쓴다면 도저히 간과할 수 없는 문제가 있다. 이 글에서는 secure boot를 사용하지 않을 때 발생할 수 있는 공격에 대해 알아보고자 한다.
보안을 신경을 쓴다면 디스크 전체 암호화를 사용할 것이다. 리눅스에서는 보통 LUKS로 root 파일시스템을 암호화하여 부팅할 때마다 비밀번호를 입력하게 된다.
이것만으로도 도난에 의한 정보 유출은 거의 보호 가능하다. 하지만 리눅스의 부팅 과정을 생각해 본다면 아직 완전하지 않은 부분이 있다.
리눅스가 부팅되려면 보통 GRUB2같은 부트로더를 사용하여 리눅스 커널과 initramfs, microcode, 커널 옵션을 로드하고 실행하게 된다. 문제는 이 데이터들은 전혀 암호화되어 있지 않고 변조되더라도 알아차리기 어렵다. 그래서 리눅스 커널이나 initramfs에 악성코드를 삽입하게 된다면 디스크 전체를 암호화했더라도 알아차리지 못한 채 복호화하게 되고 이미 실행된 악성코드로 인해 데이터가 유출 될 수 있다.
EFI 파티션은 암호화되지 않은 FAT32 파일시스템이므로 변조하기 쉽다. 그러므로 하드웨어에 직접적인 접근이나 이미 해킹된 다른 OS를 통해 변조될 수 있다. 특히 멀티 부팅을 사용하는 환경인 경우 상대적으로 악성코드에 감염될 확률이 높은 윈도우즈를 통해 변조될 가능성이 있다. 리눅스 시스템이 해킹된 경우도 가능하지만 이미 그 자체로 상황 종료이므로 고려할 의미가 없다.
이를 막으려면 UEFI 펌웨어에서 이런 파일들이 변조되지 않았는지 검증해야하고 그렇게 탄생한게 secure boot이다. 직접 인증 체인을 구성하고 관리하는게 까다로울 수 있지만 커널이나 initramfs에 악성코드를 심는 교묘한 공격을 방어하기에 매우 효과적이다. 리눅스 보안을 매우 신경쓴다면 secure boot를 꼭 활성화하도록 하자.