드라이버/모듈 서명은 무엇을 하며 그 의미는 무엇입니까?

드라이버/모듈 서명은 무엇을 하며 그 의미는 무엇입니까?

최근 모듈에 수동으로 서명하는 데 필요한 드라이버를 설치한 후 해당 모듈에 서명하는 것이 실제로 수행되는 작업과 수행해야 하는 이유가 혼란스러웠습니다.

여기에는 프로세스에 대한 다른 질문이 있지만 더 기술적인 질문이 있습니다. 서명 모듈의 역할과 이것이 왜 필요한지, 그리고 대안이 무엇인지에 대한 간단한 설명은 무엇입니까(분명히 dkms는 자동으로 모듈에 서명할 수 있습니다)?

답변1

서명되지 않았거나 잘못 서명된 모듈이 사용될 때 경고만 하거나(로그 메시지 + 커널에 taint 플래그 설정을 통해) 커널 서명이 없는 모든 커널 모듈을 완전히 거부하도록 커널을 구성할 수 있습니다. 검증할 수 있습니다.

BIOS 스타일 부팅 프로세스를 사용하거나 보안 부팅이 비활성화된 UEFI를 사용하는 경우 이는 기본적으로 선택적 추가 보안 절차일 뿐입니다. 침입자가 악의적인 커널 모듈(예: 침입자의 도구와 작업을 숨기기 위한 커널 기반 루트킷)을 시스템에 추가하는 것이 다소 어려워집니다.

그러나 보안 부팅이 활성화된 UEFI를 사용하는 경우 이는 보안 부팅 요구 사항의 일부입니다. 보안 부팅의 "정신"은 신뢰할 수 없는 코드가 커널 공간에 로드되는 것을 허용하지 않는 것입니다. UEFI 펌웨어는 부트로더에 유효한 서명(또는 허용된 SHA256 해시)이 있는지 확인합니다. 부트로더는 OS 커널에서 동일한지 확인해야 합니다. 그리고 커널은 이 요구 사항을 커널 공간에서 실행될 모든 코드로 확장해야 합니다.

물론 실제로 OS 커널은 이 요구 사항을 쉽게 옵트아웃할 수 있습니다. 그러나 보안 부팅을 개발한 조직에서는 이 선택 해제를 위해서는 최소한 시스템 관리자의 확실한 조치가 필요하다고 결정했습니다. 기본값은 서명 요구 사항을 시행하는 것입니다.

(그런데 이는 최신 Windows에서 기본적으로 설치된 모든 드라이버에 서명을 요구하는 이유 중 하나이기도 합니다. 서명되지 않은 드라이버를 설치하려면 관리자 액세스가 필요한 설정을 명시적으로 변경해야 합니다.)

보안 부팅 시스템에서 부팅할 수 있고 "즉시" 서명되지 않은 커널 공간 코드를 실행할 수 있는 도구를보안 부팅 우회 장치악성코드로 분류될 수 있습니다.

Microsoft는 가장 잘 알려진 보안 부팅 서명자이며 shimx64.efi서명 요구 사항을 적용하는 shim 부트로더 버전에만 서명합니다.

보안 부팅 인식 UEFI 펌웨어에는 파일이 사용하는 Microsoft PE+ 바이너리 형식을 사용하는 바이너리의 서명을 확인하는 기능이 내장되어 있습니다 *.efi. 그러나 Linux 세계에서는 일반적으로 해당 바이너리 형식을 사용하지 않습니다. 대신 ELF 바이너리 형식이 사용됩니다.

Linux 커널 모듈과 GNU GRUB 부트로더 모듈은 모두 ELF 형식을 기반으로 합니다. 이를 위해서는 부트로더와 커널이 ELF 바이너리에 대한 자체 서명 확인 알고리즘을 제공해야 하지만 분명히 UEFI 포럼(UEFI 및 보안 부팅 사양을 관리하는 업계 컨소시엄)은 기본 요구 사항인 한 그렇게 해도 괜찮다고 결정했습니다. 유효한 서명이 유지됩니다.

물론 이것은 DKMS를 사용하여 커널 모듈을 자동으로 빌드하고 서명하는 경우 예상대로 작동하지 않습니다. 즉, 자동으로 유효한 서명을 생성하는 데 사용할 수 있는 개인 키가 있는 인증서가 있으므로 침입자가 사악한 커널 모듈에 서명하는 데에도 사용하세요. 보안 부팅이 없는 시스템보다 덜 안전하지는 않지만 훨씬 더 안전하지도 않습니다.

여러 시스템이 있는 경우 모듈 서명 인증서에 대한 개인 키를 하나의 호스트(아마도 공격자의 위협을 가장 덜 받는 호스트)에만 보유하고 이를 사용하여 사용자 정의 커널 및/또는 모듈을 구축하면 보안상의 이점을 얻을 수 있습니다. 필요할 수도 있고 거기에서 필요한 다른 호스트에 배포할 수도 있습니다. 이렇게 하면 다른 호스트에는 모듈 서명 인증서의 공개 부분만 필요하며, 이는 새 서명을 생성하는 것이 아니라 기존 서명을 검증하는 데만 사용할 수 있습니다.

관련 정보