dm-verity 보호는 kernel 내부에서 동작됩니다.
부팅시스템이 커널을 시작하기전 루팅 소프트웨어가 시스템을 손상 시키면 해당 접근을 그대로 유지 시켜버립니다.
이러한 위험을 줄이기 위해 각제조사들은 각Device에 특정key를 사용하여 커널 검증을 하게 됩니다.
일단 해당 Device가 릴리즈가 되면 해당 key는 변경할수 없습니다.
일반적으로 제조사는 해당 key를 사용하여 시큐어부트(secure boot)메커니즘을 사용하여 부트이미지(boot image)들을 서명하고 이를 chain화 시킵니다.
이 서명된 이미지들을 부팅단계에 단계적으로 서명이 일치하는지를 검증 합니다. 이후 커널단계에서 부트로더와 커널 역시도 검증하게 됩니다.
이것을 커널의 무결성 체크라고 합니다. 또한 커널 검증이 완료되면 검증된 커널은 블럭 디바이스를 검색하여 마운트되고 검증하게 됩니다.
dm-verity hash table
이 블럭 디바이스(block device)를 확인하는 방법은 해당 블럭들에 대해 직접 해쥐(hash)하고 저장된 값과 비교하는 것입니다.
하지만 전체 블럭의 디바이스 블럭들을 하나씩 확인하려면 너무 오랜시간이걸리고 전원을 많이 소비하게 됩니다.
그래서 이에대한 대안으로, dm-verity는 블럭을 개별적으로 각 블럭에 접근할때만 검증하게 됩니다.
메모리를 읽어 들일때, 이때 블럭은 병렬로 해슁(hashing) 됩니다. 그런다음 해쉬가 트리(tree)에서 확인 됩니다.
이때 만약 확인에 실패하면 해당 디바이스는 블럭을 읽을수 없다는 I/O에러를 생성 합니다.
댓글