/proc/cmdline을 확인하고 /boot 마운트 지점의 이미지와 동일하다고 가정하면 현재 실행 중인 커널 이미지를 추론할 수 있다는 것을 알고 있습니다. 그러나 이것이 보장되는 것은 아닙니다.
그렇다면 어떤 이미지가 어떤 파티션에 있는지 정확히 알 수 있는 방법이 있나요?
잘 알려진 경로의 initramfs에서 이미지 파일을 검사할 수 있습니까?
답변1
커널 이미지를 시스템 RAM으로 가져오는 것은 부트 로더의 작업입니다. 부트 로더만이 커널 이미지의 소스를 결정할 수 있습니다. 시스템이 네트워크에서 부팅되면 커널 이미지가 시스템에 전혀 파일로 존재하지 않을 수 있습니다.
보고된 버전 번호와 컴파일 타임스탬프는 uname -a
커널 이미지 파일을 식별하는 데 도움이 될 수 있습니다. 다음 명령을 사용하여 커널 이미지 파일에서 동일한 정보를 읽을 수 있습니다 file
.
$ uname -a
Linux hostname 4.9.80-atom #1 SMP Mon Feb 5 13:26:54 EET 2018 x86_64 GNU/Linux
$ file /boot/vmlinuz-4.9.80-atom
/boot/vmlinuz-4.9.80-atom: Linux kernel x86 boot executable bzImage, version 4.9.80-atom (user@hostname) #1 SMP Mon Feb 5 13:26:54 EET 2018, RO-rootFS, swap_dev 0x3, Normal VGA
UEFI 시스템에서는 UEFI 부팅 변수를 보고 BootCurrent
어떤 NVRAM 부팅 옵션이 선택되었는지 확인할 수 있습니다. 그러나 부팅 옵션이 부팅 후에 편집되었을 수 있고 여러 부팅 옵션을 제공할 수 있는 부트 로더를 가리키는 경우 어쨌든 모호할 수 있기 때문에 이는 매우 강력한 증거는 아닙니다.
내가 아는 유일한 강력한 증거는 TPM 칩과 TPM 인식 부트로더가 있는 시스템을 사용하는 것입니다. TPM의 해당 PCR 레지스터에 원래 로드된 커널의 암호화된 강력한 해시를 저장합니다. 그런 다음 동일한 규칙을 따르고 해시를 다시 계산하여 일치하는지 확인할 수 있습니다. 일치하지 않으면 누군가 커널 또는 PCR 레지스터 값을 변조한 것입니다. 그리고 펌웨어는 항상 사용된 실제 부팅 코드의 해시로 다른 PCR 레지스터를 채우므로 부트로더에 대한 변조도 확인할 수 있습니다.
(PCR 레지스터는 선택한 값으로 설정할 수 없는 방식으로 구현됩니다. 새 값은 항상 이전 값 + 입력된 새 데이터의 암호화된 강력한 해시이므로 PCR 레지스터를 값으로 설정합니다. 이미 다른 0이 아닌 값이 있는 경우 특정 알려진 값은 매우 어려울 것입니다.
TrustedGRUB은 GRUB 부트 로더의 TPM 인식 버전입니다. 나는 [GRUB 레거시를 기반으로 한 이전 버전](https://sourceforge.net/p/trustedgrub/wiki/Home/]. 현재 하나 있는 것 같습니다.GRUB 2를 기반으로 한 새로운 구현하지만 지금까지는 전통적인 스타일의 부팅만 지원하는 것 같습니다. 테스트에 사용할 수 있는 모든 TPM 지원 시스템은 이제 UEFI 기반이므로 아직 테스트하지 않았습니다.