
블루투스 기반 사용자 친화적 경량 TPM 원격 증명
Ultrablue(블루투스를 통한 사용자 친화적인 경량 TPM 원격 증명)는 개별 사용자가 자신의 휴대폰으로 부팅 상태 증명을 수행할 수 있게 해주는 솔루션입니다. 이 솔루션은 컴퓨터에서 실행되는 서버(증명자 역할)와 신뢰할 수 있는 휴대폰에서 실행되는 그래픽 클라이언트 애플리케이션(검증자 역할)으로 구성됩니다.
일반적인 사용 사례는 컴퓨터 잠금을 해제하기 전에 부트 체인의 무결성을 검증하여 무인 상태의 노트북에 대한 오프라인 공격을 방지하는 것입니다. 또한 펌웨어 업그레이드 후 보안 부팅 문제를 디버깅하는 도구나 디스크 암호화의 2차 인증 요소로 사용될 수 있습니다.
설치가 완료되면 일반적인 Ultrablue 제어 흐름은 여러 단계로 구성됩니다:
Ultrablue를 사용하려면 부팅 상태를 증명하려는 Linux 컴퓨터(TPM 및 Bluetooth 인터페이스를 갖춘, 일반적으로 노트북)와 휴대폰이 필요합니다.
휴대폰을 검증자로 등록하려면 서버를 등록 모드로 시작하세요:
sudo ultrablue-server -enroll -pcr-extend
그러면 터미널에 QR 코드가 표시됩니다. 휴대폰에서 클라이언트 앱을 실행하고 오른쪽 상단의 + 아이콘을 눌러 QR 코드 스캐너를 표시하세요. 스캔하면 Bluetooth Low Energy 채널이 설정되고 등록이 자동으로 실행됩니다. 성공하면 클라이언트 애플리케이션의 홈 페이지에 기기 카드가 나타납니다.
Ultrablue는 등록 시 무작위로 생성된 값을 사용하여 TPM2 PCR9를 확장할 수 있습니다. 예를 들어 디스크 암호화를 TPM2 시일링에 바인딩하려는 경우에 유용합니다. 이 경우 ultrablue는 증명이 성공적이고 신뢰할 수 있으면 부팅 중에 PCR9 레지스터를 다시 확장합니다. PCR 확장은 등록 시 구성됩니다(이 플래그는 증명 모드에서는 효과가 없습니다):
sudo ultrablue-server -enroll -pcr-extend
부팅 흐름의 일부로 ultrablue를 실행하려면 initramfs를 다시 생성하여 이를 포함시켜야 합니다. Dracut 및 systemd 통합을 제공하여 이 작업을 더 쉽게 만들었습니다. 더 쉬운 테스트 방법을 제공하는 제공된 VM 스크립트도 참조하세요.
먼저 server/dracut/90ultrablue를 /usr/lib/dracut/modules.d/ 모듈 디렉터리에 설치하세요.
그런 다음 다음 dracut 명령을 실행할 수 있습니다:
dracut --add ultrablue /path/to/initrd --force
등록 단계에서 --pcr-extend 옵션을 사용했다면 crypt dracut 모듈을 추가하고 server/dracut/90crypttab.conf를 /etc/dracut.conf.d에 복사해야 합니다(dracut 버그 #751640을 우회하기 위해):
cp server/dracut/90crypttab.conf /etc/dracut.conf.d
dracut --add "crypt ultrablue" /path/to/initrd --force
이러한 옵션은 영구적이지 않으며 initramfs가 다음에 생성될 때 ultrablue가 제거됩니다. 영구 구성에 대해서는 dracut.conf(5) 매뉴얼 페이지를 참조하세요.
initramfs 구성 단계를 수행했다면 Ultrablue 서버는 부팅 중에 자동으로 실행됩니다. 그렇지 않으면 증명 모드에서 서버를 수동으로 시작하세요:
sudo ultrablue-server
서버가 시작되면 검증자(휴대폰)의 연결을 기다립니다. 휴대폰에서 기기 카드의 ▶️ 아이콘을 클릭하세요. 그러면 증명이 실행됩니다. 완료되면 클라이언트 애플리케이션에 증명 결과가 표시됩니다.
부팅 시 ultrablue를 실행하는 주요 목적은 디스크 복호화에 사용하기 위해서입니다. 이 방법의 예는 서버 테스트베드에 제공되고 문서화되어 있습니다.
Ultrablue 프로젝트는 Nicolas Bouchinet와 Gabriel Kerneis의 감독 아래 Loïc Buckwell이 ANSSI(ssi.gouv.fr)에서 개발했습니다.
질문이 있으면 Github 이슈를 통해 문의하거나 Gabriel Kerneis [email protected]에게 직접 연락하세요.