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