최근 수동으로 서명된 모듈이 필요한 드라이버를 설치했는데 모듈 서명이 실제로 수행되는 작업과 왜 이런 방식으로 수행되어야 하는지 혼란스러웠습니다.
이 프로세스에 대한 다른 질문이 있지만 더 기술적인 질문입니다. 서명 모듈의 기능, 왜 필요한지, 대안은 무엇인지에 대한 간단한 설명은 무엇입니까(분명히 dkms는 모듈에 자동으로 서명할 수 있습니다)?
답변1
서명되지 않았거나 잘못 서명된 모듈을 사용할 때(로그 메시지 + 커널에 오염 플래그 설정을 통해) 경고하도록 커널을 구성하거나, 커널이 확인할 수 있는 서명이 없는 모든 커널 모듈을 완전히 거부하도록 구성할 수 있습니다.
이는 본질적으로 BIOS 스타일 부팅 프로세스를 사용하거나 보안 부팅이 비활성화된 UEFI를 사용할 때 선택적인 추가 보안 프로세스일 뿐입니다. 이로 인해 침입자가 시스템에 악의적인 커널 모듈(예: 침입자의 도구 및 작업을 숨기기 위한 커널 기반 루트킷)을 추가하는 것이 더 어려워집니다.
그러나 이는 보안 부팅이 활성화된 UEFI를 사용할 때 보안 부팅 요구 사항의 일부입니다. 보안 부팅의 "정신"은 신뢰할 수 없는 코드를 커널 공간에 로드하는 것을 금지하는 것입니다. UEFI 펌웨어는 부트로더에 유효한 서명(또는 허용된 SHA256 해시)이 있는지 확인합니다. 부트로더는 운영 체제 커널에서 동일한 서명을 확인해야 하며 커널은 이 요구 사항을 커널 공간에서 실행되도록 확장해야 합니다.
물론 실제로 운영 체제 커널은 이 요구 사항을 충족하지 않기로 쉽게 선택할 수 있습니다. 그러나 보안 부팅을 개발하는 그룹은 이러한 거부를 위해서는 최소한 시스템 관리자의 명시적인 조치가 필요하다고 결정했습니다. 기본값은 서명 요구 사항을 시행하는 것입니다.
(덧붙여 말하자면, 이는 최신 Windows에서 기본적으로 설치된 모든 드라이버에 서명을 요구하는 이유 중 하나입니다. 서명되지 않은 드라이버를 설치하려면 관리자 액세스가 필요한 설정을 명시적으로 변경해야 합니다.)
보안 부팅 시스템에서 부팅할 수 있고 서명되지 않은 커널 공간 코드의 "즉시" 실행을 허용하는 도구가 호출됩니다.보안 부팅 우회 장치악성코드로 분류됩니다.
Microsoft는 가장 잘 알려진 보안 부팅 서명자이며 shimx64.efi
서명 요구 사항을 적용하는 심 부트 로더 버전에만 서명합니다.
*.efi
보안 부팅을 지원하는 UEFI 펌웨어에는 Microsoft PE+ 바이너리 형식(파일에서 사용되는 형식)을 사용하여 바이너리의 서명을 확인하는 기능이 내장되어 있습니다 . 그러나 Linux 세계에서는 일반적으로 이 바이너리 형식을 사용하지 않고 대신 ELF 바이너리 형식을 사용합니다.
Linux 커널 모듈과 GNU GRUB 부트 로더 모듈은 모두 ELF 형식을 기반으로 합니다. 이를 위해서는 부트로더와 커널이 ELF 바이너리에 대한 자체 서명 확인 알고리즘을 제공해야 하지만 분명히 UEFI 포럼(UEFI 및 보안 부팅 사양을 관리하는 업계 컨소시엄)은 기본 요구 사항이 다음과 같은 한 이를 수행할 수 있다고 결정했습니다. 유효한 서명을 유지하십시오.
물론 이는 DKMS를 사용하여 커널 모듈을 자동으로 빌드하고 서명하는 경우 정확히 예상되는 것과는 다릅니다. 즉, 유효한 서명을 자동으로 생성하는 데 사용할 수 있는 개인 키가 있는 인증서가 있으므로 침입자가 그것으로 서명하십시오. 사악한 커널 모듈. Secure Boot가 없는 시스템보다 나쁘지는 않지만 그다지 안전하지는 않습니다.
여러 시스템이 있는 경우 하나의 호스트(아마도 공격자의 위협이 가장 적은 호스트)에만 모듈 서명 인증서의 개인 키를 보유하고 이를 사용하여 사용자 정의 커널 및/또는 모듈을 구축함으로써 보안상의 이점을 얻을 수 있습니다. 이를 필요로 하는 다른 호스트에 이를 필요로 하고 배포할 수 있습니다. 이렇게 하면 다른 호스트에는 모듈 서명 인증서의 공개 부분만 필요하며, 이는 기존 서명을 확인하는 데만 사용할 수 있고 새 서명을 생성하는 데는 사용할 수 없습니다.