내 컴퓨터에 전체 디스크 암호화를 설정하는 데 관심이 있는데, 내가 아는 한 /boot 파티션이 프로세스에서 유일하게 까다로운 부분입니다. 즉, /boot 파티션을 암호화하고 GRUB에 적절하게 액세스하도록 지시할 수 있지만 내 컴퓨터는 UEFI를 사용하므로 암호화되지 않은 추가 /boot/efi 파티션이 필요합니다. 내가 이해한 바로는 해당 파티션이 여전히 Evil Maid에 취약한 것으로 보입니다.
이 파티션, 즉 무결성을 보호할 수 있는 방법이 있습니까? 즉, 컴퓨터를 부팅할 때 최소한 내 /boot 파티션이 손상되었다는 경고(체크섬, 서명 등 확인)를 받을 수 있는 방법이 있습니까?
오늘 저는 Secure Boot에 대해 배웠지만 제가 관심 있는 일부 Linux 배포판에는 이 지원이 없습니다(즉, Debian). 그렇다면 적어도 로그인한 동안 /boot(/boot/efi) 파티션의 무결성이 손상되었는지 확인하기 위해 할 수 있는 방법이 있습니까?
감사해요!
답변1
데비안은 실제로 보안 부팅을 지원합니다(유틸리티를 사용하여 커널에 직접 서명할 수 있습니다. 유일하게 까다로운 부분은 UEFI 구현에 따라 자체 서명된 키를 설치하는 것입니다).
답변2
저는 보안 부팅을 활성화하고 자체 서명된 키를 사용하여 Debian 9를 실행하고 있습니다. 시스템에서 데이터를 얻기 위해 부팅 가능한 USB 드라이브를 삽입하거나 암호화되지 않은 파티션에 맬웨어를 설치하는 등의 사소한 Evil Maid 유형 공격으로부터 확실히 보호합니다. 하지만 이것이 Evil Maid의 한계는 아닙니다. 이 문제를 심각하게 생각한다면 시스템 케이스의 물리적 보안도 고려해야 합니다.
"추적" 무결성 검사를 위해서는 TPM 칩과 해당 PCR 레지스터를 활용할 부트로더가 필요합니다. 이 레지스터는 어떤 값으로도 설정할 수 없습니다. 새 데이터가 이 레지스터에 입력되면 TPM 칩 자체가 레지스터의 이전 값 + 입력 데이터의 해시 값을 계산하여 이를 레지스터의 새 값으로 할당합니다. 시스템 펌웨어는 펌웨어 자체의 해시, 현재 펌웨어 설정 및 실제로 사용된 첫 번째 부팅 코드 조각을 사용하여 처음 몇 개의 PCR 레지스터를 채웁니다. 그 후에는 해당 시작 코드로 제어가 이전됩니다.
PCR 레지스터에 실제로 로드되는 커널 및 initramfs 파일의 해시를 유사하게 기록하는 부트로더를 사용하는 경우 암호화된 부분에 저장된 "알려진 양호한" 값 세트와 비교하여 PCR 값을 확인할 수 있습니다. 현재 값이 알려진 정상 상태와 일치하지 않으면 경고를 표시합니다. 커널에는 CONFIG_IMA 옵션도 있습니다. 이 옵션이 활성화되면 커널은 TPM의 PCR 레지스터를 사용하여 로드된 모든 항목의 해시 해시를 유지하게 됩니다. (해시 해시, TPM이 특별히 빠르지 않기 때문에 해싱을 위해 로드된 모든 데이터의 전체 복사본을 TPM으로 보내면 시작 프로세스가 크게 느려집니다.)
물론 PCR로 해시되는 시스템 부분을 업데이트할 때마다 알려진 양호한 값을 업데이트해야 합니다. 그렇지 않으면 오탐지가 발생합니다. 시스템 업데이트(예: 보안 패치가 포함된 커널)를 설치할 때 새로운 "양호한" PCR 값이 무엇인지 미리 예측하기 어렵기 때문에 업데이트를 설치하고 다음 부팅이 실행될 것을 수락해야 할 수도 있습니다. 알람을 보낸 다음 새로운 "양호" "상태를 기록합니다.
몇 년 전 TPM PCR을 사용하려고 시도했을 때 시스템은 이전 BIOS 펌웨어를 사용하고 있었습니다. TrustedGRUB(기본적으로 GRUB Legacy의 TPM 지원 버전)를 사용하면 이전 단락에서 설명한 검사 유형을 구현할 수 있었습니다. TPM을 지원하는 Linux UEFI 부트로더가 있는지 확실하지 않으므로 커널에 내장된 UEFI 스텁 로더로 부팅하지 않는 한 이전 시스템의 전체 PCR 적용 범위를 얻지 못할 수도 있습니다. 실제 커널의 ㅎㅎ) 단순한 부트로더가 아닌 해시 값입니다.